1 grep 命令

grep 命令是一个强大的文本搜索工具,它使用正则表达式来搜索文件,并输出匹配的行。它的名字来源于全局正则表达式打印(global regular expression print)的缩写。在 UNIX 和类 UNIX 系统中,grep 被广泛用于各种场景,从简单的文件搜索到管道命令中复杂的数据分析。

1.1 基本语法

grep [选项] [模式] [文件...]
  • [选项]:grep 的行为可以通过选项进行控制,例如 -i(忽略大小写),-v(反转匹配),-r(递归搜索)等。

  • [模式]:这是你想要搜索的文本模式,可以是字符串或正则表达式。

  • [文件…]:这是你想要搜索的一个或多个文件名。如果没有指定文件,grep 通常会读取标准输入。

1.2 常用选项

  • -i:忽略大小写

  • -v:显示不包含匹配文本的行

  • -c:计算匹配的行数

  • -n:显示匹配的行号

  • -r 或 -R:递归地搜索所有文件

  • -l:只打印包含匹配项的文件名

  • -e:指定多个搜索模式

  • –color:将匹配的文本高亮显示

  • -o:仅显示匹配部分

  • -E:使用扩展正则表达式

1.3 示例

# 搜索文件 file.txt 中包含 "pattern" 的所有行
grep "pattern" file.txt

# 忽略大小写搜索 "pattern"
grep -i "pattern" file.txt

# 递归搜索当前目录及子目录中所有包含 "pattern" 的文件
grep -r "pattern" .

# 只显示文件名,不显示匹配的内容
grep -rl "pattern" .

# 计数有多少行包含 "pattern"
grep -c "pattern" file.txt

# 使用正则表达式匹配单词 "start" 开头的行
grep "^start" file.txt

# 使用扩展正则表达式搜索三个字符长的单词
grep -E "\b\w{3}\b" file.txt

# 使用管道命令结合 grep 搜索特定进程
ps aux | grep "httpd"

# 在多个文件中搜索,同时显示行号
grep -n "pattern" file1.txt file2.txt

2 ps 命令

ps 命令是“Process Status”的缩写,它是一个在Unix、Linux以及类Unix操作系统中用来显示当前系统中运行的进程的状态的工具。这个命令非常强大,它可以与各种选项和参数一起使用,以提供不同级别的详细信息。

ps 截取一瞬间进程信息,但不会动态显示和更新进程信息,如果需要重复更新进程信息请使用 top 命令。

2.1 ps 命令选项

ps aux

  • a:显示关于其他用户的进程。

  • u:以用户友好的格式显示进程信息,提供更多关于进程的详细信息,如用户名称、CPU 使用率、内存使用率等。

  • x:显示没有控制终端的进程。这通常包括了大多数系统守护进程(daemon)和后台进程。

Alt text

