Linux学习笔记:常用命令

目录

  • 磁盘与分区
    • 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 [-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

参数以空白符分隔。

转载于:https://www.cnblogs.com/garvenc/p/linux_learning_command.html

你可能感兴趣的:(操作系统,shell,awk)