在 Linux 上以树状查看文件和进程
创始人
2024-03-02 03:41:38
0

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

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

ps

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

$ ps -ejH
  PID  PGID   SID TTY          TIME CMD
...
 1396  1396  1396 ?        00:00:00   sshd
28281 28281 28281 ?        00:00:00     sshd
28409 28281 28281 ?        00:00:00       sshd
28410 28410 28410 pts/0    00:00:00         bash
30968 30968 28410 pts/0    00:00:00           ps

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

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

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

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

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

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

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

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

pstree

使用 pstree 命令可以获得类似的进程视图。尽管 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 选项,pstree 以数值(按进程 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

使用 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 权限运行这条命令(sudo tree /proc),你将会看到更多详细信息,因为 /proc 目录的许多内容对于普通用户而言是无法访问的。

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

$ tree -d /proc
/proc
├── 1
│   ├── attr
│   │   ├── apparmor
│   │   └── smack
│   ├── fd [error opening dir]
│   ├── fdinfo [error opening dir]
│   ├── map_files [error opening dir]
│   ├── net
│   │   ├── dev_snmp6
│   │   ├── netfilter
│   │   └── stat
│   ├── ns [error opening dir]
│   └── task
│       └── 1
│           ├── attr
│           │   ├── apparmor
│           │   └── smack
...

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

$ 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
...

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


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

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

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

相关内容

不显示Angular Ma...
要在Angular Material 9中隐藏树状图项,你可以使用...
2025-01-10 08:01:38
不区分大小写的树状视图排序
不区分大小写的树状视图排序是指对一个字符串列表进行排序,按照树状视...
2024-12-28 01:30:54
遍历树状结构的前向和后向方...
遍历树状结构的前向和后向方向,一般可以使用递归或者迭代的方式来实现...
2024-12-04 06:31:53
按替代数据属性对amcha...
要按替代数据属性对amCharts4树状图进行排序,可以使用数据提...
2024-11-08 02:31:50
antd树状表格默认情况下...
要解决 antd 树状表格默认情况下无法展开行的问题,可以通过设置...
2024-11-07 18:31:01
按名称而不是值进行排序的树...
要按名称而不是值进行排序的树状图表,可以使用以下解决方法:创建一个...
2024-11-03 10:00:58

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...