Centos7-Linux

Centos7-Linux-RH

Linux操作系统(百度百科):全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年第一次释出,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debianarchlinux,和基于商业开发的[Red Hat Enterprise Linux](https://baike.baidu.com/item/Red Hat Enterprise Linux/10770503)、SUSE、[oracle linux](https://baike.baidu.com/item/oracle linux/6876458)等。

一、简述

1.1 什么是CentOS

CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的[Red Hat](https://baike.baidu.com/item/Red Hat) Enterprise Linux使用。两者的不同,在于CentOS完全开源。

【扩展】CentOS和Ubuntu区别

1.centos中普通用户没有sudo权限,需在sudoers文件中添加用户的权限。
2.ubuntu中普通用户,直接使用sudo+命令行的方式即可。
3.ubuntu(apt/apt-get)与centos (yum) 安装软件包命令的格式不一样。centos是支持rpm包的,ubuntu不支持rpm包。

【Vi编辑器的简单使用】

移动光标, 按i字母, 进入Insert模式,可以按方向键左右上下移动,按Del键删除(向左删除-Mac),Window是backspace 回退键。编完之后,按ESC 取消插入模式, 再按Shift+: 进入命令行模式,输入wq 或 x,最后回车确认退出并保存。

1.2 主流的CentOS版本

1.2.1 CentOS-7

CentOS 7于2014年7月7号正式发布,这是一个企业级的Linux发行版本,基于Red Hat红帽免费公开的源代码。相对于之前版本,升级内容如下:

  • 支持新的处理器(Broadwell)及图像卡(AMD hawaii)
  • 全面支持 LVM 缓存
  • 可挂载 ceph 块设备
  • 更新 Hyper-V 网络驱动程序
  • 新的 libguestfs 功能
  • 全面支持 openJDK-1.8.0
  • 改善时钟(PTP 及 NTP)的稳定性
  • 更新 Networkmanager 组件至 1.0 版本
  • 更新 docker 至 1.4.1
  • 更新 openSSh 至 6.6.1
  • 新组件:Mozilla Thunderbird
  • 更新多个存储、网络及图像卡驱动程序
  • 科技预览:支持 Btrfs 文件系统、OverlayFS 及 Cisco VIC 内核驱动程序
1.2.2 CentOS-8

首个8.0版本于2019.09.25发布,最新版本为 CentOS 8.1.1911

相对于 RHEL 7主要改进:

内核更新至3.10.0;支持Linux容器(Docker),Open VMware Tools及3D图像能即装即用,Open JDK7作为缺省JDK,ext4及XFS的LVM快照,转用systemd、firewalld及GRUB2,XFS作为缺省文件系统,内核空间内的iSCSI及FCoE,支持PTPv2,支持40G网卡等。

1.3 Linux的目录结构

[root@localserver ~]# ls / -ll
总用量 16
lrwxrwxrwx.   1 root root    7 6月   8 10:22 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 6月   8 10:30 boot
drwxr-xr-x.  21 root root 3280 6月   8 10:29 dev
drwxr-xr-x.  74 root root 8192 6月   8 10:32 etc
drwxr-xr-x.   2 root root    6 4月  11 2018 home
lrwxrwxrwx.   1 root root    7 6月   8 10:22 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 6月   8 10:22 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 4月  11 2018 media
drwxr-xr-x.   2 root root    6 4月  11 2018 mnt
drwxr-xr-x.   2 root root    6 4月  11 2018 opt
dr-xr-xr-x. 120 root root    0 6月   8 10:29 proc
dr-xr-x---.   2 root root  135 6月   8 10:36 root
drwxr-xr-x.  24 root root  720 6月   8 10:36 run
lrwxrwxrwx.   1 root root    8 6月   8 10:22 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 6月   8 10:29 sys
drwxrwxrwt.   7 root root  132 6月   8 10:32 tmp
drwxr-xr-x.  13 root root  155 6月   8 10:22 usr
drwxr-xr-x.  19 root root  267 6月   8 10:29 var
  • / 根目录
  • /bin 基础系统所需要的命令位于此目录,是最小系统所需要的命令,如:ls, cp, cd等等。这个目录中的文件都是可执行的,一般的用户都可以使用。
  • /dev 设备文件,比如声卡、磁盘、鼠标、键盘等。
  • /etc 系统管理和配置文件
    • /etc/init.d 启动配置文件和脚本,可在这里添加启动脚本。
    • /etc/rc.local 用户添加启动项
  • /home 用户主目录,比如用户user的主目录就是/home/user,可以用~user表示
  • /lib 标准程序设计库存放路径,又叫动态链接共享库(.so 文件),作用类似windows里的.dll文件
  • /sbin 超级管理命令,这里存放的是系统管理员使用的管理程序。
  • /tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。 /tmp就用来存放临时文件的。
  • /root 系统管理员的主目录
  • /mnt 用来临时挂载其他的文件系统
  • /lost+found 这个目录平时是空的,系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。
  • /media 即插即用型存储设备的挂载点自动在这个目录下创建,比如USB盘系统自动挂载后,会在这个目录下产生一个目录 。
  • /proc 虚拟文件目录,可直接访问这个目录来获取系统信息,如version、zoneinfo、meminfo、cpuinfo等,示例命令: cat /proc/version
  • /var 所有服务的登录文件或错误日志档案(log files)都在 /var/log 里面
  • /boot 包含Linux内核及系统引导程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录中。在一 般情况下,GRUB或LILO系统引导管理器也位于这个目录;
  • /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目。

1.4 Linux系统核心组成

  • 系统内核
    • 进程调度
    • 内存管理
    • 虚拟文件系统
    • 网络接口
    • 进程间通信
  1. Shell : 集成Linux指令和业务逻辑的脚本文件。
  2. 文件系统: 包含各种媒体(光盘、U盘、硬盘、内存)中文件的管理。
  3. 应用程序集: 可以在Linux下执行的应用程序,包含Linux内部开发的应用或命令。

【目标】学习Linux时,除了认知它的文件体系之外,应该掌握常用的指令、Vim编缉器的使用、Shell脚本的写法和各类服务应用的安装与管理等。

1.5 查看帮助

学习Linux的命令,可以参考https://www.runoob.com/linux/linux-tutorial.html文档

在学习Linux丰富的指令之前,可以先学习以下几个实用的命令:

  • man 查看命令帮助信息

    用法: man 命令

    进入命令之后,有以下四个按键功能:

    • w 上一页
    • d 或 空格space 下一页
    • <Enter> 下一行
    • q 退出

    示例1: man ls

  • -h 命令的帮助信息

    用法: 命令 -h 或 --help

    示例1: ls --help

    示例2: ip -h

  • more 可以将一个命令的多页内容进行分页

    用法: 命令 | more

    示例1: man cd | more

  • tail 显示多页内容的末尾信息,可以通过-n 10指定显示末尾10行

    用法: 命令 | tail -n 10

    示例: man ls | tail -n 30

  • which 查看命令是否存在

    用法: which 命令

二、文件命令

2.1 查看文件

2.1.1 ls命令

命令格式: ls [options] [file]

常用参数:

-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有文件,则以下之文件亦皆依序列出
-i 显示文件的iNode的信息(文件索引号)
--full-time  显示完整的文件修改时间(默认显示 MM dd hh:mm)

示例:

ls -a 
ls -ltrF
2.1.2 ll命令

是ls命令的别名,可以通过which 查看:

# which ll
alias ll='ls -l --color=auto'

【扩展】 alias 命令别名,可以将复杂的命令指定简化的名称。如:

alias la='ls -lA --color=auto'

取消一个命令的别名,可以使用unalias 命令的别名,如:

unalias la
2.1.3 文件描述
[root@localhost /]# ls -la
总用量 16
dr-xr-xr-x.  17 root root  224 6月  17 16:20 .
dr-xr-xr-x.  17 root root  224 6月  17 16:20 ..
lrwxrwxrwx.   1 root root    7 6月  17 16:13 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 6月  17 16:23 boot
drwxr-xr-x.  20 root root 3080 7月   5 21:24 dev
drwxr-xr-x.  74 root root 8192 7月   5 21:24 etc
drwxr-xr-x.   2 root root    6 4月  11 2018 home
lrwxrwxrwx.   1 root root    7 6月  17 16:13 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 6月  17 16:13 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 4月  11 2018 media
drwxr-xr-x.   2 root root    6 4月  11 2018 mnt
drwxr-xr-x.   2 root root    6 4月  11 2018 opt
dr-xr-xr-x. 105 root root    0 7月   5 21:24 proc
dr-xr-x---.   3 root root  178 7月   5 21:59 root
drwxr-xr-x.  23 root root  700 7月   5 21:24 run
lrwxrwxrwx.   1 root root    8 6月  17 16:13 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 7月   5 21:24 sys
drwxrwxrwt.   7 root root   93 7月   5 21:25 tmp
drwxr-xr-x.  13 root root  155 6月  17 16:13 usr
drwxr-xr-x.  19 root root  267 6月  17 16:22 var

第一行是 总文件及目录的个数

第二行开始,第一列的内容表示的含义如下:

第一位: 文件类型, - 文件, d  目录  l 软连接 s 表示该文件为sock文件 
第二位-第四位: 表示文件所属用户的权限, 三位长度,分别表示 r 读, w 写, x可执行  - 表示 无
第五位-第七位: 表示文件所属用户组的权限
第八位-第10位:  表示其它组的用户权限

【注意】第一位字符,还可能是c(表示该文件是一个字符设备文件(character),一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节)、b(表示块设备文件(block),一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,是 很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块(通常一个数据块的大小为512字节)、p(表示该文件为命令管道文件。与shell编程有关的文件)。

第二列:表示文件的硬连接的数量。

第三列: 表示所属用户

第四列: 表示所属用户组

第五列: 表示文件的大小,目录的大小为0

第六列和第七列: 表示月份和几日

第八列: 表示文件修改的时间

最后列: 表示文件或目录的名称

2.1.4 cd命令

格式: cd 目录名

目录名的特殊符号:

  • ~ 代表当前用户的家(home)目录
  • / 代表根目录 , Linux的文件最起始的位置。
  • 在Window的gitbash 中 每个盘符都以/开始,如c盘,/c
2.1.5 pwd命令

功能:显示当前的目录

【扩展】在python中,获取当前目录位置:

os.getcwd()
os.path.dirname(os.path.abspath(__file__))

2.2 创建与删除

2.2.1 mkdir 创建目录

格式: mkdir [options] 目录名

参数:

-p 确保目录名称存在,不存在的就建一个【级联创建】
-m  指定目录的权限 mode( 如 chmod),  建议使用权限值;如果使用rwx字符时,建议使用a=rwx, 但不能使用-。
-v 打印创建的目录信息

示例:

mkdir -m 666 abc
mkdir -m a=rx sql
mkdir -m u=rw,g=rx,o=rx sql2

【注意】 mkdir 命令可以同时创建多个目录,如:

mkdir a1 a2 a3
[root@localhost ~]# mkdir -pv apiserver/spider1/code
mkdir: 已创建目录 "apiserver"
mkdir: 已创建目录 "apiserver/spider1"
mkdir: 已创建目录 "apiserver/spider1/code"
2.2.2 touch 创建文件

格式: touch [参数] 文件名或目录名

touch命令可以创建一个空白内容的新文件,也可以不修改文件内容的情况下更新文件最后修改时间。

参数:

-c 当文件不存在时,不创建任何文件
-d, --date=String 指定更新的时间来替换当前时间, 如 touch -d 12:10 a.txt
-m 仅修改时间, 默认行为
-t 使用 [[CC]YY]MMDDhhmm[.ss] 替换当前时间

示例:

touch -t 202010201510 a5.txt 
touch -c a1.txt a.txt a2.txt abc sql  

【注意】可以更新多个文及目录的最近修改时间

2.2.3 rmdir 删除目录

命令格式同mkdir,如下示例:

rmdir -pv 目录/子目录

【注意】删除空的目录

2.2.4 rm 删除

格式: rm [options] 文件或目录名

功能: 可以删除文件和目录。

参数:

-f 强制删除
-r 删除所有子目录及文件
-d 删除空目录
-v 显示删除操作

示例:

rm -rf apiserver
 rm -rf ./*

【注意】./* 表示当前目录下的所有文件及子目录。

2.3 复制与移动

2.3.1 cp命令

格式: cp [options] src dst

功能: 将 src 复制到 dst位置

参数:

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。【注意】在CentOS中,好像不起作用。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件(硬连接)。

【注意】 文件名或目录名可以使用 *通配符表示任意多个任意字符

示例

cp -r abc bcd/
cp abc/a.txt bcd/b.txt
cp sql/*.sql bcd/abc/
cp -l sql/1.sql 1.sql  创建sql/1.sql 文件的硬连接
2.3.2 mv命令

功能: 将源文件或目录移动目标位置上, 可以实现文件重命名的功能。

格式:

mv [OPTION] [-T] SOURCE DEST
mv [OPTION] SOURCE  DIRECTORY
mv [OPTION]  -t DIRECTORY SOURCE 

参数:

-f 强制
-t 指定目标位置

示例:

mv sql/2.sql .
rm -f sql/2.sql  # 报错, sql/2.sql 文件不存在。因为上一个命令将它移动了。
mv 2.sql  test2.sql  # 修改2.sql 的名称为 test2.sql

【提示】. 当前目录, ..父级目录

2.4 文件查找

命令格式: find [path] [表达式语句]

表达式语句的条件:

-name pattern:  匹配指定模式的文件名,可以使用通配符 *,? 
-iname pattern : 不区分大小写的文件名匹配
-readable  文件可读
-writable  文件可写
-executable 文件可执行
-maxdepth n 查找文件最大的深度, 【注意】应该在-name或-iname参数前面。
-depth n 从当前层次开始,查看第n子层次的文件
-delete 查出的文件,将会被删除

示例:

find / -name "*.txt" 
find abc  -maxdepth 2 -name "*.txt"
find . -name '*.txt' > txt_files.txt   # 将查找到的所有文本文件结果写入到 txt_files.txt文件中

面试题: 统计python的代码行数

find code -name "*.py" |xargs cat|grep -E ^$| wc -l

2.5 内容查看

2.5.1 cat 命令

命令: cat [OPTION] FILE

参数:

 -A, --show-all 显示所有内容
 -n 显示行号

示例:

cat 1.sql  # 显示文件的内容
cat -nb 1.sql  # 显示文件内容,并显示行号, 但空行不显示行号
cat -nA 1.sql  # 显示文件内容,包含行结束符 $
2.5.2 grep命令

可以和cat或find组合使用,为显示的数据增加显示或查找条件。

命令格式:

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

参数:

-E  pattern 指定正则表达式,使用单引号,且减少转义字符的使用。如同行`^$`, 数字`[0-9]+`
-m  指定匹配的数量,默认是全部
-n  显示行号
-v  pattern 不选择或显示匹配的规则

示例:

cat test2.sql|grep disen  # 过滤文件中是否存在disen
grep -E ^[0-9]+$ test2.sql  # 显示文件中的每一行的数值
grep -E ^[0-9]+$ -m 1 test2.sql  # 显示每一行的匹配的数值
grep -E ^.*$ -n test2.sql   # 显示每一行的内容,并显示行号
cat test2.sql |grep -E ^.+$ | wc -l
grep -v ^$ test2.sql # 不显示 test2.sql 文件中的空行的其它行内容

【扩展】正则的量词的写法(7种):

* 最少0次
?最多1次
+ 至少1次
{n} 必须是n次
{n, m} 在[n, m]区间范围的次数
{n,} 至少n 次
{,m} 最多m次

【注意】在Linux中正则不包含转义字符。

2.5.3 xargs命令

格式: 命令 | xargs [参数] [command ] , 不带command ,默认的使用echo 输出

作用:

- 数据以空格进行分隔
- 可以根据参数进行一次或多次处理,默认的处理命令是/bin/echo
- 空行不进行处理,会被忽略
- 遇到命令状态为255时,xargs会立刻停止,譬如发生错误时.

参数:

xargs  [-0prtx] [-E  eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]
       [-d delimiter] [--delimiter delimiter]  [-I  replace-str]  [-i[replace-
       str]] [--replace[=replace-str]]   [-l[max-lines]]   [-L   max-lines]
       [--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s  max-
       chars]  [--max-chars=max-chars] [-P max-procs] [--max-procs=max-procs]
       [--interactive]     [--verbose]     [--exit]   [--no-run-if-empty]
       [--arg-file=file]   [--show-limits]   [--version]   [--help]   [command
       [initial-arguments]]

常用示例:

xargs -a hello.txt  # 读取hello.txt文件内容,将以空格分隔每一行的数据
xargs -a hello.txt -E 'next'  # 读取数据时,截止到第一次出现next位置(不包含)
cat my.dat | xargs -L 3  #  一次性读取3行,将换行符转成空格,再使用echo 显示
find . -name '*.py' | xargs
find . -name "hello.txt" | xargs cat
find . -name '*.py' | xargs -E './2.py'  cat
	查找所有当前目录的.py文件, 并将查询的结果 交给 xargs
	xargs 读取 './2.py'之前的所有文件
	并显示每个py文件的内容
find . -iname 'S1.Sh'|xargs bash

【提示】s1.sh内容如下:

#!/bin/bash

echo 'hi, disen'
 xargs -a t3.txt -s 20 echo

【提示】-s 表示 后面执行的命令行总长度的最大限制,如 echo disen$ create$总长度 19个字符

2.6 文件连接

2.6.1 软硬连接

在Linux中,一个文件存储分为三块: 文件名、INode(文件的索引编号, ls -i可以查看)和 文件。

硬连接: 硬连接就是一个文件有两个名字。 【注意】文件目录不能创建硬连接

软连接: 软连接是一个完整的文件,软连接最终指向另外一个文件。

【提示】软连接指向的文件被删除后,软连接依然存在,另外重新在连接位置添加文件,还可以继续指向。

2.6.2 ln命令

格式: ln [参数] 源文件或目录 目标文件或目录

必要参数:

-b 删除,覆盖以前建立的链接
-d 允许超级用户尝试制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程

选择参数:

-S "-S<字尾备份字符串> "或 "--suffix=<字尾备份字符串>"
-V "-V<备份方式>"或"--version-control=<备份方式>"
--help 显示帮助信息
--version 显示版本信息

示例:

ln -s my _m  给my目录创建 _m软连接
ln -s a.txt a 给a.txt 文件创建 a软连接
ln a.txt ab 给a.txt 文件创建硬连接
rm -f a.txt  # 删除 a 指向的文件连接
ln -sf ab a  # 强制将 a 指向ab文件

2.7 压缩与解压

命令格式: tar [option] 压缩文件 [文件或目录]

参数:

-c 打包, 不能和 -x 同时使用。
-x 解包, 不能和-c同时使用。
-z 压缩,解压 gz 格式
-v 显示执行过程信息
-f 文件, 打包成什么文件名或解什么压缩包
-C 指定解压路径

示例:

tar -zxvf  my.tar.gz  .   解压gz压缩文件
tar -cvf  new_my.tar.gz  my mysql  压缩gz文件
tar -xvf  my.tar  解压tar文件
tar -cvf  my.tar  创建tar文件
tar -zxvf txts.tar.gz -C _txt_

【提示】_txt_ 目录必须存在, -C 必须提供, 否则认为_txt_是压缩文件

作业: Centos7中安装Python环境

# https://blog.csdn.net/ahhqdyh/article/details/104923416  第3.4小节
#!/bin/bash
yum update
yum groupinstall -y "Development tools"
yum install -y flex.x86_64 zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
# wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz 
# wget从官网下载特别慢,网盘链接:https://pan.baidu.com/s/1f30S25Xny6gOzqD3uu8yUw 密码:jupe
tar xvf Python-3.7.5.tgz
cd Python-3.7.5
./configure --prefix=/usr/local/python3
make  
make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
cd ~
pip3 -V
python3 -V

2.8 文件权限

2.8.1 权限结构

文件权限分三个部分(u用、g组、o其它),每一部分包括三个权限描述(r、w、x),表示的内容如下所示:

用户: u  user
用户组:g group
其他用户:o other

只读: r 4, read 
只写:	w ,2, write 
可执行: x, 1
使用三个数完成了8个数值, 常用组合:
	777  -> rwxrwxrwx
	666  -> rw-rw-rw-
	555  -> r-xr-xr-x
	444  -> r--r--r--
	333  -> -wx-wx-wx
	222  -> -w--w--w-
	111  -> --x--x--x
	755  -> rwxr-xr-x
	644  -> rw-r--r--
2.8.2 权限修改

格式:chmod [ugoa][+-=][rwx] filename
说明:

a: ugo  表示全部

权限操作:

+  增加权限
-  去除权限
=  赋予权限

示例:

chmod 777 filename  
chmod +x aa.sh

三、用户命令

3.1 who与whoami命令

3.1.1 who命令

格式: who [-abdHlmpqrsTtu] [file]

参数说明:

-a    同 -bdlprTtu.
-b    最后启动的时间
-d    显示已关闭的进程客户端
-H    显示标题头
-m    只显示当前客户端(类似于 am i)
-q    快速模式,只显示用户名和用户数量, 当选择会让其它选择无效(除a 之外)
-s    默认选择,显示用户名、Line命令(连接线路-通道)和时间字段及备注。
-u    显示每个用户的空闲时间和关键进程的PID
am I  显示当前进程的用户的名

示例:

who -aH
who -m
who -uH  
3.1.2 whoami命令

类似于 who am i命令,显示当前用户的ID(名称)。

3.2 用户管理命令

3.2.1 增加用户

命令格式

useradd [-d home] [-s shell] [-c comment] 
[-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name

参数说明:

-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
-D:变更预设值。
-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g:指定用户所属的群组。
    值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
    如果没有指定,默认情况下根据 /etc/login.defs中配置USERGROUPS_ENAB的结果(yes或no),确认是否自动创建组(组名同用户名)。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录(home目录)。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。默认值为/bin/bash。
-u:指定用户ID号。在系统中必须是唯一的,0~499默认是保留给系统用户账号使用的。
-p: 创建用户时,可以指定口令或输入

涉及到相关的配置文件:

/etc/default/useradd  # 指定用户的过期时间(EXPIRE)和过期时间到期后的禁用策略(INACTIVE)
/etc/login.defs  # 指定创建用户时是否创建用户组的策略(USERGROUPS_ENAB)
/etc/passwd  # 用户的相关信息,结构是 `用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell`
/etc/shadow  # passwd中口令信息使用x或*表示,加密之后存在shadow文件中, 内容结构是`用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段`
/etc/group   # 所有组相关的信息,内容结构是`组名:密码:GID:该用户组中的用户列表`

示例:

useradd -d /home/judy -mr  judy  # 创建judy用户并指定了用户根目录
useradd -u 544 -d /home/tom -g tom -m  tom -p tom
useradd -mr disen  # 创建disen用户和disen组,同时建议系统账号和创建home目录
passwd disen  # 为disen用户设置口令, 口令要求至少8位,如disen12345678

创建成功之后, 可以通过ssh命令尝试远程连接。

练习:

# 使用创建的用户登录之后, 可以尝试创建文件及目录,查看文件及目录的所属用户和组及权限。

【扩展】/etc/shadow结构说明

  • 加密密码: 目前 Linux 的密码采用的是 SHA512 散列加密算法(之前是MD5或DES)。所有伪用户或新建用户的口令是!!或*,这种用户是不能登录。

  • 最后修改时间: 以1970-1-1开始计算到目前时间的天数,如18451。

    ​ 可以使用date -d "1970-01-01 18451 days" 命令查看具体的日期。

    date -d "1970-01-01 18451 days"
    
    date -d "1970-01-01 18451 days" +"%Y-%m-%d %B %A"
    
  • 最小修改时间间隔(天):从最后修改时间开始,多少天之内不能修改,如果是0,表示随时修改。

  • 密码有效期(天): 默认为99999,也就是273年,可认为是永久。如是90,表示90天后需要修改密码。

  • 密码变更前的警告天数: 距离下次修改口令的n天之前,系统会提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。

  • 密码过期后的宽限天数: 可以在宽限的时间内,允许用户登录。

  • 账号失效时间: 在规定的时间之外,不论你的密码是否过期,都将无法使用(或登录)。

3.2.2 修改用户

格式:usermod 选项 用户名
参数:

同useradd
-l 新用户名, 新的用户名不能是已存在的。

示例:

usermod -G lili,dage  davie  # 为davie用户添加两个附加组。
usermod -e 2020-07-10 davie # 修改davie用户的过期时间
usermod -l Davied davie  # 修改用户登录名
3.2.3 删除用户

格式:userdel 选项 用户名, 默认用户删除不会删除家的

【重要】使用 -r 可以在删除用户的时候删除相关信息,如示例:

userdel -r judy

userdel 命令使用如下值退出:

0  成功
1 无法更新密码文件
2 无效的命令语法
6 指定的用户不存在
8 用户已经登录
10 无法更新组文件
12 无法删除主目录
3.2.4 修改口令

命令格式: passwd 用户名
参数:

-l 锁定口令,即禁用账号。 (lock)
-u 口令解锁, (unlock)
-d 使账号无口令。(delete)
-f 强迫用户下次登录时修改口令。

【扩展】所有用户的口令信息:/etc/passwd,其文件内容格式:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

示例:

useradd -rm davie
passwd davie 
passwd -l davie  # 锁定账号,不能登录。
passwd -u davie  # 解锁账号,恢复登录。
passwd -d davie  # 删除账号口令
cat /etc/shadow | grep davie  # 执行删除口令操作前后,可以观察用户口令的信息变化。

3.3 用户组操作

3.3.1 增加组

格式:groupadd [选项] 用户组
参数:

-g GID 指定新用户组的组标识号(GID),默认是按/etc/group中最大组号自增1,产生新组号。
-f 当新的组名已存在,则不报错(以成功的状态退出,且不创建新的组)

示例:

groupadd mysql
groupadd -g 1920 dev1  # 最小或最大的组号,可以在/etc/login.defs文件中。
cat /etc/login.defs|grep GID_MIN  # 1000
cat /etc/login.defs|grep GID_MAX  # 60000

创建成功的组信息,可以在/etc/group查看。

cat /etc/group | tail -n 10
cat /etc/group | grep dev1
usermod -G nice davie
usermod -G nice xc
cat /etc/group | grep nice  # 查看nice组信息,:分隔的最一后一部分是组中用户成员,多个成员用逗号分隔。
3.3.2 删除组

格式: groupdel 组ID(名称)

示例:groupdel mysql

groupdel mysql
groupdel nice  # 从/etc/group文件中删除组信息。

3.4 主组与附加组

主组 -g:

  • 某一个组作为任意用户的主组

  • 这个组就不能直接删除了,需要清空用户

[root@localhost ~]# useradd -rm davie
[root@localhost ~]# groupdel davie
groupdel:不能移除用户“davie”的主组
[root@localhost ~]# userdel -r davie
userdel: davie 邮件池 (/var/spool/mail/davie) 未找到
[root@localhost ~]# groupdel davie
groupdel:“davie”组不存在

附加组 -G:

  • 附加组可以随时删除

  • 和附加组相关联的用户会自动解除关系

3.5 组和用户关系

  • 一个用户可以同时属于多个组
  • 一个组可以同时包含多个用户
  • 一个用户只能有一个主组,可以有多个附加组

【注意】组的文件在配置中/etc/group, 内容格式如下:

组名: 口令:组号:组内用户列表

【提示】x 或 * 表示组没有口令。

3.6 chown命令

修改文件所属组及用户。

命令格式:

 chown [-fhnv] [-R [-H | -L | -P]] owner[:group] file 

参数:

-f 不显示任何错误信息
-R 递归修改文件目录下的所有文件和目录的归属(用户和组)
-v 显示修改的内容

示例:

chown mysql:mysql data
[root@localhost disen]# chown disen:dev1 *.sql
[root@localhost disen]# ls -la
总用量 20
drwx------.  2 disen disen 130 7月   8 15:37 .
drwxr-xr-x. 17 root  root  230 7月   8 15:32 ..
-rw-rw-r--.  1 disen dev1    0 7月   8 15:36 1.sql
-rw-rw-r--.  1 disen dev1    0 7月   8 15:37 2.sql
-rw-r--r--.  1 root  root    8 7月   8 15:33 a.txt
-rw-r--r--.  1 disen disen  18 10月 31 2018 .bash_logout
-rw-r--r--.  1 disen disen 193 10月 31 2018 .bash_profile
-rw-r--r--.  1 disen disen 231 10月 31 2018 .bashrc
-rw-r--r--.  1 disen dev1    0 7月   8 15:37 b.txt
-rw-------.  1 disen disen 689 7月   8 15:37 .viminfo
mv 1.sql 1.sh
mv 2.sql 2.sh

1.sh 文件内容:

#!/bin/sh

echo 'hi, 1.sh!'

修改1.sh文件的权限,将文件所属组用户的权限修改为rx:

chmod g=rx 1.sh
usermod -G dev1 davie
usermod -G dev1 xc

切换davie,尝试执行/home/disen/1.sh文件:

[davie@localhost disen] ./1.sh

【提示】确认/home/disen目录的权限(三部分ugo)都具有执行权限。

[disen@localhost disen] mkdir -p a/b/c/d
[disen@localhost disen] mkdir -p a/b2/c2/d2
[root@localhost disen] chown -R disen:dev1 a  # 将a及其子目录或文件的所属用户及组修改为disen和dev1

四、服务与进程命令

Linux的所有服务(service)都在 /etc/init.d目录下。

每一个服务都是一个进程,存在服务进程(后台进程或守护进程)。

4.1 systemctl命令

此命令同service功能相同。在Window机器中通过 services.msc 命令打开服务面板。

4.1.1 查看服务状态

格式: systemctl status 服务

示例:

systemctl status sshd
# service的命令
service sshd status
4.2 启动服务

格式: systemctl start 服务名

示例:

systemctl start sshd
# service命令
service sshd start
4.3 停止服务

格式: systemctl stop 服务名

示例:

systemctl stop sshd
# service命令
service sshd stop
4.4 重启服务

格式: systemctl restart 服务名

示例:

systemctl restart sshd
# service命令
service sshd restart
4.5 开机启动服务

格式: systemctl enable 服务名

示例:

systemctl enable sshd
4.6 取消开机启动服务

格式: systemctl disable 服务名

示例:

systemctl disable sshd

4.2 ps进程命令

ps命令就是最基本进程查看命令, 可以查看进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、进程占用资源情况等。【注意】ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。

命令格式:

ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
  [-g grp[,grp...]] [-u [uid,uid...]]
  [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
  
ps [-L]

参数说明:

-A :所有的进程均显示出来,与 -e 具有同样的效用;
-a : 显示现行终端机下的所有进程,包括其他用户的进程;
-u :以用户为主的进程状态 ;
x :通常与 a 这个参数一起使用,可列出较完整信息。
l :较长、较详细的将该PID 的的信息列出;
j :工作的格式 (jobs format)
-f :做一个更为完整的输出。
4.2.1 显示当前用户下的进程

命令:

ps -l

相关输出信息意义:

F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;
S 代表这个程序的状态 (STAT);
UID 代表执行者身份
PID 进程的ID号!
PPID 父进程的ID;
C CPU使用的资源百分比
PRI指进程的执行优先权(Priority的简写),其值越小越早被执行;
NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行 的程序,一般就是『 - 』
SZ 使用掉的内存大小;
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
TTY 登入者的终端机位置;
TIME 使用掉的 CPU 时间。
CMD 所下达的指令名称
4.2.2 列出所有运行的进程

命令:

ps aux

结果说明:

USER:该进程属于那个使用者账号。
PID :该进程的进程ID号。
%CPU:该进程使用掉的 CPU 资源百分比;
%MEM:该进程所占用的物理内存百分比;
VSZ :该进程使用掉的虚拟内存量 (Kbytes)
RSS :该进程占用的固定的内存量 (Kbytes)
TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有:R、S、T、Z。
    R :该程序目前正在运作,或者是可被运作;
    S :该程序目前正在睡眠当中,但可被某些讯号(signal) 唤醒。
    T :该程序目前正在侦测或者是停止了;
    Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该进程被触发启动的时间;
TIME :该进程实际使用 CPU 运作的时间。
COMMAND:该程序的实际指令。
4.2.3 列出所有的sshd远程的进程
ps -ef|grep sshd | grep -v grep
root      3274     1  0 17:07 ?        00:00:00 /usr/sbin/sshd -D
root      3301  3274  0 17:07 ?        00:00:00 sshd: root@pts/5
root      3602  3274  0 17:07 ?        00:00:00 sshd: root@pts/0
root      3631  3274  0 17:07 ?        00:00:00 sshd: root@pts/1
root      3700  3274  0 17:07 ?        00:00:01 sshd: root@pts/3
root      3718  3274  0 17:07 ?        00:00:00 sshd: root@pts/4
root      3815  3274  0 17:07 ?        00:00:00 sshd: root@pts/2
root      3839  3274  0 17:07 ?        00:00:00 sshd: root@pts/6
root      3895  3274  0 17:07 ?        00:00:00 sshd: root@pts/7
root      3953  3274  0 17:08 ?        00:00:00 sshd: root@pts/10
root      3955  3274  1 17:08 ?        00:00:05 sshd: root@pts/8,pts/9
root      6816  3274  0 17:10 ?        00:00:00 sshd: root@pts/11
root      6834  3274  0 17:10 ?        00:00:00 sshd: root@notty
root      8695  3274  2 17:12 ?        00:00:00 sshd: root@pts/12

4.3 netstat命令

在Centos中需要通过yum命令安装 net-tools

yum install -y net-tools

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

命令格式:

netstat [-veenNcCF] [] -r     
netstat {-V|--version|-h|--help}
netstat [-vnNcaeol] [<Socket> ...]
netstat { [-veenNac] -I[] | [-veenNac] -i | [-cnNe] -M | -s } [delay]

示例:

netstat -atulpn

查看 22端口的占用情况:

# netstat -nltp | grep 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3274/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      3274/sshd   

4.4 kill命令

可以干掉或中断进程, 信号是9, 和ps 、who 或 netstat命令配合使用。

kill -9  进程ID
kill -l  列出所有信号

停止sshd服务进程及它的连接子进程:

ps -ef|grep sshd |grep -v grep |awk '{print $2}'|xargs kill 

【提示】awk 可以执行脚本,针每一行的数据,以空格分隔成多列, $2表示第2列。可以参考文档:https://www.runoob.com/linux/linux-comm-awk.html

只查看sshd的子进程信息:

ps -ef|grep sshd|grep -v grep| grep -v /usr/sbin/sshd
root     22124 22112  1 17:39 ?        00:00:00 sshd: root@pts/0
root     22131 22112  0 17:39 ?        00:00:00 sshd: root@pts/2
root     22155 22112  1 17:39 ?        00:00:00 sshd: root@pts/1
root     22177 22112  0 17:39 ?        00:00:00 sshd: root@pts/3
root     22214 22112  2 17:39 ?        00:00:01 sshd: root@pts/4,pts/5
root     22255 22112  0 17:39 ?        00:00:00 sshd: root@pts/6
root     22341 22112  1 17:40 ?        00:00:00 sshd: root@pts/7
root     22433 22112  0 17:40 ?        00:00:00 sshd: root@pts/8
root     22455 22112  1 17:40 ?        00:00:00 sshd: root@notty
root     22655 22112  0 17:40 ?        00:00:00 sshd: root@pts/9
root     22808 22112  1 17:40 ?        00:00:00 sshd: root@pts/12
root     22825 22112  3 17:40 ?        00:00:01 sshd: root@pts/10,pts/11
root     23021 22112  0 17:40 ?        00:00:00 sshd: root [priv]
sshd     23022 23021  0 17:40 ?        00:00:00 sshd: root [net]

4.5 自定义服务

参考: /etc/init.d/network脚本。

在 /etc/init.d/ 目录下,编写一个服务脚本,如idea文件,内容如下:

#!/bin/sh
# chkconfig: 2345 80 90
# description: idea register server

case "$1" in
        start)
                sh /usr/local/idea/start.sh
        ;;
        stop)
                ps -ef |grep idea|grep -v grep|awk '{print $2}'|xargs kill
        ;;
esac

在 start.sh脚本的内容如下:

#!/bin/sh
echo 'Staring Python Service'

python3

可以尝试启动服务和停止服务。

【扩展】Linux下socket进程间通信-Python语言实现

# multiprocessing.Process 进程类
# threading.Thread类
# socket 
# 1. 实现网络套接字的通信(C/S客户端和服务端之间有通信)
# 2. 在Linux中,实现进程间的通信
# socket核心函数
# 1. 主进程/server端: 
#   - socket = socket.socket(AF_INET|AF_UNIX)
#   - socket.bind((hostname|ip, port))  或 socket.bind(xxx.sock文件路径)
#   - socket.listen()  开始监听
#   - client, address = socket.accept()  等待客户端连接,对应是client客户端的socket.connect(bind方法的参数)方法

# 2. 客户端【进程】
#   - socket.socket(AF_INET 默认|AF_UNIX)
#   - socket.connect((server_ip, port)) 或 socket.connect(xxx.sock文件路径)

# 3. 通信的方法:  socket.send(b'')  , msg = socket.recv(8*1024)  # 8192
#   - socket.close()

实战: 实现缓存的服务器和客户端

# 设计的思路
服务器提供添加、删除、查询、设置过期时间功能,对数据进行缓存。 
服务器在接收客户端发送的指令时,需要解析,根据解析的结果来调用相关的功能。
客户端连接,编写服务器识别的指令:
	   # select 0  选择存储的空间(库)
	[0]# set name disen
	[0]# get name
	     disen
	[0]# del name
	[0]# expire name 60
	[0]# exit

/etc/init.d/cache/server.py

import socket
from threading import Thread
import os

# {(192.168.31.11, 45538): {0: {name:'disen'}, 1: {} }}

# 作业:尝试地从本地加载数据 【pickle和os两个模块】
caches = {
   }  # 缓存信息,以dict存储 。

class ClientThread(Thread):
  def __init__(self, client, addr):
    super().__init__()
    self.client = client
    self.addr = addr 
    self.current_cache = None
    
  def run(self):
    self.client.send(b'OK')
    # 判断之前是否连接过
    if self.addr not in caches:
      caches[self.addr] = {
   } 
      
    while True:
      # 接收客户端发送过来的命令
      msg = self.client.recv(8192)
      if b'exit' == msg:
        break
      
      cmd = msg.decode('utf-8')
      if cmd.startswith('set'):
        k,v = cmd.split()[1:]
        self.current_cache[k] = v
        self.client.send(b'OK')
        
      elif cmd.startswith('select'):
        index = cmd.split()[-1]
        # 判断index是否已存在
        if index not in caches[self.addr]:
          caches[self.addr][index] = {
   }
        
        self.current_cache = caches[self.addr][index]
        self.client.send(b'OK')
        
      elif cmd.startswith('get'):
        k = cmd.split()[-1]
        if k in self.current_cache:
          v = self.current_cache[k]
          self.client.send(v.encode('utf-8'))
        else:
          resp_text = f'Not exists {k}'
          self.client.send(resp_text.encode('utf-8'))
          
    self.client.close()

server = socket.socket(socket.AF_UNIX)
server.bind('/var/run/cache.sock')  # 自动创建
server.listen()  # 开启监听
print('Cache Server Running...')
try:
  while True:
    client, addr = server.accept()  # 阻塞方法
    ClientThread(client, addr).start() # 启动客户端线程
except:
  os.remove('/var/run/cache.sock')
  
# 作业:将字典数据持久化存储 【提示: pickle 库】

/etc/init.d/client.py

import socket

def show_msg(msg, prefix='#'):
  print(msg)

client = socket.socket(socket.AF_UNIX)
client.connect('/var/run/cache.sock')
msg = client.recv(1024)
show_msg(msg.decode('utf-8'))
prefix = '#'

while True:
  cmd = input(f'{prefix}')
  client.send(cmd.encode('utf-8'))
  if cmd.startswith('select'):  # select 1
    index = cmd.split()[-1]
    prefix = f'[{index}]#'
  elif cmd.startswith('exit'):
    break
  
  resp_txt = client.recv(8192)
  show_msg(resp_txt.decode('utf-8'),  prefix)

print('Bye Bye')

增加服务脚本 /etc/init.d/cached, 内容:

#!/bin/sh
# chkconfig: 2345 80 90
# description: Cache Server 

case "$1" in
        start)
                python3 cache/server.py
        ;;
        stop)
                ps -ef |grep cached|grep -v grep|awk '{print $2}'|xargs kill
        ;;
esac

设置文件的执行权限:

chmod +x /etc/init.d/cached

修改client.py文件,增加第一行内容:#!/usr/local/bin/python3, 另外,增加可执行的文件权限

chmod +x /etc/init.d/cache/client.py

创建client.py文件的软连接:

ln -s /etc/init.d/cache/client.py  /usr/bin/cache

在任何位置,通过cache命令,启动client.py客户端程序。

五、硬盘命令

5.1 free命令

参数 :

 -b, --bytes         show output in bytes
 -k, --kilo          show output in kilobytes
 -m, --mega          show output in megabytes
 -g, --giga          show output in gigabytes

查看内存使用情况:

free -mh

可以使用 top命令,查看CPU和内存使用情况。

5.2 df命令

命令格式: df [选项] [文件]…

参数:

-a, --all   所有文件信息: pseudo 虚假的, duplicate 重复的, inaccessible 不可达
-h, --human-readable 显示人性化的文件大小 (如, 1K 234M 2G)
-i, --inodes		显示inode 信息而非块使用量
-k			即--block-size=1K
-l, --local		只显示本机的文件系统
-T, --print-type      显示文件类型
5.2.1 显示存储空间大小
df -h  
5.2.2 显示各存储空间大小
df -ah
5.2.3 仅查看本地文件
df -ahlT 
df -hT

5.3 du命令

格式:

du [选项]... [文件]...
du [选项]... --files0-from=F

参数:

  -0, --null            end each output line with 0 byte rather than newline
  -a, --all             write counts for all files, not just directories
      --apparent-size   print apparent sizes, rather than disk usage; although
                          the apparent size is usually smaller, it may be
                          larger due to holes in ('sparse') files, internal
                          fragmentation, indirect blocks, and the like
  -B, --block-size=SIZE  scale sizes by SIZE before printing them; e.g.,
                           '-BM' prints sizes in units of 1,048,576 bytes;
                           see SIZE format below
  -b, --bytes           equivalent to '--apparent-size --block-size=1'
  -c, --total           显示所有文件的总和大小,包括最后的总量信息。
  -D, --dereference-args  dereference only symlinks that are listed on the
                          command line
  -d, --max-depth=N      显示每个目录的大小,但显示到指定子目录层次。
  -H                    equivalent to --dereference-args (-D)
  -h, --human-readable  显示人性化大小 (e.g., 1K 234M 2G)
  -k                    like --block-size=1K  k字节
  -L, --dereference     dereference all symbolic links
  -l, --count-links     count sizes many times if hard linked
  -m                    like --block-size=1M
  -P, --no-dereference  don't follow any symbolic links (this is the default)
  -S, --separate-dirs   显示每个子目录的大小
  -s, --summarize       仅显示一个总和
  -t, --threshold=SIZE  exclude entries smaller than SIZE if positive,
                          or entries greater than SIZE if negative
      --time            show time of the last modification of any file in the
                          directory, or any of its subdirectories
      --time=WORD       show time as WORD instead of modification time:
                          atime, access, use, ctime or status
      --time-style=STYLE  show times using STYLE, which can be:
                            full-iso, long-iso, iso, or +FORMAT;
                            FORMAT is interpreted like in 'date'
  -X, --exclude-from=FILE  exclude files that match any pattern in FILE
      --exclude=PATTERN    exclude files that match PATTERN
  -x, --one-file-system    skip directories on different file systems
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出
5.3.1 当前目录的空间使用情况
du -sh

-s 统计求和,将所有目录及文件的大小的总和计算出来。结果只有一行。

5.3.2 查看指定目录的空间使用情况
du -h --max-depth=1 /home

统计/home下所有用户的目录的空间使用情况。

比较以下命令的结果:

du -c -d 1 /home
5.3.3 查看某个文件容量大小
du -h 1.txt
du -h 1.txt 2.txt 

查看当前目录及其子目录所有文本文件的大小:

find . -name '*.txt'|xargs du -h

【扩展】修改主机的时区

 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

或者使用 tzselect 命令,根据提示选择Asia/Shanghai

5.4 fdisk 命令

格式:

fdisk [选项] <磁盘>    更改分区表
fdisk [选项] -l <磁盘> 列出分区表
fdisk -s <分区>        给出分区大小(块数)

参数:

 -b <大小>             扇区大小(512、1024、2048或4096)
 -c[=<模式>]           兼容模式:“dos”或“nondos”(默认)
 -h                    打印此帮助文本
 -u[=<单位>]           显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
 -v                    打印程序版本
 -C <数字>             指定柱面数
 -H <数字>             指定磁头数
 -S <数字>             指定每个磁道的扇区数
5.4.1 查看硬盘相关信息
fdisk -l 
5.4.2 新硬盘分区

如,新增了一个硬盘 /dev/sdb, 使用前需要进行分区

fdisk /dev/sdb
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值