组合使用 ps aux` 参数,可以让你查看系统中所有进程的一个全面快照,包括其他用户的进程和没有终端的后台进程。这是一个非常常用的选项组合,因为它提供了关于系统当前进程状态的广泛视图。

名称 含义
USER 进程拥有者的用户名
PID 进程的ID
%CPU 自进程启动以来,它占用的CPU使用百分比
%MEM 进程占用的物理内存的百分比
VSZ 虚拟内存大小(Virtual Memory Size),以千字节Kb为单位
RSS 实际内存大小(Resident Set Size),以千字节为单位。这是进程在物理内存中占用的空间大小,不包括交换空间。
TTY 与进程关联的终端(如果有的话)。如果进程没有终端,则会显示为 ?。
STAT 进程状态。常见状态码有: S - 休眠(sleeping) R - 运行(running) T - 跟踪/停止(traced/stopped) Z - 僵尸进程(zombie) D - 不可中断的睡眠状态(通常是IO)
START 进程启动时间或日期
TIME 进程使用CPU的累计时间
COMMAND 启动进程的命令行

ps -ef

如果使用 ps -ef 命令,可以查看 PPID,也是父进程的 PID。

ps -L -p PID

线程显示

  • H: Show threads as if they were processes.

  • -L: Show threads, possibly with LWP and NLWP columns.

  • m: Show threads after processes.

  • -m: Show threads after processes.

  • -T: Show threads, possibly with SPID column.

# 查看 PID = 8393 进程下面有哪些线程
lieryang@Galaxy:~$ ps -L -p 8393
    PID     LWP TTY          TIME CMD
   8393    8393 pts/1    00:00:00 gst-launch-1.0
   8393    8394 pts/1    00:00:00 gst-launch-1.0
   8393    8395 pts/1    00:00:00 pool-spawner
   8393    8396 pts/1    00:00:03 videotestsrc0:s
   8393    8397 pts/1    00:00:00 gmain

3 top

top 命令是一个非常强大的实时监控系统进程活动和资源使用的工具,在UNIX和类UNIX操作系统(如Linux)中被广泛使用。

Alt text

常用选项

选项 描述
-d 指定屏幕刷新间隔。
-p 只监视特定的PID。
-n 指定 top 运行时执行的迭代次数。
-u 只显示特定用户的进程。
-i 不显示任何闲置或僵尸进程。
-c 显示完整的命令路径以及名称。
-b 以批处理模式操作。
-H 显示线程而不是进程。
-o/-O 指定排序字段。
-M 在内存使用信息中显示所有值的大小。

系统状态报告

  • top - 11:13:26: 当前时间为上午11点13分26秒。
  • up 2:36: 系统已经运行了2小时36分钟。
  • 1 user: 当前有1个用户登录系统。
  • load average: 0.41, 0.45, 0.38。这是系统在过去1分钟、5分钟、15分钟的平均负载,代表系统的繁忙程度。

Tasks: 任务(进程)的总览:

  • 1 total: 总共有1个进程。
  • 0 running: 0个进程正在运行。
  • 1 sleeping: 1个进程处于睡眠状态。
  • 0 stopped: 0个进程被停止。
  • 0 zombie: 没有僵尸进程。

%Cpu(s): CPU使用率的分布:

  • 0.9 us: 用户空间占用CPU的百分比。
  • 0.3 sy: 系统空间占用CPU的百分比。
  • 0.0 ni: 改变过优先级的进程占用CPU的百分比。
  • 98.8 id: 空闲CPU百分比。
  • 0.0 wa: 等待输入输出的CPU时间百分比。
  • 0.0 hi: 硬件中断的CPU时间百分比。
  • 0.0 si: 软件中断的CPU时间百分比。
  • 0.0 st: 虚拟机偷取的时间百分比。

MiB Mem: 内存使用情况:

  • 64033.0 total: 总计约64033MiB内存。
  • 56756.4 free: 空闲内存约5675.6MiB。
  • 4133.4 used: 已使用内存约4133.4MiB。
  • 3143.2 buff/cache: 缓冲和缓存使用的内存约3143.2MiB。

MiB Swap: 交换空间使用情况:

  • 2048.0 total: 总计约2048MiB的交换空间。
  • 2048.0 free: 空闲交换空间约2048MiB。
  • 0.0 used: 使用中的交换空间为0MiB。
  • 59099.7 avail Mem: 可用内存约59099.7MiB。

进程列表的列说明:

  • PID: 进程ID。
  • USER: 进程所有者的用户名。
  • PR: 优先级。
  • NI: 优先级的一个补充值(nice值)。
  • VIRT: 虚拟内存的使用量。
  • RES: 实际内存的使用量(常驻集大小)。
  • SHR: 共享内存的大小。
  • S: 进程状态(例如:S表示睡眠)。
  • %CPU: 进程使用的CPU百分比。
  • %MEM: 进程使用的物理内存百分比。
  • TIME+: 进程总的CPU时间。
  • COMMAND: 正在执行的命令或程序名称。