目录
- 磁盘与分区
- blkid
- blockdev
- df
- du
- lsblk
- 文件与目录
- cd
- cp
- chgrp
- chmod
- chown
- dd
- file
- ln
- ls
- mkdir
- mv
- pwd
- rm
- rmdir
- test
- touch
- umask
- 文件查找
- find
- type
- whereis
- which
- 文件内容查看
- cat
- head
- less
- more
- nl
- od
- tac
- tail
- 文本处理
- awk
- cmp
- cut
- diff
- egrep
- grep
- join
- paste
- printf
- sed
- sort
- tr
- uniq
- wc
- 压缩与打包
- tar
- 用户和用户组
- adduser
- groupadd
- groupmod
- groupdel
- groups
- gpasswd
- id
- last
- lastlog
- newgrp
- passwd
- su
- sudo
- useradd
- userdel
- usermod
- visudo
- w
- who
- 工作和进程
- bg
- crontab
- fg
- jobs
- kill
- killall
- nohup
- pidof
- ps
- pstree
- top
- 服务
- service
- systemctl
- 系统资源
- free
- fuser
- getcap
- lsof
- setcap
- ulimit
- uptime
- vmstat
- 网络
- firewall-cmd
- ifconfig
- ip
- netstat
- ping
- ss
- 系统信息
- uname
- dmesg
- 软件安装
- apt
- apt-cache
- apt-get
- dpkg
- rpm
- yum
- 程序和库
- nm
- 远程连接
- scp
- ssh
- 变量
- declare
- env
- export
- locale
- read
- set
- typeset
- unset
- 命令执行
- alias
- echo
- history
- seq
- sh
- source
- unalias
- xargs
本文更新于2019-06-11。
说明:下文中,大写为自定义变量,根据实际情况填写(个别大写的参数除外)。使用[]
引起表示内容可选,使用{}
引起表示内容为一个整体,|
表示使用左侧或右侧内容,...
表示重复之前内容。
磁盘与分区
blkid
查看块设备属性。
blkid
blockdev
查看/设置块设备设置。
blockdev --report
- --report:查看块设备设置。
df
列出文件系统的磁盘使用量,包括各分区的磁盘使用量。
df [-ahHikmT] [NAME]
- -a:列出所有的文件系统,包括系统特有的/proc等。
- -h:以人类易读的方式列出,如K。
- -H:类似-h,但以1000而不是1024为进制。
- -i:列出i节点数量,而不是磁盘容量。
- -k:以K为单位。
- -m:以M为单位。
- -T:同时列出文件系统类型,如ext3。
如指定文件或目录名,则列出其所在的文件系统;否则,列出所有文件系统。
du
列出文件或目录的磁盘使用量。
du [-ahkmsS] NAME
- -a:列出所有目录和文件的磁盘使用量,目录的计算方式为汇总其子目录和文件。
- -h:以人类易读的方式列出,如K。
- -k:以K为单位。
- -m:以M为单位。
- -s:只列出总量,不列出子目录,目录的计算方式为汇总其子目录和文件。
- -S:列出所有目录,目录的计算方式为只汇总文件,不汇总子目录。
当不使用-a、-s、-S时,列出所有目录,目录的计算方式为汇总其子目录和文件。
lsblk
以树形结构查看块设备。
lsblk
文件与目录
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必须为目录。
chgrp
修改文件/目录的用户组。
chgrp [-R] GROUP NAME[ ...]
- -R:递归更改子目录和文件。
chmod
修改文件/目录的权限。
chmod [-R] MODE NAME[ ...]
- -R:递归更改子目录和文件。
MODE可取如下形式:
- 数字类型: 如0770。
- 符号类型:{ {ugoa}{=+-}{rwxst}}[,...],a表示所有,s只能用于u(SUID)g(SGID),t只能用于o(SBIT)。如u=rw,go=r、a+w,o-x。
chown
修改文件/目录的所有者。
chown [-R] [GROUP:]OWNER NAME[ ...]
- -R:递归更改子目录和文件。
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 --full-time --time={atime|ctime}] [NAME]
- -a:列出全部文件,包括隐藏文件。
- -A:列出全部文件,包括隐藏文件,但不包括.和..。
- -d:列出目录本身,而不是列出目录内的文件。
- -F:文件名附加文件类型信息,*为可执行文件,/为目录,=为套接字文件,|为管道文件。
- -h:将文件大小以人类易读的方式列出,如K。
- -l:列出长串格式。
- -r:将结果反向排序。
- -R:递归列出子目录和文件。
- -S:以文件大小排序。
- -t:以时间排序。
- --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] NAME
- -f:强制删除。
- -r,-R:递归删除子目录和文件。
rmdir
删除空目录。
rmdir [-p] DIR
- -p:递归删除空的父目录,如
rm a/b/c
可递归删除a。
test
检测文件和比较值。
test OPTEST
[ OPTEST ]
若为真,则命令执行返回码为0;否则为1。注意,上述两种表示是等价的,第二种[
和]
间必须有空格。OPTEST中的变量和常量建议使用""
引起,OPTEST如下设置:
检测文件或目录,如test OP NAME
:
- -b:检测是否存在且为块设备。
- -c:检测是否存在且为字符设备。
- -d:检测是否存在且为目录。
- -e:检测是否存在。
- -f:检测是否存在且为文件。
- -L:检测是否存在且为连接文件。
- -s:检测是否存在且大小不为0。
- -S:检测是否存在且为套接字(Socket)文件。
- -p:检测是否存在且为管道(FIFO)文件。
检测文件或目录权限(但root用户常有例外),如test OP NAME
:
- -g:检测是否存在且有SGID属性。
- -k:检测是否存在且有SBIT属性。
- -r:检测是否存在且有读权限。
- -u:检测是否存在且有SUID属性。
- -w:检测是否存在且有写权限。
- -x:检测是否存在且有执行权限。
文件或目录比较,如test NAME1 OP NAME2
:
- -ef:比较是否同一个文件。可用于检测硬连接,如指向同一个inode则为同一个文件。
- -nt:比较NAME1是否比NAME2新。
- -ot:比较NAME1是否比NAME2老。
整数比较,如test N1 OP N2
:
- -eq:比较是否相等。
- -ge:比较N1是否大于等于N2。
- -gt:比较N1是否大于N2。
- -le:比较N1是否小于等于N2。
- -lt:比较N1是否小于N2。
- -ne:比较是否不等。
字符串比较,如test OP STR
:
- -n:比较字符串是否不为空串。
-n
也可省略。 - -z:比较字符串是否为空串。
或:
- test STR1 = STR2:比较字符串是否相等。
=
也可为==
。 - test STR1 != STR2:比较字符串是否不等。
也可以对test
进行多重判定:
- !:取反,如
test ! 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]。
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
查看包含指定文件名(不含扩展名)的文件绝对路径。
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 FILENAME[ ...]|STDIN
只可使用管道输入时使用STDIN。
在显示界面,可输入如下命令:
- Enter键:下滚一行。
- PageUp键:上翻一页。
- PageDown键:夏凡一页。
- Space键:下翻一页。
- /str:向下查询str。
- ?str:向上查询str。
- 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 [-t TYPE] FILENAME[ ...]|STDIN
- -t:指定显示的类型。
- a:默认。
- c:ASCII。
- d[SIZE]:十进制,每个数占用SIZE字节。
- f[SIZE]:浮点数,每个数占用SIZE字节。
- o[SIZE]:八进制,每个数占用SIZE字节。
- x[SIZE]:十六进制,每个数占用SIZE字节。
输出的第一列表示该行的第一个字节是该文件的第几个字节(八进制,以0开始)。
tac
反向显示全部内容。
tac FILENAME[ ...]|STDIN
tail
显示后几行。
tail [-f -n COUNT] FILENAME[ ...]|STDIN
- -f:持续检测文件。
- -n:显示后COUNT行。若COUNT以+开头,则从第COUNT(含)行开始。
文本处理
awk
以行为单位操作文本列。
awk [-F 'REGEXP'] '[CONDITION] {ACTION} [[CONDITION] {ACTION} ...]' FILENAME[ ...]|STDIN
- -F 'REGEXP':指定分隔符,以正则表达式匹配,支持扩展正则表达式。默认为任意个(大于等于1个)Space或Tab。
CONDITION和ACTION中的字符串都需要用""括起。
特殊的CONDITION:BEGIN、END。
ACTION有多个命令,可使用;或Enter键隔开。ACTION可使用的函数:
- print:
print ARG[ ...]
,没有空格分隔,自动换行。 - printf:
printf "FORMAT"[, ARG, ARG ...]
,不自动换行。FORMAT的变量格式如下:- %[N]s:占位为N的字符串。
- %[N]d:占位为N的整数。
- %[N][.M]f:占位为N小数位为M的浮点数。
自定义变量不需要加$。内置变量如下:
- $N:第N列的内容,从1开始。$0表示整行。
- NF:列数量。
- NR:目前的行号,从1开始。
- FS:目前的分隔符。
逻辑运算符:<、>、<=、>=、==、!=。赋值运算符:=。
示例:
awk -F ':' 'BEGIN {total = 0} NR <= 5 {total = total + NF; printf "%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只能是一个字符。
- -f RANGES:取出列的范围。
RANGES可取以下形式:
- N[,...]:第N列的列表。
- N-M:第N列(含)至第M列(含),如缺省N则从第一列开始,如缺省M则至最后一列。
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 [-acEinv -A N -B N] 'REGEXP' FILENAME[ ...]|STDIN
- -a:将二进制文件以文本文件方式查找。
- -A N:同时显示匹配行的后N行。
- -B N:同时显示匹配行的前N行。
- -c:显示匹配的行数。
- -E:使用扩展正则表达式。
- -i:忽略大小写。
- -n:同时显示行号。
- -v:反向显示不匹配的行。
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。
- ():分组。
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。N1和N2都缺省表示所有行。如有多个文件,则将所有文件组合在一起再计算行号。
操作的含义:
- a:每行后新增。
- c:整体替换行(注意,不是每行替换一次)。
- d:删除行。
- i:每行前插入。
- p:显示行,通常和-n一起使用。
- s:替换内容。
CONTENT可使用\来输入多行。
sort
排序文本行。
sort [-bfnru -k n -t DELIMITER] FILENAME[ ...]|STDIN
- -b:忽略最前面的空格。
- -f:忽略大小写。
- -n:以数值进行排序。
- -k n:指定排序的列,从1开始,列以-t指定的分隔符分隔。
- -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:忽略大小写。
wc
文本内容统计。
wc [-lmw] FILENAME[ ...]|STDIN
- -l:显示行数。
- -m:显示字符数。
- -w:显示英文单词数。
压缩与打包
tar
tar -c [-j|-z -v] -f FILENAME NAME[ ...]
tar -t [-j|-z -v] -f FILENAME
tar -x [-j|-z -v] -f FILENAME [-C DIR]
- -c:打包文件。
- -C DIR:解包至指定目录,目录必须存在。默认为当前目录。
- -f FILENAME:指定打包/解包的包名。
- -j:通过bzip2压缩/解压缩,文件名最好为*.tar.bz2。
- -t:查看包中文件。
- -v:显示正在压缩/解压缩的文件名。
- -x:解包文件。
- -z:通过gzip压缩/解压缩,文件名最好为*.tar.gz。
使用-c打包,包中文件包含NAME前缀。
用户和用户组
adduser
增加用户。
RHEL系列为useradd
的软连接,参看其使用。Debian系列此命令较useradd
更易用。
adduser USERNAME
groupadd
增加用户组。
groupadd [-r] GROUPNAME
- -r:增加系统用户组。
groupmod
修改用户组。
groupmod [-n NEWGROUPNAME] GROUPNAME
- -n NEWGROUPNAME:修改用户组名。
groupdel
删除用户组。
groupdel GROUPNAME
groups
查看所属用户组。
groups
第一个为有效用户组。
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 [USERNAME]
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
增加用户。
Debian系列建议使用adduser
。
useradd [-DmMr -g GROUPNAME -G GROUPNAME[,...]] USERNAME
- -D:显示增加用户的默认值。
- -g GROUPNAME:指定初始用户组名。
- -G GROUPNAME[,...]:指定次要用户组名。
- -m:创建主目录(普通用户默认值)。
- -M:不创建主目录(系统用户默认值)。
- -r:增加为系统用户。
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: "可免去输入密码。
- 命令前加"!"表示不可执行。
- 多条命令使用", "分隔。
- 可使用""来输入多行。
w
显示当前登录的用户及其正在执行的命令。
w
who
显示当前登录的用户。
who
工作和进程
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:仅列出后台暂停的工作。
带+代表最近被放至后台的工作,带-代表最后第二个被放至后台的工作。
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为信号值或信号名。
nohup
使工作与终端机无关,能脱机运行。
nohup COMMAND
nohup不支持shell内置的命令。通常与&配合使用。
pidof
根据进程名查找进程ID。
pidof [-s] COMMAND
- -s:只列出一个进程ID而不是所有进程ID。
ps
查看进程状态。
ps
ps -l
ps -Al
ps aux
ps afjx
- a:列出所有与控制台有关的进程(所有用户,所有控制台)。
- f:显示进程树。
- j:以工作控制格式显示,不能与u一起使用。
- u:以用户信息格式显示,不能与j一起使用。
- x:列出当前用户的所有进程,如果和a一起则列出系统所有进程。
- -A:列出系统所有进程,同-e。
- -e:列出系统所有进程,同-A。
- -l:以较长的格式显示,不能与j、u一起使用。
不加任何选项则只列出当前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相同。
- SZ:使用的内存页数量,SZ*内存页大小(以K为单位)=VSZ。
- TIME:使用的CPU累积时间。
- TPGID:进程关联的TTY的进程组ID,-1表示不关联TTY。
- TTY:终端机,如果有远程登录则为动态终端接口(pts/n)。
- UID:用户ID。
- USER:进程的用户,与UID对应。
- VSZ:使用的虚拟内存大小,单位为K。
- WCHAN:进程睡眠时执行至的函数名,如果运行中则显示-。
pstree
查看进程树。
pstree [-ApuU]
- -A:进程树以ASCII字符连接。
- -p:同时列出进程ID。
- -u:同时列出进程用户名。
- -U:进程树以UTF-8字符连接。
top
动态查看进程状态。
top [-b -d SECONDS -n TIMES -p PID[,...]]
- -b:以批次方式执行,会将各次的结果顺序依次显示。
- -d SECONDS:刷新的时间间隔,单位为秒,缺省为5秒。
- -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:将CPU负载在整体负载和各逻辑处理器负载间切换。
- k:向进程发送信号。
- M:以内存使用率(%MEM)排序。
- N:以PID(PID)排序。
- P:以CPU使用率(%CPU)排序,默认排序字段。
- T:以使用的CPU累积时间(TIME+)排序。
- q:离开top。
服务
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 [--failed]
systemctl enable UNIT
systemctl daemon-reload
systemctl disable UNIT
systemctl is-enabled UNIT
systemctl list-unit-files
systemctl list-units
systemctl mask UNIT
systemctl reload UNIT
systemctl restart UNIT
systemctl start UNIT
systemctl status [UNIT]
systemctl stop UNIT
systemctl umask UNIT
- --failed:查看执行失败的单元。如不指定该选项,则查看所有激活的单元,即等效于
systemctl list-units
。
子命令:
- enable:设置单元开机自动启动。
- daemon-reload:重新加载systemd。扫描新的或有变动的单元配置。
- disable:取消单元开机自动启动。
- is-enabled:查看单元是否未开机自动启动。
- list-unit-files:查看所有已安装单元。
- list-units:查看所有激活的单元。
- mask:禁用单元。禁用后,也不能间接启动。
- reload:重新加载单元配置。
- restart:重启单元。
- start:启动单元。
- status:查看单元状态。如不指定单元,则以树形查看单元。
- stop:停止单元。
- umask:取消禁用单元。
系统资源
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行表示不计算缓存,程序已用和可用的内存。
fuser
查找打开指定文件的进程。
fuser [-muv] FILENAME
- -m:如果是目录,则查找所有在该目录下使用文件的进程。
- -u:同时列出进程的所有者。
- -v:列出详细信息。
ACCESS字段的含义:
- c:进程在当前目录下(非子目录)。
- e:可被触发为执行状态。
- f:是一个被打开的文件。
- F:文件被打开了,不过在等待回应中。
- m:可能为动态库。
- r:代表顶层目录。
getcap
查看可执行文件获取的内核权限。
getcap FILENAME
lsof
列出被进程打开的文件。
lsof [-a -u USERNAME +d DIR]
- -a:列出多个选项同时成立的结果。
- -u USERNAME:列出该用户的进程打开的文件。
- +d DIR:列出指定目录下打开的文件。
setcap
设置可执行文件的内核权限。
setcap CAPABILITY FILENAME
setcap -r FILENAME
- -r:清除权限。
CAPABILITY为cap_net_bind_service=+eip
可让程序监听小于1024的端口。
ulimit
显示或设置当前shell的系统资源限制。
ulimit -a
ulimit [-HS -cdfltu [N]]
- -a:列出当前的所有限制。
- -c [N]:显示或设置内核文件大小限制。
- -d [N]:显示或设置进程段内存大小限制。
- -f [N]:显示或设置单个文件大小限制,单位为K。
- -H:严格的限制。
- -l [N]:显示或设置可用于锁定的内存大小限制。
- -S:宽松的限制。
- -t [N]:显示或设置CPU时间限制,单位为秒。
- -u [N]:显示或设置进程数量限制。
uptime
查看系统启动时间和工作负载。
uptime
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 PARTITION
- -a:将memory的buff、cache替换为inact、active。
- -d:列出磁盘的读写情况。
- -f:列出开机后fork的进程数。
- -s:列出开机后导致内存变化的情况。
- -S UNIT:指定显示的单位,可为k、K、m、M。
- -p PARTITION:列出分区的读写情况。
缺省参数时的输出字段说明:
- 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含义相同。
网络
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
ip
网络配置。RHEL系列使用其替代ifconfig
。
ip addr
- addr:查看网卡地址信息。
netstat
查看网络状态。
netstat [-alnptu]
- -a:将所有连接、监听、套接字状态都列出。
- -l:列出监听状态。
- -n:列出端口号,不列出服务名。
- -p:列出进程信息。
- -t:列出TCP连接状态,与-l配合可列出TCP监听状态。
- -u:列出UDP连接状态,与-l配合可列出UDP监听状态。
ping
发送ICMP包。会不断重复发送。
ping HOST
ss
查看网络状态。RHEL系列使用其替代netstat
。
ss [-alnptu]
- -a:将所有连接、监听、套接字状态都列出。
- -l:列出监听状态。
- -n:列出端口号,不列出服务名。
- -p:列出进程信息。
- -t:列出TCP连接状态,与-l配合可列出TCP监听状态。
- -u:列出UDP连接状态,与-l配合可列出UDP监听状态。
系统信息
uname
查看内核信息。
uname [-a]
- -a:列出所有信息。
dmesg
查看开机后产生的内核信息。
dmesg
软件安装
apt
查询、管理APT包。
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包。
子命令:
- 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 clean
apt-get install APTPACKAGE
apt-get purge APTPACKAGE
apt-get remove APTPACKAGE [--purge]
apt-get update
apt-get upgrade
- --purge:如使用该参数,则同时删除配置文件,否则不删除。
子命令:
- autoclean:清理apt缓存。
- 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包,保留配置文件。
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:安装数字证书。
yum
使用YUM管理包。
yum info YUMPACKAGE
yum install YUMPACKAGE
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:从服务器升级软件。
程序和库
nm
查看符号表。
nm FILENAME
远程连接
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端口。
变量
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
- -p PROMPT:指定提示符。
- -t TIMEOUT:指定等待超时,以秒为单位。
set
查看所有变量,包括环境变量和自定义变量。
set
typeset
设置/查看环境变量。用法与declare
相同。
unset
取消变量设置,可为环境变量或自定义变量。
unset VARIABLE
命令执行
alias
设置命令别名。alias实际上是shell内置的命令。
alias NEW=OLD
echo
打印回显。
echo CONTENT [ ...]
history
查看历史执行命令。
history [N]
histroy -c
history -r FILENAME
history -aw [FILENAME]
- -a:将当前shell新增的历史命令追加入文件中。如没指定FILENAME,则默认为
~/.bash_history
。 - -c:将当前shell所有历史命令清除。
- -r:将FILENAME中的历史命令读到当前shell中。
- -w:将当前shell的历史命令写入文件中。如没指定FILENAME,则默认为
~/.bash_history
。
如不使用参数,则列出所有历史命令。可指定列出最近N条命令。
可通过如下方式执行历史命令:
- !N:执行第N条命令。
- !COMMAND:执行最近的以COMMAND开头的命令。
- !!:执行上一条命令。
seq
返回数值序列。
seq [FIRST [INCREMENT]] LAST
FIRST和INCREMENT默认为1。返回序列的范围为[FIRST, LAST]。
sh
在子进程中执行脚本。
sh [-nvx] SCRIPTFILENAME
- -n:不执行,只检查语法。
- -v:执行时,先打印脚本内容。
- -x:执行,并打印每一步使用的脚本。
source
在父进程中执行脚本。
source SCRIPTFILENAME
等同于. SCRIPTFILENAME
。
unalias
取消命令别名。
unalias NAME
xargs
生成命令的参数。
xargs COMMAND STDIN
参数以空白符分隔。