技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務(wù)器類 >

解析Linux系統(tǒng)中的/proc虛擬文件系統(tǒng)

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-01-25 06:20┆點擊:

  Linux 內(nèi)核提供了一種通過 /proc 文件系統(tǒng),在運行時訪問內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)、 改變內(nèi)核設(shè)置的機制。盡管在各種硬件平臺上的 Linux 系統(tǒng)的 /proc 文件系統(tǒng)的 基本概念都是相同的,但本文只討論基于 intel x86 架構(gòu)的 Linux /proc 文件系 統(tǒng)。

  /proc --- 一個虛擬文件系統(tǒng)

  /proc 文件系統(tǒng)是一種內(nèi)核和內(nèi)核模塊用來向進程 (process) 發(fā)送信息的機制 (所以叫做 /proc)。這個偽文件系統(tǒng)讓你可以和內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)進行交互,獲取 有關(guān)進程的有用信息,在運行中 (on the fly) 改變設(shè)置 (通過改變內(nèi)核參數(shù))。 與其他文件系統(tǒng)不同,/proc 存在于內(nèi)存之中而不是硬盤上。如果你察看文件 /proc/mounts (和 mount 命令一樣列出所有已經(jīng)加載的文件系統(tǒng)),你會看到其中 一行是這樣的:

  代碼如下:

  grep proc /proc/mounts

  /proc /proc proc rw 0 0

  /proc 由內(nèi)核控制,沒有承載 /proc 的設(shè)備。因為 /proc 主要存放由內(nèi)核控制 的狀態(tài)信息,所以大部分這些信息的邏輯位置位于內(nèi)核控制的內(nèi)存。對 /proc 進行 一次 'ls -l' 可以看到大部分文件都是 0 字節(jié)大的;不過察看這些文件的時候,確 實可以看到一些信息。這怎么可能?這是因為 /proc 文件系統(tǒng)和其他常規(guī)的文件系 統(tǒng)一樣把自己注冊到虛擬文件系統(tǒng)層 (VFS) 了。然而,直到當 VFS 調(diào)用它,請求 文件、目錄的 i-node 的時候,/proc 文件系統(tǒng)才根據(jù)內(nèi)核中的信息建立相應(yīng)的文件 和目錄。

  加載 proc 文件系統(tǒng)

  如果系統(tǒng)中還沒有加載 proc 文件系統(tǒng),可以通過如下命令加載 proc 文件系統(tǒng):

  代碼如下:

  mount -t proc proc /proc

  上述命令將成功加載你的 proc 文件系統(tǒng)。更多細節(jié)請閱讀 mount 命令的 man page。

  察看 /proc 的文件

  /proc 的文件可以用于訪問有關(guān)內(nèi)核的狀態(tài)、計算機的屬性、正在運行的進程的 狀態(tài)等信息。大部分 /proc 中的文件和目錄提供系統(tǒng)物理環(huán)境最新的信息。盡管 /proc 中的文件是虛擬的,但它們?nèi)钥梢允褂萌魏挝募庉嬈骰蛳?more', 'less'或 'cat'這樣的程序來查看。當編輯程序試圖打開一個虛擬文件時,這個文件就通過內(nèi)核 中的信息被憑空地 (on the fly) 創(chuàng)建了。這是一些我從我的系統(tǒng)中得到的一些有趣 結(jié)果:

  代碼如下:

  $ 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/cpuinfo

  processor : 0

  vendor_id : GenuineIntel

  cpu family : 6

  model : 8

  model name : Pentium III (Coppermine)

  stepping : 6

  cpu MHz : 1000.119

  cache size : 256 KB

  fdiv_bug : no

  hlt_bug : no

  sep_bug : no

  f00f_bug : no

  coma_bug : no

  fpu : yes

  fpu_exception : yes

  cpuid level : 2

  wp : yes

  flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca

  cmov pat pse36 mmx fxsr xmm

  bogomips : 1998.85

  processor : 3

  vendor_id : GenuineIntel

  cpu family : 6

  model : 8

  model name : Pentium III (Coppermine)

  stepping : 6

  cpu MHz : 1000.119

  cache size : 256 KB

  fdiv_bug : no

  hlt_bug : no

  sep_bug : no

  f00f_bug : no

  coma_bug : no

  fpu : yes

  fpu_exception : yes

  cpuid level : 2

  wp : yes

  flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca

  cmov pat pse36 mmx fxsr xmm

  bogomips : 1992.29

  這是一個從雙 CPU 的系統(tǒng)中得到的結(jié)果,上述大部分的信息十分清楚地給出了這個系 統(tǒng)的有用的硬件信息。有些 /proc 的文件是經(jīng)過編碼的,不同的工具可以被用來解釋 這些編碼過的信息并輸出成可讀的形式。這樣的工具包括:'top', 'ps', 'apm' 等。

  得到有用的系統(tǒng)/內(nèi)核信息

  proc 文件系統(tǒng)可以被用于收集有用的關(guān)于系統(tǒng)和運行中的內(nèi)核的信息。下面是一些重要 的文件:

  /proc/cpuinfo - CPU 的信息 (型號, 家族, 緩存大小等)

  /proc/meminfo - 物理內(nèi)存、交換空間等的信息

  /proc/mounts - 已加載的文件系統(tǒng)的列表

  /proc/devices - 可用設(shè)備的列表

  /proc/filesystems - 被支持的文件系統(tǒng)

  /proc/modules - 已加載的模塊

  /proc/version - 內(nèi)核版本

  /proc/cmdline - 系統(tǒng)啟動時輸入的內(nèi)核命令行參數(shù)

  proc 中的文件遠不止上面列出的這么多。想要進一步了解的讀者可以對 /proc 的每一個 文件都'more'一下或讀參考文獻[1]獲取更多的有關(guān) /proc 目錄中的文件的信息。我建議 使用'more'而不是'cat',除非你知道這個文件很小,因為有些文件 (比如 kcore) 可能 會非常長。

  有關(guān)運行中的進程的信息