在Linux上以树状查看文件和进程
创始人
2025-03-19 04:51:16
0次

[[279260]]

介绍三个 Linux 命令:ps、pstree 和 tree 以类似树的格式查看文件和进程。

Linux 提供了一些方便的命令,用于以树状分支形式查看文件和进程,从而易于查看它们之间的关系。在本文中,我们将介绍 ps、pstree 和 tree 命令以及它们提供的一些选项,这些选项可帮助你将注意力集中在要查看的内容上。

ps

我们用来列出进程的 ps 命令有一些有趣的选项,但是很多人从来没有利用过。虽然常用的 ps -ef 提供了正在运行的进程的完整列表,但是 ps -ejH 命令增加了一个不错的效果。它缩进了相关的进程以使这些进程之间的关系在视觉上更加清晰——就像这个片段:

  1. $ ps -ejH
  2. PID PGID SID TTY TIME CMD
  3. ...
  4. 1396 1396 1396 ? 00:00:00 sshd
  5. 28281 28281 28281 ? 00:00:00 sshd
  6. 28409 28281 28281 ? 00:00:00 sshd
  7. 28410 28410 28410 pts/0 00:00:00 bash
  8. 30968 30968 28410 pts/0 00:00:00 ps

可以看到,正在运行的 ps 进程是在 bash 中运行的,而 bash 是在 ssh 会话中运行的。

-exjf 选项字符串提供了类似的视图,但是带有一些其它细节和符号以突出显示进程的层次结构性质:

  1. $ ps -exjf
  2. PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
  3. ...
  4. 1 1396 1396 1396 ? -1 Ss 0 0:00 /usr/sbin/sshd -D
  5. 1396 28281 28281 28281 ? -1 Ss 0 0:00 \_ sshd: shs [priv]
  6. 28281 28409 28281 28281 ? -1 S 1000 0:00 \_ sshd: shs@pts/0
  7. 28409 28410 28410 28410 pts/0 31028 Ss 1000 0:00 \_ -bash
  8. 28410 31028 31028 28410 pts/0 31028 R+ 1000 0:00 \_ ps axjf

命令中使用的这些选项表示:

  1. -e 选择所有进程
  2. -j 使用工作格式
  3. -f 提供完整格式列表
  4. -H 分层显示进程(如,树状格式)
  5. -x 取消“必须与 tty 相关联”的限制

同时,该命令也有一个 --forest 选项提供了类似的视图。

  1. $ ps -ef --forest
  2. UID PID PPID C STIME TTY TIME CMD
  3. ...
  4. root 1396 1 0 Oct08 ? 00:00:00 /usr/sbin/sshd -D
  5. root 28281 1396 0 12:55 ? 00:00:00 \_ sshd: shs [priv]
  6. shs 28409 28281 0 12:56 ? 00:00:00 \_ sshd: shs@pts/0
  7. shs 28410 28409 0 12:56 pts/0 00:00:00 \_ -bash
  8. shs 32351 28410 0 14:39 pts/0 00:00:00 \_ ps -ef --forest

注意,这些示例只是这些命令如何使用的示例。你可以选择最适合你的进程视图的任何选项组合。

pstree

使用 pstree 命令可以获得类似的进程视图。尽管 pstree 具备了许多选项,但是该命令本身就提供了非常有用的显示。注意,许多父子进程关系显示在单行而不是后续行上。

  1. $ pstree
  2. ...
  3. ├─sshd───sshd───sshd───bash───pstree
  4. ├─systemd─┬─(sd-pam)
  5. │ ├─at-spi-bus-laun─┬─dbus-daemon
  6. │ │ └─3*[{at-spi-bus-laun}]
  7. │ ├─at-spi2-registr───2*[{at-spi2-registr}]
  8. │ ├─dbus-daemon
  9. │ ├─ibus-portal───2*[{ibus-portal}]
  10. │ ├─pulseaudio───2*[{pulseaudio}]
  11. │ └─xdg-permission-───2*[{xdg-permission-}]

