Linux学习笔记:常用命令
本文更新于2024-09-20。
说明:下文中,大写为自定义变量,根据实际情况填写(个别大写的参数除外)。使用[]
引起表示内容可选,使用{}
引起表示内容为一个整体,|
表示使用左侧或右侧内容,...
表示重复之前内容。
系统信息
date
查看或设置时间。
date [-d TIME] [+FORMAT]
date -s TIME
- -d:指定时间。
- -s:设置系统时间。
FORMAT可使用如下格式:
- %%:%字面值。
- %a:星期几(Sun-Sat)。
- %A:星期几(Sunday-Saturday)。
- %b:月份(Jan-Dec)。
- %B:月份(January-December)。
- %c:本地日期时间。
- %C:世纪。
- %d:日(01-31)。
- %D:即“%m/%d/%y”。
- %e:即“%_d”。
- %F:即“%Y-%m-%d”。
- %g:该周所属ISO年份的最后两位数字,一月前几天可能属于上一年的一周(00-99)。
- %G:该周所属ISO年份,一月前几天可能属于上一年的一周(0000-9999)。
- %h:同%b。
- %H:小时(00-23)。
- %I:小时(01-12)。
- %j:一年中的第几天(001-366)。
- %k:小时(0-23)。
- %l:小时(1-12)。
- %m:月份(01-12)。
- %M:分钟(00-59)。
- %n:换行符。
- %N:纳秒(000000000-999999999)。
- %p:本地AM/PM。
- %P:本地am/pm。
- %r:即“%H:%M:%S %p”。
- %R:即“%H:%M”。
- %s:从1970-01-01 00:00:00 UTC到目前为止的秒数。
- %S:秒(00-60)。
- %t:制表符。
- %T:即“%H:%M:%S”。
- %u:一周中的第几天,以周一开始一周(1-7)。
- %U:一年中的第几周,以周日开始一周(00-53)。
- %V:一年中的第几周,以周一开始一周,以ISO规范计算(01-53)。
- %w:一周中的第几天,以周日开始一周(0-6)。
- %W:一年中的第几周,以周一开始一周(00-53)。
- %x:本地日期。
- %X:本地时间。
- %y:年份最后两位数字(00-99)。
- %Y:年份(0000-9999)。
- %z:+hhmm形式的数值时区。
- %😒:+hh:mm形式的数值时区。
- %:😒:+hh:mm:ss形式的数值时区。
- %::😒:数值时区,只使用必要的“:”。
- %Z:字母时区。
TIME可使用如下格式:
- 2006-01-02 15:04:05
dmesg
查看开机后产生的内核信息。
dmesg
hostname
查看主机名。
hostname
uname
查看内核信息。
uname [-a]
- -a:列出所有信息。
系统设置
shutdown
关机或重启。
shutdown [-hkr] [TIME [MESSAGE]]
shutdown -c
TIME可为hh:mm的格式指定时间,或为+m的格式指定m分钟后,或为now表示现在。缺省为+1。
- -c:取消关机。
- -h:将系统服务停止后就关机。
- -k:不真正执行,只是发送警告消息。
- -r:将系统服务停止后就重启。
swapoff
禁用交换区。
swapoff [-a]
- -a:关闭所有设备和文件使用的交换区。
swapon
启用交换区。
swapon [-s]
- -s:查看交换分区使用情况。
sysctl
系统内核参数配置工具。
sysctl [-ap]
sysctl -w KEY=VALUE
- -a:显示所有内核参数。
- -p:重新读取内核参数配置文件/etc/sysctl.conf。
- -w:临时修改,重启后失效。
ulimit
显示或设置当前shell的系统资源限制。
ulimit -a
ulimit [-HS -cdflntu [N|unlimited]]
- -a:列出当前的所有限制。
- -c [N]:显示或设置内核转储文件大小限制。
- -d [N]:显示或设置进程段内存大小限制。
- -f [N]:显示或设置单个文件大小限制,单位为K。
- -H:严格的限制。
- -l [N]:显示或设置可用于锁定的内存大小限制。
- -n [N]:显示或设置打开的文件描述符数量限制。
- -S:宽松的限制。
- -t [N]:显示或设置CPU时间限制,单位为秒。
- -u [N]:显示或设置进程数量限制。
输出字段说明:
- max user processes:最大用户进程/线程数量。
磁盘与分区
blkid
查看块设备属性。
blkid
blockdev
查看或设置块设备设置。
blockdev --report
blockdev --setra N DEVICE
- --report:查看块设备设置。显示结果各列的含义如下:
- RO
- RA:预读的扇区数量。
- SSZ
- BSZ
- StartSec
- Size:字节大小。
- Device:设备名。
- --setra N:设置预读的扇区数量。
df
列出文件系统的磁盘挂载点和空间使用情况。
df [-ahHikmT] [NAME]
- -a:列出所有的文件系统,包括系统特有的/proc等。
- -h:以人类易读的方式列出,如K。
- -H:类似-h,但以1000而不是1024为进制。
- -i:列出i节点数量,而不是磁盘容量。
- -k:以K为单位。
- -m:以M为单位。
- -T:同时列出文件系统类型,如ext3。
如指定文件或目录名,则列出其所在的文件系统;否则,列出所有文件系统。
显示结果各列的含义如下:
- Filesystem:使用的文件系统设备。
- 1K-blocks:大小为1K的块的数量。
- Size:总大小。
- Used:已用大小。
- Available:可用大小。
- Use%:使用率。
- Mounted on:挂载点目录名。
du
列出文件或目录的磁盘使用情况。
du [-ahkmsS] NAME
当不使用-a、-s、-S时,列出所有目录,目录的计算方式为汇总其子目录和文件。
- -a:列出所有目录和文件的磁盘使用量,目录的计算方式为汇总其子目录和文件。
- -h:以人类易读的方式列出,如K。
- -k:以K为单位。
- -m:以M为单位。
- -s:只列出总量,不列出子目录,目录的计算方式为汇总其子目录和文件。
- -S:列出所有目录,目录的计算方式为只汇总文件,不汇总子目录。
fdisk
MBR磁盘分区。最大支持2T的磁盘。
fdisk DEV
fdisk -l [DEV]
- -l:列出指定设备的分区信息。如未指定设备则列出所有设备的分区信息。显示结果各列的含义如下:
- Type:分区类型。Linux为MBR分区,GPT为GPT分区。
不带参数时为进行磁盘分区。
lsblk
以树形结构查看块设备。
lsblk
mkfs
格式化分区。
mkfs [-t FSTYPE] PARTITIONDEV
- -t FSTYPE:指定文件系统类型,如ext2、ext3、ext4。
mount
挂载分区。
mount
mount -a
mount [-l]
mount [-L LABEL] [-n] [-o OPTION] [-t FSTYPE] PARTITIONDEV DIR
不使用参数则列出当前的挂载信息。
-
-a:依照/etc/fstab将所有未挂载的分区挂载。
-
-l:同时列出卷标名(Label)。
-
-L LABEL:指定卷标名,使用LABEL而不使用PARTITIONDEV进行挂载。
-
-n:不将信息更新至/etc/mtab。
-
-o OPTION:指定挂载的额外选项。可为如下值,以逗号分隔:
- async:异步写入。
- auto:允许被
mount -a
自动挂载。 - defaults:默认值,为
auto,async,dev,exec,nouser,rw,suid
。 - dev:允许在此分区上创建设备文件。
- exec:允许在此分区上执行二进制文件。
- noauto:不允许被
mount -a
自动挂载。 - nodev:不允许在此分区上创建设备文件。
- noexec:不允许在此分区上执行二进制文件。
- nosuid:不允许在此分区上有SUID/SGID的文件。
- nouser:不允许普通用户对此分区执行
mount
。 - remount:重新挂载,在系统出错或重新更新选项时有用。
- ro:只读。
- rw:可读写。
- suid:允许在此分区上有SUID/SGID的文件。
- sync:同步写入。
- user:允许普通用户对此分区执行
mount
。
-
-t FSTYPE:指定文件系统类型。
parted
磁盘分区。支持大于2T的磁盘。
parted [DEV]
交互界面可使用如下子命令:
- mklabel LABELTYPE:转换分区格式。LABELTYPE可为:gpt。
- mkpart PARTTYPE [FSTYPE] START END:创建分区。PARTTYPE可为:primary(主分区)、logical、extended。FSTYPE可为:ext3、ext4等。START和END默认以M为单位,可使用百分比N%。
- align-check TYPE PARTITIONNUMBER:检查分区是否对齐。TYPE可为:minimal(最小)、optimal(最优)。PARTITIONNUMBER为分区的编号,从1开始。
- print:打印分区表。
- quit:退出
parted
。 - rm PARTITIONNUMBER:删除分区。
partprobe
令系统重新读取分区表。
partprobe
umount
卸载分区。
umount [-fn] PARTITION
PARTITION可为设备名或挂载目录名。
- -f:强制卸载。
- -n:不将信息更新至/etc/mtab。
文件与目录
basename
显示路径的文件名/目录名。
basename PATH
cd
切换目录。cd实际上是shell内置的命令。
cd [DIR]
dir可取:
- 缺省:当前用户主目录。
- .:当前目录。
- ..:当前目录的上级目录。
- -:前一个工作目录。
- ~:当前用户主目录。
- ~USER:USER用户的主目录。
- PATH:绝对路径或相对路径。
cp
复制文件/目录。
cp [-adfprR] SRC[ ...] DST
- -a:相当于-dpr。
- -d:若源文件为连接文件,复制的目标文件同样为连接文件。
- -f:强制复制。
- -p:连同文件的属性一起复制。
- -r,-R:递归复制子目录和文件。
若DST为目录,则将SRC复制进目录中。若有多个SRC,则DST必须为目录。
dd
复制文件/设备。
dd [if=INPUTFILE] [of=OUTPUTFILE] [bs=BLOCKSIZE] [count=COUNT]
- bs:块大小,默认为512字节(一个扇区的大小)。可使用K/M/G格式。
- count:块数量。
- if:输入文件,可以为设备。
- of:输出文件,可以为设备。
file
查看文件类型。
file FILENAME
ln
创建连接文件。
ln [-fs] SRC DST
- -f:强制创建。
- -s:创建软连接,缺省则为创建硬连接。
DST为新建的文件。
ls
查看文件/目录。
ls [-aAdFhlrRSt --color={always|auto|never} --full-time --time={atime|ctime}] [NAMEGLOB]
- -a:列出全部文件,包括隐藏文件。
- -A:列出全部文件,包括隐藏文件,但不包括.和..。
- -d:列出目录本身,而不是列出目录内的文件。
- -F:文件名附加文件类型信息,*为可执行文件,/为目录,=为套接字文件,|为管道文件。
- -h:将文件大小以人类易读的方式列出,如K。
- -l:列出长串格式。
- -r:将结果反向排序。
- -R:递归列出子目录和文件。
- -S:以文件大小排序。
- -t:以时间排序。
- --color={always|auto|never}:设置输出的颜色显示。
- --full-time:列出完整的时间。
- --time={atime|ctime}:指定时间类型,不使用默认的mtime。
mkdir
新建目录。
mkdir [-mp] DIR[ ...]
- -m:指定目录的权限,会忽略umask的值。
- -p:递归创建父目录。
mv
移动或重命名文件/目录。
mv [-f] SRC[ ...] DST
- -f:强制移动或重命名。
若DST为目录,则将SRC移动进目录中。若有多个SRC,则DST必须为目录。
pwd
显示当前目录。
pwd
rm
删除文件/目录。
rm [-frR] NAMEGLOB
- -f:强制删除。
- -r,-R:递归删除子目录和文件。
rmdir
删除空目录。
rmdir [-p] DIR
- -p:递归删除空的父目录,如
rm a/b/c
可递归删除a。
test
检测文件和比较值。
test OPTEST
[ OPTEST ]
若为真,则命令执行返回码为0;否则为1。注意,上述两种表示是等价的,第二种[
和]
间必须有空格。OPTEST中的变量和常量建议使用""
引起,使用方法如下:
检测文件或目录,如test OP NAME
或[ OP NAME ]
:
- -b:检测是否存在且为块设备。
- -c:检测是否存在且为字符设备。
- -d:检测是否存在且为目录。
- -e:检测是否存在。
- -f:检测是否存在且为文件。
- -L:检测是否存在且为连接文件。
- -s:检测是否存在且大小不为0。
- -S:检测是否存在且为套接字(Socket)文件。
- -p:检测是否存在且为管道(FIFO)文件。
检测文件或目录权限(但root用户常有例外),如test OP NAME
或[ OP NAME ]
:
- -g:检测是否存在且有SGID属性。
- -k:检测是否存在且有SBIT属性。
- -r:检测是否存在且有读权限。
- -u:检测是否存在且有SUID属性。
- -w:检测是否存在且有写权限。
- -x:检测是否存在且有执行权限。
文件或目录比较,如test NAME1 OP NAME2
或[ NAME1 OP NAME2 ]
:
- -ef:比较是否同一个文件。可用于检测硬连接,如指向同一个inode则为同一个文件。
- -nt:比较NAME1是否比NAME2新。
- -ot:比较NAME1是否比NAME2老。
整数比较,如test N1 OP N2
或[ N1 OP N2 ]
:
- -eq:比较是否相等。
- -ge:比较N1是否大于等于N2。
- -gt:比较N1是否大于N2。
- -le:比较N1是否小于等于N2。
- -lt:比较N1是否小于N2。
- -ne:比较是否不等。
字符串比较,如test OP STR
或[ OP STR ]
:
- -n:比较字符串是否不为空串。
-n
也可省略。 - -z:比较字符串是否为空串。
或:
- test STR1 = STR2:比较字符串是否相等。
[ OPTEST ]
中可使用==
。 - test STR1 != STR2:比较字符串是否不等。
也可以对test
进行多重判定:
- !:取反,如
test ! OPTEST
或[ ! OPTEST ]
。 - -a:两个条件同时成立,如
test OPTEST1 -a OPTEST2
。 - -o:任意一个条件成立,如
test OPTEST1 -o OPTEST2
。
touch
创建新文件或修改文件时间。
touch [-acmt] FILENAME
- -a:仅修改atime。
- -c:仅修改ctime,若该文件不存在会创建文件。
- -m:仅修改mtime。
- -t:指定时间,格式为[[CC]YY]MMDDhhmm[.ss]。
tree
查看目录的树结构。
tree [DIR]
文件权限
chgrp
修改文件/目录的用户组。
chgrp [-R] GROUPNAME NAMEGLOB[ ...]
- -R:递归更改子目录和文件。
chmod
修改文件/目录的权限。
chmod [-R] MODE NAMEGLOB[ ...]
- -R:递归更改子目录和文件。
MODE可取如下形式:
- 数字类型: 如0770。
- 符号类型:{{[u][g][o][a]}{=|+|-}{[r][w][x][s][t]}}[,...],a表示所有,s只能用于u(SUID)g(SGID),t只能用于o(SBIT)。如u=rw,go=r、a+w,o-x。
chown
修改文件/目录的所有者。
chown [-R] [GROUPNAME:]USERNAME NAMEGLOB[ ...]
- -R:递归更改子目录和文件。
getcap
查看可执行文件获取的内核权限。
getcap FILENAME
getfacl
查看ACL权限。
getfacl NAME
setcap
设置可执行文件的内核权限。
setcap CAPABILITY FILENAME
setcap -r FILENAME
- -r:清除权限。
CAPABILITY为cap_net_bind_service=+eip
可让程序监听小于1024的端口。
setfacl
设置ACL权限。
setfacl -m {[d:]u:USERNAME:[r][w][x]}|{[d:]g:GROUPNAME:[r][w][x]}|{m:[r][w][x]} NAME
- -b:删除所有的ACL权限。
- -d:设置默认的ACL权限。只对目录有效,在改目录下新建的目录和文件会使用此默认ACL权限。
- -k:删除默认的ACL权限。
- -m:添加指定的ACL权限。d表示设置默认权限,u表示为用户设置,g表示为用户组设置,m表示设置权限掩码。
- -R:递归设置子目录和文件。
- -x:删除指定的ACL权限。
如不指定USERNAME,则为文件的所有者;如不指定GROUPNAME,则为文件的用户组。
umask
显示或设置权限掩码。umask实际上是shell内置的命令。
umask [MODE]
文件查找
find
查找文件。
根据时间查找:
find dir[ ...] -atime T
find dir[ ...] -ctime T
find dir[ ...] -mtime T
find dir[ ...] -newer NAME
- -atime T:列出atime在指定时间被更新过的文件。
- -ctime T:列出ctime在指定时间被更新过的文件。
- -mtime T:列出mtime在指定时间被更新过的文件。
- -newer NAME:使用文件或目录比较,列出比NAME的mtime更新的文件。
T可取如下形式:
- N:距离当前时刻N天之前的24小时内。
- +N:距离当前时刻N天(不含)之前。
- -N:距离当前时刻N天(含)之内。
根据用户或用户组查找:
find dir[ ...] -uid UID
find dir[ ...] -gid GID
find dir[ ...] -user USERNAME
find dir[ ...] -group GROUPNAME
find dir[ ...] -nouser
find dir[ ...] -nogroup
- -uid UID:列出文件的所有者ID为UID的文件。
- -gid GID:列出文件的用户组ID为GID的文件。
- -user USERNAME:列出文件的所有者为USERNAME的文件。
- -group GROUPNAME:列出文件的用户组为GROUPNAME的文件。
- -nouser:列出文件的所有者不在/etc/passwd中的文件。
- -nogroup:列出文件的用户组不在/etc/group中的文件。
根据文件权限查找:
find dir[ ...] -perm MODE
find dir[ ...] -perm +MODE
find dir[ ...] -perm -MODE
- -perm MODE:列出文件权限等于MODE的文件。
- -perm +MODE:列出文件权限包含MODE全部权限位的文件。
- -perm -MODE:列出文件权限包含MODE任一权限位的文件。
其他条件查找:
find dir[ ...] -name NAME
find dir[ ...] -size +SIZE
find dir[ ...] -size -SIZE
find dir[ ...] -type TYPE
- -name NAME:列出文件名为NAME的文件或目录,可使用通配符匹配。
- -size +SIZE:列出大于SIZE(不含)的文件,使用c表示1字节,k表示1024字节。
- -size -SIZE:列出小于SIZE(不含)的文件,使用c表示1字节,k表示1024字节。
- -type TYPE:列出指定文件类型的文件,f为一般文件,b/c为设备文件,d为目录,l为连接文件,s为SOCKET文件,p为FIFO文件。
type
查看命令的实际名称(别名或绝对路径等)。type实际上是shell内置的命令。
type [-a] COMMAND
- -a:列出所有COMMAND命令。
whereis
查看包含指定文件名(不含扩展名)的二进制文件、源代码文件和man手册文件的绝对路径。
whereis FILENAME
which
查看命令的绝对路径。
which [-a] COMMAND
- -a:列出所有COMMAND命令。
文件内容查看
cat
正向显示全部内容。
cat [-AbEnTv] FILENAME[ ...]|STDIN
- -A:相当于-vET。
- -b:显示行号,仅针对非空白行。
- -E:将换行符显示为$。
- -n:显示行号,包括空白行。
- -T:将Tab显示为^I。
- -v:显示不可见的特殊字符。
head
显示前几行。
head [-n COUNT] FILENAME[ ...]|STDIN
- -n:显示前COUNT行。若COUNT以-开头,则显示至倒数第COUNT(不含)行。
less
可翻页显示。
less [+F] FILENAME[ ...]|STDIN
只可使用管道输入时使用STDIN。
- +F:持续检测文件。按Ctrl+C退出持续检测。
在显示界面,可输入如下命令:
- Enter键:下滚一行。
- PageUp键:上翻一页。
- PageDown键:夏凡一页。
- Space键:下翻一页。
- /str:向下查询str。
- ?str:向上查询str。
- F:持续检测文件。按Ctrl+C退出持续检测。
- n:重复前一个查询。
- N:反向重复前一个查询。
- q:离开。
more
向后翻页显示。
类似less,但不可向前翻页。推荐使用less。
more FILENAME[ ...]|STDIN
nl
添加行号显示。
nl [-b a|t -n ln|rn|rz -w N] FILENAME[ ...]
- -b a|t:指定显示的行。a为所有行包括空行,t为忽略空行。
- -n ln|rn|rz:指定行号的显示方式。ln为左对齐,rn为右对齐不补前导0,rz为右对齐补前导0.
- -w N:指定行号占用的字符宽度。
od
显示二进制。
od [-abcdfilosx -v -j BYTES -N BYTES -t TYPE -w[BYTES] --endian big|little] FILENAME[ ...]|STDIN
- -j BYTES:跳过的字节数。
- -N BYTES:显示的字节数。
- -t TYPE:显示的类型。TYPE可为:
- a:字符名,忽略最高位。默认。
- c:可打印字符或字符转义。
- d[SIZE]:有符号十进制,每个数占用SIZE字节。
- f[SIZE]:浮点数,每个数占用SIZE字节。
- o[SIZE]:八进制,每个数占用SIZE字节。
- u[SIZE]:无符号十进制,每个数占用SIZE字节。
- x[SIZE]:十六进制,每个数占用SIZE字节。
- -v:显示详细内容,不使用“*”显示重复的行。
- -w[BYTES]:每行显示的字节数。BYTES默认为32。
- --endian big|little:端序。
以下是与-t TYPE等同的选项:
- -a:等同于-t a,字符名,忽略最高位。
- -b:等同于-t o1,八进制字节。
- -c:等同于-t c,可打印字符或字符转义。
- -d:等同于-t u2,2字节无符号十进制整数。
- -f:等同于-t fF,4字节单精度浮点数。
- -i:等同于-t dI,4字节十进制整数。
- -l:等同于-t dL,8字节十进制长整数。
- -o:等同于-t o2,2字节八进制整数。
- -s:等同于-t d2,2字节十进制短整数。
- -x:等同于-t x2,2字节十六进制整数。
输出的第一列表示该行的第一个字节是该文件的第几个字节(八进制,以0开始)。
strings
显示文件中的可打印字符。可用于二进制文件。
strings FILENAME
tac
反向显示全部内容。
tac FILENAME[ ...]|STDIN
tail
显示后几行。
tail [-f -n COUNT] FILENAME[ ...]|STDIN
- -f:持续检测文件。
- -n:显示后COUNT行。若COUNT以+开头,则从第COUNT(含)行开始。
文本处理
awk
以行为单位操作文本列。
awk [-F 'REGEXP' -v VAR=VALUE] '[CONDITION] {ACTION} [[CONDITION] {ACTION} ...]' FILENAME[ ...]|STDIN
- -F 'REGEXP':指定分隔符,以正则表达式匹配,支持扩展正则表达式。默认为任意个(大于等于1个)Space或Tab。
- -v VAR=VALUE:设置变量。
CONDITION和ACTION中的字符串都需要用""括起。可使用逻辑运算符(<、>、<=、>=、==、!=),赋值运算符(=)。
CONDITION可使用的特殊值:BEGIN、END。
ACTION有多个命令,可使用;或Enter键隔开。ACTION可使用的函数:
- print:
print ARG[ ...]
,没有空格分隔,自动换行。 - printf:
printf "STR"|VAR[...][, ARG, ...]
,不自动换行。STR可指定如下格式:- %[N]s:占位为N的字符串。
- %[N]d:占位为N的十进制整数。
- %[N][.M]f:占位为N小数位为M的浮点数。
- %[N]x:占位为N的十六进制整数。
自定义变量不需要加$。内置变量如下:
- $N:第N列的内容,从1开始。$0表示整行。
- NF:列数量。
- NR:目前的行号,从1开始。
- FS:目前的分隔符。
示例:
awk -F ':' -v prefix="*" 'BEGIN {total = 0} NR <= 5 {total = total + NF; printf prefix" %d %d %10s %s\n", total, NF, $1, $0}' /etc/passwd
cmp
以字节为单位比较二进制内容。
cmp [-bl] FILENAME1 FILENAME2
- -b:显示字节对应的字符。
- -l:列出所有不同的字节。
cut
以行为单位切割文本列。
cut -d DELIMITER -f RANGES FILENAME[ ...]|STDIN
cut -c RANGES FILENAME[ ...]|STDIN
- -c:以字符为单位。
- -d DELIMITER:以DELIMITER分隔进行切割,输出如有多列也以DELIMITER分隔。DELIMITER只能是一个字符,默认为Tab。
- -f RANGES:取出列的范围。RANGES的格式为{N|N-M|N-|-M}[,...],第一列为1。如:2、-2,5,7,9-10,12-。
diff
以行为单位比较文本。
diff [-bBi] FROMNAME TONAME
- -b:忽略一行中多个空白符的区别。
- -B:忽略空白行的区别。
- -i:忽略大小写。
结果的含义:
- {N1}a{N3[,N4]}:FROMNAME的N1行后添加TONAME的N3(含)至N4(含)行。
- {N1[,N2]}d{N3}:TONAME的N3行后删除FROMNAME的N1(含)至N2(含)行。
- {N1[,N2]}c{N3[,N4]}:FROMNAME的N1(含)至N2(含)行修改为TONAME的N3(含)至N4(含)行。
- <:从FROMNAME删除的行。
- >:添加到TONAME的行。
egrep
类似grep -E
,参看grep。
grep
查找匹配字符串的行。
grep [-acEinrsv -A N -B N -C N --color] REGEXP {FILENAME|DIR}[ ...]|STDIN
- -N:同时显示匹配行的前后N行。N为数字。
- -a:将二进制文件以文本文件方式查找。
- -A N:同时显示匹配行的后N行。
- -B N:同时显示匹配行的前N行。
- -C N:同时显示匹配行的前后N行。
- -c:显示匹配的行数。
- -E:使用扩展正则表达式。
- -i:忽略大小写。
- -n:同时显示行号。
- -r:递归匹配目录中的文件。等同于使用:-d recurse。
- -s:不显示错误消息。
- -v:反向显示不匹配的行。
- --color:将匹配内容着色显示。
REGEXP最好用''或""括起来,虽然一些简单正则表达式缺省也无问题。
正则表达式:
- ^:行首。
- $:行尾。
- .:任意一个字符。
- \:转义字符。
- *:重复前一个0次或多次。
- [AB]:枚举中任意一个。
- [A-B]:范围中任意一个。
- [^AB]:不在枚举中的任意一个。
- [^A-B]:不在范围中的任意一个。
- {N}:重复前一个N次。
- {N,}:重复前一个N次或更多。
- {N,M}:重复前一个最少N次(含),最多M次(含)。
以下特殊字符需配合[]一起使用,如:[^[:lower:]]:
- [:alnum:]:字母和数字。
- [:alpha:]:字母。
- [:blank:]:Space键和Tab键。
- [:cntrl:]:控制键。
- [:digit:]:数字。
- [:graph:]:除Space键和Tab键外的所有键。
- [:lower:]:小写字母。
- [:print:]:可打印字符。
- [:punct:]:标点符号。
- [:upper:]:大写字母。
- [:space:]:空白符。
- [:xdigit:]:十六进制数字。
扩展正则表达式:
- +:重复前一个1次或多次。
- ?:重复前一个0次或1次。
- A|B:A或B任意一个。注意,若abc和xyz都是字符串,则abc|xyz匹配abc或xyz。
- ():分组。
iconv
字符编码转换。
iconv --list
iconv -f FROM -t TO FILENAME [-o NEWFILENAME]
- -f:原来的字符编码。
- -o:如需保留原来的文件,则指定新文件。
- -t:后来的字符编码。
- --list:列出支持的所有字符编码。
join
将文本以关联列拼贴在一起。
join [-i -t DELIMITER -1 N -2 M] FILENAME1 FILENAME2
- -1 N:指定FILENAME1的关联列。
- -2 M:指定FILENAME2的关联列。
- -i:忽略大小写。
- -t DELIMITER:指定文本列的分隔符,默认为Tab。拼贴后两文本的内容也以DELIMITER分隔。
paste
直接按顺序将文本拼贴在一起,中间以Tab分隔。
paste [-d] FILENAME1 FILENAME2
- -d:指定文本列的分隔符,默认为Tab。
printf
格式化打印。
printf 'FORMAT' ARG[ ...]
会循环使用FORMAT格式化参数。
FORMAT的变量格式如下:
- %[N]s:占位为N的字符串。
- %[N]i:占位为N的整数。
- %[N.M]f:占位为N小数位为M的浮点数。
sed
以行为单位编辑内容。
sed [-nri] '[N1[,N2]] a CONTENT' FILENAME[ ...]|STDIN
sed [-nri] '[N1[,N2]] c CONTENT' FILENAME[ ...]|STDIN
sed [-nri] '[N1[,N2]] d' FILENAME[ ...]|STDIN
sed [-nri] '[N1[,N2]] i CONTENT' FILENAME[ ...]|STDIN
sed [-nri] '[N1[,N2]] p' FILENAME[ ...]|STDIN
sed [-nri] 's/OLDREGEXP/[NEWREGEXP]/[g]' FILENAME[ ...]|STDIN
- -n:安静模式,只显示经过sed处理的行。
- -r:使用扩展正则表达式。
- -i:直接修改文件的内容。
操作的行包括N1和N2(从1开始),N1和N2都缺省表示所有行。如有多个文件,则将所有文件组合在一起再计算行号。
操作的含义:
- a:每行后新增。
- c:整体替换行(注意,不是每行替换一次)。
- d:删除行。
- i:每行前插入。
- p:显示行,通常和-n一起使用。
- s:替换内容。g表示替换所有,不指定则只替换行中第一个匹配的内容。
CONTENT可使用\来输入多行。
split
切割文件。
split [-b N] [-C N] [-l N] FILENAME|- [FILEPREFIX]
- -b N:每个文件N字节。
- -C N:每个文件N字节,尽量保证行的完整性。
- -l N:每个文件N行。
如不使用FILENAME,则使用-表示标准输入。
FILEPREFIX缺省为x。切割出来的文件名为FILEPREFIX拼接上小写英文字母生成的有序字符串。
sort
排序文本行。
sort [-bfnru -k n -t DELIMITER] FILENAME[ ...]|STDIN
- -b:忽略最前面的空格。
- -f:忽略大小写。
- -n:以数值进行排序。
- -k n:指定排序的列,从1开始,列以-t指定的分隔符分隔。可使用多个选项指定多列排序,但需与其他指定排序列的选项连写,如:-k1nr -k2n。
- -r:反向排序。
- -t DELIMITER:分隔符,默认为Tab。
- -u:相同的文本只出现唯一一行。
tr
字符操作。
tr [-s] OLDSET NEWSET STDIN
tr -s SET STDIN
tr -d SET STDIN
- -d:删除集合中的字符。
- -s:将连续出现的集合中的字符替换成一个字符。
OLDSET使用abc形式时,NEWSET也可使用abc形式,且会一一对应替换。如NEWSET不足,则余下的使用NEWSET最后的字符替换。
OLDSET使用a-z或[a-z]形式时,NEWSET最好使用单个字符。
uniq
行内容排重。
uniq [-ci] FILENAME|STDIN
- -c:显示重复的次数。
- -i:忽略大小写。
vi
编辑文本。
vi FILENAME[ ...]
vim
编辑文本。vi
的升级版本。
vim FILENAME[ ...]
wc
文本内容统计。
wc [-lmw] FILENAME[ ...]|STDIN
- -l:显示行数。
- -m:显示字节数。
- -w:显示单词数。
不带参数时依次显示:行数、单词数、字节数、文件名。
压缩与打包
tar
打包或解包tar文件。
tar -c [-j|-z -v] -f FILENAME [-C DIR] NAME[ ...]
tar -t [-j|-z -v] -f FILENAME
tar -x [-j|-z -v] -f FILENAME [-C DIR]
- -c:打包文件,指定的NAME即为包中文件名。
- -C DIR:指定打包文件的源目录或解包文件的目标目录,目录必须存在。默认为当前目录。
- -f FILENAME:指定打包文件的目标文件名或解包文件的源文件名。
- -j:通过bzip2压缩/解压缩,文件名最好为*.tar.bz2。
- -t:查看包中文件。
- -v:显示正在打包/解包的文件名。
- -x:解包文件。
- -z:通过gzip压缩/解压缩,文件名最好为*.tar.gz。
unzip
解压缩zip文件。
unzip [-l] FILENAME
- -l:查看压缩包中文件。
用户与用户组
adduser
交互式增加用户。
adduser USERNAME
chpasswd
修改密码。
chpasswd STDIN
STDIN每行的内容为:USERNAME:PASSWORD。
groupadd
增加用户组。
groupadd [-r] GROUPNAME
- -r:增加系统用户组。
groupmod
修改用户组。
groupmod [-n NEWGROUPNAME] GROUPNAME
- -n NEWGROUPNAME:修改用户组名。
groupdel
删除用户组。
groupdel GROUPNAME
groups
查看所属用户组。
groups [USERNAME[ ...]]
第一个为有效用户组。
gpasswd
用户组管理员功能。
gpasswd GROUPNAME
gpasswd [-r -A USERNAME[,...]] [-M USERNAME[,...]] GROUPNAME
gpasswd [-a USERNAME -d USERNAME] GROUPNAME
不使用选项时为给用户组设置密码。
- -a USERNAME:添加用户至用户组,用户组管理员可使用此选项。
- -A USERNAME[,...]:添加用户作为用户组管理员。
- -d USERNAME:从用户组删除用户,用户组管理员可使用此选项。
- -M USERNAME[,...]:添加用户至用户组。
- -r:删除用户组密码。
id
查看UID/GID等信息。
id [-g|-u] [USERNAME[ ...]]
- -g:查看GID。
- -u:查看UID。
last
以时间排序显示各次登录信息。
last
lastlog
显示各用户的最后登录时间。
lastlog [-u USERNAME]
- -u USERNAME:指定用户名。
newgrp
切换有效用户组。
newgrp GROUPNAME
passwd
修改密码。
passwd [--stdin] [USERNAME]
passwd [-lu] USERNAME
- -l:锁定密码,令其无法登录。
- -u:解锁密码。
- --stdin:从stdin读取密码,缺省是使用交互命令输入密码。
su
切换用户。
su [- -lmp -c COMMAND] USERNAME
- -,-l:使用login shell方式登录,会读取新用户的环境变量。
- -c COMMAND:以新用户身份执行命令。
- -m,-p:保留原用户的环境变量。
sudo
以其他用户身份执行命令。
sudo [-b -u USERNAME] COMMAND
sudo -s
- -b:将命令在后台执行。
- -u USERNAME:指定欲切换的用户,缺省为root。
- -s:切换至root,并执行环境变量SHELL或/etc/passwd所指定的shell。
useradd
增加用户。
useradd [-DmMr -g GID|GROUPNAME -G GID|GROUPNAME[,...] -u UID] USERNAME
- -D:显示增加用户的默认值。
- -g GID|GROUPNAME:指定初始用户组。
- -G GID|GROUPNAME[,...]:指定次要用户组。
- -m:创建主目录(普通用户默认值)。
- -M:不创建主目录(系统用户默认值)。
- -r:增加为系统用户。
- -u UID:指定用户ID。
userdel
删除用户。
userdel [-r] USERNAME
- -r:连同主目录一起删除。
usermod
修改用户。
usermod [-aLU -g GROUPNAME -G GROUPNAME[,...] -l NEWUSERNAME] USERNAME
- -a:与-G配合,可追加次要用户组。
- -g GROUPNAME:修改初始用户组。
- -G GROUPNAME[,...]:修改次要用户组。
- -l NEWUSERNAME:修改用户名,并不会同时修改主目录名。
- -L:锁定用户。
- -U:解锁用户。
visudo
修改/etc/sudoers配置。
visudo
/etc/sudoers使用空白分隔各字段,格式如下:
用户名或组名 主机名=(可切换的用户名) 命令的绝对路径及其参数正则表达式
- 每个字段都可使用ALL表示所有。
- 组名需在前面加"%"。
- 命令前加"NOPASSWD:"(其后可带空格)可对所有命令免去输入密码。
- 命令前加"!"表示不可执行。
- 多条命令使用","(其后可带空格)分隔。
- 可使用"\"来输入多行。
需按Ctrl+O然后按Enter保存,按Ctrl+X退出。
w
显示当前登录的用户及其正在执行的命令。
w
who
显示当前登录的用户。
who
whoami
打印当前用户名。
whoami
工作
bg
将后台工作在后台运行,bg实际上是shell内置的命令。
bg %JOBNUMBER
类似使用&,区别于使用ctrl+z(将前台工作放至后台暂停)。
crontab
配置例行性工作调度。
crontab [-elr -u USERNAME]
- -e:编辑。
- -l:显示。
- -r:删除所有,如需删除一项则使用-e。
- -u USERNAME:指定用户的例行性工作调度,只有root能使用此选项。
每行包括的列:分、时、日、月、星期、命令。命令要使用绝对路径。时间相关的列含义如下:
- *:任何时刻都执行。
- N:指定时刻执行。
- N,M:指定多个时刻执行
- N-M:指定时间段执行。
- /X:每隔一定时间间隔执行,需配合*/X,N-M/X等实现。
fg
将后台工作取至前台处理,fg实际上是shell内置的命令。
fg [[%]JOBNUMBER]
fg -
缺省JOBNUMBER表示取出+代表的工作,使用-表示取出-表示的工作。
jobs
查看后台工作,jobs实际上是shell内置的命令。
jobs [-lrs]
- -l:同时列出进程PID。
- -r:仅列出后台正在运行的工作。
- -s:仅列出后台暂停的工作。
带+代表最近被放至后台的工作,带-代表最后第二个被放至后台的工作。
nohup
使工作与终端机无关,能脱机运行。
nohup COMMAND
nohup不支持shell内置的命令。通常与&配合使用。
进程
fuser
查找打开指定文件的进程。
fuser [-muv] FILENAME
- -m:如果是目录,则查找所有在该目录下使用文件的进程。
- -u:同时列出进程的所有者。
- -v:列出详细信息。
ACCESS字段的含义:
- c:进程在当前目录下(非子目录)。
- e:可被触发为执行状态。
- f:是一个被打开的文件。
- F:文件被打开了,不过在等待回应中。
- m:可能为动态库。
- r:代表顶层目录。
kill
向进程发送信号,可杀死进程。
kill -l
kill [-SIGNAL] %JOBNUMBER[ ...]
kill [-SIGNAL] PID[ ...]
- -l:列出可以使用的信号。
- -SIGNAL:指定信号,SIGNAL为信号值(-l列出的数值)或信号名(-l列出的名称)。常用的信号如下:
- 2(SIGINT):类似键盘输入ctrl+c。
- 9(SIGKILL):强制杀死进程。
- 15(SIGTERM):以正常方式终止进程,为缺省值。
- 17(SIGSTOP):类似键盘输入ctrl+z,暂停进程。
killall
使用运行进程的命令名向进程发送信号,可杀死进程。
kill [-iI -SIGNAL] COMMANDNAME[ ...]
- -i:使用交互命令确认。
- -I:忽略大小写。
- -SIGNAL:指定信号,SIGNAL为信号值或信号名。
lsof
列出被进程打开的文件。
lsof [-a -u USERNAME +d DIR -p PID -i:PORT]
- -a:列出多个选项同时成立的结果。
- -u USERNAME:列出该用户的进程打开的文件。
- +d DIR:列出指定目录下打开的文件。
- -i:PORT:列出使用指定端口的连接。
- -p PID:列出指定进程ID打开的文件。
pidof
根据进程名查找进程ID。
pidof [-s] COMMAND
- -s:只列出一个进程ID而不是所有进程ID。
pidstat
查看进程状态。
pidstat [-urd -p PID]
- -d:查看磁盘I/O状态。
- -p PID:指定进程ID。
- -r:查看内存使用状态。
- -u:查看CPU使用状态。
pkill
根据条件向进程发送信号,可杀死进程。
pkill [-F PIDFILENAME]
- -F PIDFILENAME:从文件中读取进程ID。
pmap
查看进程中各个模块占用内存的情况。
pmap PID
pstree
查看进程树。
pstree [-ApuU]
- -A:进程树以ASCII字符连接。
- -p:同时列出进程ID。
- -u:同时列出进程用户名。
- -U:进程树以UTF-8字符连接。
系统资源
top也可查看系统资源使用情况,其显示值与下面很多命令均一致。
free
查看内存使用情况。
free [-bgkmt]
- -b:以B为单位。
- -g:以G为单位。
- -k:以K为单位,默认设置。
- -m:以M为单位。
- -t:显示物理内存和内存交互空间的总和。
free的结果与top一致。对某些发行版:total=used+free+buff/cache,available为程序可用的内存。对于某些发行版:total=used+free,used和free在Mem行表示系统已分配和未分配的内存,在-/+ buffers/cache行表示不计算缓存,程序已用和可用的内存。
iostat
查看CPU和I/O状态。
iostat [-x]
- -x:显示扩展的状态信息。
iotop
动态查看进程I/O状态。
iotop
mpstat
查看CPU状态。使用/proc/stat中的信息。
mpstat [-P ALL]
- -P ALL:同时显示每个CPU核心的状态。
ps
查看进程状态信息。
ps [-q PID[,...]]
ps -l
ps -Al
ps -elf
ps aux
ps afjx
- a:列出所有与控制台有关的进程(所有用户,所有控制台)。
- f:显示进程树。
- j:格式化参数,以工作控制格式显示。
- u:格式化参数,以用户信息格式显示。
- x:列出当前用户的所有进程,如果和a一起使用则列出系统所有进程。
- -A:列出系统所有进程,同-e。
- -e:列出系统所有进程,同-A。
- -f:格式化参数,以全格式显示。如果和-l一起使用则显示命令的参数。
- -l:格式化参数,以较长的格式显示。
- -q PID[,...]:显示指定PID的进程。
格式化参数只能使用一个。
不加任何选项则只列出当前bash相关的进程。
显示结果各列的含义如下:
- %CPU:CPU使用率。
- %MEM:物理内存使用率,即RSS的比率。
- ADDR:进程在内存的那个部分,如果运行中则显示-。
- C:CPU使用率。
- CMD:运行进程的命令。
- F:进程标志,说明进程的权限。有:
- 1:该进程只可执行fork,不可执行exec。
- 4:root权限。
- NI:执行优先级的Nice值,越小优先级越高。
- PGID:进程组ID。
- PID:进程ID。
- PPID:父进程ID。
- PRI:执行优先级的Priority值,越小优先级越高。
- RSS:使用的常驻内存,单位为K。
- S:进程状态。有:
- D:睡眠但不可被唤醒,如等待I/O。
- R:运行中。
- S:睡眠但可被唤醒。
- T:停止。
- Z:僵尸,进程已终止但无法被删除。
- SID:会话ID。
- START:进程启动的时间。
- STAT:进程状态,第一个字母与S相同。
- STIME:进程的启动时间。
- SZ:使用的内存页数量,SZ*内存页大小(以K为单位)=VSZ。
- TIME:使用的CPU累积时间。
- TPGID:进程关联的TTY的进程组ID,-1表示不关联TTY。
- TTY:终端机,如果有远程登录则为动态终端接口(pts/n)。
- UID:用户ID。
- USER:进程的用户,与UID对应。
- VSZ:使用的虚拟内存大小,单位为K。
- WCHAN:进程睡眠时执行至的函数名,如果运行中则显示-。
sar
系统性能分析工具。
sar [-Abdruvw -n NET] INTERVAL [COUNT]
- -A:所有报告的汇总。
- -b:报告缓冲区使用情况。
- -d:报告磁盘使用状态。
- -n NET:报告网络状态。NET取值:ALL为所有,DEV为网卡。
- -r:报告没有使用的内存页面和硬盘块。
- -u:报告CPU使用率。
- -v:报告进程、I节点、文件和锁表状态。
- -w:报告系统的交换活动。
top
动态查看进程状态。
top [-bH -d SECONDS -n TIMES -p PID[,...]]
- -b:以批次方式执行,会将各次的结果顺序依次显示。
- -d SECONDS:刷新的时间间隔,单位为秒,缺省为5秒。
- -H:查看线程状态。
- -n TIMES:执行的次数。
- -p PID[,...]:只显示指定pid的进程。
界面上部为系统整体资源使用状态:
- 第一行:当前的时间,系统开机至今的时长,当前登录的用户数,最近1/5/15分钟的平均工作负载(即在特定的时间间隔内队列中运行的平均进程数)。
- 第二行:进程的总数,运行、睡眠、停止、僵尸进程的数量。
- 第三行:CPU负载。
- us:不改变优先级的用户时间(time running un-niced user processes)。
- sy:内核时间(time running kernel processes)。
- ni:改变优先级的用户时间(time running niced user processes)。
- id:空闲时间(time spent in the kernel idle handler)。
- wa:I/O等待时间(time waiting for I/O completion)。
- hi:硬中断时间(time spent servicing hardware interrupts)。
- si:软中断时间(time spent servicing software interrupts)。
- st:虚拟机偷取的时间(time stolen from this vm by the hypervisor)。
- 第四行:物理内存使用情况(单位为K),包括所有的、未分配的、已分配的、用作缓存的。
- 第五行:内存交换空间使用情况(单位为K),包括所有的、未分配的、已分配的。以及不使用内存交互空间可使用的物理内存数量(某些发行版)。
- 第六行:用于输入命令。
界面下部为进程的资源使用状态:
- PID:进程ID。
- USER:进程的用户。
- PR:执行优先级的Priority值,越小优先级越高。
- NI:执行优先级的Nice值,越小优先级越高。
- VIRT:使用的虚拟内存大小,单位为K,与ps的VSZ相同。
- RES:使用的常驻内存,单位为K,与ps的RSS相同。
- SHR:共享内存大小,单位为K。
- S:进程状态。
- %CPU:CPU使用率。
- %MEM:物理内存使用率,即RSS的比率。
- TIME+:使用的CPU累积时间。
- COMMAND:运行进程的命令。
top执行过程中可使用如下命令(以下所述排序均为降序),按ESC可退出交互的命令输入:
- ?:显示可输入的命令。
- 1:切换平均工作负载的显示,即第一行内容。
- k:向进程发送信号。会提示输入进程ID和信号。
- m:切换内存信息的显示,即第四行和第五行内容。
- M:以内存使用率(%MEM)排序。
- N:以PID(PID)排序。
- P:以CPU使用率(%CPU)排序,默认排序字段。
- r:设置进程的优先级。会提示输入进程ID和优先级。
- s:修改刷新的时间间隔。会提示输入秒数。
- t:切换工作和CPU的状态显示,即第二行和第三行内容。
- T:以使用的CPU累积时间(TIME+)排序。
- u:显示指定用户的进程。会提示输入用户名。
- q:离开top。
uptime
查看系统启动时间和工作负载。
uptime
依次显示:当前的时间,系统开机至今的时长,当前登录的用户数,最近1/5/15分钟的平均工作负载(即在特定的时间间隔内队列中运行的平均进程数)。
vmstat
查看系统资源状态。
vmstat [interval [times]] [-a] [-S UNIT]
vmstat [interval [times]] -d
vmstat [interval [times]] -f
vmstat [interval [times]] -s [-S UNIT]
vmstat [interval [times]] -p PARTITIONDEV
- -a:将memory的buff、cache替换为inact、active。
- -d:列出磁盘的读写情况。
- -f:列出开机后fork的进程数。
- -s:列出开机后导致内存变化的情况。
- -S UNIT:指定显示的单位,可为k、K、m、M。
- -p PARTITIONDEV:列出分区的读写情况。
缺省参数时的输出字段说明:
- procs:进程。
- r:等待和运行中的进程数量。
- b:不可被唤醒的进程数量。
- memory:内存。
- swpd:已使用的内存交换空间,同free的Swap行used列。
- free:空闲的物理内存,同free的Mem行free列。
- buff:缓存磁盘块设备的元数据,buff+cache同free的Mem行buff/cache列。
- cache:缓存读写文件的页,buff+cache同free的Mem行buff/cache列。
- swap:内存交换空间。
- si:每秒从内存交换空间换入的数量。
- so:每秒换出至内存交换空间的数量。
- io:I/O。
- bi:每秒从磁盘读取的块数。
- bo:每秒写入到磁盘的块数。
- system:系统。
- in:每秒被中断的进程次数。
- cs:每秒上下文切换的次数。
- cpu:CPU使用率,与top的%CPU含义相同。
网络
arp
ARP工具。
arp
如不指定该选项,则查看ARP缓存。
dig
查看DNS解析信息。
dig [@DNSSERVER] DOMAINNAME
ethtool
查看网络接口信息。
ethtool ETH
firewall-cmd
设置防火墙。
firewall-cmd --zone=public --add-port=PORT/tcp --permanent
firewall-cmd --zone=public --remove-port=PORT/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
- --add-port:添加端口,值为:端口/协议。
- --list-ports:查看所有打开的端口。
- --permanent:设置为永久生效。
- --reload:重新加载防火墙规则,无需断开连接。防火墙规则修改后需重新加载才能生效。
- --remove-port:移除端口,值为:端口/协议。
- --zone:设置作用域。
ifconfig
网络接口配置。
ifconfig [-a]
- -a:显示所有的网络接口,即使其是未激活的。
iftop
网络带宽监控工具。
iftop [-bBnNpP -i ETH -m MAX]
- -b:不显示流量条。
- -B:以Byte为单位。默认是以bit为单位。
- -i ETH:指定网卡。
- -m MAX:流量刻度最大值,单位为bit。其中可使用k、K、m、M、g、G。
- -n:将输出的主机信息通过IP显示,不进行DNS解析。
- -N:只显示连接端口,不显示端口对应的服务名称。
- -p 以混杂模式运行。
- -P:显示端口。
输出分为三部分:
- 流量刻度。
- 实时信息。
- 统计信息:TX行为发送、RX行为接收、TOTAL为发送和接收合计。每行有三列:
- cum:从运行iftop起的总计。
- peak:从运行iftop起的峰值。
- rates:过去2s、10s、40s的平均值。
ip
网络配置。RHEL系列使用其替代ifconfig
。
ip addr
- addr:查看网络接口地址信息。
nc
TCP/UDP网络工具。等同netcat
。
nc -l [-tuv] -p PORT
nc [-tuv] HOST PORT
- -l:服务器模式。不使用此参数则为客户端模式,会要求输入传输内容。
- -p PORT:监听的端口。
- -t:使用TCP。如不指定-t和-u,则默认为TCP。
- -u:使用UDP。如不指定-t和-u,则默认为TCP。
- -v:显示详细信息。更详细的信息可使用-vv。
netcat
TCP/UDP网络工具。等同nc
。
nethogs
进程网络监控。
nethogs [-a -d SECONDS] ETH
- -a:是否监控所有网卡,包括本地环回。
- -d SECONDS:刷新的时间间隔,单位为秒。
netstat
查看网络状态。
netstat [-alnpstu]
- -a:将所有连接、监听、套接字状态都列出。
- -l:列出监听状态。
- -n:列出端口号,不列出服务名。
- -p:列出进程信息。
- -s:列出每种协议的概要统计信息。
- -t:列出TCP连接状态,与-l配合可列出TCP监听状态。
- -u:列出UDP连接状态,与-l配合可列出UDP监听状态。
nslookup
DNS解析。
nslookup DOMAINNAME
mtr
网络连通性测试工具。
mtr [-r] HOST
- -r:使用报告模式。
ngrep
可进行文本过滤的抓包工具。
ngrep [-pq -W DISPLAY] [REGEXP] [CAPTUREFILTER]
- -p:不使用混杂模式。
- -q:安静模式,只输出包头和载荷。
- -W DISPLAY:输出显示方式。byline为按换行符进行换行。
nmap
端口扫描。
nmap [-Av[v]] HOST
- -A:启用操作系统探测和版本探测。
- -v[v]:显示详细信息。
ping
发送ICMP包。会不断重复发送。
ping HOST
route
IP路由表工具。
route [-n]
- -n:显示数值IP。默认显示主机名。
ss
查看网络状态。RHEL系列使用其替代netstat
。
ss [-alnpstu]
- -a:将所有连接、监听、套接字状态都列出。
- -l:列出监听状态。
- -n:列出端口号,不列出服务名。
- -p:列出进程信息。
- -s:列出概要统计信息。
- -t:列出TCP连接状态,与-l配合可列出TCP监听状态。
- -u:列出UDP连接状态,与-l配合可列出UDP监听状态。
tcpdump
网络抓包工具。
tcpdump [-Anq -v[...] -s N -i ETH -w FILENAME] [CAPTUREFILTER]
- -A:以ASCII方式输出。
- -i ETH:指定网络接口。
- -n:显示IP而不是主机名。
- -q:减少输出内容。
- -s N:从一个包中截取的字节数。0表示不限制。
- -v[...]:显示详细的信息。v越多越详细。
- -w FILENAME:数据包写入的文件名。
CAPTUREFILTER捕获过滤规则的示例如下(可以使用and
、or
、()
进行组合):
- dst IP:目标IP。
- host IP:主机IP。
- port PORT:端口。
- portrange PORT1-PORT2:端口范围。
- tcp:TCP协议。
- udp:UDP协议。
telnet
使用TCP连接远程主机的端口。
telnet HOST PORT
traceroute
路由跟踪。
traceroute HOST
tshark
Wireshark命令行版网络抓包工具。比tcpdump
能识别更多的协议。
tshark [-i ETH -w FILENAME] [CAPTUREFILTER]
- -i ETH:指定网络接口。
- -w FILENAME:数据包写入的文件名。
ufw
设置防火墙。
ufw [delete] allow|deny PORT[/tcp]
ufw status [verbose]
- allow:允许访问。
- delete:删除规则。
- deny:禁止访问。
- status:查看状态。
HTTP
ab
HTTP压力测试。
ab -c CONCURRENCY -n N URL
ab -c CONCURRENCY -n N -T CONTENTTYPE -p BODYFILENAME URL
- -c CONCURRENCY:并发数。
- -n N:请求总数。
- -p BODYFILENAME:将文件内容指定为请求实体。只用于POST请求。
- -T CONTENTTYPE:指定Content-Type首部。只用于POST请求。
URL不可省略路径。
curl
发送HTTP请求。
curl URL [-iILOv -o FILENAME]
curl URL -X METHOD -H HEADER -d BODY [-iv]
- -d|--data BODY:指定请求实体。会转换换行符。同时默认-X为POST。
- --data-binary BODY:指定二进制请求实体。不会转换换行符。可使用@FILENAME指定文件名。
- -H HEADER:指定请求首部。格式为“KEY: VALUE”。
- -i:响应打印包含首部信息。
- -I:提交HEAD请求,只返回首部信息。
- -L:跟随HTTP重定向重新请求。
- -o FILENAME:指定保存响应内容的文件名。
- -O:将响应内容保存至文件。文件名为路径的最后一部分。
- -X METHOD:指定请求方法。默认为GET。
- -v:打印详细信息。“*”开头的是调试信息,“>”开头的是请求内容(不打印请求实体),“<”开头的是响应内容(响应实体不带有此开头)。
- -w FORMAT:在最后增加的打印信息。可使用“\n”、“\r”、“\t”,以及使用“%{VAR}”进行变量替换(如打印“%”需使用“%%”转义)。VAR可为:
- content_type:响应的Content-Type。
- filename_effective
- ftp_entry_path
- http_code:响应状态码。
- http_connect
- local_ip
- local_port
- num_connects
- num_redirects
- redirect_url
- remote_ip
- remote_port
- size_download
- size_header
- size_request
- size_upload
- speed_download
- speed_upload
- ssl_verify_result
- time_appconnect:从开始直到SSL等握手结束消耗的秒数。
- time_connect:从开始直到TCP握手结束消耗的秒数。
- time_namelookup:从开始直到DNS解析结束消耗的秒数。
- time_pretransfer:从开始直到文件开始传输之前消耗的秒数。
- time_redirect:真正请求之前所有重定向消耗的秒数。
- time_starttransfer:从开始直到第一个字节开始传输之前消耗的秒数。这包含time_pretransfer的耗时。
- time_total:总消耗的秒数。
- url_effective
wget
发送HTTP的GET请求下载文件。
wget [-q -O FILENAME] URL
- -O FILENAME:指定保存响应内容的文件名。
- -q:安静模式,关闭打印输出。
URL可放在参数的前面。
服务
service
服务管理。新系统应使用systemctl
。
service SERVICE restart
service SERVICE start
service SERVICE status
service SERVICE stop
子命令:
- restart:重启服务。
- start:启动服务。
- status:查看服务状态。
- stop:停止服务。
systemctl
systemd系统服务管理。
单元文件存放目录按优先级从高至低为:/etc/systemd/system/
(系统管理员安装的单元)、/usr/lib/systemd/system/
或/lib/systemd/system/
(软件包安装的单元)。
systemctl enable UNIT
systemctl daemon-reload
systemctl disable UNIT
systemctl is-enabled UNIT
systemctl list-unit-files
systemctl [list-units] [--all --failed --state STATE[,...] --type TYPE]
systemctl mask UNIT
systemctl reload UNIT
systemctl restart UNIT
systemctl start UNIT
systemctl status [UNIT]
systemctl stop UNIT
systemctl umask UNIT
子命令:
-
enable:设置单元开机自动启动。
-
daemon-reload:重新加载systemd。扫描新的或有变动的单元配置。
-
disable:取消单元开机自动启动。
-
is-enabled:查看单元是否未开机自动启动。
-
list-unit-files:查看所有已安装单元。
-
list-units:查看单元。默认子命令。
-
mask:禁用单元。禁用后,也不能间接启动。
-
reload:重新加载单元配置。
-
restart:重启单元。
-
start:启动单元。
-
status:查看单元状态。如不指定单元,则以树形查看单元。
-
stop:停止单元。
-
umask:取消禁用单元。
-
--all:查看所有单元。
-
--failed:查看执行失败的单元。
-
--state STATE[,...]:查看指定状态的单元:可为active、failed、running、enabled。
-
--type TYPE:查看指定类型的单元。可为service。
证书
openssl
-
生成CA私钥,期间会要求设置密码:
openssl genrsa -des3 -out CAKEYFILENAME
-
使用CA私钥生成CA证书,期间会要求输入CA私钥的密码:
openssl req -new -x509 -days N -key CAKEYFILENAME -out CACERTFILENAME
-
生成服务器私钥,期间会要求设置密码:
openssl genrsa -des3 -out SERVERKEYFILENAME
-
使用服务器私钥生成服务端CSR(证书签名请求),期间会要求输入服务器私钥的密码:
openssl req -new -key SERVERKEYFILENAME -out SERVERCSRFILENAME
输入的选项中最重要的是Common Name(即CN),要么是从DNS解析后的完全限定域名(fully qualified domain name/FQDN),要么是*即可在任何服务器使用。
-
使用CA证书对服务端CSR进行签名生成服务器证书,期间会要求输入CA私钥的密码,并需存在文件内容为一个整数的ca.srl文件:
openssl x509 -req -days N -CA CACERTFILENAME -CAkey CAKEYFILENAME -in SERVERCSRFILENAME -out SERVERCERTFILENAME
-
清除服务器私钥的密码,便于服务器使用,期间会要求输入服务器私钥的密码:
openssl rsa -in SERVERKEYFILENAME -out SERVERKEYFILENAME
-
生成客户端私钥,期间会要求设置密码:
openssl genrsa -des3 -out CLIENTKEYFILENAME
-
使用客户端私钥生成客户端CSR(证书签名请求),期间会要求输入客户端私钥的密码:
openssl req -new -key CLIENTKEYFILENAME -out CLIENTCSRFILENAME
-
使用CA证书对客户端CSR进行签名生成客户端证书,期间会要求输入CA私钥的密码,并需存在文件内容为一个整数的ca.srl文件:
openssl x509 -req -days N -CA CACERTFILENAME -CAkey CAKEYFILENAME -in CLIENTCSRFILENAME -out CLIENTCERTFILENAME -extfile CLIENTEXTFILENAME
CLIENTEXTFILENAME用来添加扩展的SSL属性,格式为“KEY = VALUE”。
-
清除客户端私钥的密码,便于客户端使用,期间会要求输入客户端私钥的密码:
openssl rsa -in CLIENTKEYFILENAME -out CLIENTKEYFILENAME
软件包
apt
查询、管理APT包。
apt autoremove
apt edit-sources
apt install APTPACKAGE
apt list APTPACKAGE|--installed
apt purge APTPACKAGE
apt remove APTPACKAGE
apt search PATTERN
apt show APTPACKAGE
apt update
apt upgrade
- --installed:用于列出所有已安装的apt包。
子命令:
- autoremove:删除所有自动安装且不再使用的软件包。同apt-get autoremove。
- edit-sources:编辑apt源列表。
- install:安装apt包,同apt-get install。
- list:列出指定的apt包。
- purge:删除apt包,同时删除配置文件,同apt-get purge。
- remove:删除apt包,保留配置文件,同apt-get remove。
- search:从服务器搜索apt包,使用通配符匹配,同apt-cache search。
- show:查看apt包的信息,同apt-cache show。
- update:刷新本地apt存储库索引,其他子命令依赖此索引,同apt-get update。
- upgrade:更新所有已安装的apt包,同apt-get upgrade。
apt-cache
查询APT包。
apt-cache depends APTPACKAGE
apt-cache rdepends APTPACKAGE
apt-cache search PATTERN
apt-cache show APTPACKAGE
子命令:
- depends:查看apt包依赖,即指定的apt包依赖哪些apt包。
- rdepends:查看apt包反向依赖,即指定的apt包被哪些apt包依赖。
- search:从服务器搜索apt包,使用通配符匹配。
- show:查看apt包的信息。
apt-get
管理APT包。
apt-get autoclean
apt-get autoremove
apt-get clean
apt-get install APTPACKAGE
apt-get purge APTPACKAGE
apt-get remove APTPACKAGE [--purge]
apt-get update [--allow-releaseinfo-change]
apt-get upgrade
- --purge:如使用该参数,则同时删除配置文件,否则不删除。
- --allow-releaseinfo-change:如
apt-get update
提示类似“N: Repository 'http://deb.debian.org/debian buster InRelease' changed its 'Suite' value from 'stable' to 'oldstable'”的错误,使用此选项来允许发布信息的改变。
子命令:
- autoclean:清理apt缓存。
- autoremove:删除所有自动安装且不再使用的软件包。
- clean:清理apt缓存,比autoclean更彻底。
- install:安装apt包。
- purge:删除apt包,同时删除配置文件。同
remove --purge
。 - remove:删除apt包,保留配置文件。
- update:刷新本地apt存储库索引,其他子命令依赖此索引。
- upgrade:更新所有已安装的apt包。
dpkg
使用DPKG管理包。
dpkg -i DEBFILENAME
dpkg -l
dpkg -L DEBPACKAGE
dpkg -P DEBPACKAGE
dpkg -r DEBPACKAGE
- -i:安装deb包。
- -l:显示所有已安装的deb包。
- -L:显示deb包安装于文件系统中的文件。
- -P:删除deb包,包括配置文件。
- -r:删除deb包,保留配置文件。
dpkg-reconfigure
重新配置DPKG包。
dpkg-reconfigure DEBPACKAGE
rpm
使用RPM管理包。
RPM包文件名通常是如下形式:包名-版本信息-发布次数.硬件平台.rpm。
RPM安装:
rpm -i[hv] RPMFILENAME|URL[ ...]
- -h:显示进度条。
- -i:install,安装。
- -v:显示详细信息。
RPM更新与升级:
rpm -F[hv] RPMFILENAME[ ...]
rpm -U[hv] RPMFILENAME[ ...]
- -F:freshen,包已安装则更新。
- -U:upgrade,包已安装则更新,包未安装则安装。
RPM查询:
rpm -q[cdilR] RPMPACKAGE
rpm -qa
rpm -qf FILENAME
rpm -qp[cdilR] RPMFILENAME
- -c:列出包的所有配置文件。
- -d:列出包的所有帮助文件。
- -i:列出包的详细信息。
- -l:列出包的所有文件。
- -R:列出包依赖的其他文件。
- -q:查询已安装的包。
- -qa:查询所有已安装的包。
- -qf:查询文件所属的包。
- -qp:查询包文件的信息。
RPM卸载:
rpm -e RPMPACKAGE
- -e:erase,卸载包。
RPM重建数据库:
rpm --rebuilddb
- --rebuilddb:重建数据库。
RPM安装数字证书:
rpm --import KEYFILENAME|URL
- --import:安装数字证书。
scl
多版本包管理。
scl --list
scl enable COLLECTION COMMAND
- --list:列出已安装的包集合。
子命令:
- enable COLLECTION COMMAND:执行命令COMMAND并激活包集合COLLECTION。
yum
使用YUM管理包。
yum info YUMPACKAGE
yum install YUMPACKAGE|RPMPACKAGE
yum list [YUMPACKAGE]
yum list installed [YUMPACKAGE]
yum list updates
yum makecache
yum provides FILENAME
yum remove YUMPACKAGE
yum repolist [all]
yum search PATTERN
yum update YUMPACKAGE
- -y:当需要用户输入时,自动提供yes响应。
子命令:
- info:从服务器查找软件信息。
- install:从服务器安装软件。
- list:从服务器列出所有软件,可指定软件名。
- list installed:列出已安装的软件,可指定软件名。
- list updates:从服务器查询已安装的软件中哪些可升级。
- makecache:将服务器的软件信息下载到本地缓存。
- provides:从服务器查询包含指定文件名的软件。
- remove:删除已安装的软件。
- repolist [all]:列出已安装的YUM源,如使用
all
则同时列出disabled状态的源。 - search:从服务器搜索软件,使用通配符匹配。
- update:从服务器升级软件。
程序和库
ldconfig
配置共享库搜索。
ldconfig
ldconfig -v
如不使用选项,则根据/etc/ld.so.conf刷新共享库的搜索缓存。
- -v:显示每个搜索目录的详细信息。
ldd
打印二进制文件依赖的共享库。
ldd FILENAME
nm
查看符号表。
nm FILENAME
readelf
查看ELF文件的信息。
readelf -a FILENAME
- -a:查看所有信息。
进程调试
strace
查看进程的系统调用。
strace COMMAND [ARG[ ...]]
strace -p PID
- -p PID:指定进程ID。
远程连接
scp
scp [-r -P PORT] SRC USERNAME@HOST:DST
scp [-r -P PORT] USERNAME@HOST:SRC DST
- -r:递归复制子目录和文件。
- -P PORT:指定远程SSH端口。
若SRC为文件,DST可为文件名或目录名;若SRC为目录,DST只能为目录名。
ssh
ssh [-p PORT] USERNAME@HOST
- -p PORT:指定远程SSH端口。
计算
base64
base64编解码。
base64 [-d] FILENAME|STDIN
- -d:是否解码。
expr
计算表达式的值。
expr EXPRESSION
EXPRESSION可使用+-*/等运算,运算符两侧需有空格。
md5sum
生成md5摘要。
md5sum FILENAME|STDIN
sha256sum
生成sha256摘要。
sha256sum FILENAME|STDIN
变量
declare
设置/查看环境变量。
declare [[-airx] VARIABLE[=VALUE]]
- -a:指定变量为数组。
- -i:指定变量为整数。
- -r:指定变量为只读。
- -x:指定变量为环境变量。
只使用declare
时,查看所有环境变量,与set
相同。
env
查看所有环境变量。
env
export
设置/查看环境变量。
export [VARIABLE[=VALUE]]
只使用export
时,查看所有环境变量,显示格式包含"declare"。
locale
查看语系变量。
locale [-a]
- -a:查看系统支持的所有语系。
只使用locale
时,查看当前的语系变量。
read
从标准输入读取一行至变量。
read [-p PROMPT -t TIMEOUT] VARIABLE STDIN
- -p PROMPT:指定提示符。
- -t TIMEOUT:指定等待超时,以秒为单位。
set
set [-eux]
如不指定选项,则查看所有变量,包括环境变量和自定义变量。
- -e:设置若有命令执行错误,即返回码不等于0,则立即退出shell。
- -u:设置若有命令使用未定义变量,则视为执行错误。
- -x:设置执行命令前,先打印命令的内容。
typeset
设置/查看环境变量。用法与declare
相同。
unset
取消变量设置,可为环境变量或自定义变量。
unset VARIABLE
媒体
sox
音频处理工具。
sox [-c N -e ENCODING -r RATE -t TYPE] INPUTFILENAME OUTPUTFILENAME
sox -m OUTPUTFILENAME INPUTFILENAME1 INPUTFILENAME2
sox -M OUTPUTFILENAME INPUTFILENAME1 INPUTFILENAME2
- -c N:输出文件的声道数。
- -e ENCODING:编码格式。μ律为u-law。
- -m:使用混音合成至一个文件。
- -M:使用立体声合成至一个文件。
- -r RATE:采样率,单位为Hz。
- -t TYPE:文件格式类型。原生格式为raw。
play
播放声音文件。需要声卡驱动支持。
play [-e ENCODING -r RATE -t TYPE] FILENAME
- -e ENCODING:编码格式。μ律为u-law。
- -r RATE:采样率,单位为Hz。
- -t TYPE:文件格式类型。原生格式为raw。
此命令为sox
附带的命令。
命令执行
alias
设置命令别名。alias实际上是shell内置的命令。
alias NEW=OLD
echo
打印回显。
echo [-en] CONTENT[ ...]
-
-e:使用转义字符。CONTENT可使用
"\ESC[BACKGROUND;FOREGROUND;PROPERTYm"
(如:"\e[;31m我们\e[0m")来控制后续的输出颜色。BACKGROUND、FOREGROUND、PROPERTY均可省略,并需省略多余的分号。\ESA为转义符,可为:
- \033
- \e
- \E
BACKGROUND为背景色,可为:
- 0:默认。
- 40:黑色。
- 41:红色。
- 42:绿色。
- 43:黄色。
- 44:蓝色。
- 45:紫色。
- 46:青色。
- 47:白色。
FOREGROUND为前景色,可为:
- 0:默认。
- 30:黑色。
- 31:红色。
- 32:绿色。
- 33:黄色。
- 34:蓝色。
- 35:紫色。
- 36:青色。
- 37:白色。
PROPERTY为属性。
-
-n:不打印结尾的换行符。
exec
用被执行的命令替换当前进程,执行完命令后进程退出。
exec COMMAND [ARG[ ...]]
exit
退出执行。
exit [CODE]
history
查看历史执行命令。
history [N]
histroy -c
history -r FILENAME
history -aw [FILENAME]
如不使用选项,则列出所有历史命令。可指定列出最近N条命令。
- -a:将当前shell新增的历史命令追加入文件中。如没指定FILENAME,则默认为
~/.bash_history
。 - -c:将当前shell所有历史命令清除。
- -r:将FILENAME中的历史命令读到当前shell中。
- -w:将当前shell的历史命令写入文件中。如没指定FILENAME,则默认为
~/.bash_history
。
可通过如下方式执行历史命令:
- !N:执行第N条命令。
- !COMMAND:执行最近的以COMMAND开头的命令。
- !!:执行上一条命令。
seq
返回数值序列。
seq [FIRST [INCREMENT]] LAST
FIRST和INCREMENT默认为1。返回序列的范围为[FIRST, LAST]。
sh
在子进程中执行脚本。
sh [-nvx] SCRIPTFILENAME
sh [-nvx] -c SCRIPTSTR
- -c SCRIPTSTR:执行字符中的脚本。
- -n:不执行,只检查语法。
- -v:执行时,先打印脚本内容。
- -x:执行,并打印每一步使用的脚本。
shift
将参数列表左移。
shift [N]
N默认为1。
sleep
睡眠等待。
sleep SECONDS
source
在父进程中执行脚本。
source SCRIPTFILENAME
等同于. SCRIPTFILENAME
。
tee
双向重定向。将标准输入重定向至文件和标准输出。
tee [-a] FILENAME[ ...]
- -a:以追加方式写入文件。
trap
捕获信号后执行命令。
trap COMMAND SIGNAL
unalias
取消命令别名。
unalias NAME
xargs
生成命令的参数。
xargs COMMAND STDIN
参数以空白符分隔。