Linux 常用命令

ps 命令

ps 命令是 Process Status 的缩写,用于显示当前运行在系统上的进程信息,包括进程 ID(PID)、状态、运行时间、CPU 和内存占用等。ps 命令列出的是当前那些进程的快照,就是执行 ps 命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用 top 命令。

1. 参数介绍

ps 命令有许多参数,用于控制输出的格式和内容。常用的参数包括:

  • -e:显示所有进程,包括没有终端的进程,等同于 -A

  • -f:显示完整格式的输出,包括进程的父进程 ID(PPID)、用户 ID(UID)、CPU 占用等。通常和其他选项联用。用树形格式来显示进程;如:ps -ef 等

  • -l:显示长格式输出,包括进程的命令行。

  • u:使用详细格式显示进程信息,包括进程的所有者、CPU 占用率(%)、内存占用率(%)等

  • a:显示终端上的所有进程,包括其他用户的进程

  • x:显示没有控制终端的进程,即后台运行的进程

  • -o:自定义输出格式,可以指定要显示的列

  • -r:按 CPU 使用率排序,显示 CPU 使用率最高的进程

  • -N: 反选,显示不符合指定条件的进程

2. 使用方法实例

显示所有进程的详细信息(包括后台运行的进程)

  • USER:表示哪个用户启动了这个进程

  • PID :进程 ID

  • %CPU:进程 CPU 的占用率

  • %MEM:进程物理内存的占用率

  • VSZ :进程占用的虚拟内存量 (Kbytes)

  • RSS :进程当前实际上占用了多少内存

  • TTY :进程是在哪个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

  • STAT:该程序目前的状态,主要的状态有

    • R :运行;该程序目前正在运作,或者是可被运作

    • D:不可中断:一般是 IO 进程

    • S :中断;该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。

    • T :停止:该程序目前正在侦测或者是停止了

    • Z :僵尸:该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (僵尸) 程序的状态

  • START:该进程启动的时间点

  • TIME :进程从启动后到现在,实际占用 CPU 的总时间

  • COMMAND:启动该进程的命令

显示当前所有进程详细信息

  • UID:表示用户 ID

  • PID:表示进程 ID

  • PPID:表示父进程号

  • C:表示 CPU 的占用率

  • STIME:进程的启动时间

  • TTY:登入者的终端机位置

  • IME:表示进程执行起到现在总的 CPU 占用时间

  • CMD:表示启动这个进程的命令

显示指定用户的进程信息

显示指定进程的信息

常用实际应用案例

  • 查看系统负载情况:通过 ps aux 命令查看当前系统所有进程的 CPU 和内存占用情况,帮助排查系统负载高的原因。

  • 查找特定进程:通过 ps -ef | grep process_name 查找特定进程的信息,用于监控和管理。

  • 定时监控进程:结合 watch 命令,定时执行 ps 命令,实时监控系统中的进程运行情况。

top 命令

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器

查看所有进程的资源占用情况

查看 top 输出的信息含义arrow-up-right

监控每个逻辑 CPU 的状况

高亮显示当前运行进程

显示 完整命令

切换显示 CPU

按 CPU 使用率从大到小排序

切换显示内存 Memory

按 Memory 占用率从大到小排序

按累计运行时间 Time 从大到小排序

高亮 CPU 列

通过”shift + >”或”shift + <”可以向右或左改变排序列

改变内存的显示单位,默认为 KB

忽略闲置和僵死进程,这是一个开关式命令

sort 命令

sort 的工作原理是将文件的每一行作为一个单位,相互比较,比较原则是从收字符向后,依次按照 ASCII 码值进行比较,最后将它们按升序输出

选项

-u 去除重复行

-r 指定排序方式为降序(从大到小),sort 默认的排序方式是升序

-o 将排序结果写入文件(包括原文件),sort 默认是吧结果输出到标准输出,所以需要用重定向才能将结果写入文件,例如 sort filename > newfile,但是,重定向不能把排序结果输出到原文件(重定向到原文件会清空原文件)

-n 以数值来排序,默认的 ASCII 码值会出现 10 比 2 小的情况

-t 设置间隔符,指定间隔符后就可以用 -k 来指定列数了

-k 指定排序的列数

-f 忽略大小写,会将小写字母都转换为大写字母来进行比较

-b 忽略每行前面的所有空白部分,从第一个可见字符开始比较

-c 检查文件是否已经排好序,如果乱序则输出第一个乱序的行

-M 按月份排序

-V 按版本号排序

-k 详解

详细的语法格式:

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

这个语法格式可以被其中的逗号(“,”)分为两大部分,Start 部分和 End 部分。

“如果不设定 End 部分,那么就认为 End 被设定为行尾”。这个概念很重要的。

Start 部分也由三部分组成,其中的 Modifier 部分就是我们之前说过的类似 n 和 r 的选项部分。我们重点说说 Start 部分的 FStart 和 C.Start。

C.Start 也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2 和-k 3 就是省略了 C.Start 的例子喽。

FStart.CStart,其中 FStart 就是表示使用的域,而 CStart 则表示在 FStart 域中从第几个字符开始算“排序首字符”。

同理,在 End 部分中,你可以设定 FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将 CEnd 设定为 0(零),也是表示结尾到“域尾”

find 命令

预先准备数据

最基础的打印操作

通过文件名搜索

-name:仅可以对文件的 file_name 匹配

-path:可以对文件的 dir_name、file_name 匹配

查找的文件名最好使用引号包围,可以配合通配符进行查找

查找 ~/test 下的.txt 文件

在~/test 下查找 cool 文件夹下的.txt 文件

通过文件的类型来搜索

-type : d 目录、f 文件、b 块设备、c 字符设备、p 管道、l 符号链接

在~/test 目录下查找所有的目录

在~/test 目录下查找所有的文件

通过文件的时间来搜索

在~/test 目录下查找修改时间在 5 日以内的文件

在~/test 目录下查找修改时间在 3 日以前的.txt 文件

在~/test 目录下查找更改时间在 5 分钟以内的.txt 文件

在~/test 目录下查找修改时间在 10 分钟以前的文件

通过文件大小来搜索

-size n[cwbkMG]

n 为:

  • b:512 字节的块(默认),1b = 512c

  • c:bytes,指定字节大小

  • w:等价于两个 bytes,1w=2c,一般用户匹配中文

  • k:平时常说的 1kb,1k=1024c=2b

  • M:1MB,1M=1024k=2048b

  • G:1GB,1GB=1024MB=2048*1024b

在~/test 目录下查找所有 size=0 字节的文件

在~/test 目录下查找所有 size<100k 的文件

在~/test 目录下查找所有 size>1MB 的文件

通过编程中的“与、或、非”来搜索

  • -a:与,即&&(默认都是与)

  • -o:或:即||

  • -not:非,即条件结果取反

在~/test 目录下查找文件大小在 1kb 和 10kb 内的所有文件

在~/test 目录下查找大于 1kb 或类型为普通文件的文件

在~/test 目录下查找非空文件

搜索空文件

通过文件所属用户搜索

通过文件所属组 group 搜索

搜索第一层的文件

curl 命令

curl 全称 Command Line URL viewer

  • curl 是常用的命令行工具,用来请求 Web 服务器

  • 它的名字就是客户端(client)的 URL 工具的意思

  • 它的功能非常强大,命令行参数多达几十种

  • 如果熟练的话,完全可以取代 Postman 接口测试工具

提供强大的功能

  • 代理支持

  • 用户身份验证

  • FTP 上传

  • http post

  • SSL 连接

  • cookies

  • 文件传输恢复

  • Metalink

  • 等等

支持的协议

  • DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS

  • IMAP、IMAPS、LDAP、LDAP、POP3、POP3、RTMP、RTSP、SCP、SFTP、SMB

  • SMBS、SMTP、SMTPS、TELNET、TFTP

语法格式: curl [options / URLs]

常见参数

-v

查看请求详细过程

  • 等价参数: --verbose

  • 作用:输出通信的整个过程,用于调试

-X(常用)

  • 等价参数: --request <command>

  • 作用:指定 HTTP 请求的 Method

-d(常用)

  • 等价参数: --data <data>

  • 作用:用于发送 POST 请求的数据体

--data-urlencode(常用)

作用:参数等同于 -d,发送 POST 请求的数据体,但它会自动将发送的数据进行 URL 编码

--data-raw(常用)

作用:POST 请求体,可以接收一个完整的 json 字符串

-H (常用)

-o

  • 等价参数: --output <file>

  • 作用:将服务器的 Responses 保存成文件,等同于 wget 命令

-O

  • 等价参数: --remote-name

  • 作用:将服务器 Responses 保存成文件,并将 URL 的最后部分当作文件名

-A

  • 等价参数: --user-agent <name>

  • 作用:指定客户端的 User-Agent

-b

  • 等价参数: --cookie <data|file>

  • 作用:向服务器发送 Cookie,可以是 data 也可以是一个文件

-c

  • 等价参数: --cookie-jar <filename>

  • 作用:将服务器返回需要设置的 Cookie 写入一个文件

-e

  • 等价参数: --referer

  • 作用:设置 HTTP Headers 里面的 Referer,表示请求的来源

-F

  • 等价参数: --form <name=content>

  • 作用:向服务器上传二进制文件

-G

  • 等价参数: --get

  • 作用:构造 URL 的查询字符串

-i

  • 等价参数: --include

  • 作用:打印 Responses Headers 和响应内容

-I

  • 等价参数: --head

  • 作用:仅打印 Responses Headers

-k

  • 等价参数: --insecure

  • 作用:跳过 SSL 检测

-L

  • 等价参数: --location

  • 作用:让 HTTP 请求跟随服务器的重定向,curl 默认不跟随重定向

--limit-rate

作用:限制 HTTP 请求和回应的带宽,模拟慢网速的环境

-s

  • 等价参数: --silent

  • 作用:静默模式,将不输出错误和进度信息,不发生错误的话,会正常显示运行结果

-S

  • 等价参数: --show-error

  • 作用:只输出错误信息,会让 -s 参数不生效

常用方法,如果正确,则正常输出,如果错误则只输出错误信息,不输出运行结果

-u

--trace

作用:输出通信的整个过程,比 -v 更详细

记录所有的传输数据,包括二进制数据,输出文件可以是一个指定的文件,也可以是标准输出。这个选项非常适用于需要详细了解传输过程的场景。

--trace-ascii

--trace-ascii 选项与 --trace 类似,但它只记录 ASCII 格式的数据,不会记录二进制数据。这对于只关心文本内容的传输调试非常有用。

-w

  • 等价参数: --write-out <format>

  • 作用:完成请求后指定输出格式

完成请求传输后,使 curl 在 stdout 上显示自定义信息 格式是一个字符串,可以包含纯文本和任意数量的变量

输出格式

  • 输出格式中的变量会被 curl 用对应的值替换掉

  • 所有变量的格式为: %{variable name}

  • 要输出一个普通的 % 只需将它们写为 %%

  • 可以使用 \n、带 \r 的回车符和带 \t 的制表符来输出换行符

  • 如果想通过文件来传入变量,可以用 @filename 的格式

变量列表

  • content_type(有用)

    HTTP 请求的 Content-type

  • errormsg(有用)

    错误信息

  • http_code(有用)

    响应码

  • response_code(有用)

    和 http_code 一样,都是响应码

  • local_ip(有用)

    ip 地址,可以是 ipv4,也可以是 ipv6

  • remote_ip(有用)

    目标服务器的远程 IP,可以是 ipv4、ipv6

  • remote_port(有用)

    目标服务器的远程端口

  • size_request(有用)

    HTTP 请求中发送的总字节数

  • time_namelookup(有用)

    DNS 域名解析的耗时,就是把 https://zhihu.com 转换成 ip 地址的过程

  • time_connect(有用)

    TCP 连接建立的时间,就是三次握手的时间

  • time_appconnect(有用)

    SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间

  • time_redirect(有用)

    在最终事务开始之前,所有重定向步骤(包括名称查找、连接、预传输和传输)所用的时间(以秒为单位)

    time_redirect 显示多个重定向的完整执行时间

  • time_pretransfer(有用)

    从请求开始到响应开始传输的时间

  • time_starttransfer(有用)

    从请求开始到第一个字节将要传输的时间

    包括预传输时间和服务器处理结果所需的时间。

  • time_total(有用)

    这次请求花费的全部时间

  • url_effective(有用)

    最后获取的 URL

    如果 curl 添加了 -L 且真的重定向之后,这个就很有用了

“查看”文件指令

cat