通过 -n 选项,pstree 以数值(按进程 ID)顺序显示进程:

  1. $ pstree -n
  2. systemd─┬─systemd-journal
  3. ├─systemd-udevd
  4. ├─systemd-timesyn───{systemd-timesyn}
  5. ├─systemd-resolve
  6. ├─systemd-logind
  7. ├─dbus-daemon
  8. ├─atopacctd
  9. ├─irqbalance───{irqbalance}
  10. ├─accounts-daemon───2*[{accounts-daemon}]
  11. ├─acpid
  12. ├─rsyslogd───3*[{rsyslogd}]
  13. ├─freshclam
  14. ├─udisksd───4*[{udisksd}]
  15. ├─networkd-dispat
  16. ├─ModemManager───2*[{ModemManager}]
  17. ├─snapd───10*[{snapd}]
  18. ├─avahi-daemon───avahi-daemon
  19. ├─NetworkManager───2*[{NetworkManager}]
  20. ├─wpa_supplicant
  21. ├─cron
  22. ├─atd
  23. ├─polkitd───2*[{polkitd}]
  24. ├─colord───2*[{colord}]
  25. ├─unattended-upgr───{unattended-upgr}
  26. ├─sshd───sshd───sshd───bash───pstree

使用 pstree 时可以考虑的一些选项包括 -a(包括命令行参数)和 -g(包括进程组)。

以下是一些简单的示例(片段)。

命令 pstree -a 的输出内容:

  1. └─wpa_supplicant -u -s -O /run/wpa_supplicant

命令 pstree -g 的输出内容:

  1. ├─sshd(1396)───sshd(28281)───sshd(28281)───bash(28410)───pstree(1115)

tree

虽然 tree 命令听起来与 pstree 非常相似,但这是用于查看文件而非进程的命令。它提供了一个漂亮的树状目录和文件视图。

如果你使用 tree 命令查看 /proc 目录,你显示的开头部分将类似于这个:

  1. $ tree /proc
  2. /proc
  3. ├── 1
  4. │ ├── attr
  5. │ │ ├── apparmor
  6. │ │ │ ├── current
  7. │ │ │ ├── exec
  8. │ │ │ └── prev
  9. │ │ ├── current
  10. │ │ ├── display
  11. │ │ ├── exec
  12. │ │ ├── fscreate
  13. │ │ ├── keycreate
  14. │ │ ├── prev
  15. │ │ ├── smack
  16. │ │ │ └── current
  17. │ │ └── sockcreate
  18. │ ├── autogroup
  19. │ ├── auxv
  20. │ ├── cgroup
  21. │ ├── clear_refs
  22. │ ├── cmdline
  23. ...

如果以 root 权限运行这条命令(sudo tree /proc),你将会看到更多详细信息,因为 /proc 目录的许多内容对于普通用户而言是无法访问的。

命令 tree -d 将会限制仅显示目录。

  1. $ tree -d /proc
  2. /proc
  3. ├── 1
  4. │ ├── attr
  5. │ │ ├── apparmor
  6. │ │ └── smack
  7. │ ├── fd [error opening dir]
  8. │ ├── fdinfo [error opening dir]
  9. │ ├── map_files [error opening dir]
  10. │ ├── net
  11. │ │ ├── dev_snmp6
  12. │ │ ├── netfilter
  13. │ │ └── stat
  14. │ ├── ns [error opening dir]
  15. │ └── task
  16. │ └── 1
  17. │ ├── attr
  18. │ │ ├── apparmor
  19. │ │ └── smack
  20. ...

使用 -f 选项,tree 命令会显示完整的路径。

  1. $ tree -f /proc
  2. /proc
  3. ├── /proc/1
  4. │ ├── /proc/1/attr
  5. │ │ ├── /proc/1/attr/apparmor
  6. │ │ │ ├── /proc/1/attr/apparmor/current
  7. │ │ │ ├── /proc/1/attr/apparmor/exec
  8. │ │ │ └── /proc/1/attr/apparmor/prev
  9. │ │ ├── /proc/1/attr/current
  10. │ │ ├── /proc/1/attr/display
  11. │ │ ├── /proc/1/attr/exec
  12. │ │ ├── /proc/1/attr/fscreate
  13. │ │ ├── /proc/1/attr/keycreate
  14. │ │ ├── /proc/1/attr/prev
  15. │ │ ├── /proc/1/attr/smack
  16. │ │ │ └── /proc/1/attr/smack/current
  17. │ │ └── /proc/1/attr/sockcreate
  18. ...

分层显示通常可以使进程和文件之间的关系更容易理解。可用选项的数量很多,而你总可以找到一些视图,帮助你查看所需的内容。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...