29

技术|在 Linux 上以树状查看文件和进程

 4 years ago
source link: https://linux.cn/article-11462-1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在 Linux 上以树状查看文件和进程

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

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

我们用来列出进程的 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 命令听起来与 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. ...

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


via: https://www.networkworld.com/article/3444589/viewing-files-and-processes-as-trees-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:laingke 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

linisi.svg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK