關于/proc目錄的一些理解和解釋
理解 Proc 文件系統 | |
---|---|
目錄:
/proc --- 一個虛擬文件系統/proc 文件系統是一種內核和內核模塊用來向進程 (process) 發送信息的機制 (所以叫做 /proc)。這個偽文件系統讓你可以和內核內部數據結構進行交互,獲取 有關進程的有用信息,在運行中 (on the fly) 改變設置 (通過改變內核參數)。 與其他文件系統不同,/proc 存在于內存之中而不是硬盤上。如果你察看文件 /proc/mounts (和 mount 命令一樣列出所有已經加載的文件系統),你會看到其中 一行是這樣的: grep proc /proc/mounts/proc /proc proc rw 0 0 /proc 由內核控制,沒有承載 /proc 的設備。因為 /proc 主要存放由內核控制的狀態信息,所以大部分這些信息的邏輯位置位于內核控制的內存。對 /proc 進行一次 'ls -l' 可以看到大部分文件都是 0 字節大的;不過察看這些文件的時候,確實可以看到一些信息。這怎么可能?這是因為 /proc 文件系統和其他常規的文件系統一樣把自己注冊到虛擬文件系統層 (VFS) 了。然而,直到當 VFS 調用它,請求文件、目錄的 i-node 的時候,/proc 文件系統才根據內核中的信息建立相應的文件和目錄。 加載 proc 文件系統如果系統中還沒有加載 proc 文件系統,可以通過如下命令加載 proc 文件系統: mount -t proc proc /proc 上述命令將成功加載你的 proc 文件系統。更多細節請閱讀 mount 命令的 man page。察看 /proc 的文件/proc 的文件可以用于訪問有關內核的狀態、計算機的屬性、正在運行的進程的狀態等信息。大部分 /proc 中的文件和目錄提供系統物理環境最新的信息。盡管 /proc 中的文件是虛擬的,但它們仍可以使用任何文件編輯器或像'more', 'less'或 'cat'這樣的程序來查看。當編輯程序試圖打開一個虛擬文件時,這個文件就通過內核中的信息被憑空地 (on the fly) 創建了。這是一些我從我的系統中得到的一些有趣結果: $ ls -l /proc/cpuinfo-r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo$ file /proc/cpuinfo/proc/cpuinfo: empty$ cat /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 8model name : Pentium III (Coppermine)stepping : 6cpu MHz : 1000.119cache size : 256 KBfdiv_bug : nohlt_bug : nosep_bug : nof00f_bug : nocoma_bug : nofpu : yesfpu_exception : yescpuid level : 2wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mcacmov pat pse36 mmx fxsr xmmbogomips : 1998.85processor : 3vendor_id : GenuineIntelcpu family : 6model : 8model name : Pentium III (Coppermine)stepping : 6cpu MHz : 1000.119cache size : 256 KBfdiv_bug : nohlt_bug : nosep_bug : nof00f_bug : nocoma_bug : nofpu : yesfpu_exception : yescpuid level : 2wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mcacmov pat pse36 mmx fxsr xmmbogomips : 1992.29 這是一個從雙 CPU 的系統中得到的結果,上述大部分的信息十分清楚地給出了這個系統的有用的硬件信息。有些 /proc 的文件是經過編碼的,不同的工具可以被用來解釋這些編碼過的信息并輸出成可讀的形式。這樣的工具包括:'top', 'ps', 'apm' 等。 得到有用的系統/內核信息
有關運行中的進程的信息/proc 文件系統可以用于獲取運行中的進程的信息。在 /proc 中有一些編號的子目錄。每個編號的目錄對應一個進程 id (PID)。這樣,每一個運行中的進程 /proc 中都有一個用它的 PID 命名的目錄。這些子目錄中包含可以提供有關進程的狀態和環境的重要細節信息的文件。讓我們試著查找一個運行中的進程。 $ ps -aef | grep mozillaroot 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla上述命令顯示有一個正在運行的 mozilla 進程的 PID 是 32558。相對應的,/proc 中應該有一個名叫 32558 的目錄 $ ls -l /proc/32558total 0-r--r--r-- 1 root root 0 Dec 25 22:59 cmdline-r--r--r-- 1 root root 0 Dec 25 22:59 cpulrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/-r-------- 1 root root 0 Dec 25 22:59 environlrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*dr-x------ 2 root root 0 Dec 25 22:59 fd/-r--r--r-- 1 root root 0 Dec 25 22:59 maps-rw------- 1 root root 0 Dec 25 22:59 mem-r--r--r-- 1 root root 0 Dec 25 22:59 mountslrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> //-r--r--r-- 1 root root 0 Dec 25 22:59 stat-r--r--r-- 1 root root 0 Dec 25 22:59 statm-r--r--r-- 1 root root 0 Dec 25 22:59 status文件 "cmdline" 包含啟動進程時調用的命令行。"envir" 進程的環境變兩。 "status" 是進程的狀態信息,包括啟動進程的用戶的用戶ID (UID) 和組ID(GID) ,父進程ID (PPID),還有進程當前的狀態,比如"Sleelping"和"Running"。每個進程的目錄都有幾個符號鏈接,"cwd"是指向進程當前工作目錄的符號鏈接,"exe"指向運行的進程的可執行程序,"root"指向被這個進程看作是根目錄的目錄 (通常是"/")。目錄"fd"包含指向進程使用的文件描述符的鏈接。 "cpu"僅在運行 SMP 內核時出現,里面是按 CPU 劃分的進程時間。 /proc/self 是一個有趣的子目錄,它使得程序可以方便地使用 /proc 查找本進程地信息。/proc/self 是一個鏈接到 /proc 中訪問 /proc 的進程所對應的 PID 的目錄的符號鏈接。 通過 /proc 與內核交互
/proc/sys/kernel - 這個目錄包含反通用內核行為的信息。 /proc/sys/kernel/{domainname, hostname} 存放著機器/網絡的域名和主機名。這些文件可以用于修改這些名字。 $ hostnamemachinename.domainname.com$ cat /proc/sys/kernel/domainnamedomainname.com$ cat /proc/sys/kernel/hostnamemachinename$ echo "new-machinename" > /proc/sys/kernel/hostname$ hostnamenew-machinename.domainname.com這樣,通過修改 /proc 文件系統中的文件,我們可以修改主機名。很多其他可配置的文件存在于 /proc/sys/kernel/。這里不可能列出所有這些文件,讀者可以自己去這個目錄查看以得到更多細節信息。 另一個可配置的目錄是 /proc/sys.net。這個目錄中的文件可以用于修改機器/網絡的網絡屬性。比如,簡單修改一個文件,你可以在網絡上癮藏匿的計算機。 $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all這將在網絡上癮藏你的機器,因為它不響應 icmp_echo。主機將不會響應其他主機發出的 ping 查詢。 $ ping machinename.domainname.comno answer from machinename.domainname.com要改回缺省設置,只要 $ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all/proc/sys 下還有許多其它可以用于改變內核屬性。讀者可以通過參考文獻 [1], [2] 獲取更多信息。 結論/proc 文件系統提供了一個基于文件的 Linux 內部接口。它可以用于確定系統的各種不同設備和進程的狀態。對他們進行配置。因而,理解和應用有關這個文件系統的知識是理解你的 Linux 系統的關鍵。 參考文獻
|