在 Linux 上以樹狀檢視檔案和程序
介紹三個 Linux 命令:ps、pstree 和 tree 以類似樹的格式檢視檔案和程序。
Linux 提供了一些方便的命令,用於以樹狀分支形式檢視檔案和程序,從而易於檢視它們之間的關係。在本文中,我們將介紹 ps
、pstree
和 tree
命令以及它們提供的一些選項,這些選項可幫助你將注意力集中在要檢視的內容上。
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中,如何檢視和審計系統日誌檔案以檢測異常活動?Linux
- 在Linux中,如何檢視和結束正在執行的程序?Linux
- 在Linux中,如何檢視佔用CPU最多的程序?Linux
- 在Linux中,如何檢視所有正在執行的程序?Linux
- Linux系統中的程序和埠檢視命令Linux
- Linux檢視程序命令ps和top示例詳解Linux
- Linux ps命令詳解,Linux檢視程序。Linux
- 在Linux中,程序狀態有哪些?Linux
- 在Linux中如何檢視檔案的修改日期Linux
- 讓你在macOS上快速檢視txt文字檔案Mac
- Linux 檢視系統檔案命令Linux
- linux 常用檢視埠,檔案大小Linux
- 在 Linux 上覆制和重新命名檔案Linux
- 在Linux中,如何檢視檔案內容?列出幾種方法。Linux
- 在Linux中,如何檢視linux中記憶體使用率最高的程序?Linux記憶體
- linux的常用操作——檢視和修改檔案許可權Linux
- Linux檢視檔案的命令有哪些?Linux
- Linux 檢視檔案內容——bat 命令LinuxBAT
- windows檢視檔案/夾被哪個程序佔用以及解除方法Windows
- 在Ubuntu檔案管理器中檢視隱藏檔案和資料夾Ubuntu
- 在Linux中,日誌檔案作用是什麼及如何檢視?Linux
- 在Linux中,如何檢視網路介面的狀態?Linux
- 檢視Ubuntu上佔用指定埠的程序Ubuntu
- Xshell在Windows和Linux間檔案的上傳和下載WindowsLinux
- linux 使用ll檢視檔案發現檔案後面帶 *Linux
- 在linux上怎麼檢視tomcat日誌LinuxTomcat
- 檢視檔案
- Linux檢視程式檔案絕對路徑Linux
- Linux(2) 檢視檔案屬性以及修改Linux
- Linux檔案內容檢視相關命令Linux
- Linux檢視檔案大小的幾種方法Linux
- 在Linux中,如何建立、檢查和修復檔案系統?Linux
- 在 Linux 中用 Meld以圖形方式比較檔案和資料夾Linux
- Linux如何檢視檔案內容?Linux常用命令Linux
- Linux基楚操作指引【檢視版本、檢視路徑、檢視內容、編輯檔案】Linux
- Linux系統中常用的檔案檢視命令Linux
- Linux檢視檔案內容常用命令Linux
- 檢視 Linux 檔案佔用程式寫資料?Linux