Linux 內(nèi)核提供了一種通過 /proc 文件系統(tǒng),在運(yùn)行時(shí)訪問內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)、 改變內(nèi)核設(shè)置的機(jī)制。盡管在各種硬件平臺(tái)上的 Linux 系統(tǒng)的 /proc 文件系統(tǒng)的 基本概念都是相同的,但本文只討論基于 intel x86 架構(gòu)的 Linux /proc 文件系 統(tǒng)。
/proc --- 一個(gè)虛擬文件系統(tǒng)
/proc 文件系統(tǒng)是一種內(nèi)核和內(nèi)核模塊用來向進(jìn)程 (process) 發(fā)送信息的機(jī)制 (所以叫做 /proc)。這個(gè)偽文件系統(tǒng)讓你可以和內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)進(jìn)行交互,獲取 有關(guān)進(jìn)程的有用信息,在運(yùn)行中 (on the fly) 改變設(shè)置 (通過改變內(nèi)核參數(shù))。 與其他文件系統(tǒng)不同,/proc 存在于內(nèi)存之中而不是硬盤上。如果你察看文件 /proc/mounts (和 mount 命令一樣列出所有已經(jīng)加載的文件系統(tǒng)),你會(huì)看到其中 一行是這樣的:
加載 proc 文件系統(tǒng)
如果系統(tǒng)中還沒有加載 proc 文件系統(tǒng),可以通過如下命令加載 proc 文件系統(tǒng):
察看 /proc 的文件
/proc 的文件可以用于訪問有關(guān)內(nèi)核的狀態(tài)、計(jì)算機(jī)的屬性、正在運(yùn)行的進(jìn)程的 狀態(tài)等信息。大部分 /proc 中的文件和目錄提供系統(tǒng)物理環(huán)境最新的信息。盡管 /proc 中的文件是虛擬的,但它們?nèi)钥梢允褂萌魏挝募庉嬈骰蛳?more', 'less'或 'cat'這樣的程序來查看。當(dāng)編輯程序試圖打開一個(gè)虛擬文件時(shí),這個(gè)文件就通過內(nèi)核 中的信息被憑空地 (on the fly) 創(chuàng)建了。這是一些我從我的系統(tǒng)中得到的一些有趣 結(jié)果:
這是一個(gè)從雙 CPU 的系統(tǒng)中得到的結(jié)果,上述大部分的信息十分清楚地給出了這個(gè)系 統(tǒng)的有用的硬件信息。有些 /proc 的文件是經(jīng)過編碼的,不同的工具可以被用來解釋 這些編碼過的信息并輸出成可讀的形式。這樣的工具包括:'top', 'ps', 'apm' 等。
得到有用的系統(tǒng)/內(nèi)核信息
proc 文件系統(tǒng)可以被用于收集有用的關(guān)于系統(tǒng)和運(yùn)行中的內(nèi)核的信息。下面是一些重要 的文件:
/proc/cpuinfo - CPU 的信息 (型號(hào), 家族, 緩存大小等)
/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)啟動(dòng)時(shí)輸入的內(nèi)核命令行參數(shù)
proc 中的文件遠(yuǎn)不止上面列出的這么多。想要進(jìn)一步了解的讀者可以對 /proc 的每一個(gè) 文件都'more'一下或讀參考文獻(xiàn)[1]獲取更多的有關(guān) /proc 目錄中的文件的信息。我建議 使用'more'而不是'cat',除非你知道這個(gè)文件很小,因?yàn)橛行┪募?(比如 kcore) 可能 會(huì)非常長。
有關(guān)運(yùn)行中的進(jìn)程的信息
/proc 文件系統(tǒng)可以用于獲取運(yùn)行中的進(jìn)程的信息。在 /proc 中有一些編號(hào)的子目錄。每個(gè)編號(hào)的目錄對應(yīng)一個(gè)進(jìn)程 id (PID)。這樣,每一個(gè)運(yùn)行中的進(jìn)程 /proc 中都有一個(gè)用它的 PID 命名的目錄。這些子目錄中包含可以提供有關(guān)進(jìn)程的狀態(tài)和環(huán)境的重要細(xì)節(jié)信息的文件。讓我們試著查找一個(gè)運(yùn)行中的進(jìn)程。
/proc/self 是一個(gè)有趣的子目錄,它使得程序可以方便地使用 /proc 查找本進(jìn)程地信息。/proc/self 是一個(gè)鏈接到 /proc 中訪問 /proc 的進(jìn)程所對應(yīng)的 PID 的目錄的符號(hào)鏈接。
通過 /proc 與內(nèi)核交互
上面討論的大部分 /proc 的文件是只讀的。而實(shí)際上 /proc 文件系統(tǒng)通過 /proc 中可讀寫的文件提供了對內(nèi)核的交互機(jī)制。寫這些文件可以改變內(nèi)核 的狀態(tài),因而要慎重改動(dòng)這些文件。/proc/sys 目錄存放所有可讀寫的文件 的目錄,可以被用于改變內(nèi)核行為。
/proc/sys/kernel - 這個(gè)目錄包含反通用內(nèi)核行為的信息。 /proc/sys/kernel/{domainname, hostname} 存放著機(jī)器/網(wǎng)絡(luò)的域名和主機(jī)名。 這些文件可以用于修改這些名字。
這樣,通過修改 /proc 文件系統(tǒng)中的文件,我們可以修改主機(jī)名。很多其 他可配置的文件存在于 /proc/sys/kernel/。這里不可能列出所有這些文件, 讀者可以自己去這個(gè)目錄查看以得到更多細(xì)節(jié)信息。
另一個(gè)可配置的目錄是 /proc/sys/net。這個(gè)目錄中的文件可以 用于修改機(jī)器/網(wǎng)絡(luò)的網(wǎng)絡(luò)屬性。比如,簡單修改一個(gè)文件,你可以在網(wǎng)絡(luò) 上癮藏匿的計(jì)算機(jī)。
結(jié)論
/proc 文件系統(tǒng)提供了一個(gè)基于文件的 Linux 內(nèi)部接口。它可以用于確定系統(tǒng) 的各種不同設(shè)備和進(jìn)程的狀態(tài)。對他們進(jìn)行配置。因而,理解和應(yīng)用有關(guān)這個(gè) 文件系統(tǒng)的知識(shí)是理解你的 Linux 系統(tǒng)的關(guān)鍵。
標(biāo)簽:哈密 海東 玉樹 昌都 優(yōu)質(zhì)穩(wěn)定 九江 臺(tái)州 孝感
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解析Linux系統(tǒng)中的/proc虛擬文件系統(tǒng)》,本文關(guān)鍵詞 解析,Linux,系統(tǒng),中的,proc,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。