Linux 常用命令

man & info

用于查看帮助手册。对于系统的学习和随时查阅 Linux 命令非常重要。

man

其语法格式如下,参数中的 PAGE 是一个程序、工具或者函数的名称。其具体类型由 SECTION 指定,详见注释 1。

man [OPTIONS] [[SECTION] PAGE ...]

注解:

  1. SECTION

    如未指定则只显示最先发现的页。支持的类型有以下几种,指定页的方式也可以为 PAGE.SECTIION,比如 man printf.3

    1. 可执行程序或 shell 命令
    2. 系统调用(内核函数)
    3. 库函数
    4. 特殊文件(常在目录 /dev 下)
    5. 文件格式(比如 /etc/passwd
    6. 游戏
    7. 混杂的
    8. 系统管理员命令
    9. 内核常规任务(非标准)
  2. OPTIONS

    经常会用到 -a 选项,表示显示匹配 PAGE 的所有的页。

  3. 快捷键

    man 使用 less 阅读器,详看 less。此处列出几个常用快捷键:

    快捷键 说明
    j | k ,f | b ,d | u 滚动页面:下 | 上一行,下 | 上一页, 下 | 上半页
    [/ | ?]PATTERN,n | N 正则搜索:向后搜索 | 向前搜索,下一个 | 上一个

info

其语法格式如下,参数中的 MANUAL 通常是 GNU 工具名称。

info [MANUAL]

注解:

  1. 快捷键

    快捷键 说明
    <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 禁用对转义字符的解析(默认)

注解:

  1. -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 逻辑非

注解:

  1. -perm [- | /]MODE

    文件权限 MODE 前缀 [- | /] 或不加前缀,分别表示文件包含所有指定权限、包含任意指定权限或者正好等于指定权限。

  2. -type [b | c | d | p | f | l | s]

    文件类型 [b | c | d | p | f | l | s] 依次代表块设备、字符设备、目录、管道、常规文件、符号链接、socket文件。

  3. -size [- | +]N[c | w | b | k | M | G]

    数字 N 的前缀 [- | +] 或者不加前缀,分别表示小于、大于或者等于指定大小。[c | w | b | k | M | G] 依次代表字节、字(2个字节)、块(512个字节)等。

  4. -[c | m | a]time [- | +]N

    [c | m | a] 分别表示文件的创建时间、修改时间和访问时间。数字前缀[- | +] 或者不加前缀,分别表示 N 天以内、N 天以前或者正好 N 天。

  5. -[a | o]

    此选项用于连接两个表达式 EXPREXPROPTIONSACTIONS 等组合构成。 [a | o] 分别表示 逻辑与逻辑或

ACTIONS

对查找到的文件执行的动作。如果省略,则默认为 -print,其他常用动作如下:

选项 说明
-delete 删除
-exec COMMAND ; 执行命令,详看注解 1
-execdir COMMAND ; 在匹配文件所在的目录,执行命令
-print0 输出文件全名,以 null 结尾
-printf FORMAT 详看帮助手册
-ok COMMAND ; -exec 相似,但是需要用户确认再执行

注解:

  1. -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 显示系统命令行长度限制

注解:

  1. 默认分隔符为空白符,包括换行符、空格、制表符等。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 表示跟随符号连接)

注解:

  1. -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 分开处理文件(会影响行号等)

注解:

  1. -n

    默认情况下,对模式空间(缓存行)的内容处理完成之后,会自动打印,然后读取下一行进行处理。如果加了此选项,只有脚本中明确指定了 p 才会被打印。

  2. -e SCRIPT

    可多次使用来指定多个脚本。因为第一个非选项参数会被当做 sed 脚本,剩余参数都会被当做文件名。

  3. -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 行

注解:

  1. ADDR

    表示匹配单个行号。行号从 1 开始,$ 表示尾行。

  2. 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

注解:

  1. [a | i] \TEXT

    在匹配的行追加或者插入文本行 TEXT。插入表示添加为在匹配行的上一行,追加表示添加为匹配行的下一行。

  2. {}

    {} 中的多条命令使用一个地址定位。比如 seq 3 | sed -n '2{s/2/X/ ; p}'

  3. 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 函数

注解:

  1. --normal | -c | -u | -e | -y

    文件差异的输出格式。分别表示正常、上下文、统一、ed、两列显示的格式。不指定时默认为 --noremal,其中 -u 较为常用。

  2. -N

    当对比两个目录时,-N 选项将缺失文件当做空白文件,可以使 diff 输出具体文件差异。

  3. -a

    diff 默认只能逐行对比文本文件的差异。-a 选项可以把二进制当做文本文件进行处理,并输出具体差异。

  4. -r

    diff 对比两个目录时,默认只对比顶层文件的区别。指定 -r 选项将递归的对比所有子目录。

patch

将一个补丁文件应用到原文件上。补丁文件通常由 diff 命令生成。其基本语法格式如下:

patch [OPTIONS] [ORIGINALFILE [PATCHFILE]]

示例:

#剔除 1 层路径,应用 a.diff 补丁
patch -p1 < a.diff

PATCHFILE

当省略 PATCHFILE 时,默认从标准输入读取补丁文件。patch 可以自动确定补丁文件的格式。如果只应用到单个文件上,则可以通过 ORIGINALFILE 来进行指定。否则省略 ORIGINALFILE 时,由以下规则(暂不完善,详看手册)进行确定应用补丁的原文件:

  1. 如果补丁文件是上下文格式,则取出旧文件名和新文件名。根据选项 -pNUM 剔除部分文件路径,和当前工作目录合并生成新的文件路径。
  2. 如果补丁文件包含 index: 行,并且新旧文件都不存在,或者 patch 符合 POSIX 标准时,取 index: 行所指定的文件名。
  3. old > new > index 的优先级逐个匹配上述规则确定的文件名,选定最先匹配的文件。如果都不存在,则新建文件。

OPTIONS

常用选项如下:

选项 说明
-p[NUM] 剔除补丁文件中文件路径的层数,详见注解 1
-b 自动创建备份文件,备份文件名由 -V 决定

注解:

  1. -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 支持三种风格的选项:

  1. UNIX options : 选项必须跟在一个 - 之后,支持合并多个选项(无需分开)。
  2. BSD options : 选项之前不可以有 -,支持合并多个选项。
  3. 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/ttS1ttyS1S1,一个 - 表示选择不关联任何终端。
-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。

注解:

  1. -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 安全上下文。
posted @ 2021-08-23 16:39  fluidog  阅读(59)  评论(0编辑  收藏  举报