在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檔案中讀取資料需要經...