Linux中國

在 Linux 上以樹狀查看文件和進程

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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國