最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

深度講解Linux proc文件系統(tǒng)介紹

2022-08-26 14:40 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

最初開發(fā)/proc文件系統(tǒng)是為了提供有關(guān)系統(tǒng)中進(jìn)程的信息。但是由于這個(gè)文件系統(tǒng)非常有用,因此內(nèi)核中的很多元素也開始使用它來報(bào)告信息,或啟用動(dòng)態(tài)運(yùn)行時(shí)配置。
/proc文件系統(tǒng)包含了一些目錄(用作組織信息的方式)和虛擬文件。虛擬文件可以向用戶呈現(xiàn)內(nèi)核中的一些信息,也可以用作一種從用戶空間向內(nèi)核發(fā)送信息的手段。實(shí)際上我們并不會(huì)同時(shí)需要實(shí)現(xiàn)這兩點(diǎn),但是本文將向您展示如何配置這個(gè)文件系統(tǒng)進(jìn)行輸入和輸出。
盡管像本文這樣短小的一篇文章無法詳細(xì)介紹/proc的所有用法,但是它依然對(duì)這兩種用法進(jìn)行了展示,從而可以讓我們體會(huì)一下/proc是多么強(qiáng)大。圖1是對(duì)/proc中部分元素進(jìn)行一次交互查詢的結(jié)果。它顯示的是/proc文件系統(tǒng)的根目錄中的內(nèi)容。注意,在左邊是一系列數(shù)字編號(hào)的文件。每個(gè)實(shí)際上都是一個(gè)目錄,表示系統(tǒng)中的一個(gè)進(jìn)程。由于在GNU/Linux中創(chuàng)建的第一個(gè)進(jìn)程是init進(jìn)程,因此它的process-id為1。然后對(duì)這個(gè)目錄執(zhí)行一個(gè) ls命令,這會(huì)顯示很多文件。每個(gè)文件都提供了有關(guān)這個(gè)特殊進(jìn)程的詳細(xì)信息。例如,要查看init的command-line項(xiàng)的內(nèi)容,只需對(duì)cmdline文件執(zhí)行cat命令。

/proc中另外一些有趣的文件有:cpuinfo,它標(biāo)識(shí)了處理器的類型和速度;pci:顯示在PCI總線上找到的設(shè)備;modules:標(biāo)識(shí)了當(dāng)前加載到內(nèi)核中的模塊。

圖2展示了對(duì)/proc中的一個(gè)虛擬文件進(jìn)行讀寫的過程。這個(gè)例子首先檢查內(nèi)核的TCP/IP棧中的IP轉(zhuǎn)發(fā)的目前設(shè)置,然后再啟用這種功能。

另外,我們還可以使用sysctl來配置這些內(nèi)核條目。

順便說一下,/proc文件系統(tǒng)并不是GNU/Linux系統(tǒng)中的惟一一個(gè)虛擬文件系統(tǒng)。在這種系統(tǒng)上,sysfs是一個(gè)與/proc類似的文件系統(tǒng),但是它的組織更好(從 /proc 中學(xué)習(xí)了很多教訓(xùn))。不過 /proc 已經(jīng)確立了自己的地位,因此即使sysfs與/proc相比有一些優(yōu)點(diǎn),/proc也依然會(huì)存在。還有一個(gè)debugfs文件系統(tǒng),不過(顧名思義)它提供的更多是調(diào)試接口。debugfs的一個(gè)優(yōu)點(diǎn)是它將一個(gè)值導(dǎo)出給用戶空間非常簡(jiǎn)單(實(shí)際上這不過是一個(gè)調(diào)用而已)。



將此文件上傳到服務(wù)器并編譯模塊,然后將此模塊上傳到開發(fā)板上面。

生成的節(jié)點(diǎn)如下:

cat /proc/hello_proc的輸出信息如下:

echo hello > /proc/hello_proc的輸出信息如下:

再次cat /proc/hello_proc的輸出信息如下:

在使用proc_create()函數(shù)創(chuàng)建文件時(shí),第二個(gè)參數(shù)是關(guān)于權(quán)限的設(shè)置,我們這里使用默認(rèn)的0,也就是只有讀取權(quán)限,這里就不再詳細(xì)介紹,如果感興趣可以自己做實(shí)驗(yàn)。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?

/proc目錄下常見的文件介紹:

/proc/apm
高級(jí)電源管理(APM)版本信息及電池相關(guān)狀態(tài)信息,通常由apm命令使用;
proc/buddyinfo
用于診斷內(nèi)存碎片問題的相關(guān)信息文件;
/proc/cmdline
在啟動(dòng)內(nèi)核時(shí)傳遞至內(nèi)核的相關(guān)參數(shù)信息,這些信息通常由lilo或grub等啟動(dòng)管理工具進(jìn)行傳遞;

/proc/cpuinfo
處理器的相關(guān)信息的文件;
/proc/crypto
系統(tǒng)上已安裝的內(nèi)核使用的密碼算法及每個(gè)算法的詳細(xì)信息列表;
/proc/devices
系統(tǒng)已經(jīng)加載的所有塊設(shè)備和字符設(shè)備的信息,包含主設(shè)備號(hào)和設(shè)備組(與主設(shè)備號(hào)對(duì)應(yīng)的設(shè)備類型)名;
/proc/dma
每個(gè)正在使用且注冊(cè)的ISA DMA通道的信息列表;
/proc/fb
幀緩沖設(shè)備列表文件,包含幀緩沖設(shè)備的設(shè)備號(hào)和相關(guān)驅(qū)動(dòng)信息;
/proc/filesystems
當(dāng)前被內(nèi)核支持的文件系統(tǒng)類型列表文件,被標(biāo)示為nodev的文件系統(tǒng)表示不需要塊設(shè)備的支持;通常mount一個(gè)設(shè)備時(shí),如果沒有指定文件系統(tǒng)類型將通過此文件來決定其所需文件系統(tǒng)的類型;
/proc/interrupts
ARM體系架構(gòu)系統(tǒng)上每個(gè)IRQ相關(guān)的中斷號(hào)列表;

/proc/iomem
每個(gè)物理設(shè)備上的記憶體(RAM或者ROM)在系統(tǒng)內(nèi)存中的映射信息;
/proc/kmsg
此文件用來保存由內(nèi)核輸出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要試圖使用查看命令打開此文件;
/proc/meminfo
系統(tǒng)中關(guān)于當(dāng)前內(nèi)存的利用狀況等的信息,常由free命令使用;可以使用文件查看命令直接讀取此文件,其內(nèi)容顯示為兩列,前者為統(tǒng)計(jì)屬性,后者為對(duì)應(yīng)的值;
/proc/modules
當(dāng)前裝入內(nèi)核的所有模塊名稱列表,可以由lsmod命令使用,也可以直接查看;如下所示,其中第一列表示模塊名,第二列表示此模塊占用內(nèi)存空間大小,第三列表示此模塊有多少實(shí)例被裝入,第四列表示此模塊依賴于其它哪些模塊,第五列表示此模塊的裝載狀態(tài)(Live:已經(jīng)裝入;Loading:正在裝入;Unloading:正在卸載),第六列表示此模塊在內(nèi)核內(nèi)存(kernel memory)中的偏移量;
/proc/partitions
塊設(shè)備每個(gè)分區(qū)的主設(shè)備號(hào)(major)和次設(shè)備號(hào)(minor)等信息,同時(shí)包括每個(gè)分區(qū)所包含的塊(block)數(shù)目,如下圖所示;

/proc/slabinfo
在內(nèi)核中頻繁使用的對(duì)象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了這些對(duì)象相關(guān)slap的信息;詳情可以參見內(nèi)核文檔中slapinfo的手冊(cè)頁;
/proc/uptime
系統(tǒng)上次啟動(dòng)以來的運(yùn)行時(shí)間,如下所示,其第一個(gè)數(shù)字表示系統(tǒng)運(yùn)行時(shí)間,第二個(gè)數(shù)字表示系統(tǒng)空閑時(shí)間,單位是秒;

/proc/version
當(dāng)前系統(tǒng)運(yùn)行的內(nèi)核版本號(hào),如下所示;

/proc/zoneinfo
內(nèi)存區(qū)域(zone)的詳細(xì)信息列表,信息量較大;

要在/proc文件系統(tǒng)中創(chuàng)建一個(gè)虛擬文件,請(qǐng)使用proc_create()或proc_create_data()函數(shù)。這個(gè)函數(shù)可以接收一個(gè)文件名、一組權(quán)限和這個(gè)文件在/proc文件系統(tǒng)中出現(xiàn)的位置。這兩個(gè)函數(shù)的返回值是一個(gè)proc_dir_entry類型指針(或者為NULL,說明在發(fā)生了錯(cuò)誤時(shí))。然后就可以使用這個(gè)返回的指針來配置這個(gè)虛擬文件的其他參數(shù),例如在對(duì)該文件執(zhí)行讀操作時(shí)應(yīng)該調(diào)用的函數(shù)。函數(shù)的原型和proc_dir_entry結(jié)構(gòu)中的一部分如下圖所示。

創(chuàng)建目錄的函數(shù)原型如下:

前者不可以傳入私有數(shù)據(jù),后者可以。關(guān)于私有數(shù)據(jù)的操作,我們后面會(huì)使用一個(gè)例子來說明。

要從/proc中刪除一個(gè)文件,可以使用remove_proc_entry()函數(shù)。要使用這個(gè)函數(shù),我們需要提供文件名字符串,以及這個(gè)文件在/proc文件系統(tǒng)中的位置(parent)。函數(shù)原型如下:

當(dāng)在/proc文件系統(tǒng)下創(chuàng)建文件之后用戶是怎么訪問這個(gè)文件的,其實(shí)看到proc_create()函數(shù)的最后一個(gè)參數(shù),傳入的是一個(gè)file_operations結(jié)構(gòu)體指針,其實(shí),就是通過里面的read和write回調(diào)函數(shù)來實(shí)現(xiàn)的。下面我們來看一個(gè)具體的例子。

在/proc目錄下創(chuàng)建hello_proc文件,并往里面寫入數(shù)據(jù)或獲取里面的數(shù)據(jù)。

將此文件上傳到服務(wù)器并編譯模塊,然后將此模塊上傳到開發(fā)板上面。

生成的節(jié)點(diǎn)如下:

將此文件上傳到服務(wù)器并編譯模塊,然后將此模塊上傳到開發(fā)板上面。

生成的節(jié)點(diǎn)如下:

cat /proc/hello_proc的輸出信息如下:

echo hello > /proc/hello_proc的輸出信息如下:

再次cat /proc/hello_proc的輸出信息如下:

在使用proc_create()函數(shù)創(chuàng)建文件時(shí),第二個(gè)參數(shù)是關(guān)于權(quán)限的設(shè)置,我們這里使用默認(rèn)的0,也就是只有讀取權(quán)限,這里就不再詳細(xì)介紹,如果感興趣可以自己做實(shí)驗(yàn)。


深度講解Linux proc文件系統(tǒng)介紹的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
行唐县| 衡东县| 永福县| 大安市| 将乐县| 二连浩特市| 拉孜县| 奉节县| 武山县| 浦江县| 合山市| 榕江县| 鹤壁市| 安远县| 舞钢市| 宁化县| 武定县| 衡东县| 巍山| 汕头市| 舒城县| 疏勒县| 苍梧县| 井冈山市| 全州县| 泰兴市| 休宁县| 双鸭山市| 宜兴市| 惠州市| 淳安县| 抚松县| 甘肃省| 长汀县| 中阳县| 太康县| 巴中市| 游戏| 鹰潭市| 垣曲县| 即墨市|