介绍了三个Linux命令:ps、pstree和tree以树状格式查看文件和进程。Linux提供了一些方便的命令,用于将文件和进程视为树中的分支,从而轻松查看它们之间的关系。在本文中,我们将了解ps、pstree和tree命令以及它们提供的一些选项,这些选项可帮助您专注于想要查看的内容。ps我们用来列出进程的ps命令有一些有趣的选项,但很多人从未利用过它们。虽然通常的ps-ef提供了正在运行的进程的完整列表,但ps-ejH命令增加了一个很好的接触。它缩进相关进程以使这些进程之间的关系更加直观清晰-就像这个片段:$ps-ejHPIDPGIDSIDTTYTIMECMD...139613961396?00:00:00sshd282812828128281?00:00:00sshd284092828128281?00:00:00sshd284102841028410pts/000:00:00bash309683096828410pts/000:00:00ps可以看出运行的进程是在bash中运行的,而bash是在ssh会话中运行的。-exjf选项字符串提供了类似的视图,但有一些额外的细节和符号来突出进程的层次性质:$ps-exjfPPIDPIDPGIDSIDTTYTPGIDSTATUIDTIMECOMMAND...1139613961396?-1Ss00:00/usr/sbin/sshd-D1396282812828128281?-1Ss00:00\_sshd:shs[priv]28281284092828128281?-1S10000:00\_sshd:shs@pts/028409284102841028410pts/031028Ss10000:00\_-bash28410310283102828410pts/031028R+10000:00这些选项\_ps在axjf命令中意味着:-e选择所有进程-j使用工作格式-f提供完整格式列表-H分层显示进程(例如树格式)-x删除“必须与tty关联”限制此外,此命令有一个--forest提供类似视图的选项。$ps-ef--forestUIDPIDPPIDCSTIMETTYTIMECMD...root139610Oct08?00:00:00/usr/sbin/sshd-Droot282811396012:55?00:00:00\_sshd:shs[priv]shs2840928281012:56?00:00:00\_sshd:shs@pts/0shs2841028409012:56pts/000:00:00\_-bashshs3235128410014:39pts/000:00:00\_ps-ef--forest请注意,这些示例只是如何使用这些命令的示例。您可以选择最适合您的过程视图的任何选项组合。pstreepstree命令提供了类似的进程视图。尽管pstree有很多选项,但该命令本身提供了非常有用的显示。请注意,许多父子进程关系显示在一行中,而不是在后续行中。$pstree...├─sshd────sshd────sshd────bash────pstree├─systemd─┬─(sd-pam)│├─at-spi-bus-laun─┬─dbus-守护进程││└─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-}]passed-n选项,pstree按数字顺序显示进程(按进程ID):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使用pstree时需要考虑的一些选项包括-a(包括命令行参数)和-g(包括进程组)这里有一些简单的例子(片段)。命令pstree-a的输出:└─wpa_supplicant-u-s-O/run/wpa_supplicant命令pstree-g的输出:├─sshd(1396)────sshd(28281)────sshd(28281)────bash(28410)────pstree(1115)tree虽然tree命令听起来很像pstree,但它是查看文件而不是进程的命令。它提供了目录和文件的漂亮树视图。如果你使用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这个命令(sudotree/proc),你会看到更多的细节,因为/proc目录的很多内容是普通用户无法访问的。命令tree-d将只显示目录。$tree-d/proc/proc├──1│├──attr││├──apparmor││└──smack│├──fd[错误打开目录]│├──fdinfo[错误打开目录]│├──map_files[打开目录错误]│├──net││├──dev_snmp6││├──netfilter││└──stat│├──ns[打开目录错误]│└──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...分层显示往往使进程和文件之间的关系更容易理解。可用的选项数量巨大,您总能找到一些视图来帮助您了解所需的内容。