more

功能类似 cat ,cat 命令是将整个文件的内容从上到下显示在屏幕上。 more 命令会一页一页的显示,方便使用者逐页阅读

每次显示 5 行

从第 5 行开始显示

每次翻页时,先清空屏幕内容

若遇到连续两行以上的空白行,合并为一行空白行

执行 more 命令后,常用的操作

向下滚动一屏

向上滚动一屏

输出文件名和当前行的行号

进入 vim 编辑器

退出 more 模式

less

less 命令也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大

查看文件

ps 查看进程并通过 less 分页显示

显示当前行数的百分比

显示当前行数/总行数和百分比

显示连续空行为一行

进入 less 模式之后的操作

g:移动到第一行

G:移动到最后一行

u:向前移动半屏

d:向后移动半屏

f:向后移动指定行数或一屏

b:向前移动指定行数或一屏

j:向下移动一行

k:向上移动一行

q:结束 less 模式

主要是用来显示文档的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。

显示文件的前 5 行(两种方式)

显示文件倒数第 5 行之前的内容

显示文件的前 100 个字符

显示文件的第 10 - 20 行

tail

tail 命令主要用于显示指定文档末尾内容。常用查看日志文件。

实时刷新 log

实时刷新最新 50 条 log

显示最后 5 条 log(两种写法)

显示第五条后面的所有 log

操作文件

ls 命令

mkdir 命令

文本内容处理

sed 命令

sed 是一个强大的流编辑器(sed 的全称是 “stream editor”),用于在 Unix 和 Linux 系统中处理和转换文本。它可以用于插入、删除、替换和检索文本内容。

基本语法

  • [options]:一些可选的参数,例如 -i(直接修改文件),-e(多个编辑命令)等。

  • 'command'sed 命令,用单引号包围。

  • file:要处理的文件。

常见用法

1. 替换文本

  • s:表示替换(substitute)。

  • /原文本/新文本/:用新文本替换原文本。

示例:

假设有一个文件 example.txt,内容如下:

使用 sed 替换 HelloHi

输出:

默认情况下,sed 只会替换每行中的第一个匹配项。如果想要替换每行中的所有匹配项,可以在命令末尾添加 g(全局替换):

输出:

2. 直接修改文件内容

使用 -i 选项可以直接修改文件内容,而不是输出到终端:

现在 example.txt 的内容被直接修改为:

3. 删除行

删除包含特定模式的行:

示例:

删除包含 Hello 的行:

输出:

(所有行都被删除,因为每行都包含 Hello)

4. 插入行

在特定行之前插入文本:

示例:

在第一行前插入 Welcome to

输出:

5. 替换特定行的文本

替换特定行的文本:

示例:

替换第二行的 HiHello

输出:

组合命令

可以组合多个命令来处理文件:

示例:

先删除包含 Hello 的行,再将 Hi 替换为 Hello

输出:

awk 命令

awk 是一种强大的文本处理工具,常用于分析和处理文本文件中的数据。它基于一种编程语言,能够扫描文本文件,并对匹配的行执行指定的操作。

基本语法

  • pattern:模式,表示 awk 处理哪些行。

  • { action }:动作,表示 awk 对匹配行进行哪些操作。

  • file:要处理的文件。

常见用法

1. 打印指定列

假设有一个文件 example.txt,内容如下:

要打印文件中的第一列和第三列,可以使用:

输出:

$1 表示第一列,$3 表示第三列。

2. 基于模式进行匹配和操作

打印包含 Jane 的行:

输出:

3. 计算列的总和

假设有一个文件 numbers.txt,内容如下:

计算第一列的总和:

输出:

{ sum += $1 }:遍历每一行,将第一列的值累加到变量 sum 中。END { print sum }:在处理完所有行后,打印 sum 的值。

4. 条件判断和操作

假设有一个文件 students.txt,内容如下:

打印分数大于 80 的学生:

输出:

$2 > 80:条件,表示分数大于 80。

awk 是一个强大的文本处理工具,其 printprintf 命令分别用于输出数据。虽然它们都能输出文本,但使用方法和场景有所不同。

  • print:简单灵活,适用于基本的输出需求,使用默认分隔符输出各字段,支持自定义分隔符。

  • printf:精确格式化输出,适用于需要特定格式的场景,类似于 C 语言的 printf,支持更复杂的格式控制。

print 基本用法

  • $1$2:表示第一列和第二列。

  • ,:分隔符,print 会在各字段之间添加默认的输出分隔符(通常是空格)。

print 示例

假设有一个文件 data.txt,内容如下:

  1. 打印第一列和第二列:

输出:

  1. 在列之间添加自定义分隔符:

输出:

printf 基本用法

  • format:格式字符串,指定输出格式。

printf 示例

继续使用 data.txt 文件。

  1. 打印第一列和第二列,以固定宽度格式输出:

输出:

  • %s:字符串格式。

  • %-10s:左对齐,占 10 个字符宽度。

  • %-4s:左对齐,占 4 个字符宽度。

  • :换行符。

  1. 打印第一列和第二列,以指定的小数点位数输出:

假设我们有一个文件 grades.txt,内容如下:

使用 printf 格式化输出:

输出:

  • %.2f:浮点数格式,保留两位小数。

printprintf 详细示例

假设有一个文件 employees.txt,内容如下:

  1. 使用 print 命令输出:

输出:

  1. 使用 printf 命令格式化输出:

输出:

  • %-10s:左对齐,占 10 个字符宽度。

  • %2d:整数,至少占 2 个字符宽度。

  • %10.2f:浮点数,占 10 个字符宽度,保留两位小数。

通过这些示例,你可以看到 printprintf 各自的特点和适用场景,选择合适的命令来满足你的输出需求。

awk 实际例子

1. 处理 CSV 文件

假设有一个 CSV 文件 employees.csv,内容如下:

打印员工姓名和工资:

输出:

-F,:指定逗号作为分隔符。

2. 条件过滤和统计

统计工资大于 5500 的员工数量:

输出:

$3 > 5500:条件,表示工资大于 5500。{ count++ }:如果条件满足,则计数器 count 增加 1。END { print "Number of employees with salary > 5500: " count }:在处理完所有行后,打印计数器 count 的值。

grep

grep 用于在文件或文本输出中搜索特定的模式。它支持正则表达式,可以进行复杂的文本匹配和筛选操作。

基本语法

  • pattern:要搜索的模式,可以是普通字符串或正则表达式。

  • file:要搜索的文件(可以是多个文件)。

常见选项

  • -i:忽略大小写。

  • -v:反转匹配,显示不包含匹配模式的行。

  • -r-R:递归搜索目录中的文件。

  • -n:显示匹配行的行号。

  • -l:只显示包含匹配模式的文件名。

  • -c:显示匹配的行数。

  • -o:只显示匹配到的部分。

  • -e: 只能传递一个参数。在单条命令中使用多个 -e 选项,得到多个 pattern,以此实现 OR 操作。

  • -E: 选项可以用来扩展选项为正则表达式。 如果使用了 grep 命令的选项 -E,则应该使用 | 来分割多个 pattern,以此实现 OR 操作

实例说明

1. 基本搜索

在文件 example.txt 中搜索包含 Hello 的行:

假设 example.txt 的内容如下:

输出:

2. 忽略大小写搜索

在文件 example.txt 中搜索包含 hello(不区分大小写)的行:

输出:

3. 反转匹配

显示文件 example.txt 中不包含 Hello 的行:

输出:

4. 显示行号

显示文件 example.txt 中包含 Hello 的行及其行号:

输出:

5. 搜索多个文件

在文件 file1.txtfile2.txt 中搜索包含 pattern 的行:

输出示例(假设两个文件都有匹配项):

6. 递归搜索

在目录 mydir 中递归搜索包含 pattern 的文件:

输出示例(假设目录中有匹配项):

7. 只显示文件名

显示包含 pattern 的文件名,而不显示匹配的具体内容:

输出示例(假设匹配的文件是 file1.txt 和 file2.txt):

8. 显示匹配的行数

统计文件 example.txt 中包含 Hello 的行数:

输出:

9. 只显示匹配的部分

在文件 example.txt 中只显示匹配到的 Hello

输出:

组合使用

你可以将 grep 与其他命令组合使用,以实现更复杂的功能。例如,使用管道将 ls 的输出传递给 grep,以搜索包含特定模式的文件名:

假设当前目录中的文件名如下:

输出:

Last updated