原标题:在 Linux 上以树状查看文件和进程 | Linux 中国
介绍三个 Linux 命令:ps、pstree 和 tree 以类似树的格式查看文件和进程。
-- Sandra Henry-stocker
提供了一些方便的命令,用于以树状分支形式查看文件和进程,从而易于查看它们之间的关系。在本文中,我们将介绍 、 和 命令以及它们提供的一些选项,这些选项可帮助你将注意力集中在要查看的内容上。
ps
我们用来列出进程的 命令有一些有趣的选项,但是很多人从来没有利用过。虽然常用的 提供了正在运行的进程的完整列表,但是 命令增加了一个不错的效果。它缩进了相关的进程以使这些进程之间的关系在视觉上更加清晰——就像这个片段:
$ps-ejH
PID PGID SID TTY TIME CMD
...
139613961396?00:00:00sshd
282812828128281?00:00:00sshd
284092828128281?00:00:00sshd
284102841028410pts/000:00:00bash
309683096828410pts/000:00:00ps
可以看到,正在运行的 进程是在 bash 中运行的,而 bash 是在 ssh 会话中运行的。
-exjf 选项字符串提供了类似的视图,但是带有一些其它细节和符号以突出显示进程的层次结构性质:
$ps-exjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
...
1139613961396?-1Ss00:00/usr/sbin/sshd-D
1396282812828128281?-1Ss00:00_sshd:shs[priv]
28281284092828128281?-1S10000:00_sshd:shs@pts/0
28409284102841028410pts/031028Ss10000:00_-bash
28410310283102828410pts/031028R+10000:00_psaxjf
命令中使用的这些选项表示:
-e选择所有进程
-j使用工作格式
-f提供完整格式列表
-H分层显示进程(如,树状格式)
-x取消“必须与tty相关联”的限制
同时,该命令也有一个 --forest 选项提供了类似的视图。
$ps-ef--forest
UID PID PPID C STIME TTY TIME CMD
...
root139610Oct08?00:00:00/usr/sbin/sshd-D
root282811396012:55?00:00:00_sshd:shs[priv]
shs2840928281012:56?00:00:00_sshd:shs@pts/0
shs2841028409012:56pts/000:00:00_-bash
shs3235128410014:39pts/000:00:00_ps-ef--forest
注意,这些示例只是这些命令如何使用的示例。你可以选择最适合你的进程视图的任何选项组合。
pstree
使用 命令可以获得类似的进程视图。尽管 具备了许多选项,但是该命令本身就提供了非常有用的显示。注意,许多父子进程关系显示在单行而不是后续行上。
$pstree
...
├─sshd───sshd───sshd───bash───pstree
├─systemd─┬─(sd-pam)
│├─at-spi-bus-laun─┬─dbus-daemon
││└─3*[{at-spi-bus-laun}]
│├─at-spi2-registr───2*[{at-spi2-registr}]
│├─dbus-daemon
│├─ibus-portal───2*[{ibus-portal}]
│├─pulseaudio───2*[{pulseaudio}]
│└─xdg-permission-───2*[{xdg-permission-}]
通过 -n 选项, 以数值(按进程 ID)顺序显示进程:
$pstree-n
systemd─┬─systemd-journal
├─systemd-udevd
├─systemd-timesyn───{systemd-timesyn}
├─systemd-resolve
├─systemd-logind
├─dbus-daemon
├─atopacctd
├─irqbalance───{irqbalance}
├─accounts-daemon───2*[{accounts-daemon}]
├─acpid
├─rsyslogd───3*[{rsyslogd}]
├─freshclam
├─udisksd───4*[{udisksd}]
├─networkd-dispat
├─ModemManager───2*[{ModemManager}]
├─snapd───10*[{snapd}]
├─avahi-daemon───avahi-daemon
├─NetworkManager───2*[{NetworkManager}]
├─wpa_supplicant
├─cron
├─atd
├─polkitd───2*[{polkitd}]
├─colord───2*[{colord}]
├─unattended-upgr───{unattended-upgr}
├─sshd───sshd───sshd───bash───pstree
使用 时可以考虑的一些选项包括 -a(包括命令行参数)和 -g(包括进程组)。
以下是一些简单的示例(片段)。
命令 的输出内容:
└─wpa_supplicant-u-s-O/run/wpa_supplicant
命令 的输出内容:
├─sshd(1396)───sshd(28281)───sshd(28281)───bash(28410)───pstree(1115)
tree
虽然 命令听起来与 非常相似,但这是用于查看文件而非进程的命令。它提供了一个漂亮的树状目录和文件视图。
如果你使用 命令查看 /proc 目录,你显示的开头部分将类似于这个:
$ tree/proc
/proc
├──1
│├──attr
││├──apparmor
│││├──current
│││├──exec
│││└──prev
││├──current
││├──display
││├──exec
││├──fscreate
││├──keycreate
││├──prev
││├──smack
│││└──current
││└──sockcreate
│├──autogroup
│├──auxv
│├──cgroup
│├──clear_refs
│├──cmdline
...
如果以 root 权限运行这条命令(sudo tree /proc),你将会看到更多详细信息,因为 /proc 目录的许多内容对于普通用户而言是无法访问的。
命令 将会限制仅显示目录。
$ tree-d/proc
/proc
├──1
│├──attr
││├──apparmor
││└──smack
│├──fd[error openingdir]
│├──fdinfo[error openingdir]
│├──map_files[error openingdir]
│├──net
││├──dev_snmp6
││├──netfilter
││└──stat
│├──ns[error openingdir]
│└──task
│└──1
│├──attr
││├──apparmor
││└──smack
...
使用 -f 选项, 命令会显示完整的路径。
$ tree-f/proc
/proc
├──/proc/1
│├──/proc/1/attr
││├──/proc/1/attr/apparmor
│││├──/proc/1/attr/apparmor/current
│││├──/proc/1/attr/apparmor/exec
│││└──/proc/1/attr/apparmor/prev
││├──/proc/1/attr/current
││├──/proc/1/attr/display
││├──/proc/1/attr/exec
││├──/proc/1/attr/fscreate
││├──/proc/1/attr/keycreate
││├──/proc/1/attr/prev
││├──/proc/1/attr/smack
│││└──/proc/1/attr/smack/current
││└──/proc/1/attr/sockcreate
...
分层显示通常可以使进程和文件之间的关系更容易理解。可用选项的数量很多,而你总可以找到一些视图,帮助你查看所需的内容。
作者: 选题: 译者: 校对:
本文由 原创编译, 荣誉推出返回搜狐,查看更多
责任编辑: