Linux常用命令--上
Linux常用命令--上
Alanwhich命令
which
命令用于标识在终端提示符下键入可执行文件名称或命令时执行的给定可执行文件的位置,该命令在PATH
环境变量中列出的目录中搜索作为参数指定的可执行文件。
语法
1 | which [options] COMMAND |
参数
--version, -[vV]
: 输出版本信息。--help
: 输出帮助信息。--skip-dot
: 跳过PATH
中以.
开头的目录。--skip-tilde
: 跳过PATH
中以~
开头的目录。--show-dot
: 不要在输出中将.
扩展到当前目录。--show-tilde
: 为非root
用户输出HOME
目录的波浪号。--tty-only
: 如果不在tty
上,则停止处理右侧的选项。--all, -a
: 打印PATH
中的所有匹配项,而不仅仅是第一个。--read-alias, -i
: 从标准输入中读取别名列表。--skip-alias
: 忽略选项--read-alias
,不要读标准输入。--read-functions
: 从标准输入读取shell
函数。--skip-functions
: 忽略选项--read-functions
,不要读标准输入。
示例
查看指令bash
的绝对路径。
1 | which bash |
查看多个命令的绝对路径。
1 | which ping touch |
输出所有在环境变量中的匹配项的绝对路径。
1 | which -a python |
whereis命令
whereis
命令用于查找文件,该指令会在特定目录中查找符合条件的文件,该指令只能用于查找二进制文件、源代码文件和man
手册页,一般文件的定位需使用locate
或find
命令。
语法
1 | whereis [options] file |
参数
-b
: 仅搜索二进制文件。-B <dirs>
: 更改或限制whereis
搜索二进制文件的位置。-m
: 仅搜索源。-M <dirs>
: 更改或限制whereis
搜索手册部分的位置。-s
: 仅搜索源。-S <dirs>
: 更改或限制whereis
搜索源的位置。-f
: 不显示文件名前的路径名称。-u
: 搜索不寻常的条目,如果文件没有每种请求类型的一个条目,则该文件被认为是不寻常的,即查找不包含指定类型的文件。-l
: 输出有效的查找路径。
示例
列出whereis
命令搜索的目录,默认情况下whereis
在环境变量中列出的硬编码路径和目录中搜索命令的文件。
1 | whereis -l |
获取有关bash
命令的信息,输出的bash
是要获取其信息的命令,/bin/bash
是二进制文件的路径,/etc/bash.bashrc
源文件以及/usr/share/man/man1/bash.1.gz
手册页,如果要搜索的命令不存在,whereis
将仅打印命令名称。
1 | whereis bash |
为whereis
命令同时查询netcat
与uptime
,输出将包含有关netcat
和uptime
命令的信息。
1 | whereis netcat uptime |
updatedb命令
updatedb
创建或更新locate
命令使用的数据库,如果数据库已经存在,则重用其数据以避免重新读取未更改的目录,updatedb
通常由cron
每天运行以更新默认数据库。
语法
1 | updatedb [OPTION]... |
参数
-f, --add-prunefs FS
: 将空格分隔的列表FS
中的条目添加到PRUNEFS
。-n, --add-prunenames NAMES
: 将空格分隔的列表名称中的条目添加到pruneName
。-e, --add-prunepaths PATHS
: 将以空格分隔的列表PATHS
中的条目添加到PRUNEPATHS
。-U, --database-root PATH
: 仅存储扫描以生成的数据库路径为根的文件系统子树的结果,默认情况下会扫描整个文件系统即/
,locate
输出的条目作为绝对路径名,不包含符号链接,无论PATH
的形式如何。-h, --help
: 显示帮助信息。-o, --output FILE
: 将数据库写入文件,而不是使用默认数据库,数据库默认位置为/var/lib/mlocate/mlocate.db
。--prune-bind-mounts FLAG
: 将PRUNE_BIND_MOUNTS
设置为FLAG
,覆盖配置文件,默认为no
。--prunefs FS
: 将PRUNEFS
设置为FS
,以覆盖配置文件。--prunenames NAMES
: 将PRUNENAMES
设置为NAMES
,以覆盖配置文件。--prunepaths PATHS
: 将PRUNEPATHS
设置为PATHS
,以覆盖配置文件。-l, --require-visibility FLAG
: 将生成的数据库中的”报告之前要求文件可见性”标志设置为FLAG
,默认值为yes
。如果FLAG
为0
或no
,或者数据库文件可被others
读取或不属于slocate
,那么locate
将输出数据库项,运行locate
的用户无法读取所需的目录以找到数据库项所描述的文件。如果FLAG
为1
或yes
,则locate
在将每个条目的父目录报告给调用用户之前,先检查其父目录的权限。为了使文件的存在真正被其他用户隐藏,数据库组设置为slocate
,并且数据库权限禁止用户使用locate set-gid slocate
以外的其他方式读取用户的数据库。注意,仅当数据库由slocate
拥有并且others
不可读时,才检查可见性标志。-v, --verbose
: 将文件的输出路径名输出到标准输出。-V, --version
: 输出版本信息。
示例
更新locate
命令所使用的数据库。
1 | updatedb |
更新locate
命令所使用的数据库,并输出找到的文件。
1 | updatedb -v |
指定更新locate
命令所使用的数据库的目录。
1 | updatedb -U /home |
umask命令
在Linux
和其他类Unix
的操作系统上,将使用一组默认权限创建新文件,具体来说,可以通过应用称为umask
的权限掩码,以特定方式限制新文件的权限,umask
命令指定在建立文件时预设的权限掩码,或者展示当前的权限掩码值。
语法
1 | umask [-S] [mask] |
参数
-S
: 以文字的方式来表示权限掩码。mask
: 果指定了有效的掩码,则将umask
设置为此值,如果未指定掩码,则返回当前的umask
值。
权限
使用ll
命令查看文件与文件夹相关信息,对于其权限信息:
1 | drwxr-xr-x 12 linuxize users 4.0K Apr 8 20:51 dirname |
- 首符号为
-
代表该文件为普通文件,为d
则代表目录。 - 紧接着三个字符
rw-
代表用户u
权限属性。 - 接下来三个字符
r--
代表用户组g
权限属性。 - 最后三个字符
r--
代表其他人o
权限属性。
权限可以使用字符表示,同样也可以使用八进制表示信息:
r
: 读取属性,值为4
。w
: 写入属性,值为2
。x
: 执行属性,值为1
。
关于操作权限的操作符:
+
: 为指定的用户类增加指定的文件权限。-
:为指定的用户类去除指定的文件权限。=
: 为指定的用户类设定指定的文件权限。
工作
本质上,umask
的每个数字都从操作系统的默认值中减去,以获得定义的默认值,这不是真正的减法,从技术上讲是将掩码按位取反,然后使用逻辑AND
操作将此值应用于默认权限,例如umask
值为0022
:
- 在
Linux
系统上,默认的创建文件权限是666
,默认创建文件夹的权限为777
。 - 即文件默认权限
666 - 022 = 644
即现在创建的新文件的权限为644
。 - 创建文件夹则为
777 - 022 = 755
即现在创建的新文件夹的权限为755
。
此外,第一个零是特殊的权限数字,可以忽略,就当前的目的而言,0002
与002
相同。
示例
查看系统当前umask
值。
1 | umask |
以符号表示形式表示当前系统权限掩码。
1 | umask -S |
将系统umask
值设置为022
。
1 | umask 022 |
tr命令
tr
命令用于转换或删除文件中的字符,可以读文件也可以从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
语法
1 | tr [OPTION]... SET1 [SET2] |
参数
-c, -C, --complement
: 使用SET1
的补码。-d, --delete
: 删除SET1
中的字符,不翻译。-s, --squeeze-repeats
: 用一次出现的字符替换SET1
中列出的重复字符的每个输入序列。-t, --truncate-set1
: 首先将SET1
截断为SET2
的长度。--help
: 输出帮助信息。--version
: 输出版本信息。
解释序列
\NNN
: 八进制值为NNN
的字符(1
到3
个八进制数字)。\\
: 反斜杠。\a
: 可闻的BEL
。\b
: 退格键。\f
: 换页。\n
: 新行。\r
: 返回。\t
: 水平制表符。\v
: 垂直制表符。CHAR1-CHAR2
: 从CHAR1
到CHAR2
的所有字符按升序排列。[CHAR*]
: 在SET2
中,复制CHAR
直到SET1
的长度。[CHAR*REPEAT]
: 重复CHAR
的副本,如果以0
开头,则重复八进制。[:alnum:]
: 所有字母和数字。[:alpha:]
: 所有字母。[:blank:]
: 所有水平空白。[:cntrl:]
: 所有控制字符。[:digit:]
: 所有数字。[:graph:]
: 所有可打印字符,不包括空格。[:lower:]
: 所有小写字母。[:print:]
: 所有可打印字符,包括空格。[:punct:]
: 所有标点符号。[:space:]
: 所有水平或垂直空白。[:upper:]
: 所有大写字母。[:xdigit:]
: 所有十六进制数字。[=CHAR=]
: 等同于CHAR
的所有字符。
示例
file.txt
文件内容如下。
1 | Hello World |
将文件中的字母全部转换为大写。
1 | cat file.txt | tr [a-z] [A-Z] |
同样可以使用[:lower]
与[:upper]
参数来实现。
1 | cat file.txt | tr [:lower:] [:upper:] |
将水平空白符转换为\t
。
1 | cat file.txt | tr [:space:] "\t" |
删除所有o
字符。
1 | cat file.txt | tr -d "o" |
删除所有数字。
1 | echo "My ID is 73535" | tr -d [:digit:] |
取出字符串中的数字。
1 | echo "My ID is 73535" | tr -cd [:digit:] |
traceroute命令
traceroute
命令尝试跟踪IP
数据包到某个Internet
主机的路由,方法是使用一个小ttl
(生存时间)启动探测数据包,然后侦听来自网关的ICMP
超时回复,它以ttl
为1
开始探测,并将其增加1
,直到获得ICMP port unreachable
或TCP reset
,这意味着我们到达了host
,或达到了最大值(默认为30
跳),在每个ttl
设置处发送三个探测(默认),并打印一行,显示ttl
、网关地址和每个探测的往返时间,在请求时,地址后面可以有附加信息,如果探测结果来自不同的网关,则会打印每个响应系统的地址,如果在5.0
秒内(默认值)没有响应,则会为该探测器打印一个*
。
语法
1 | traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...] [-i device] |
参数
-4, -6
: 显式强制IPv4
或IPv6
跟踪路由,默认情况下,程序将尝试解析给定的名称,并自动选择适当的协议,如果解析主机名同时返回IPv4
和IPv6
地址,则traceroute
将使用IPv4
。-I, --icmp
: 使用ICMP ECHO
进行探测。-T, --tcp
: 使用TCP SYN
进行探测。-d, --debug
: 启用套接字级调试,如果内核支持的话。-F, --dont-fragment
: 不要对探测数据包进行分段,对于IPv4
它还会设置DF
位,该位告诉中间路由器也不要进行远程分段。通过packet_len
命令参数更改探测数据包的大小,可以手动获取有关单个网络跃点的MTU
的信息。从Linux
内核2.6.22
开始,非碎片化功能(例如-F
或--mtu
)才能正常工作,在该版本之前,IPv6
始终是零散的,IPv4
只能使用一次(从路由缓存中)发现的最终mtu
,它可能小于设备的实际mtu
。-f first_ttl, --first=first_ttl
: 指定要启动的TTL
,默认为1
。-g gate,..., --gateway=gate,...
: 告诉traceroute
向传出数据包添加IP
源路由选项,该选项告诉网络通过指定网关路由数据包(出于安全原因,大多数路由器已禁用源路由),通常允许指定多个网关(以逗号分隔的列表)。对于IPv6
允许使用num
、addr
、addr
、...
的形式,其中num
是路由报头类型(默认为类型2
),注意,根据rfc 5095
,现在不赞成使用0
型路由头。-i device, --interface=device
: 指定traceroute
应该通过其发送数据包的接口,缺省情况下,接口是根据路由表选择的。-m max_ttl, --max-hops=max_ttl
: 指定traceroute
探测的最大跳数(最大生存时间值),默认值为30
。-N squeries, --sim-queries=squeries
: 指定同时发送的探测报文数,同时发送多个探针可以大大提高跟踪路由的速度,默认值为16
,注意某些路由器和主机可以使用ICMP
速率限制,在这种情况下,指定太大的数字可能会导致某些响应丢失。-n
: 在显示IP
地址时不要尝试将它们映射到主机名。-p port, --port=port
: 对于UDP
跟踪,指定traceroute
将使用的目的端口号,目标端口号将随每个探针递增,对于ICMP
跟踪,指定初始ICMP
序列值(每个探针也增加),对于TCP
和其他协议,仅指定要连接的(恒定)目标端口,使用tcptraceroute
包装程序时,-p
指定源端口。-t tos, --tos=tos
: 对于IPv4
,设置服务类型TOS
和优先级值,有用的值是16
低延迟和8
高吞吐量,要使用某些TOS
优先级值,必须是超级用户,对于IPv6
,设置流量控制值。-l flow_label, --flowlabel=flow_label
: 对IPv6
数据包使用指定的flow_label
。-w MAX,HERE,NEAR, --wait=MAX,HERE,NEAR
: 设置等待探测响应的时间,以秒为单位,默认为5.0
。-q nqueries, --queries=nqueries
: 设置每个跃点的探测数据包数,默认值为3
。-r
: 绕过常规路由表,并直接发送到连接的网络上的主机,如果主机不在直接连接的网络上,则返回错误,此选项可用于通过没有路由的接口对本地主机执行ping
操作。-s src_addr, --source=src_addr
: 选择一个备用源地址,请注意必须选择一个接口的地址,默认情况下使用传出接口的地址。-z sendwait, --sendwait=sendwait
: 探测之间的最小时间间隔,默认值为0
,如果该值大于10
,则以毫秒为单位指定一个数字,否则为秒数,也允许使用浮点值,当某些路由器对ICMP
消息使用速率限制时非常有用。-e, --extensions
: 显示ICMP
扩展名,通用格式为CLASS / TYPE
即后跟十六进制转储,所示的MPLS
多协议标签交换数据已解析,格式为MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL (with any further objects separated by a slash ("/"))
。-A, --as-path-lookups
: 在路由注册表中执行AS
路径查找,并在相应地址后直接打印结果。-M name --module=name
: 使用指定的模块(内置或外部)用于traceroute
操作,大多数方法都有其快捷方式,例如-I
表示-M icmp
等。-O OPTS,..., --options=OPTS,...
: 将特定于模块的选项OPTS
用于traceroute
模块,允许几个OPTS
,以逗号分隔,例如如果OPTS
是help
,则打印帮助信息。--sport=num
: 将源端口号用于传出数据包,表示为-N 1
。--fwmark=num
: 为传出数据包设置防火墙标记。-U --udp
: 使用UDP
到特定端口进行路由,而不是每个探针增加端口,默认端口为53
。-UL
: 使用UDP LITE
进行路由,默认目标端口为53
。-D --dccp
: 使用DCCP
请求进行路由,默认端口为33434
。-P prot --protocol=prot
: 使用协议保护的原始数据包进行路由。--mtu
: 沿着被追踪的路径发现MTU
,表示为-F-N 1
。--back
: 推断后向路径中的跳数,如果不同则打印。-V
: 输出版本信息。--help
: 输出帮助信息。
示例
使用traceroute
查看路由信息。
1 | traceroute www.google.com |
指定IPv4
查看路由信息。
1 | traceroute -4 www.google.com |
指定要启动的TTL
,默认为1
。
1 | traceroute -f 3 www.google.com |
不将IP
地址解析为其域名。
1 | traceroute -n www.google.com |
设置每个跃点的探测数,默认为3
。
1 | traceroute -q 1 www.google.com |
指定完整的数据包长度,默认是60
字节的数据包。
1 | traceroute www.google.com 100 |
设置要使用的目标端口,默认为33434
。
1 | traceroute -p 20292 www.google.com |
touch命令
touch
命令用于修改文件或者目录的时间属性,包括存取时间和更改时间,若文件不存在,系统会建立一个新的文件。
语法
1 | touch [OPTION]... FILE... |
参数
-a
: 仅更改访问时间。-c, --no-create
: 不创建任何文件。-d, --date=STRING
: 解析STRING
并使用其作为访问和修改时间。-f
: 该参数被忽略。-h, --no-dereference
: 影响每个符号链接,而不影响任何引用的文件,仅在可以更改符号链接时间戳的系统上有用。-m
: 仅更改修改时间。-r, --reference=FILE
: 使用此文件的时间而不是当前时间。-t STAMP
: 使用[[CC]YY]MMDDhhmm[.ss]
而不是当前时间。--time=WORD
: 更改指定的时间,WORD
是access
、atime
或use
则等效于-a
,WORD
是Modify
或mtime
则等效于-m
。--help
: 显示帮助信息。--version
: 显示版本信息。
示例
创建一个空白文件,如果文件已经存在,它将更改文件的访问时间。
1 | touch /tmp/file.txt |
创建多个文件。
1 | touch /tmp/file1.txt /tmp/file2.txt /tmp/file3.txt |
模板文件名创建文件。
1 | tmpwatch -am 30 –nodirs /tmp/ |
修改文件的访问时间并查看文件属性。
1 | touch -a /tmp/file.txt && stat /tmp/file.txt |
修改文件的修改时间并查看文件属性。
1 | touch -m /tmp/file.txt && stat /tmp/file.txt |
同时修改访问时间和修改时间并设置一个特定的访问与修改时间。
1 | touch -am -t 202007010000.00 /tmp/file.txt && stat /tmp/file.txt |
top命令
top
命令提供运行系统的动态实时视图,其可以显示系统摘要信息,以及当前由内核管理的进程或线程的列表,显示的系统摘要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的。
语法
1 | top -hv | -bcHisS -d delay -n limit -u|U user | -p pid -w [cols] |
参数
-h
: 输出帮助信息。-v
: 输出版本信息。-b
: 以批处理模式启动top
,这对于从top
向其他程序或文件发送输出很有用,在这种模式下,top
将不接受输入并运行,直到您使用’-n
‘命令行选项设置了迭代次数限制或终止为止。-c
: 以倒转最后一个记忆中的c
状态开始,因此如果top
显示命令行,那么现在该字段将显示程序名,反之亦然。-d interval
: 指定屏幕更新之间的延迟,并覆盖个人配置文件中的相应值或启动默认值,启动后也可以使用d
或s
交互命令更改。-H
: 指示top
显示各个线程,如果没有此命令行选项,则显示每个进程中所有线程的总和,启动后可以使用H
交互命令更改。-i
: 空闲进程切换,以倒转最后一个记忆中的i
状态开始,关闭此切换时,将不显示自上次更新以来未使用任何CPU
的任务。-n limit
: 指定top
在结束前应产生的最大迭代次数或帧数。-o
: 指定将对任务进行排序的字段的名称,与配置文件中反映的内容无关,您可以在字段名前面加上+
或-
,以覆盖排序方向,前导+
将强制从高到低排序,而-
将确保从低到高排序,此选项主要用于支持自动脚本化批处理模式操作。-O
: 此选项作为上述-o
选项的帮助形式,它将使top
在单独的一行中打印每个可用的字段名,然后退出。-p pid
: 仅监视具有指定进程ID
的进程,此选项最多可以给予20
次,也可以提供一个逗号分隔的列表,其中最多包含20
个PID
,允许两种方法混合使用,pid
值为零将被视为top
程序运行时的进程id
,这只是一个命令行选项,如果您希望返回正常操作,则无需退出并重新启动top
,只需发出以下任何交互式命令=
、u
或U
,对于p
、u
和U
命令行选项是互斥的。-s
: 安全模式操作,以强制的安全模式启动top
,即使对于root
也是如此,通过系统配置文件可以更好地控制此模式。-S
: 累计时间切换,以倒转最后一个记忆中的S
状态开始,当累计时间模式打开时,每个进程都会列出它及其子进程使用的cpu
时间。-u user-id-or-name, -U user-id-or-name
: 仅显示用户id
或用户名与给定进程匹配的进程,-u
选项匹配有效用户,而-U
选项匹配任何用户real
、effective
、saved
或filesystem
,在感叹号!
前面加上前缀用户id
或名称指示top
仅显示用户与提供的进程不匹配的进程,p
、u
和U
命令行选项是互斥的。-w number
: 在批处理模式下,如果没有参数,top
将使用COLUMNS=
和LINES=
环境变量(如果设置)格式化输出,否则,宽度将固定在最大512
列,通过一个参数,可以减少或增加输出宽度(最多512
行),但行数被认为是无限的,在正常显示模式下,如果没有参数,top
将尝试使用COLUMNS=
和LINES=
环境变量(如果设置)格式化输出,对于参数,输出宽度只能减小,不能增大,无论是使用环境变量还是带有-w
的参数,当不处于批处理模式时,都不能超过实际的终端维度,注意如果不使用此命令行选项,输出宽度始终基于调用top
的终端,无论是否处于批处理模式。
操作
以下启动默认值操作假定没有相关配置文件,即没有用户自定义,此外带星号*
的项目可以通过命令行覆盖。
^Z
: 挂起。fg
: 恢复挂起的命令。<Left>
: 强制屏幕重绘。A
: 交叉显示,默认全屏显示。d
:*
延迟时间,默认为3s
。H
:*
线程模式,默认关闭。I
:Irix
模式,默认开启。p
:*
监控PID
,默认显示所有进程。1
: 查看服务器的cpu
逻辑数。M
: 根据驻留内存大小进行排序。P
: 根据CPU
使用百分比大小进行排序。T
: 根据时间/
累计时间进行排序。c
: 切换显示命令名称和完整命令行。t
: 切换显示进程和CPU
信息。m
: 切换显示内存信息。l
: 切换显示平均负载和启动时间信息 。o
: 改变显示项目的顺序。f
: 从当前显示中添加或删除列项目。S
: 切换到累计模式。s
: 改变两次刷新之间的延迟时间,系统将提示用户输入新的时间,单位为s
,如果有小数,就换算成ms
。q
: 退出top
命令。i
: 忽略闲置和僵尸进程。k
: 终止一个进程。
相关信息
概览
total
: 进程总数。running
: 正在运行的进程数。sleeping
: 睡眠的进程数。stopped
: 停止的进程数。zombie
: 僵尸进程数。
CPU信息
us
: 用户空间占用CPU
百分比。sy
: 内核空间占用CPU
百分比。ni
: 用户进程空间内改变过优先级的进程占用CPU
百分比。id
: 空闲CPU
百分比。wa
: 等待输入输出的CPU
时间百分比。hi
: 硬件CPU
中断占用百分比。si
: 软中断占用百分比。st:
虚拟机占用百分比。
列字段
可以使用f
交互命令自定义列的位置及其是否可显示。
%CPU
:CPU Usage
,CPU
使用率,任务自上次屏幕更新以来占用的CPU
时间份额,表示为总CPU
时间的百分比,在真正的SMP
环境中,如果一个进程是多线程的,并且top
不是以线程模式运行的,那么可能会报告大于100%
的数量,您可以使用H
交互命令切换线程模式,同样对于多处理器环境,如果Irixmode
处于关闭状态,top
将在Solarismode
下运行,其中任务的cpu
使用量将除以cpu
总数,您可以使用I
交互命令切换Irix/Solaris
模式。%MEM
:Memory Usage (RES)
,内存使用情况,任务当前使用的可用物理内存共享。CGROUPS
:Control Groups
,控制组,流程所属的控制组的名称,如果不适用于该流程,则为-
,控制组用于在安装定义的进程组之间分配资源(cpu
、内存、网络带宽等),它们支持对这些资源的分配、拒绝、优先排序、管理和监视进行细粒度控制,一个系统上可以同时存在许多不同的cgroup
层次结构,并且每个层次结构都连接到一个或多个子系统,子系统表示单个资源,注意: CGROUPS
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。CODE
:Code Size (KiB)
,代码大小KiB
,用于可执行代码的物理内存量,也称为文本驻留集大小或TRS
。COMMAND
:Command Name or Command Line
,命令名或命令行,显示用于启动任务的命令行或关联程序的名称,您可以使用c
在命令行和名称之间切换,这既是一个命令行选项,也是一个交互式命令,当您选择显示命令行时,没有命令行的进程(如内核线程)将只显示程序名,此字段也可能受视图显示模式的影响,注意COMMAND
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断,当显示命令行时,此字段尤其如此。DATA
:Data + Stack Size (KiB)
,用于可执行代码以外的物理内存量,也称为数据驻留集大小或DRS
。ENVIRON
:Environment variables
,显示各个进程看到的所有环境变量(如果有),这些变量将以原始的本机顺序显示,而不是您习惯于用非限定的set
看到的排序顺序,注意ENVIRON
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。Flags
:Task Flags
,此列表示任务的当前调度标志,这些标志以十六进制表示,并且不包含零,这些标志正式记录在<linux/sched.h>
中。GID
:Group Id
,有效组ID
。GROUP
:Group Name
,有效组名。NI
:Nice Value
,负的nice
值意味着更高的优先级,而正的nice
值意味着更低的优先级,此字段中的零表示在确定任务的调度能力时不会调整优先级。P
:Last used CPU (SMP)
,表示最后使用的处理器的数字,在真正的SMP
环境中,这可能会频繁更改,因为内核有意使用弱关联,另外,运行top
的行为可能会破坏这种弱关联,并导致更多进程更频繁地更改cpu
(因为对cpu
时间的额外需求)。PGRP
:Process Group Id
,每个进程都是唯一进程组的成员,该进程组用于分配信号,并由终端对其输入和输出请求进行仲裁,创建(fork
)流程时,它将成为其父流程组的成员,按照约定,该值等于流程组的第一个成员(称为流程组长)的流程ID
。PID
:Process Id
,任务的唯一进程ID
,它定期包装,但从不在零重新启动,在内核中,它是一个由task_struct
定义的可调度实体,此值还可用作:
进程组ID
、会话负责人的会话ID
、线程组负责人的线程组ID
、进程组负责人的TTY
进程组ID
。PPID
:Parent Process Id
,任务父进程的进程ID
(pid
)。PR
:Priority
,任务的调度优先级,如果在该字段中看到rt
,则表示任务正在实时调度优先级下运行,在linux
下,实时优先级有些误导,因为传统上操作本身是不可抢占的,虽然2.6
内核可以被大部分抢占,但并不总是这样。RES
:Resident Memory Size (KiB)
,任务使用的非交换物理内存。RUID
:Real User Id
,真实用户ID
。RUSER
:Real User Name
,真实的用户名。S
:Process Status
,任务的状态,可以是:D
不间断睡眠、R
运行、S
睡眠、T
跟踪或停止、Z
僵尸,显示为正在运行的任务应该更恰当地被认为是准备运行的——它们的任务结构只在Linux
运行队列中表示,即使没有真正的SMP
机器,根据top
的延迟间隔和nice
值,也可能会看到许多处于这种状态的任务。SHR
:Shared Memory Size (KiB)
,一个任务可用的共享内存量,通常不是所有的内存都是驻留的,它只是反映了可能与其他进程共享的内存。SID
:Session Id
,会话是进程组的集合,通常由登录shell
建立,新fork
的进程加入其创建者的会话,按照惯例,这个值等于会话的第一个成员的进程ID
,称为会话头,通常是登录shell
。SUID
:Saved User Id
,保存的用户ID
。SUPGIDS
:Supplementary Group IDs
,建立的或从任务父级继承的任何补充组的ID
,它们以逗号分隔的列表显示,注意SUPGIDS
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。SUPGRPS
:Supplementary Group Names
,登录时建立的或从任务父级继承的任何补充组的名称,它们以逗号分隔的列表显示,注意: SUPGRPS
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。SUSER
:Saved User Name
,保存的用户名。SWAP
:Swapped Size (KiB)
,任务地址空间的非驻留部分。TGID
:Thread Group Id
,任务所属的线程组的ID
,它是线程组负责人的PID
,在内核术语中,它表示那些共享mm_struct
的任务。TIME
:CPU Time
,任务自启动以来使用的总CPU
时间,当累积模式打开时,每个进程都会列出它及其子进程使用的cpu
时间,使用S
切换累积模式,这既是命令行选项,也是交互式命令,有关此模式的其他信息,请参阅S
交互命令。TIME+
:CPU Time, hundredths
,与Time
相同,但通过百分之一秒反映出更多的粒度。TPGID
:Tty Process Group Id
,连接的tty
的前台进程的进程组ID
,如果进程未连接到终端,则为-1
,按照惯例,此值等于流程组长的流程ID
。TTY
:Controlling Tty
,控制终端的名称,这通常是启动进程的设备(串口、pty
等),并用于输入或输出,但是,任务不需要与终端相关联,在这种情况下,您将看到?
显示。UID
:User Id
,任务所有者的有效用户ID
。USED
:Memory in Use (KiB)
,此字段表示任务已使用的非交换物理内存(RES
)加上其地址空间(SWAP
)的非驻留部分。USER
:User Name
,任务所有者的有效用户名。VIRT
:Virtual Memory Size (KiB)
,任务使用的虚拟内存总量。它包括所有代码、数据和共享库,以及已调出的页面和已映射但未使用的页面。WCHAN
:Sleeping in Function
,取决于内核链接映射的可用性系统地图),此字段将显示任务当前休眠的内核函数的名称或地址,正在运行的任务将在此列中显示一个破折号-
,通过显示此字段,top
自己的工作集可以增加700Kb
以上,具体取决于内核版本,如果发生这种情况,减少开销的唯一方法就是停止并重新启动top
。nDRT
:Dirty Pages Count
,自上次写入辅助存储器以来已修改的页数,dirty pages
必须先写入辅助存储器,然后才能将相应的物理内存位置用于其他虚拟页。nMaj
:Major Page Fault Count
,任务发生的主要页错误数,当进程试图读取或写入其地址空间中当前不存在的虚拟页时,会发生页错误,一个主要的页面错误是当辅助存储访问涉及到使该页面可用时。nMin
:Minor Page Fault count
,任务发生的次要页面错误数,当进程试图读取或写入其地址空间中当前不存在的虚拟页时,会发生页错误,在使该页可用时,较小的页错误不涉及辅助存储器访问。nTH
:Number of Threads
,与进程关联的线程数。nsIPC
:IPC namespace
,用于隔离进程间通信(IPC
)资源(如SystemVIPC
对象和POSIX
消息队列)的命名空间的Inode
。nsMNT
:MNT namespace
,命名空间的Inode
,用于隔离文件系统装入点,从而提供文件系统层次结构的不同视图。nsNET
:NET namespace
,命名空间的Inode
,用于隔离网络设备、IP
地址、IP
路由、端口号等资源。nsPID
:PID namespace
,命名空间的Inode
,用于隔离进程ID
号,这意味着它们不必保持唯一,因此,每个这样的名称空间都可以有自己的init
(PID#1
)来管理各种初始化任务并获取孤立的子进程。nsUSER
:USER namespace
,用于隔离用户和组ID
号的命名空间的Inode
,因此,一个进程可以在用户名称空间外有一个普通的未授权用户ID
,而在该名称空间内有一个具有完全根权限的用户ID0
。nsUTS
:UTS namespace
,用于隔离主机名和NIS
域名的命名空间的Inode, UTS
的意思是UNIX
分时系统。vMj
:Major Page Fault Count Delta
,自上次更新以来发生的主要页错误数。vMn
:Minor Page Fault Count Delta
,自上次更新以来发生的次要页面错误的数量。
示例
显示进程信息。
1 | top |
显示完整命令。
1 | top -c |
以批处理模式显示程序信息。
1 | top -b |
以累积模式显示程序信息。
1 | top -S |
设置信息更新次数,表示更新两次后终止更新显示。
1 | top -n 2 |
设置信息更新时间,表示更新周期为3
秒。
1 | top -d 3 |
显示指定的进程信息,CPU
、内存占用率等。
1 | top -p 131 |
不能利用交互式指令来对进程下命令。
1 | top -s |
tmpwatch命令
tmpwatch
递归删除给定时间内未访问的文件,通常用于清理用于临时存放空间的目录,并可以设置文件超期时间,默认单位以小时计算。
语法
1 | tmpwatch [-u | -m | -c] [-MUadfqstvx] [--verbose] [--force] [--all] [--nodirs] [--nosymlinks] [--test] [--fuser] [--quiet] [--atime | --mtime | --ctime] [--dirmtime] [--exclude path ] [--exclude-user user ] time dirs |
参数
-a, --all
: 删除所有文件类型,而不仅仅是常规文件,符号链接和目录。-c, --ctime
: 根据文件的ctime
即inode
更改时间,而不是atime
来决定删除文件,对于目录根据mtime
做出是否删除的决定。-d, --nodirs
: 即使目录为空,也不要尝试删除它们。-f, --force
: 即使root
没有写访问权限,也删除文件类似于rm -f
。-l, --nosymlinks
: 不要尝试删除符号链接。-m, --mtime
: 根据文件的mtime
即修改时间而不是atime
来决定删除文件。-M, --dirmtime
: 根据目录的mtime
即修改时间而不是atime
来决定删除目录,完全忽略目录时间。-q, --quiet
: 仅报告致命错误。-s, --fuser
: 尝试使用fuser
命令来查看文件是否已打开,然后再将其删除,默认情况下未启用,在某些情况下确实有帮助。-t, --test
: 不要删除文件,但要执行删除它们的动作,这意味着-v
。-u, --atime
: 根据文件的访问时间来决定是否删除文件,这是默认值,请注意定期的updatedb
文件系统扫描会保留最近的目录时间。-U, --exclude-user=user
: 不要删除用户拥有的文件,该文件可以是用户名或数字用户ID
。-v, --verbose
: 打印详细显示,有两种详细级别可用。-x, --exclude=path
: 跳过路径,如果path
是目录,则包含在其中的所有文件也会被跳过,如果路径不存在,则它必须是不包含符号链接的绝对路径。-X, --exclude-pattern=pattern
: 跳过路径匹配模式,如果目录与pattern
匹配,其中的所有文件也将被跳过,模式必须匹配不包含符号链接的绝对路径。
示例
要从/var/log/
日志目录中删除30d
以上未访问的文件。
1 | tmpwatch 30d /var/log/ |
列出/tmp/
缓存目录中至少30
小时未修改的所有文件。
1 | tmpwatch –mtime 30 –nodirs /tmp/ –test |
删除/tmp/
缓存目录中至少30
个小时未访问的所有文件。
1 | tmpwatch -am 30 –nodirs /tmp/ |
每日一题
1 | https://github.com/WindrunnerMax/EveryDay |
参考
1 | https://linux.die.net/man/8/tmpwatch |
tmpwatch命令
tmpwatch
递归删除给定时间内未访问的文件,通常用于清理用于临时存放空间的目录,并可以设置文件超期时间,默认单位以小时计算。
语法
1 | tmpwatch [-u | -m | -c] [-MUadfqstvx] [--verbose] [--force] [--all] [--nodirs] [--nosymlinks] [--test] [--fuser] [--quiet] [--atime | --mtime | --ctime] [--dirmtime] [--exclude path ] [--exclude-user user ] time dirs |
参数
-a, --all
: 删除所有文件类型,而不仅仅是常规文件,符号链接和目录。-c, --ctime
: 根据文件的ctime
即inode
更改时间,而不是atime
来决定删除文件,对于目录根据mtime
做出是否删除的决定。-d, --nodirs
: 即使目录为空,也不要尝试删除它们。-f, --force
: 即使root
没有写访问权限,也删除文件类似于rm -f
。-l, --nosymlinks
: 不要尝试删除符号链接。-m, --mtime
: 根据文件的mtime
即修改时间而不是atime
来决定删除文件。-M, --dirmtime
: 根据目录的mtime
即修改时间而不是atime
来决定删除目录,完全忽略目录时间。-q, --quiet
: 仅报告致命错误。-s, --fuser
: 尝试使用fuser
命令来查看文件是否已打开,然后再将其删除,默认情况下未启用,在某些情况下确实有帮助。-t, --test
: 不要删除文件,但要执行删除它们的动作,这意味着-v
。-u, --atime
: 根据文件的访问时间来决定是否删除文件,这是默认值,请注意定期的updatedb
文件系统扫描会保留最近的目录时间。-U, --exclude-user=user
: 不要删除用户拥有的文件,该文件可以是用户名或数字用户ID
。-v, --verbose
: 打印详细显示,有两种详细级别可用。-x, --exclude=path
: 跳过路径,如果path
是目录,则包含在其中的所有文件也会被跳过,如果路径不存在,则它必须是不包含符号链接的绝对路径。-X, --exclude-pattern=pattern
: 跳过路径匹配模式,如果目录与pattern
匹配,其中的所有文件也将被跳过,模式必须匹配不包含符号链接的绝对路径。
示例
要从/var/log/
日志目录中删除30d
以上未访问的文件。
1 | tmpwatch 30d /var/log/ |
列出/tmp/
缓存目录中至少30
小时未修改的所有文件。
1 | tmpwatch –mtime 30 –nodirs /tmp/ –test |
删除/tmp/
缓存目录中至少30
个小时未访问的所有文件。
1 | tmpwatch -am 30 –nodirs /tmp/ |
tee命令
tee
命令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
语法
1 | tee [OPTION]... [FILE]... |
参数
-a, --append
: 追加到已有文件的后面,而不是覆盖文件。-i, --ignore-interrupts
: 忽略中断信号。-p
: 诊断写入非管道的错误。--output-error[=MODE]
: 设置写错误时的行为。--help
: 显示帮助信息。--version
: 显示版本信息
模式
warn
: 诊断写入任何输出的错误。warn-nopipe
: 诊断写入任何输出而不是管道的错误。exit
: 当错误写入任何输出时退出。exit-nopipe
: 当写入任何输出(不是管道)时出错时退出。
示例
将用户输入的数据同时保存到文件file1.txt
和file2.txt
中,输入文件信息后回车即可得到输出反馈。
1 | tee file1.txt file2.txt |
将用户输入的数据追加到file1.txt
文件。
1 | tee -a file1.txt |
ls
列出当前目录中所有文件扩展名为.txt
的所有文件,每行一个文件名,将输出通过管道传输到wc
,将行进行计数并输出数字,输出通过管道传输到tee
,将输出写入终端,并将信息写入文件count.txt
,即写入文件扩展名为.txt
的所有文件的数量。
1 | ls -1 *.txt | wc -l | tee count.txt |
tee命令
tee
命令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
语法
1 | tee [OPTION]... [FILE]... |
参数
-a, --append
: 追加到已有文件的后面,而不是覆盖文件。-i, --ignore-interrupts
: 忽略中断信号。-p
: 诊断写入非管道的错误。--output-error[=MODE]
: 设置写错误时的行为。--help
: 显示帮助信息。--version
: 显示版本信息
模式
warn
: 诊断写入任何输出的错误。warn-nopipe
: 诊断写入任何输出而不是管道的错误。exit
: 当错误写入任何输出时退出。exit-nopipe
: 当写入任何输出(不是管道)时出错时退出。
示例
将用户输入的数据同时保存到文件file1.txt
和file2.txt
中,输入文件信息后回车即可得到输出反馈。
1 | tee file1.txt file2.txt |
将用户输入的数据追加到file1.txt
文件。
1 | tee -a file1.txt |
ls
列出当前目录中所有文件扩展名为.txt
的所有文件,每行一个文件名,将输出通过管道传输到wc
,将行进行计数并输出数字,输出通过管道传输到tee
,将输出写入终端,并将信息写入文件count.txt
,即写入文件扩展名为.txt
的所有文件的数量。
1 | ls -1 *.txt | wc -l | tee count.txt |
split命令
split
命令用于将大文件分割成较小的文件,在默认情况下将按照每1000
行切割成一个小文件。
语法
1 | split [OPTION]... [FILE [PREFIX]] |
参数
-a, --suffix-length=N
: 使用长度为N
的后缀,默认为2
。--additional-suffix=SUFFIX
: 将额外的SUFFIX
插入文件名。-b, --bytes=SIZE
: 每个输出文件放置SIZE
字节,即指定每多少字节切成一个小文件。-C, --line-bytes=SIZE
: 每个输出文件最多放入SIZE
个字节行,与参数-b
相似,但是在切割时将尽量维持每行的完整性。-d
: 使用数字后缀而不是字母。--numeric-suffixes[=FROM]
: 与-d
相同,但允许设置起始值。-e, --elide-empty-files
: 不使用-n
生成空的输出文件。--filter=COMMAND
: 写入shell
命令COMMAND
,文件名是$FILE
。-l, --lines=NUMBER
: 每个输出文件放入NUMBER
行。-n, --number=CHUNKS
: 生成CHUNKS
输出文件,CHUNKS
可以取的值有,N
:根据输入大小分为N
个文件,K/N
:将N
的第K
个输出到标准输出,l/N
: 分割成N
个文件,不分割行,l/K/N
:输出K
的第N
到标准输出,而不分割线,r/N
:类似于l
,但同样使用循环分布r/K/N
,但仅将N
的第K
个输出到标准输出。-t, --separator=SEP
: 使用SEP
代替换行符作为记录分隔符,\0
即0
指定NUL
字符。-u, --unbuffered
: 立即使用-n r/...
将输入复制到输出。--verbose
: 在打开每个输出文件之前,输出详细的信息。--help
: 输出帮助信息。--version
: 输出版本信息。
示例
将文件tmp/file.txt
分N
个独立的文件,分别为newaa
、newab
、newac
、...
,每个文件包含2
个字节的数据。
1 | split -b 2 /tmp/file.txt new |
将文件tmp/file.txt
分N
个独立的文件,分别为newaa
、newab
、newac
、...
,每个文件包含2
行数据。
1 | split -l 2 /tmp/file.txt new |
将文件tmp/file.txt
分N
个独立的文件,以数字作为后缀,每个文件包含2
行数据。
1 | split -d -l 2 /tmp/file.txt new |
sort命令
sort
命令用于将文本文件内容加以排序,可针对文本文件的内容,以行为单位来排序。
语法
1 | sort [OPTION]... [FILE]... |
参数
-b, --ignore-leading-blanks
: 忽略前导空格。-d, --dictionary-order
: 只考虑空格和字母数字字符。-f, --ignore-case
: 将小写字符转为大写字符。-g, --general-numeric-sort
: 按一般数值进行比较。-i, --ignore-nonprinting
: 只考虑可打印字符。-M, --month-sort
: 比较JAN < ... < DEC
。-h, --human-numeric-sort
: 比较人类可读的数字,例如2K
、1G
。-n, --numeric-sort
: 根据字符串数值进行比较。-R, --random-sort
: 按键的随机哈希排序。--random-source=FILE
: 从FILE
中获取随机字节。-r, --reverse
: 反转比较结果。--sort=WORD
: 根据WORD
排序:一般数字-g
,chan数字-h
,月份-M
,数字-n
,随机-R
,版本-V
。--batch-size=NMERGE
: 一次最多合并NMERGE
输入,对于更多输入,请使用临时文件。-c, --check, --check=diagnose-first
: 检查已排序的输入,不排序。-C, --check=quiet, --check=silent
: 类似于-c
但不报告第一行错误。--compress-program=PROG
: 用PROG
压缩临时文件,用PROG-d
解压临时文件。--debug
: 注释行中用于排序的部分,并向stderr
警告可疑用法。--files0-from=F
: 从文件F
中以NUL
结尾的名称指定的文件读取输入,如果F
是-
,则从标准输入读取名称。-k, --key=POS1[,POS2]
: 在POS1
处开始键(原点1
),在POS2
处结束键(默认行结束)。-m, --merge
: 合并已排序的文件,不排序。-o, --output=FILE
: 将结果写入FILE
而不是标准输出。-s, --stable
: 通过禁用最后的比较来稳定排序。-t, --field-separator=SEP
: 使用SEP
代替非空到空的转换。-T, --temporary-directory=DIR
: 将DIR
用于临时文件,而不是$TMPDIR
或/tmp
多个选项指定多个目录。--parallel=N
: 将同时运行的排序数更改为N
。-u, --unique
: 对于-c
检查严格的顺序,只输出相等运行的第一个。-z, --zero-terminated
: 以0
字节结束行,而不是换行。--help
: 输出帮助信息。--version
: 输出版本信息。
示例
file.txt
、file1.txt
、file2.txt
文件内容如下。
1 | # file.txt |
对file.txt
文件内容进行排序,要保存的话需要使用输出重定向。
1 | sort file.txt |
可以使用-r
标志执行逆序排序。
1 | sort -r file.txt |
使用-n
对数字进行排序,不使用-n
的话则会使用字典序排序。
1 | sort -n file1.txt |
要对带有反向数字数据的文件进行排序,我们可以使用下面-nr
两个选项的组合。
1 | sort -nr file1.txt |
使用-u
排序并删除重复项。
1 | sort -u file2.txt |
使用-c
检查文件是否已经按照顺序排序。
1 | sort -c file2.txt |
sed命令
sed
命令是利用脚本来处理文本文件,可依照脚本的指令来处理、编辑文本文件,主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法
1 | sed [OPTION]... {script-only-if-no-other-script} [input-file]... |
参数
-n, --quiet, --silent
: 禁止自动打印图案空间。-e script, --expression=script
: 将脚本添加到要执行的命令中。-f script-file, --file=script-file
: 将脚本文件的内容添加到要执行的命令中。--follow-symlinks
: 就地处理时遵循符号链接。-i[SUFFIX], --in-place[=SUFFIX]
:就地编辑文件,如果提供了后缀,则使用文件扩展名后缀进行备份。-l N, --line-length=N
: 为l
命令指定所需的换行长度N
。--POSIX
: 禁用所有GNU
扩展。-r, --regexp-extended
: 在脚本中使用扩展的正则表达式。-s, --separate
: 将文件视为单独的文件,而不是单个连续的长文件流。-u, --unbuffered
: 从输入文件中加载少量数据,并更频繁地刷新输出缓冲区。--help
: 输出帮助信息。--version
: 输出版本信息。
示例
file.txt
文件内容如下。
1 | unix is great os. unix is opensource. unix is free os. |
将文件中的每行的第一个单词unix
替换为linux
,要保存的话需要使用输出重定向。
1 | sed "s/unix/linux/" file.txt |
替换行中模式的第2
个匹配项,将行中出现的第二个单词unix
替换为linux
。
1 | sed "s/unix/linux/2" file.txt |
使用替换标志/g
全局替换指定sed
命令来替换行中所有出现的字符串。
1 | sed "s/unix/linux/g" file.txt |
指定第2
个之后的全部匹配模式的字符进行替换。
1 | sed "s/unix/linux/2g" file.txt |
用括号括住每个单词的第一个字符,在括号中打印每个单词的第一个字符。
1 | echo "Welcome To The World" | sed "s/\(\b[A-Z]\)/\(\1\)/g" |
可以限制sed
命令替换特定行号上的字符串。
1 | sed "3 s/unix/linux/g" file.txt |
scp命令
scp
命令用于Linux
之间复制文件和目录,scp
是secure copy
的缩写,是Linux
系统下基于ssh
登陆进行安全的远程文件拷贝命令,使用scp
可以实现从本地系统到远程系统、从远程系统到本地系统、在本地系统的两个远程系统之间的复制传输。scp
是加密的,rcp
是不加密的,可以认为scp
是rcp
的加强版。
语法
1 | scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2 |
参数
-1
: 强制scp
使用协议1
,这是一个较旧的协议。-2
: 强制scp
使用协议2
,这是一个较旧的协议。-3
: 两个远程主机之间的副本通过本地主机传输,如果没有此选项,数据将直接在两个远程主机之间复制,此选项还禁用进度表。-4
: 强制scp
仅使用IPv4
地址。-6
: 强制scp
仅使用IPv6
地址。-B
: 使用批处理模式,无需任何交互式键盘输入即可运行,这意味着scp
无法通过要求用户输入密码来验证会话,此时需要使用密钥进行身份验证。-C
: 启用压缩,该压缩将-C
标志传递给ssh
以启用加密连接的压缩。-c cipher
: 选择用于加密数据传输的密码,此选项直接传递给ssh
。-F ssh_config
: 为ssh
指定每个用户的备用配置文件,此选项直接传递给ssh
。-i identity_file
: 选择读取RSA
身份验证的身份(私钥)的文件,这个选项直接传递给ssh
。-l limit
: 限制使用的带宽,以Kbit/s
为单位。-o ssh_option
: 可用于以ssh_config
中使用的格式将选项传递给ssh
,例如AddressFamily
、BatchMode
、BindAddress
等等,这对于指定没有单独的scp
命令标志的选项非常有用。-P port
:指定远程主机上要连接到的端口,注意这个选项是用大写字母P
写的,因为-p
已经被保留了,用于保存rcp
中文件的时间和模式。-p
: 保留原始文件的修改时间、访问时间和模式。-q
: 禁用进度表。-r
: 递归地复制整个目录。-S program
: 用于加密连接的程序名称,程序必须能够解析ssh
选项。-v
: 详细模式,使scp
和ssh
打印有关其进度的调试消息,这有助于调试连接,身份验证和配置问题。
示例
将file.txt
传输到远程主机。
1 | scp file.txt root@1.1.1.1:/tmp |
使用私钥将file.txt
传输到远程主机。
1 | scp -i ./v file.txt root@1.1.1.1:/tmp |
将远程目录中file.txt
文件传输到本地,使用私钥验证身份。
1 | scp -i ./v root@1.1.1.1:/tmp/file.txt ./ |
route命令
在计算机网络中,路由器是负责转发网络流量的设备,当数据报到达路由器时,路由器必须确定将其路由到目的地的最佳方法,route
命令用于查看和更改内核路由表,在不同的系统上,命令语法不同,所以实际时可以查看命令的帮助来确定具体使用方法。
语法
1 | route [-CFvnee] |
参数
(none)
: 查看当前所有路由定义。-A family
: 使用指定的地址族,可以使用route --help
查询支持的地址族,通常支持的地址族有inet (DARPA Internet)
、inet6 (IPv6)
、ax25 (AMPR AX.25)
、netrom (AMPR NET/ROM)
、ipx (Novell IPX)
、ddp (Appletalk DDP)
、x25 (CCITT X.25)
。-F
: 对内核的FIB
转发信息库路由表进行操作,这是默认值。-C
: 操作内核的路由缓存。-v
: 输出详细操作。-n
: 显示数字地址,而不是尝试确定符号主机名,如果要确定到名称服务器的路由消失的原因,这将很有用。-e
: 使用netstat
格式显示路由表,-ee
将使用路由表中的所有参数生成很长的一行。del
: 删除路由。add
: 添加路由。target
: 目标网络或主机,可以用点分十进制或主机/
网络名称提供IP
地址。-net
: 添加的目标是一个网络。-host
: 添加的目标是一个主机。netmask NM
: 添加网络路由时,要使用的网络掩码。gw GW
: 通过网关路由数据包,必须首先可以访问指定的网关,这通常意味着必须事先设置到网关的静态路由,如果您指定本地接口之一的地址,它将用于确定数据包应路由到的接口。metric M
: 将路由表(由路由守护程序使用)中的度量字段设置为M。mss M
: 将通过此路由的连接的TCP
最大段大小MSS
设置为M
个字节,缺省值为设备MTU
减去标题,或在发生路径mtu
发现时使用较低的MTU
,当路径mtu
发现不起作用时(通常是由于配置错误的防火墙阻止了所需的ICMP
碎片),此设置可用于在另一端强制使用较小的TCP
数据包。window W
: 将通过此路由的连接的TCP
窗口大小设置为W
字节,仅在AX.25
网络上使用,并且驱动程序无法处理背靠背帧。irtt m
: 将通过此路由的TCP
连接的初始往返时间irtt
设置为m
毫秒1-12000
,仅在AX.25
网络上使用,如果省略,则使用RFC 1122
默认值300ms
。reject
: 安装阻塞路由,这将强制路由查找失败,这可以用于在使用默认路由之前屏蔽网络,此外要注意这不是用于防火墙。mod, dyn, reinstate
: 安装动态或修改后的路线,这些标志用于诊断目的,通常仅由路由守护程序设置。dev If
: 强制将路由与指定设备相关联,否则内核将尝试自行确定设备(通过检查现有路由和设备规格以及添加路由的位置),在大多数普通网络中,基本不需要此功能。如果dev If
是命令行上的最后一个选项,则可以省略单词dev
,因为它是默认值,否则路由修饰符的顺序metric - netmask - gw - dev
无关紧要。-h, --help
: 输出帮助信息。
示例
显示绑定到服务器的所有IP
的路由表。
1 | route -n |
添加默认网关,这将分配一个网关地址,所有不属于此网络的数据包都将在该网关地址上转发。
1 | route add default gw 169.213.0.0 |
列出内核的路由缓存信息,为了更快地路由数据包,内核保留了路由缓存信息。
1 | route -Cn |
拒绝路由到特定主机或网络。
1 | route add -host 192.168.1.51 reject |
删除默认网关,这可能会导致某些互联网故障,所以在继续执行该命令之前,请记下默认网关。
1 | route del default |
当我们连接PPTP
后,通常我们会配置将一个网段添加路由,来指定数据报通过ppp0
。
1 | route add -net 192.168.0.0/16 dev ppp0 |
配置将一个域名添加路由,来指定数据报通过ppp0
。
1 | route add -host jwgl.sdust.edu.cn dev ppp0 |
将所有D
类多播IP
路由都设置为通过eth0
。
1 | route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 |
rm命令
rm
命令用于删除一个文件或者目录。
语法
1 | rm [OPTION]... [FILE]... |
参数
-f, --force
: 即使文件属性设为只读也直接删除,不逐一确认,此外忽略不存在的文件,不产生提示。-i
: 删除之前逐一询问确认。-I
: 在删除三个以上文件之前或在递归删除时提示一次,比-i
提示的次数少,但仍然可以防止大多数错误。--interactive[=WHEN]
: 根据WHEN
提示,从不,一次-I
或始终-i
,如果没有WHEN
,则始终提示。--one-file-system
: 递归删除层次结构时,跳过文件系统上与相应命令行参数不同的任何目录。--no-preserve-root
: 不特别对待/
。--preserve-root
: 不要删除/
,默认选项。-r, -R, --recursive
: 递归删除目录及其内容。-d, --dir
: 删除空目录。-v, --verbose
: 输出执行过程。--help
: 输出帮助信息。--version
: 输出版本信息。
示例
删除文件file.txt
,如果文件是写保护的,则将提示是否确认要删除。
1 | rm file.txt |
删除文件file.txt
,即使文件是写保护的也不会有确认提示。
1 | rm -f file.txt |
删除当前目录中的所有文件,如果文件是写保护的,则在rm
删除之前将提示。
1 | rm * |
删除当前目录中的所有文件,rm
将不会有任何提示。
1 | rm -f * |
尝试删除当前目录中的每个文件,但在删除每个文件之前提示确认。
1 | rm -i * |
删除当前目录中的每个文件,提示确认是否删除三个以上的文件。
1 | rm -I * |
删除目录directory
及其包含的所有文件和目录,果rm
尝试删除的文件或目录具有写保护,则将提示是否确实要删除。
1 | rm -r directory |
删除目录directory
及其包含的所有文件和目录,不会有任何确认提示。
1 | rm -rf mydirectory |
read命令
read
命令被用来从标准输入读取单行数据,这个命令可以用来读取键盘输入,当使用重定向以及默认选项的情况下,可以读取文件中的一行数据,此时read
会将换行符视为行尾,但是可以使用-d
选项更改。
语法
1 | read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] [name2 ...] |
参数
-a array
: 将单词存储在一个名为array
的索引数组中,数组元素的编号从0
开始。-d delim
: 将定界符设置为delim
,该字符表示行尾,如果未使用-d
,则默认行定界符为换行符。-e
: 从shell
获取一行输入,用户手动输入字符,直到达到行分隔符为止。-i text
: 当与-e
结合使用并且仅在不使用-s
的情况下,文本将作为输入行的初始文本插入,允许用户在输入行上编辑文本。-n nchars
: 如果尚未达到行定界符,则在读取整数nchars
个字符后停止读取。-N nchars
: 忽略行定界符,仅在已读取nchars
个字符,达到EOF
或读取超时之后才停止读取。-p prompt
: 在开始读取之前,不使用换行符打印字符串提示符。-r
: 使用原始输入,具体来说,这个选项使read
按字面意思解释反斜杠,而不是将它们解释为转义字符。-s
: 当read
从终端获取输入时,不显示按键。-t timeout
: 如果在超时秒内未读取完整的输入行,则超时并返回失败,如果超时值为零,那么read
将不会读取任何数据,但是如果输入可用于读取,则返回成功。如果未指定超时,则使用shell
变量TMOUT
的值(如果存在),超时值可以是小数,例如3.5
。-u fd
: 从文件描述符fd
中读取而不是从标准输入中读取,文件描述符应该是一个small integer
。
示例
读取终端的输入,循环读入一直持续到按Ctrl + D
即EOF
为止,由于指定变量名text
,因此整行文本都存储在变量text
中,每当输入一行后按回车时,将会把输入的内容输出。
1 | while read text |
读取终端的输入,指定一个输入的超时时间。
1 | if read -t 3 -p "Text: " text |
按行读取文件中的内容。
1 | cat test.txt | while read line |
rcp命令
rcp
命令用于复制远程文件或目录,如同时指定两个以上的文件或目录,且最后的目标位置是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中,执行rcp
命令以后不会有返回信息,仅需要在目标目录下查看文件或目录是否复制成功即可,rcp
不提示输入密码,其通过rsh
执行远程执行 ,并且需要相同的授权。
语法
1 | rcp [options] [origin] [target] |
参数
-r
: 递归地把源目录中的所有内容拷贝到目标目录中,要使用这个选项,目标位置必须是一个目录。-p
: 保留源文件的修改时间和模式,包括拥有者、所属群组、权限与时间,忽略umask
。-k
: 请求rcp
获得在指定区域内的远程主机的Kerberos
许可,而不是获得由krb_relmofhost
确定的远程主机区域内的远程主机的Kerberos
许可。-x
: 为传送的所有数据打开DES
加密,这会影响响应时间和CPU
使用率,但是可以提高安全性。-D
: 指定远程服务器的端口号。
示例
远程复制file.txt
文件。
1 | rcp root@1.1.1.1:/file.txt file.txt |
ps命令
Linux
是一个多任务、多用户的操作系统,因此它允许多个进程同时运行而不相互干扰,进程是Linux
操作系统的重要基本概念之一,进程是程序的执行实例,在操作系统中执行不同的任务。Linux
为我们提供了一个名为ps
的实用程序,用于查看与系统上的进程相关的信息,它是process status
进程状态的缩写,ps
命令用于列出当前正在运行的进程,它们的pid
以及一些其他信息取决于不同的选项,它从/proc
文件系统中的虚拟文件读取进程信息,/proc
包含虚拟文件,这就是它被称为虚拟文件系统的原因,process status
命令ps
显示有关活动进程的信息,类似于windows
的任务管理器,每个操作系统的ps
版本都略有不同,因此若要是需要获取详细情况则需要查阅操作系统的wiki
。
语法
1 | ps [options] |
参数
ps
命令有多种类别的参数可以选择: simple|list|output|threads|misc|all
。
Simple Process Selection
-A, -e
: 选择所有进程。-a
: 选择除会话引线和与终端无关的进程之外的所有进程。a
: 列出带有终端tty
的所有进程,包括其他用户进程,或者在与x
选项一起使用时列出所有进程。-d
: 选择除会话所属者以外的所有进程。-N, --deselect
: 选择除满足指定条件的进程以外的所有进程。r
: 将选择限制为仅运行进程。T
: 选择与此终端关联的所有进程。x
: 列出拥有的所有进程(和ps
相同的EUID
),或者在和a
选项一起使用时列出所有进程。
Process Selection By List
-C <command>
: 按命令名选择,这将选择其可执行名称在command
中给定的进程。-G, --Group <GID>
: 按真实组ID (RGID)
或名称选择,这将选择其真实组名或ID
在grplist
列表中的进程。-g, --group <group>
: 按会话或有效组名选择。-p, p, --pid <PID>
: 按进程ID
选择。--ppid <PID>
: 按父进程ID
选择,这将选择pidlist
中具有父进程ID
的进程,也就是说,它选择的进程是pidlist
中列出的那些进程的子进程。-q, q, --quick-pid <PID>
: 按进程ID
选择(快速模式)。-s, --sid <session>
: 按会话ID
选择。-t, t, --tty <tty>
: 通过tty (terminal)
选择。-u, U, --user <UID>
: 根据有效的用户ID (EUID)
或名称选择。-U, --User <UID>
: 按真实用户ID (RUID)
或名称选择。
Output Format Control
-F
: 额外的完整格式。-f
: 进行全格式列表,可以将此选项与其他UNIX
样式的选项结合使用以添加其他列,它还会导致命令参数被打印,与-L
一起使用时,将添加NLWP
线程数和LWP
线程ID
列。f, --forest
:ASCII art
进程层次结构,如许多树,也称为林。-H
: 显示进程层次结构(林)。-j
: 作业格式。j
:BSD
作业控制格式。-l
: 长格式,-y
选项通常对此很有用。l
: 显示BSD
长格式。-M, Z
: 对于SE Linux
添加一列安全数据。-O <format>
: 使用默认列预加载。O <format>
: 与-O
类似,具有BSD
特性。-o, o, --format <format>
: 指定用户定义的格式。s
: 显示信号格式。u
: 显示面向用户的格式。v
: 显示虚拟内存格式。X
: 寄存器格式。-y
: 不显示标志,显示rss
代替addr
,此选项只能与-l
一起使用。--context
: 使用SE Linux
时,显示安全上下文格式。--headers
: 重复标题行,每页输出一行。--no-headers
: 完全不打印标题行。--cols, --columns, --width <num>
: 设置屏幕宽度。--rows, --lines <num>
: 设置屏幕高度。
Thread Display
H
: 将线程显示为进程。-L
: 显示线程,可能带有LWP
和NLWP
列。-m, m
: 在进程之后显示线程。-T
: 显示线程,可能带有SPID
列。
Miscellaneous options
-c
: 为-l
选项显示不同的调度程序信息。c
: 显示真实的命令名称。e
: 在命令后显示环境。k, --sort
: 指定排序顺序为[+|-]key[,[+|-]key[,...]]
。L
: 显示格式说明符。n
: 显示数字uid
和wchan
。S, --cumulative
: 包含一些dead
子进程数据。-y
: 不显示标志,显示rss
,仅与-l
一起使用。-V, V, --version
: 显示版本信息。-w, w
: 无限制的输出宽度。--help <simple|list|output|threads|misc|all>
: 显示帮助信息。
示例
显示当前shell
的进程。
1 | ps |
查看所有正在运行的进程。
1 | ps -e |
通常查看所有进程可以与管道以及grep
命令结合用以过滤,例如我们查看与nginx
有关的所有进程。
1 | ps -e | grep nginx |
查看除会话引线和未与终端关联的进程之外的所有进程。
1 | ps -a |
查看www
用户的所有进程。
1 | ps -u www |
查看www
组的所有进程。
1 | ps -G www |
使用-f
查看完整格式列表。
1 | ps -f |
按用户自定义格式查看进程。
1 | ps -aN --format cmd,pid,user,ppid |
根据内存占用情况将进程排序。
1 | ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem |
显示所有当前进程,为了便于查看可以结合管道和less
命令来使用。
1 | ps -ax | less |
使用aux
参数,加入CPU
与内存用量信息,来显示全面的信息。
1 | ps -aux | less |
根据CPU
使用将进程降序排序。
1 | ps -aux --sort -pcpu | less |
根据内存使用将进程降序排序。
1 | ps -aux --sort -pmem | less |
合并内存与CPU
的整体使用情况进行排序,并只显示前10
个结果。
1 | ps -aux --sort -pcpu,+pmem | head -n 10 |
pico命令
pico
是一个简单易用、以显示导向为主的文字编辑程序,具有pine
电子邮件编写器的风格。在现代Linux
系统上,nano
即pico
的GNU
版本是默认安装的,在使用上和pico
一模一样。
语法
1 | nano [OPTIONS] [[+LINE[,COLUMN]] FILE]... |
参数
+LINE[,COLUMN]
: 启动时将光标放置在行号行和列号列,而不是默认的第1
行第1
列。-?
: 与-h
相同。-A, --smarthome
: 使Home
键更智能,如果在一行中非空格字符的开头但在任何地方按Home
键,则光标将跳到该开头(向前或向后),如果光标已经在该位置,它将跳到该行的真实开头。-B, --backup
: 保存文件时,将以前版本的文件备份到以~
为后缀的当前文件名。-C dir, --backupdir=dir
: 如果启用了文件备份,请设置nano
放置唯一备份文件的目录。-D, --boldtext
: 使用粗体文本而不是反向视频文本。-E, --tabstospaces
: 将键入的制表符转换为空格。-F, --multibuffer
: 如果可用,启用多个文件缓冲区。-H, --historylog
: 记录搜索并将字符串替换为~/.nano_history
,如果有nanorc
支持,则可以在以后的会话中检索它们。-I, --ignorercfiles
: 如果有nanorc
支持,不要检索SYSCONFDIR/nanorc
或~/.nanorc
。-K, --rebindkeypad
: 解释数字小键盘的键,以便它们都可以正常工作。如果不需要,则不需要使用此选项,因为启用此选项后,鼠标支持将无法正常工作。-L, --nonewlines
: 不要在文件末尾添加换行符。-N, --noconvert
: 禁止从DOS/Mac
格式自动转换文件。-O, --morespace
: 使用标题栏下方的空白行作为额外的编辑空间。-Q str, --quotestr=str
: 设置引号字符串以进行证明。如果有扩展的正则表达式支持,则默认值为^([ \t]*[#:>\|}])+
,否则为>
。请注意\t
代表Tab
。-R, --restricted
: 限制模式,不读取或写入命令行中未指定的任何文件,读取任何nanorc
文件,允许挂起,允许将文件附加到其他名称(如果已经有文件名)或以其他名称保存,或者使用备份文件或拼写检查。也可以通过使用以r
开头的任何名称调用nano
(例如rnano
)进行访问。-S, --smooth
: 启用平滑滚动,文本将逐行滚动,而不是通常的逐块行为。-T cols, --tabsize=cols
: 将选项卡的大小(宽度)设置为列,cols
的值必须大于0
,默认值为8
。-U, --quickblank
: 快速清除状态栏,1
次按键而不是25
次按键后,状态栏消息将消失,请注意-c
会覆盖此内容。-V, --version
: 输出版本信息。-W, --wordbounds
: 通过将标点符号视为单词的一部分,可以更准确地检测单词边界。-Y str, --syntax=str
: 从nanorc
中指定要使用的特定语法高亮显示(如果可用)。-c, --const
: 不断显示光标位置,请注意这将覆盖-U
。-d, --rebinddelete
: 以不同的方式解释Delete
键,以便退格键和Delete
键都能正常工作,只有当退格符在系统上的作用类似于Delete
时,您才需要使用此选项。-h, --help
: 输出帮助信息。-i, --autoindent
: 将新行缩进到前一行的缩进中,在编辑源代码时很有用。-k, --cut
: 启用从光标到行尾的剪切。-l --nofollow
: 如果正在编辑的文件是符号链接,请用新文件替换该链接,而不是跟随它,,也许适合在/tmp
中编辑文件。-m, --mouse
: 启用鼠标支持(如果适用于您的系统)。设置快捷方式时,可以用鼠标双击鼠标来执行标记,鼠标将在X
窗口系统中工作,并在gpm
运行时在控制台上工作。-o dir, --operatingdir=dir
: 设置操作目录,使nano
设置类似于chroot
。-p, --preserve
: 保留XON
和XOFF
序列^Q
和^S
,以便它们被终端捕获。-r cols, --fill=cols
: 在列cols
处换行,如果此值等于或小于0
,则将在屏幕的宽度减去cols
列的宽度处进行换行,如果调整了屏幕大小,则换行点将随着屏幕的宽度而变化,默认值为-8
。-s prog, --speller=prog
: 启用备用拼写检查程序命令。-t, --tempfile
: 始终保存更改的缓冲区而无提示,与Pico
的-t
选项相同。-v, --view
: 查看文件(只读)模式。-w, --nowrap
: 禁用长行换行。-x, --nohelp
: 禁用编辑器底部的帮助屏幕。-z, --suspend
: 启用暂停功能。-a, -b, -e, -f, -g, -j
: 由于与Pico
的兼容性而被忽略。
示例
使用nano
编辑文件,根据操作提示编辑文件。
1 | nano file.txt |
patch命令
patch
指令让用户利用设置修补文件的方式、修改、更新原始文件,倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行,如果配合修补文件的方式则能一次修补大批文件,这也是Linux
系统核心的升级方法之一。
语法
1 | patch [OPTION]... [ORIGFILE [PATCHFILE]] |
参数
-b, --backup
: 备份每一个原始文件。-B<pref>, --prefix=<pref>
: 设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称。-c, --context
: 把修补数据解译成关联性的差异。-d<dir>, --directory=<dir>
: 设置工作目录。-D<define>, --ifdef=<define>
: 用指定的符号把改变的地方标示出来。-e, --ed
: 把修补数据解译成ed指令可用的叙述文件。-E, --remove-empty-files
: 若修补过后输出的文件其内容是一片空白,则移除该文件。-f, --force
: 此参数的效果和指定-t
参数类似,但会假设修补数据的版本为新版本。-F<num >, --fuzz<num >
: 设置监别列数的最大值。-g<num>, --get=<num>
: 设置以RSC
或SCCS
控制修补作业。-i<patchfile>, --input=<patchfile>
: 读取指定的修补文件。-l, --ignore-whitespace
: 忽略修补数据与输入数据的跳格,空格字符。-n, --normal
: 把修补数据解译成一般性的差异。-N, --forward
: 忽略修补的数据较原始文件的版本更旧,或该版本的修补数据已使 用过。-o<outfile>, --output=<outfile>
: 设置输出文件的名称,修补过的文件会以该名称存放。-p<num>, --strip=<num>
: 设置欲剥离几层路径名称。-f<rejectfile>, --reject-file=<rejectfile>
: 设置保存拒绝修补相关信息的文件名称,预设的文件名称为.rej
。-R, --reverse
: 假设修补数据是由新旧文件交换位置而产生。-s, --quiet或--silent
: 不显示指令执行过程,除非发生错误。-t, --batch
: 自动略过错误,不询问任何问题。-T, --set-time
: 此参数的效果和指定-Z
参数类似,但以本地时间为主。-u, --unified
: 把修补数据解译成一致化的差异。-v, --version
: 显示版本信息。-V<method>, --version-control=<method>
: 用-b
参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用-z
参数变更,当使用-V
参数指定不同备份方式时,也会产生不同字尾的备份字符串。-Y<pref>, --basename-prefix=--<pref>
: 设置文件备份时,附加在文件基本名称开头的字首字符串。-z<suffix>, --suffix=<suffix>
: 此参数的效果和指定-B
参数类似,差别在于修补作业使用的路径与文件名若为src/linux/fs/super.c
,加上backup/
字符串后,文件super.c
会备份于/src/linux/fs/backup
目录里。-Z, --set-utc
: 把修补过的文件更改,存取时间设为UTC
。--backup-if-mismatch
: 在修补数据不完全吻合,且没有刻意指定要备份文件时,才备份文件。--binary
: 以二进制模式读写数据,而不通过标准输出设备。--help
: 在线帮助。--nobackup-if-mismatch
: 在修补数据不完全吻合,且没有刻意指定要备份文件时,不要备份文件。--verbose
: 详细显示指令的执行过程。
示例
使用补丁包/tmp/file.patch
为文件/tmp/file2.txt
升级。
1 | diff /tmp/file2.txt /tmp/file3.txt > /tmp/file.patch # 生成补丁文件 |
paste命令
paste
命令会把每个文件以列对列的方式,一列列地加以合并。
语法
1 | paste [OPTION]... [FILE]... |
参数
-d, --delimiters=[LIST]
: 用指定的间隔字符取代TABs
字符。-s, --serial
: 一次粘贴一个文件,而不是并行粘贴。-z, --zero-terminated
: 行定界符为NUL
,而不是换行符。--help
: 显示此帮助并退出。--version
: 输出版本信息并退出。
示例
按列合并/tmp/file1.txt
与/tmp/file2.txt
文件。
1 | paste /tmp/file1.txt /tmp/file2.txt |
按列合并/tmp/file1.txt
与/tmp/file2.txt
文件,并追加到/tmp/file3.txt
。
1 | paste /tmp/file1.txt /tmp/file2.txt >> /tmp/file3.txt |
按列合并/tmp/file1.txt
与/tmp/file2.txt
文件,并指定间隔符-
。
1 | paste -d - /tmp/file1.txt /tmp/file2.txt |
od命令
od
命令会读取所指定的文件的内容,并将其内容以八进制字节码呈现出来。
语法
1 | od [OPTION]... [FILE]... |
参数
-A, --address-radix=RADIX
: 选择要以何种基数计算字码。-j, --skip-bytes=BYTES
: 跳过设置的字符数目。-N, --read-bytes=BYTES
: 到设置的字符数目为止。-S BYTES, --strings[=BYTES]
: 输出至少BYTES
图形字符的字符串,未指定BYTES
时默认3
。-t, --format=TYPE
: 设置输出格式。-v, --output-duplicates
: 输出时不省略重复的数据。-w[BYTES], --width[=BYTES]
: 设置每列的最大字符数。--help
: 显示帮助信息。--version
: 显示版本信息。
格式控制
-a
: 与-t a
相同,选择命名字符。-b
: 与-t o1
相同,选择八进制字节。-c
: 与-t c
相同,选择ASCII
字符或反斜杠转义。-d
: 与-t u2
相同,选择无符号十进制2
字节单位。-f
: 与-t fF
相同,选择浮点数。-i
: 与-t dI
相同,选择十进制整数。-l
: 与-t dL
相同,选择十进制长。-o
: 与-t o2
相同,选择八进制2
字节单位。-s
: 与-t d2
相同,选择十进制2
字节单位。-x
: 与-t x2
相同,选择十六进制2
字节单位。d[SIZE]
: 有符号十进制,每个整数SIZE
个字节。f[SIZE]
: 浮点数,每个整数SIZE
个字节。o[SIZE]
: 八进制,每个整数SIZE
个字节。u[SIZE]
: 无符号十进制,每个整数SIZE
个字节。x[SIZE]
: 十六进制,每个整数SIZE
个字节。
示例
输出文件八进制字节码。
1 | od /tmp/file.txt |
使用单字节八进制解释进行输出,左侧的默认地址格式为八字节。
1 | od -c /tmp/file.txt |
使用ASCII
码进行输出,其中包括转义字符,左侧的默认地址格式为八字节。
1 | od -t d1 /tmp/file.txt |
netstat命令
netstat
命令显示各种网络相关信息,例如网络连接、路由表、接口统计信息、伪装连接、多播成员身份等。
语法
1 | netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw|-w] |
参数
netstat
打印的信息类型由第一个参数控制,该参数是以下参数之一:
(none)
: 默认情况下,netstat
显示打开的套接字列表,如果未指定任何地址族,则将打印所有已配置地址族的活动套接字。--route, -r
: 显示内核路由表,netstat -r
和route -e
产生相同的输出。--groups, -g
: 显示IPv4
和IPv6
的多播组成员身份信息。--interfaces, -i
: 显示所有网络接口的表。--masquerade, -M
: 显示伪装的连接列表。--statistics, -s
: 显示每个协议的摘要统计信息。
在第一个参数之后,以下选项指定netstat
的报告行为:
--verbose, -v
: 通过详细操作告诉用户发生了什么,特别是打印一些有关未配置地址族的有用信息。--wide, -W
: 使用指定宽度而不根据使用输出来截断IP
地址,为了不破坏现有的脚本,这是可选的。--numeric, -n
: 显示数字地址,而不是尝试确定符号主机、端口或用户名。--numeric-hosts
: 显示数字主机地址,但不影响端口或用户名的解析。--numeric-ports
: 显示数字端口号,但不影响主机名或用户名的解析。--numeric-users
: 显示数字用户id
,但不影响主机名或端口名的解析。--protocol=family, -A
: 指定要显示其连接的地址族(低级协议),该族是逗号分隔的地址族关键字列表,如inet
、unix
、ipx
、ax25
、netrom
和ddp
,这与使用--inet
、-unix(-x)
、-ipx
、-ax25
、-netrom
和--ddp
选项具有相同的效果,地址族inet
包括raw
、udp
和tcp
协议套接字。-c, --continuous
: 使netstat
每秒连续打印所选信息。-e, --extend
: 显示附加信息,使用此选项两次以获得最大细节。-o, --timers
: 包括与网络计时器相关的信息。-p, --program
: 显示PID
进程标识符和每个套接字所属的程序的名称。-l, --listening
: 只显示监听套接字,这些在默认情况下被省略。-a, --all
: 显示监听和非监听套接字,使用--interfaces
选项显示未启动的接口。-F
: 从FIB
打印路由信息,这是默认设置。-C
: 从路由缓存中打印路由信息。
网络连接
关于活跃的互联网连接TCP
、UDP
、raw
的信息属于以下类别:
Proto
: 套接字使用的协议tcp
、udp
、raw
。Recv-Q
: 连接到此套接字的用户程序未复制的字节数。Send-Q
: 远程主机未确认的字节数。Local Address
: 套接字本地端的地址和端口号,除非指定了--numeric, -n
选项,否则套接字地址将解析为其规范的主机名FQDN
,并且端口号将转换为相应的服务名。Foreign Address
: 套接字远端的地址和端口号,类似于本地地址。State
:socket
的状态,由于在原始套接字raw
模式中没有状态,而且UDP
中通常没有使用状态,因此这一列可以留空,通常这可以是以下值之一,TCP
握手与挥手的过程中通常会经历这些状态。ESTABLISHED
: 套接字已建立连接。SYN_SENT
: 套接字正在积极尝试建立连接。SYN_RECV
: 从网络接收到连接请求。FIN_WAIT1
: 套接字已关闭,连接正在关闭。FIN_WAIT2
: 连接已关闭,套接字正在等待从远端关闭。TIME_WAIT
: 套接字在关闭后正在等待处理仍在网络中的数据包。CLOSE
: 没有使用该套接字。CLOSE_WAIT
: 远端已关闭,等待套接字关闭。LAST_ACK
: 远端已经关闭,套接字已关闭,等待确认。LISTEN
: 套接字正在监听传入的连接,除非指定--listening, -l
或--all, -a
选项,否则此类套接字不包含在输出中。CLOSING
: 两个套接字都关闭了,但我们仍然没有发送所有的数据。UNKNOWN
: 套接字的状态未知。
User
: 套接字所有者的用户名或用户ID(UID)
。PID/Program name
: 进程ID(PID)
和拥有套接字的进程的进程名称之间用斜杠分隔,--program
使该列包括在内,需要超级用户特权才能在不拥有的套接字上查看此信息,此标识信息尚不适用于IPX
套接字。
UNIX域套接字
有关活动UNIX
域套接字的信息属于以下类别:
Proto
: 套接字使用的协议,通常是unix
。RefCnt
: 引用计数,即通过此套接字连接的进程。Flags
: 显示的标志是SO_ACCEPTON
显示为ACC
,SO_WAITDATA(W)
或SO_NOSPACE(N)
,如果未连接的套接字的相应进程正在等待连接请求,则在未连接的套接字上使用SO_ACCECPTON
,其他标志不是正常的关注点。Type
: 套接字访问有几种类型:SOCK_DGRAM
: 套接字用于数据报(无连接)模式。SOCK_STREAM
: 这是一个流(连接)套接字。SOCK_RAW
: 该套接字用作原始套接字。SOCK_RDM
: 这个服务提供可靠的消息传递。SOCK_SEQPACKET
: 这是一个顺序数据包套接字。SOCK_PACKET
: 原始接口访问套接字。
State
: 该字段将包含以下关键字之一:FREE
: 未分配套接字。LISTENING
:套接字正在监听连接请求,仅当指定--listening, -l
或--all, -a
选项时,此类套接字才会包含在输出中。CONNECTING
: 套接字即将建立连接。CONNECTED
: 套接字已连接。DISCONNECTING
: 套接字正在断开连接。(empty)
: 该套接字未连接到另一套接字。
PID/Program name
:打开套接字的进程的进程ID(PID)
和进程名称。Path
: 这是相应进程附加到套接字的路径名。Active IPX sockets
: 活动IPX
套接字的列表。Active NET/ROM sockets
: 活动NET/ROM
套接字的列表。Active AX.25 sockets
: 活动AX.25
套接字的列表。
文件
netstat
使用以下文件:
/etc/services
: 服务转换文件。/proc
:proc
文件系统的挂载点,它以文件层次结构的形式提供对内核状态信息的访问。/proc/net/dev
: 设备信息文件。/proc/net/raw
: 原始套接字信息。/proc/net/tcp
:TCP
套接字信息。/proc/net/udp
:UDP
套接字信息。/proc/net/igmp
:IGMP
多播信息。/proc/net/unix
:Unix
域套接字信息。/proc/net/ipx
:IPX
套接字信息。/proc/net/ax25
:AX25
套接字信息。/proc/net/appletalk
:DDP(appletalk)
套接字信息。/proc/net/nr
:NET/ROM
套接字信息。/proc/net/route
:IP
路由信息。/proc/net/ax25_route
:AX25
路由信息。/proc/net/ipx_route
:IPX
路由信息。/proc/net/nr_nodes
:NET/ROM
节点列表。/proc/net/nr_neigh
:NET/ROM
邻居。/proc/net/ip_masquerade
: 伪装的连接。/proc/net/snmp
: 统计。
示例
显示所有listening
与non-listening
的套接字,并使用管道和less
便于查看当前状态。
1 | netstat -a | less |
列出所有TCP
端口。
1 | netstat -at |
列出所有udp
端口。
1 | netstat -au |
仅列出侦听端口。
1 | netstat -l |
列出所有端口的统计信息。
1 | netstat -s | less |
显示使用TCP
的PID
和程序名。
1 | netstat -pt |
获取内核路由信息。
1 | netstat -r |
获取与ssh
相关的进程的网络信息。
1 | netstat -ap | grep ssh |
获取80
端口的网路状态信息。
1 | netstat -anp |grep :80 |
获取网络接口列表。
1 | netstat -i |
获取网络接口列表与拓展信息。
1 | netstat -ie |
配合awk
命令获取TCP
套接字的状态统计信息。
1 | netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}' |
mv命令
mv
命令用来为文件或目录改名、或将文件或目录移入其它位置。
语法
1 | mv [OPTION] [-T] SOURCE DEST |
参数
--backup[=CONTROL]
: 对每个现有目标文件进行备份。-b
: 像--backup
一样,但是不接受参数。-f, --force
: 若指定目录已有同名文件,覆盖前不提示。-i, --interactive
: 若指定目录已有同名文件,则先询问是否覆盖旧文件。-n, --no-clobber
: 若指定目录已有同名文件,不覆盖此文件。--strip-trailing-slashes
: 从每个源中删除所有结尾的斜杠。-S, --suffix=SUFFIX
: 指定要用于所有备份文件的文件名后缀SUFFIX
,默认值为~
。-t, --target-directory=DIRECTORY
: 将所有源移动到目标目录中,此时目标目录在前,源文件在后。。-T, --no-target-directory
: 将目标视为普通文件,而不是目录。-u, --update
: 如果文件较新,则不会覆盖,仅当目标文件早于源文件或目标文件不存在时才会发生移动。-v, --verbose
: 提供详细的输出,打印每个移动文件的名称。--help
: 显示帮助信息。--version
: 显示版本信息。
语法设置
命令格式 | 运行结果 |
---|---|
mv 文件名 文件名 | 将源文件名改为目标文件名。 |
mv 文件名 目录名 | 将文件移动到目标目录。 |
mv 目录名 目录名 | 目标目录已存在,将源目录移动到目标目录,目标目录不存在则改名。 |
mv 目录名 文件名 | 出错。 |
示例
将file2.txt
更名为file3.txt
。
1 | mv file2.txt file3.txt |
将file.txt
移动到var
目录中。
1 | mv file.txt /var/ |
将dir
目录改名为dirs
。
1 | mv dir dirs |
more命令
more
命令类似less
,以分页的形式浏览文件内容,在more
命令退出后会在shell
上留下操作的内容,在分页浏览时使用h
键输出说明文件。
语法
1 | more [options] [file] |
参数
-d
: 提示使用者,在画面下方显示[Press space to continue, 'q' to quit.]
,如果使用者按错键,则会显示[Press 'h' for instructions.]
而不是滴声。-f
: 计算行数时,以实际上的行数,而非自动换行过后的行数,某些单行字数太长的会被扩展为两行或两行以上。-l
: 取消遇见特殊字元^L
送纸字元时会暂停的功能。-c
: 不进行滚动而是从顶部绘制每个屏幕,清除每行显示的其余部分,跟-p
相似,不同的是先显示内容再清除其他输出。-p
: 不以滚动的方式显示每一页,而是先清除输出后再显示内容。-s
: 当遇到有连续两行以上的空白行,就代换为一行的空白行。-u
: 不显示下划线,根据环境变数TERM
指定的terminal
而有所不同。-<num>
: 指定每屏的行数。+<num>
: 从第num
行开始显示。+/<str>
: 在每个文档显示前搜寻字串str
,然后从该字串之后开始显示。-V
: 显示版本信息。
常用操作
h or ?
: 帮助菜单,显示命令的摘要。SPACE
: 显示接下来的k
行文本,默认为当前屏幕尺寸。Enter
: 向下n
行,需要定义,默认为1
行。Ctrl+F
: 向下滚动一屏。Ctrl+B
: 返回上一屏。=
: 输出当前行的行号。:f
: 输出文件名和当前行的行号。V
: 调用vi
编辑器。! <cmd>
: 调用Shell
,并执行命令。q
: 退出more
命令。
示例
分页显示/var/log/ufw.log
文件内容。
1 | more /var/log/ufw.log |
从第20
行开始显示/var/log/ufw.log
文件内容。
1 | more +20 /var/log/ufw.log |
以1
行分页显示/var/log/ufw.log
文件内容。
1 | more -1 /var/log/ufw.log |
mktemp命令
mktemp
命令用于安全地创建一个临时文件或目录,并输出其名称,TEMPLATE
在最后一个组件中必须至少包含3
个连续的X
,如果未指定TEMPLATE
,则使用tmp.XXXXXXXXXX
作为名称在当前目录下创建相应的临时文件,X
为生成的随机数,尾部的X
将替换为当前进程号和随机字母的组合,文件的名称取决于模板中X
的数量以及与现有文件冲突的数量,mktemp
可以返回的唯一文件名的数量取决于所提供的X
的数量,十个X
将导致mktemp
测试大约26**10
个组合,mktemp
命令创建的临时文件不会使用默认的umask
管理权限值,其会将文件的读写权限分配给文件属主,一旦创建了文件,在shell
脚本中就拥有了完整的读写权限,除root
外其他人不可访问,即在创建文件时即有u+rw
权限,创建文件夹时有u+rwx
权限。
语法
1 | mktemp [OPTION] [TEMPLATE] |
参数
-d, --directory
: 创建目录,而不是文件。-u, --dry-run
: 在mktemp
退出之前,临时文件将被取消链接,相当于不创建任何文件或文件夹,仅输出名称,不建议使用该选项。-q, --quiet
: 执行时若发生错误,不会输出任何信息。--suffix=SUFF
: 将STUFF
附加到TEMPLATE
,SUFF
不能包含斜线,如果TEMPLATE
不以X
结尾,则默认此选项。-p <DIR>, --tmpdir <DIR>
: 生成临时文件时使用指定的目录作为目标。-t
: 将目标文件存储在临时目录,该目录首先会选择用户的TMPDIR
环境变量,其次是用户指定的-p
参数选择的目录,最后的选择即/tmp
目录,创建后会输出临时文件的全路径。--help
: 输出帮助选项。--version
: 输出版本信息。
示例
在当前目录创建临时文件。
1 | mktemp tmp.XXX |
创建指定文件类型的临时文件。
1 | mktemp tmp.XXX --suffix=.txt |
在指定目录创建临时文件。
1 | mktemp --tmpdir=/home tmp.XXX |
mc命令
mc
是一个基于字符的目录浏览器和文件管理器,其将熟悉的图形文件管理器和常见的命令行工具联系在一起,mc
的设计基于文件管理器中双目录窗格的设计,其中同时显示两个目录的列表,可以执行所有常见的文件和目录操作,例如复制、移动、重命名、链接和删除等,也允许操纵文件和目录权限等操作。
语法
1 | mc [option] [file] |
参数
--configure-options
: 打印配置选项。-e, --edit=<file>
: 以mc
模式下编辑文件。-f, --datadir
: 打印数据目录。-F, --datadir-info
: 打印有关使用的数据目录的扩展信息。-h, --help
: 显示帮助。--help-all
: 显示所有帮助选项。--help-terminal
: 终端选项。--help-color
: 颜色选项。-l, --ftplog=<file>
: 将ftp
对话框记录到指定文件。-P, --printwd=<file>
: 将最后一个工作目录打印到指定文件。-u, --nosubshell
: 禁用subshell
支持。-U, --subshell
: 启用subshell
支持,默认选项。-v, --view=<file>
: 在文件上启动文件查看器。
示例
启动Midnight Commander
管理器。
1 | mc |
lsattr命令
lsattr
命令用于显示文件的属性。
语法
1 | lsattr [-RVadlv] [file | folder] |
参数
-a
: 显示所有文件和目录,包括以.
为名称开头字符的额外内建,即现行目录.
与上层目录..
。-d
: 显示目录名称,而非其内容。-l
: 指出要显示设备的逻辑名称。-R
: 递归处理,将指定目录下的所有文件及子目录一并处理。-v
: 显示文件或目录版本。-V
: 显示版本信息。
文件属性
a
: 使文件或目录仅供附加用途。b
: 不更新文件或目录的最后存取时间。c
: 将文件或目录压缩后存放。d
: 将文件或目录排除在倾倒操作之外。i
: 不得任意更动文件或目录。s
: 保密性删除文件或目录。S
: 即时更新文件或目录。u
: 预防意外删除。
示例
查看file.txt
文件的属性。
1 | lsattr file.txt |
显示所有文件和目录的属性。
1 | lsattr -a |
递归处理将/tmp/
目录下的所有文件及子目录一并处理。
1 | lsattr -R /tmp/ |
look命令
look
命令用于查询单词,仅需指定欲查询的字首字符串,它会显示所有开头字符串符合该条件的单词。
语法
1 | look [-bdf] [-t char] string [file ...] |
参数
-a, --alternative
: 使用备用字典文件。-d, --alphanum
: 使用普通字典字符集和顺序,即只比较空格和字母数字字符。如果未指定文件,则默认情况下此选项处于启用状态。-f, --ignore-case
: 忽略字母字符的大小写,如果未指定文件,则默认情况下此选项处于启用状态。-t, --terminate character
: 指定一个字符串终止字符,即仅比较字符串中直到第一个出现的字符,包括第一个出现的字符。-V, --version
: 输出版本信息。-h, --help
: 输出帮助信息。
示例
使用look
查找以ab
开头的单词。
1 | look ab |
在文件中查找以L
开头的单词并列出全句。
1 | # file.txt |
1 | look L file.txt |
在上述示例中使用-t
指定字符串终止字符,即仅比较字符串中第一次出现之前(包括第一次出现)的字符。
1 | look -t E HEO file.txt |
locate命令
locate
命令用于查找符合条件的文件,其会去保存文件和目录名称的数据库内,查找符合指定条件的文件或目录,locate
命令预设的数据库位于/var/lib/mlocate/mlocate.db
,locate
与find
不同,find
是去硬盘找,而locate
只在数据库中查找,这个数据库中含有本地所有文件信息,Linux
系统自动创建这个数据库,并且每天自动更新一次,所以使用locate
命令查不到最新变动过的文件,可以主动执行updatedb
命令以更新数据库。
语法
1 | locate [OPTION] [PATTERN] |
参数
-b, --basename
: 仅将基本名称与指定的模式匹配。-c, --count
: 在标准输出上不输出文件名,而只输出匹配条目的数量。-d, --database <DBPATH>
: 用指定的数据库替换默认数据库,如果指定了多个--database
选项,则结果路径是单独路径的串联,此外空数据库文件名将替换为默认数据库。-e, --existing
: 仅打印引用定位时存在的文件的条目。-L, --follow
: 在检查文件是否存在时,遵循尾随的符号链接,这会使将导致断开的符号链接从输出中省略,这是默认行为。-h, --help
: 在线帮助。-i, --ignore-case
: 匹配模式时忽略大小写区别。-l, --limit, -n <LIMIT>
: 找到LIMIT
个条目后成功退出,如果指定了--count
选项,则结果计数也将限制为LIMIT
。-m, --mmap
: 出于BSD
和GNU
兼容性而被忽略。-P, --nofollow, -H
: 在检查文件是否存在时,不跟随尾随的符号链接,这会使断开的符号链接像其他文件一样被报告。-0, --null
: 使用ASCII NUL
字符分隔输出上的条目,而不是将每个条目写在单独的行上,此选项旨在与GNU xargs
的--null
选项互操作。-S, --statistics
: 将每个有关读取数据库的统计信息写入标准输出,而不是搜索文件并成功退出。-q, --quiet
: 不输出任何有关读取和处理数据库时遇到的错误的消息。-r, --regexp <REGEXP>
: 搜索基本的正则表达式,如果使用此选项,则不允许使用模式匹配,但可以多次指定此选项。--regex
: 将所有PATTERN
解释为扩展的正则表达式。-s, --stdio
: 出于BSD
和GNU
兼容性而被忽略。-V, --version
: 输出版本信息。-w, --wholename
: 将整个路径名与指定的模式匹配,这是默认行为。
示例
查找file.txt
文件。
1 | locate file.txt |
输出匹配file.txt
文件名的数量。
1 | locate -c file.txt |
匹配以make
结尾的文件。
1 | locate -r make$ |
ln命令
ln
命令用来为文件创建链接,链接类型分为硬链接和软链接两种,软链接又称符号链接,默认的链接类型是硬链接,如果要创建符号链接必须使用-s
选项,符号链接文件不是一个独立的文件,其很多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
语法
1 | ln [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] [--help] [...] [origin] [target] |
参数
-b, --backup
: 删除,覆盖目标文件之前的备份。-d, -F, --directory
: 建立目录的硬链接。-f, --force
: 强行建立文件或目录的链接,不论文件或目录是否存在。-i, --interactive
: 覆盖既有文件之前先询问用户。-n, --no-dereference
: 把符号链接的目的目录视为一般文件。-s, --symbolic
: 对源文件建立符号链接,而非硬链接。-S <backup-suffix>, --suffix=<backup-suffix>
: 用-b
参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号~
,用户可通过-S
参数来改变它。-v, --verbose
: 显示指令执行过程。-V <backup method>, --version-control=<backup method>
: 用-b
参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用-S
参数变更,当使用-V
参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串。--help
: 在线帮助。--version
: 显示版本信息。
链接方式
软链接
- 软链接以路径的形式存在,类似于
Windows
操作系统中的快捷方式。 - 软链接可以 跨文件系统,硬链接不可以。
- 软链接可以对一个不存在的文件名进行链接。
- 软链接可以对目录进行链接。
硬链接
- 硬链接,以文件副本的形式存在,但不占用实际空间。
- 不允许给目录创建硬链接。
- 硬链接只有在同一个文件系统中才能创建。
示例
为file.txt
创建软链接filesoftlink
。
1 | ln -s file.txt filesoftlink |
为file.txt
创建硬链接filehardlink
。
1 | ln file.txt filehardlink |
显示版本信息。
1 | ln --version |
less命令
less
命令的作用与more
相似,都可以用来浏览文件的内容,用less
命令显示文件时,使用pageup
键向上翻页,使用pagedown
键向下翻页,使用↑
与↓
按行浏览,使用q
退出浏览,less
在加载时不必读整个文件,加载速度会比more
更快,less
退出后shell
不会留下刚显示的内容,而more
退出后会在shell
上留下刚显示的内容。
语法
1 | less [option] [file] |
参数
-b <buffer size>
: 设置缓冲区的大小。-e
: 当文件显示结束后,自动离开。-f
: 强迫打开特殊文件,例如外围设备代号、目录和二进制文件。-g
: 只标志最后搜索的关键词。-i
: 忽略搜索时的大小写。-m
: 显示类似more
命令的百分比。-N
: 显示每行的行号。-o <file>
: 将less
输出的内容在指定文件中保存起来。-Q
: 不使用警告音。-s
: 显示连续空行为一行。-S
: 行过长时将超出部分舍弃。-x <num>
: 将tab
键显示为规定的数字空格。
常用操作
ctrl + F
: 向前移动一屏。ctrl + B
: 向后移动一屏。ctrl + D
: 向前移动半屏。ctrl + U
: 向后移动半屏。j
: 向前移动一行k
: 向后移动一行/string
: 向下搜索字符串的功能。?string
: 向上搜索字符串的功能。n
: 重复前一个搜索,与/
或?
有关。N
: 反向重复前一个搜索,与/
或?
有关。b
: 向上翻一页。d
: 向后翻半页。h
: 显示帮助界面。Q
: 退出less
命令。u
: 向前滚动半页。y
: 向前滚动一行。space
: 滚动一页。enter
: 滚动一行。pageup
: 向上翻动一页。pagedown
: 向下翻动一页。G
: 移动到最后一行。g
: 移动到第一行。q / ZZ
: 退出less
命令。v
: 使用配置的编辑器编辑当前文件。h
: 显示less
的帮助文档。&pattern
: 仅显示匹配模式的行,而不是整个文件。ma
: 使用a
标记文本的当前位置。a
: 导航到标记a
处。
示例
浏览file.txt
文件。
1 | less file.txt |
ps
查看进程信息并通过less
分页显示。
1 | ps -ef | less |
查看file.txt
文件并检索向后检索1
字符串。
1 | less file.txt |
kill命令
kill
命令向指定的pid
进程发送信号,如果不指定要发送的signal
信号,则默认情况下signal
是SIGTERM
,它会终止进程,要列出所有可用信号,可以使用-l
选项获取Linux
信号列表,经常使用的信号包括HUP
、INT
、KILL
、STOP
、CONT
和0
,可以通过三种方式指定信号: 按数字例如-9
,带有SIG
前缀例如-SIGKILL
,不带SIG
前缀例如-KILL
。负PID
值用于指示过程组ID
,如果传递了进程组ID
,则该组中的所有进程都将接收到该信号,PID
为-1
是特殊的,其指示除两个以外的所有进程,kill
进程本身和init
即PID 1
,其是系统上所有进程的父进程,将-1
指定为目标会将信号发送到除这两个以外的所有进程。
语法
1 | kill pid ... |
参数
-signal, -s signal
: 要发送的信号的名称、缩写名或编号,前面有破折号,例如-SIGTERM
、-TERM
、-15
等,要查看可用信号的列表可以使用kill -l
。pid
: 数字进程ID
,如果不确定某个进程的PID
是什么,可以使用ps
命令将其列出例如ps -aux
,通常会配合管道与grep
使用例如查看nginx
相关的进程ps -aux | grep nginx
。-l, --list[=signal]
: 列出可用的信号名称,用-l
或--list
列出所有信号名称,使用--list = signal
,可将数字转换为其信号名称。-L, --table
: 在表格中列出可用的信号名称和编号。
信号
下列的某些信号是不能使用的,因为系统有可能不支持这些信号,或者这些信号已中断,详情可以实际查阅系统的kill -l
命令。每个系统都有信号1
、3
、9
和15
,这些是最常见的信号。终止信号不仅用于关闭锁定的应用程序,还可以阻止软件执行不允许的任务,这意味着其中一些终止信号是安全的一部分,另外kill
命令不仅停止/
终止进程,而且还暂停,继续和重新启动进程。
1 | 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP |
SIGHUP
:SIGHUP
信号用于断开进程与父进程的连接,这也可以用于重新启动进程,这对于内存泄漏的守护程序很有用。SIGINT
: 该信号与按Ctrl+C
相同,在某些系统上delete + break
会向进程发送相同的信号,该进程被中断并停止,但是该进程自身可以忽略此信号。SIGQUIT
: 这类似于SIGINT
,但由于QUIT
字符通常是由Ctrl+\
来控制,进程在收到SIGQUIT
退出时会产生core
文件, 在这个意义上类似于一个程序错误信号。SIGILL
: 当一个进程执行一个错误的、禁止的或未知的功能时,系统向该进程发送SIGILL
信号,这是代表非法操作的信号。SIGTRAP
: 此信号用于调试目的,当某个进程执行了某个操作或满足了调试器正在等待的条件时,此信号将被发送到该进程。SIGABRT
: 该终止信号是中止信号,通常进程会在自身上发出此终止信号。SIGBUS
: 当一个进程被发送SIGBUS
信号时,是因为该进程导致了一个总线错误,通常这些总线错误是由于进程试图使用假物理地址或进程的内存对齐设置不正确造成的。SIGFPE
: 被零除的进程使用SIGFPE
终止。SIGKILL
:SIGKILL
信号强制进程立即停止执行,程序不能忽略该信号,此过程也无法清除。SIGUSR1
: 这表示用户定义的条件,用户可以通过在sigusr1.c
中编程命令来设置此信号。SIGSEGV
: 当应用程序有分段冲突时,这个信号被发送到进程。SIGUSR2
: 这表示用户定义的条件。SIGPIPE
: 当进程尝试写入缺少与读取器连接的一端的管道时,此信号将发送到进程,读取器是在管道末端读取数据的过程。SIGALRM
: 当实时或时钟计时器到期时,将发送SIGALRM
。SIGTERM
: 该信号请求进程停止运行,该信号可以被程序自身忽略,该过程有时间正常关闭,当程序正常关闭时,这意味着它有时间保存进度并释放资源,换句话说即它不被迫停止。SIGCHLD
: 当父进程丢失其子进程时,将向父进程发送SIGCHLD
信号,这将清理子进程使用的资源,子进程指的是由另一个称为父进程的进程启动的进程。SIGCONT
: 要使进程在被SIGTSTP
或SIGSTOP
信号暂停后继续执行,需要将SIGCONT
信号发送到已暂停的进程,这是CONTiNUE SIGNAL
,该信号对Unix
作业控制执行后台任务很有帮助。SIGSTOP
: 该信号使操作系统暂停进程的执行,进程自身不能忽略该信号。SIGTSTP
: 这个信号类似于按下Ctrl+Z
,它向包含进程的终端发出请求,请求进程暂时停止,进程自身可以忽略该信号。SIGTTIN
: 当进程试图从tty
终端读取数据时,进程接收到这个信号。SIGTTOU
: 当某个进程尝试向tty
终端进行写操作时,该进程将收到此信号。SIGURG
: 当进程中有紧急数据要读取或数据非常大时,SIGURG
信号将发送到该进程。SIGXCPU
: 当某个进程在分配的时间之后使用CPU
时,系统将向该进程发送该信号,SIGXCPU
的行为就像一个警告,该进程有时间保存进度(如果可能)并在系统使用SIGKILL
终止该进程之前将其关闭。SIGXFSZ
: 文件系统对文件的大小有限制,当程序尝试违反此限制时,系统将发送该过程SIGXFSZ
信号。SIGVTALRM
:SIGVTALRM
在进程使用的CPU
时间结束时发送。SIGPROF
: 当进程以及由系统代表进程使用的CPU
时间过去时,将发送SIGPROF
信号。SIGWINCH
: 当进程在更改其大小的终端中时,该进程将接收此信号。SIGIO
:SIGPOLL
的别名或至少表现得很像SIGPOLL
。SIGPWR
: 电源故障将导致系统将该信号发送到进程,如果系统仍在运行。SIGSYS
: 为系统调用提供无效参数的进程将接收此信号。SIGRTMIN*
: 这是一组在系统之间变化的信号,它们被标记为SIGRTMIN + 1
、SIGRTMIN + 2
、SIGRTMIN + 3
、...
,通常最多15
个,这些是用户定义的信号,它们必须在Linux
内核的源代码中进行编程。SIGRTMAX*
: 这是一组在系统之间变化的信号,它们被标记为SIGRTMAX-1
、SIGRTMAX-2
、SIGRTMAX-3
、...
,通常最多14
个,这些是用户定义的信号,它们必须在Linux
内核的源代码中进行编程。SIGEMT
: 指示一个实现定义的硬件故障。SIGINFO
: 终端有时可能会向进程发送状态请求,发生这种情况时,进程也将收到此信号。SIGLOST
: 试图访问锁定文件的进程将收到此信号。SIGPOLL
: 当进程引起异步I/O
事件时,会向该进程发送SIGPOLL
信号。
示例
要显示所有可用信号,查看信号的详细信息可以使用man
命令,例如信号7 SIGBUS
即使用man 7 signal
。
1 | kill -l |
在表格中列出可用的信号名称和编号。
1 | kill -L |
终端断线,重新加载配置文件,平滑重启。
1 | kill -1 111 |
通知进程关闭,使进程自行关闭,这个关闭是安全、干净地退出,如果kill
命令后直接加进程的pid
号默认选项为-15
,这个信号是可以被进程自身忽略并继续执行自身的,即该信号是可以被阻塞和忽略的。
1 | kill -15 111 |
强行中断当前程序的执行,类似Ctrl+C
按键用以结束进程的结果,该信号是可以被阻塞和忽略的。
1 | kill -2 111 |
退出进程,类似Ctrl+\
按键用以结束进程的结果,该信号是可以被阻塞和忽略的。
1 | kill -3 111 |
强行关闭进程,-9
信号是无条件终止,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理,该信号是不可以被阻塞和忽略的,当然通常是不建议使用kill -9
的,应该尝试使用-15
以及-2
给目标进程一个清理自身资源工作的机会,不要用收割机来修剪花盆里的花。
1 | kill -9 111 |
暂停进程,对于暂停信号进程自身不能忽略该信号。
1 | kill -19 111 |
激活进程,对于激活信号必须发送到已暂停的进程才有效。
1 | kill -18 111 |
- 0鼓励
- 0菜狗
- 0正确
- 0错误
- 0思考
- 0无聊