proc原始碼解析(一) proc檔案系統的內容

2021-06-09 14:52:51 字數 2553 閱讀 6922

在linux系統中,偽檔案系統是系統中重要的組成部分,它與普通檔案的最大差別在於它的易失性。普通檔案都有固定的儲存介質,而偽檔案系統則儲存在記憶體中,這也使得偽檔案系統在系統掉電後,它儲存的內容就會揮發掉。

linux系統中存在以下幾類偽檔案系統:

1.procfs:proc提供核心和使用者互動的平台,由於其檔案格式是ascii,所以使用者可以使用cat,vim,echo等命令檢視或修改檔案,當然必須在root使用者下才有相應許可權。

2.sysfs:與procfs類似,由於出現的比較晚,所以它克服了proc的一些缺點,比proc功能更強大。但是由於其檔案格式是二進位制形式,所以需要特殊工具。該檔案系統主要為開發人員提供。

3.其它偽檔案系統如:libfs,debugfs等。

在這些檔案系統中,proc出現比較早,其實現也很典型。proc最初的設計目的是提供核心和使用者互動的平台,使使用者可以動態的管理系統,同時獲取系統的執行時的資訊。在proc中主要的資訊便是系統程序資訊。

本節主要說明proc的實現。

一.proc檔案系統的內容

proc中主要的檔案包含以下幾類:

1.程序相關的目錄

在proc下以數字命名的目錄便是每個程序對應的目錄,這些目錄下儲存著各個程序的資訊。可以使用cat命令檢視各個檔案中儲存的程序資訊。例如/proc/0/下儲存著系統初始化init程序的資訊。

root@xuhengyang:/proc/1# ls -l

總用量 0

dr-xr-xr-x 2 root root 0 2009-11-19 20:09 attr

-r-------- 1 root root 0 2009-11-19 20:09 auxv

-r--r--r-- 1 root root 0 2009-11-19 20:09 cgroup

--w------- 1 root root 0 2009-11-19 20:09 clear_refs

-r--r--r-- 1 root root 0 2009-11-19 03:56 cmdline

-rw-r--r-- 1 root root 0 2009-11-19 20:09 coredump_filter

-r--r--r-- 1 root root 0 2009-11-19 20:09 cpuset

lrwxrwxrwx 1 root root 0 2009-11-19 20:09 cwd -> /

-r-------- 1 root root 0 2009-11-19 20:09 environ

。。。root@xuhengyang:/proc/1# cat cmdline

/sbin/init

2.通用系統資訊

通用系統資訊主要包括記憶體管理資訊,檔案系統資訊,裝置驅動資訊,系統匯流排資訊,電源管理資訊等。每種資訊都有對應檔案存在。例如:

root@xuhengyang:/proc# cat meminfo

memtotal: 3059316 kb

memfree: 702464 kb

buffers: 444540 kb

cached: 1183516 kb

swapcached: 0 kb

active: 1470404 kb

。。。每種資訊都有對應的檔名,此處就不一一說明了。

3.網路資訊

/proc/net是乙個符號鏈結,它指向當前程序的/self/net/目錄,該目錄下儲存著當前程序的網路管理資訊。

root@xuhengyang:/proc# ls -l net

lrwxrwxrwx 1 root root 8 2009-11-19 20:23 net -> self/net

4.系統控制資訊

系統控制引數用來檢測修改系統的執行引數。它存在與/proc/sys下。使用者可以使用cat,echo來檢視或修改系統的執行引數。例如:

root@xuhengyang:/proc/sys# ls -l

總用量 0

dr-xr-xr-x 0 root root 0 2009-11-19 10:33 crypto

dr-xr-xr-x 0 root root 0 2009-11-19 10:33 debug

dr-xr-xr-x 0 root root 0 2009-11-19 10:33 dev

dr-xr-xr-x 0 root root 0 2009-11-18 19:57 fs

dr-xr-xr-x 0 root root 0 2009-11-19 03:56 kernel

dr-xr-xr-x 0 root root 0 2009-11-18 19:57 net

dr-xr-xr-x 0 root root 0 2009-11-19 10:33 vm

6010

但是這只是臨時性的修改,在你重啟系統後會恢復預設的60,所以,還要做一步:

$ sudo gedit /etc/sysctl.conf

在這個文件的最後加上這樣一行:

然後儲存,重啟。ok,你的設定就生效了。

proc原始碼解析(三) proc初始化

在使用proc之前,我們必須首先初始化並掛載proc,並在核心記憶體中建立資料結構來描述檔案系統。但是,不同的體系結構擁有不同的proc內容,所以,在初始化階段並不完全建立子目錄的內容,有些檔案要等到系統執行時動態建立。proc檔案系統初始化的流程圖如下 proc root init的定義定義如下 ...

proc原始碼解析(三) proc初始化

在使用proc之前,我們必須首先初始化並掛載proc,並在核心記憶體中建立資料結構來描述檔案系統。但是,不同的體系結構擁有不同的proc內容,所以,在初始化階段並不完全建立子目錄的內容,有些檔案要等到系統執行時動態建立。proc檔案系統初始化的流程圖如下 proc root init的定義定義如下 ...

proc原始碼解析(六) proc檔案讀寫函式

前邊說過目錄項建立時一般都使用預設的讀寫函式,本節就來看看預設的檔案操作函式的定義。前邊已經引用過該定義,此處再次引用 static const struct file operations proc file operations proc file read的實現 從proc檔案中讀取資料需要經...