Linux 常用命令
man & info
用于查看帮助手册。对于系统的学习和随时查阅 Linux 命令非常重要。
man
其语法格式如下,参数中的 PAGE
是一个程序、工具或者函数的名称。其具体类型由 SECTION
指定,详见注释 1。
man [OPTIONS] [[SECTION] PAGE ...]
注解:
SECTION
如未指定则只显示最先发现的页。支持的类型有以下几种,指定页的方式也可以为
PAGE.SECTIION
,比如man printf.3
。
- 可执行程序或
shell
命令- 系统调用(内核函数)
- 库函数
- 特殊文件(常在目录
/dev
下)- 文件格式(比如
/etc/passwd
)- 游戏
- 混杂的
- 系统管理员命令
- 内核常规任务(非标准)
OPTIONS
经常会用到
-a
选项,表示显示匹配PAGE
的所有的页。快捷键
man
使用less
阅读器,详看 less。此处列出几个常用快捷键:
快捷键 说明 j | k ,f | b ,d | u 滚动页面:下 | 上一行,下 | 上一页, 下 | 上半页 [/ | ?]PATTERN,n | N 正则搜索:向后搜索 | 向前搜索,下一个 | 上一个
info
其语法格式如下,参数中的 MANUAL
通常是 GNU 工具名称。
info [MANUAL]
注解:
快捷键
快捷键 说明 <SPC> | <DEL> 滚动页面:下一页 | 上一页 n | p | u | l 节点操作:下一个 | 上一个 | 上一级 | 历史节点 [/ | ?]PATTERN,} | { 正则搜索:向后搜索 | 向前搜索,下一个 | 上一个 i NAME 索引搜索:搜索索引 m NAME | [0-9] | <TAB> 交叉引用:名称检索 | 序号检索 | 下一个
echo
输出一行文本。其语法格式如下:
echo [OPTIONS] [STRING...]
示例:
#输出相同,但是第二行由 shell 对 \n 进行转义 echo -e 'a\nb' echo -E $'a\nb'
OPTIONS
选项 | 说明 |
---|---|
-n | 不自动添加换行符 |
-e | 使能对转义字符的解析,详见注解 1 |
-E | 禁用对转义字符的解析(默认) |
注解:
-e
支持
C-style
转义,如\n
表示换行、\r
表示回车等。需要注意从 shell 执行时,可能会被 shell 提前转义。
find
在目录下递归的查找文件,其语法格式如下:
find [PATHNAME] [OPTIONS] [ACTIONS]
示例:
#以当前目录每一个文件为参数,执行 file 命令 find . -type f -exec file '{}' \; #查找家目录下,所有 24 小时内修改的文件 find $HOME -mtime 0 #查找文件拥有者或者文件组成员可写的文件 find . -perm /u+w,g+w #查找多种文件类型 find /tmp -type f,d,l
PATHNAME
查找的目录路径。如果省略,则表示当前目录。
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
-name PATTERN | 文件名(符合 shell 匹配语法) |
-regex PATTERN | 文件全名(包含文件路径,符合正则表达式) |
-perm [- | /]MODE | 文件权限,详看注解 1 |
-user UNAME | 文件属主(支持 UID ) |
-type [b | c | d | p | f | l | s] | 文件类型,详看注解 2 |
-size [- | +]N[c | w | b | k | M | G] | 文件大小,详看注解 3 |
-[c | m | a]time [- | +]N | 文件时间,详看注解 4 |
-follow | 跟踪符号链接 |
-cpio | 使用cpio命令进行打包 |
-maxdepth LEVELS | 最大递归深度 |
EXPR -[a | o] EXPR | 逻辑与、或,详看注解 5 |
! EXPR | 逻辑非 |
注解:
-perm [- | /]MODE
文件权限
MODE
前缀[- | /]
或不加前缀,分别表示文件包含所有指定权限、包含任意指定权限或者正好等于指定权限。-type [b | c | d | p | f | l | s]
文件类型
[b | c | d | p | f | l | s]
依次代表块设备、字符设备、目录、管道、常规文件、符号链接、socket文件。-size [- | +]N[c | w | b | k | M | G]
数字
N
的前缀[- | +]
或者不加前缀,分别表示小于、大于或者等于指定大小。[c | w | b | k | M | G]
依次代表字节、字(2个字节)、块(512个字节)等。-[c | m | a]time [- | +]N
[c | m | a]
分别表示文件的创建时间、修改时间和访问时间。数字前缀[- | +]
或者不加前缀,分别表示 N 天以内、N 天以前或者正好 N 天。-[a | o]
此选项用于连接两个表达式
EXPR
,EXPR
由OPTIONS
和ACTIONS
等组合构成。[a | o]
分别表示逻辑与
和逻辑或
。
ACTIONS
对查找到的文件执行的动作。如果省略,则默认为 -print
,其他常用动作如下:
选项 | 说明 |
---|---|
-delete | 删除 |
-exec COMMAND ; | 执行命令,详看注解 1 |
-execdir COMMAND ; | 在匹配文件所在的目录,执行命令 |
-print0 | 输出文件全名,以 null 结尾 |
-printf FORMAT | 详看帮助手册 |
-ok COMMAND ; | 和 -exec 相似,但是需要用户确认再执行 |
注解:
-exec COMMAND ;
直到
;
之前的参数都会被当做命令行执行,字符串{}
被替换成当前查找到的文件全名(包含路径)。为了防止被shell
扩展,所有特殊字符都应该添加\
或者'
转义,尤其注意结尾标志;
。比如显示查找到的文件:find -exec ls '{}' \;
。
xargs
从标准输入构建和执行命令行。具体就是从标准输入读取文本,以空白符分隔成多个参数,每次选择若干参数跟随在 INITIAL-ARGUMENTS
后面,形成命令 COMMAND
的参数,执行直到参数被用完。其语法格式如下:
xargs [OPTIONS] [COMMAND [INITIAL-ARGUMENTS]]
示例:
#删除 /tmp 目录下所有名为 core 的文件 find /tmp -name core -type f -print | xargs /bin/rm -f #以长格式显示 /boot 目录下所有以 .cfg 结尾的文件 find /boot -name "*.cfg" | xargs ls -l
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
-d DELIM | 分隔符,详看注解 1 |
-0,--null | 和 -d '\0' 一样 |
-n MAX-ARGS | 每次使用的参数个数 |
-p | 每次执行都提醒是否运行 |
--show-limits | 显示系统命令行长度限制 |
注解:
- 默认分隔符为空白符,包括换行符、空格、制表符等。
DELIM
为任意单字符。
grep
输出匹配正则表达式的行。具体就是按行读取文本并按指定模式进行匹配,将匹配的文本按给定的格式输出。其语法格式如下:
grep [OPTIONS] PATTERNS [FILE...]
示例:
#查找当前目录下所有文件,输出所有空白行 grep -rn '^$' #查找当前目录下的所有 .h 文件,输出所有以 #include 开头的行 grep -n -- '^#include' *.h /dev/null
FILE
查找的文件。-
表示从标准输入读取。如果未指定 FILE
,则根据是否递归(-[r | R]
),来从当前工作目录或者标准输入读取。
PATTERNS
PATTERNS
为一个或多个以换行符分隔的正则表达式。为防止 shell 扩展,应该被 "
引用表示。详看正则表达式。
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
-e PATTERNS | 指定正则表达式,详看注解 1 |
-E | 将 PATTERNS 解释为扩展的正则表达式 |
-i | 忽略大小写 |
-v | 反选 |
-x | 整行匹配 |
-c | 只显示每个文件匹配的行数 |
-o | 只显示匹配行中的匹配部分 |
-n | 输出行号 |
--exclude[-dir]=GLOB | 排除指定的文件或目录(符合 shell 匹配语法) |
-[r | R] | 递归查找所有子目录(R 表示跟随符号连接) |
注解:
- -e PATTERNS
用于指定正则表达式。可多次指定,表示匹配任意表达式的行(逻辑或)。此选项可以防止正则表达式以
-
开头。
sed
过滤和转化文本的流编辑器。具体就是按行从文件或者标准输入读取文本,然后对匹配的文本进行处理后,输出到终端上。其语法格式如下:
sed [OPTIONS] SCRIPT [FILE...]
sed [OPTIONS] -f SCRIPT-FILE [FILE...] #从指定文件 SCRIPT-FILE 中获取执行命令
示例:
FILE
输入文件,如果省略则表示从标准输入获取文本。
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
-n | 禁止自动打印模式空间的行,详看注解 1 |
-e SCRIPT | 指定脚本,详看注解 2 |
-i[SUFFIX] | 原地修改,详看注解 3 |
--follow-symlinks | 原地修改时,跟随符号链接 |
-E, -r | 支持扩展正则表达式 |
-s | 分开处理文件(会影响行号等) |
注解:
-n
默认情况下,对模式空间(缓存行)的内容处理完成之后,会自动打印,然后读取下一行进行处理。如果加了此选项,只有脚本中明确指定了
p
才会被打印。-e SCRIPT
可多次使用来指定多个脚本。因为第一个非选项参数会被当做
sed
脚本,剩余参数都会被当做文件名。-i[SUFFIX]
直接修改原文件,添加
SUFFIX
会自动生成备份文件FILE.SUFFIX
。
SCRIPT
此字段表示 sed 执行的脚本命令。为了防止被 shell 转义,往往用 '
进行引用。形式如同 [ADDRESS][COMMAND]
,其中 ADDRESS
表示地址范围,COMMAND
表示命令。
ADDRESS
地址可以为行号或者正则表达式。如果省略则表示全部文本。以下列出常用的几种定址方法。
定址方式 | 说明 |
---|---|
ADDR | 指定行号,详看注解 1 |
ADDR1,ADDR2 | 两个行号之间 |
FIRST~STEP | 详看注解 2 |
/REGEXP/ | 符合正则表达式的行 |
ADDR,+N | 行 ADDR 和之后的 N 行 |
注解:
ADDR
表示匹配单个行号。行号从 1 开始,
$
表示尾行。FIRST~STEP
表示从行
FIRST
开始,每第STEP
行。比如sed -n 1~2p
表示打印奇数行。
COMMAND
命令表示对匹配的行要执行的命令,如果省略则默认为 p
,即打印。以下列出几个常用命令。
命令 | 说明 |
---|---|
= | 追加行号 |
[a | i] \TEXT | 追加或插入文本行,详看注解 1 |
r FILE | 追加文件内容 |
c \TEXT | 替换文本行 |
d | 删除 |
p | 打印 |
w FILE | 写入文件 |
{} | 命令组,详看注解 2 |
s/REGEXP/REPLACEMENT/[FLAGS] | 详看注解 3 |
注解:
[a | i] \TEXT
在匹配的行追加或者插入文本行
TEXT
。插入表示添加为在匹配行的上一行,追加表示添加为匹配行的下一行。{}
在
{}
中的多条命令使用一个地址定位。比如seq 3 | sed -n '2{s/2/X/ ; p}'
。s/REGEXP/REPLACEMENT/FLAGS
表示将匹配正则表达式
REGEXP
的部分替换成REPLACEMENT
。
&
表示匹配的行,\N
表示正则表达式的第N
个子匹配。
FLAFGS
支持以下常用选项:
选项 说明 g 替换所有匹配 p 输出替换后的行 w FILE 输出替换后的行到文件 FILE i 忽略大小写
diff
逐行的对比文件。其语法格式如下:
diff [OPTIONS] [FILES]
示例:
#对比文件 file1 和文件 file2 的差异 diff -Nau file1 file2 #对比目录 dir1 和 dir2 的差异 diff -Naur dir1 dir2
DESCRIPTION
逐行的对比文件,FILES 的格式可以为 "FILE1 FILE2" 或 "DIR1 DIR2" 或 "DIR FILE..." 或 "FILE... DIR"。如果结合选项 --from-file
或 --to-file
,则 FILES 的格式无限制。如果一个 FILE 是 -
,表示读取标准输入。返回 0
表示相同,1
表示不同,2
表示错误。
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
--normal | -c | -u | -e | -y | diff 格式,详看注解 1 |
-N | 对待缺失文件为空白文件,详看注解 2 |
-a | 将所有文件当做文本文件,详看注解 3 |
-b | 忽略空格 (space ) 差异 |
-B | 忽略插入或删除空白行 |
-w | 忽略空白字符差异(所有不可见字符) |
-x PATTERN | 忽略符合 PATTERN 的文件或者子目录 |
-i | 忽略大小写 |
-r | 递归的比较子目录。详看注解 4 |
-q | 只显示文件是否不同,不显示具体差异 |
-p | 显示差异文本所在的 c 函数 |
注解:
--normal | -c | -u | -e | -y
文件差异的输出格式。分别表示正常、上下文、统一、ed、两列显示的格式。不指定时默认为
--noremal
,其中-u
较为常用。-N
当对比两个目录时,
-N
选项将缺失文件当做空白文件,可以使diff
输出具体文件差异。-a
diff
默认只能逐行对比文本文件的差异。-a
选项可以把二进制当做文本文件进行处理,并输出具体差异。-r
diff
对比两个目录时,默认只对比顶层文件的区别。指定-r
选项将递归的对比所有子目录。
patch
将一个补丁文件应用到原文件上。补丁文件通常由 diff 命令生成。其基本语法格式如下:
patch [OPTIONS] [ORIGINALFILE [PATCHFILE]]
示例:
#剔除 1 层路径,应用 a.diff 补丁 patch -p1 < a.diff
PATCHFILE
当省略 PATCHFILE
时,默认从标准输入读取补丁文件。patch
可以自动确定补丁文件的格式。如果只应用到单个文件上,则可以通过 ORIGINALFILE
来进行指定。否则省略 ORIGINALFILE
时,由以下规则(暂不完善,详看手册)进行确定应用补丁的原文件:
- 如果补丁文件是上下文格式,则取出旧文件名和新文件名。根据选项
-pNUM
剔除部分文件路径,和当前工作目录合并生成新的文件路径。 - 如果补丁文件包含
index:
行,并且新旧文件都不存在,或者patch
符合POSIX
标准时,取index:
行所指定的文件名。 - 按
old > new > index
的优先级逐个匹配上述规则确定的文件名,选定最先匹配的文件。如果都不存在,则新建文件。
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
-p[NUM] | 剔除补丁文件中文件路径的层数,详见注解 1 |
-b | 自动创建备份文件,备份文件名由 -V 决定 |
注解:
-p[NUM]
数字
NUM
表示剔除的文件路径的层数,等于0
时表示不剔除。当省略NUM
时,表示只保留文件名。
adduser
添加一个用户或者群组。它是底层命令 useradd、groupadd、usermod 的友好前端工具,其基于命令行选项和默认配置文件 /etc/adduser.conf
,语法格式如下:
adduser [OPTIONS] USER #添加新用户或群组
adduser USER GROUP #向群组添加一个已存在用户
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
--group | 添加一个群组,相当于命令 addgroup 。 |
--home DIR | 指定家目录位置。 |
--shell SHELL | 指定登录 shell 。 |
--no-create-home | 不创建家目录。 |
--system | 创建系统用户或群组。 |
deluser
删除一个用户或者群组。它是底层命令 userdel、groupdel 的友好前端工具,其基于命令行选项和默认配置文件 /etc/deluser.conf
,语法格式如下:
deluser [OPTIONS] USER #删除用户或群组
deluser USER GROUP #从群组里移除一个用户
OPTIONS
常用选项如下:
选项 | 说明 |
---|---|
--group | 删除一个群组,相当于命令 delgroup 。 |
--system | 删除系统用户或群组。 |
--backup | 备份用户家目录到根目录。 |
--remove-home | 删除用户家目录,默认不删除。 |
--remove-all-files | 删除所有此用户的文件,包括家目录。 |
ps
报告当前进程信息。语法格式如下:
ps [OPTIONS]
示例:
#显示所有进程信息 ps aux ps -ef
描述
ps 用于显示当前进程信息。如果需要持续更新的显示进程信息,可使用 top 命令作为代替。ps 支持三种风格的选项:
- UNIX options : 选项必须跟在一个
-
之后,支持合并多个选项(无需分开)。 - BSD options : 选项之前不可以有
-
,支持合并多个选项。 - GNU long options :选项必须跟在两个
-
之后。
几种风格的选项可以自由混合使用,但是可能会造成冲突。出于本人习惯,本文仅列出第 UNIX 和 GUN long 风格的选项。
默认情况下,ps 显示所有与当前 ps 进程具有相同具有相同有效用户号(euid)和终端(tty)的进程。显示进程号(pid),关联的终端(tty),累计使用 CPU 的时间(time)以及执行的命令。
选项
其选项可用于选择进程、控制输出的格式、显示线程以及其他杂项。
选择进程
选项 | 说明 |
---|---|
-A, -e | 选择所有进程。 |
-a | 选择除了会话创建者(session leaders)和未关联终端的所有进程。 |
-d | 选择除了会话创建者的所有进程。 |
-N, --deselect | 反向选择。 |
-c CMDLIST | 以命令名进行选择。可以指定多个命令,以空格或 , 分隔,下同。 |
-G, --Group GRPLIST | 真实组号(RGID)或组名。 |
-g, --group GRPLIST | 选择会话或有效组名。当 GRPLIST 完全是一个数字时,将被当做一个会话。 |
-p, --pid PIDLIST | 进程号。 |
--ppid PIDLIST | 父进程号。 |
-s, --sid SESSLIST | 会话号。 |
-t, --tty TTYLIST | 终端,选择与指定终端关联的进程。支持几种格式:/dev/ttS1 、ttyS1 、S1 ,一个 - 表示选择不关联任何终端。 |
-U, --User USERLIST | 真实用户号(RUID)或用户名。 |
-u, --user USERLIST | 有效用户号(EUID)或用户名。 |
控制输出格式
选项 | 说明 |
---|---|
-c | 为选项 -l 显示不同的调度器信息。 |
-M, -Z, --context | 显示 SELinux 安全上下文。 |
-f | 全格式。 |
-F | 额外全格式。 |
-j | 工作格式。 |
-l | 长格式,选项 -y 结合此选项通常很有用。 |
-O FORMAT | 和选项 -o 选项类似,但是预加载一些默认列。 |
-o, --format FORMAT | 用户定制格式,详看注解 1。 |
-y | 不显示标志,用 rss 代替 addr。 |
注解:
-o, --format FORMAT
参数
FORMAT
是一个由空格或,
分隔的列表。列表指定输出哪几列信息。以下列出几个常用关键字,详看官方文档。
关键字 说明 %cpu, pcpu cpu 利用率。 %mem, pmem 内存利用率,进程常驻内存的空间和物理内存的比率。 args, cmd, command 命令及其所有参数。 blocked 阻塞信号掩码。 bsdstart 命令开始时间。 bsdtime 累计消耗 CPU 时间,包含 user 和 system。 cls, policy 进程调度的类型。 comm 命令名称(仅执行程序名)。 eip 指令指针。 esp 堆栈指针。 etime 从进程开始到现在消耗的时间。 euid, uid 有效用户号。 euser, uname, user 有效用户名。 ignored, sig_ignore, sigignore 忽略信号掩码。 rss, rsz, rssize 常驻内存大小,进程占用的非交换物理内存的大小(KB)。 sid, sess, session 会话号或相当于会话创建者的进程号。 sz 进程的核心镜像占用的物理页大小。包含 text、data 和 stack 空间,目前不包含设备映射空间。 tt, tty, tname 控制终端。 vsz, vsize 进程占用的虚拟内存的大小(KB),目前不包含设备映射空间。
显示线程
选项 | 说明 |
---|---|
-L | 显示线程,尽可能显示 LWP 和 NLWP 列。 |
-m | 在进程后显示线程。 |
-T | 显示线程,尽可能显示 SPID 列。 |
其他
选项 | 说明 |
---|---|
--help | 打印帮助信息。 |
--info | 打印调试信息。 |
-V, --version | 打印版本信息。 |
pstree
显示进程树。语法格式如下:
pstree [OPTIONS] [PID] [USER]
描述
pstree 以树状显示运行的进程。此树以 PID
为根,如果省略 PID
,则以 1
号进程为根。如果指定用户 USER,则显示所有以用户拥有的进程为根的子树。
pstree 默认会压缩相同的分支,即将它们放在一个方括号中,加上表示重复数量的前缀,比如 init---4*[getty]
。线程还会在名字外加上大括号,比如 icecast2---13*[{icecast2}]
。
选项
选项 | 说明 |
---|---|
-a, --arguments | 显示命令行参数。暗含选项 --compact 。 |
-A, --ascii | 使用 ASCII 字符绘制树。 |
-c, --compact | 禁用压缩相同子树,默认情况相同的子树会压缩显示。 |
-G, --vt100 | 使用 VT100 格式绘制字符。 |
-h, --highlight | 高亮当前进程及其祖先。 |
-H, --highlight-pid PID | 高亮指定进程及其祖先。 |
-g, --show-pgids | 显示进程组号(PGID)。 |
-l, --long | 显示长行。默认超出一定长度的行会被截断。 |
-n, --numeric-sort | 使具有相同祖先的进程以进程号排序,默认为命令名。 |
-N, --ns-sort NS | 为指定类型的每个命名空间显示单独的子树。类型有:ipc、mnt、net、pid、user、uts。 |
-p, --show-pids | 显示进程号(PID)。暗含选项 --compact 。 |
-s, --show-parents | 显示指定进程的父进程。 |
-S, --ns-changes | 显示命名空间转变。 |
-u, --uid-changes | 显示用户号转变。当进程的用户号和父进程不同时,新用户号显示在进程的后面。 |
-U, --unicode | 使用 UTF-8 (Unicode) 格式绘制字符。 |
-V, --version | 显示版本信息。 |
-Z, --security-context | 显示 SELinux 安全上下文。 |