天天看點

linux /proc目錄下的檔案為何無法用vi編輯儲存

  事情是這樣的:一個朋友問為什麼/proc目錄下的/proc/sys/net/ipv4/conf/lo/arp_ignore隻能用echo修改,卻無法用vi編輯後進行儲存,即使是強制儲存都不行...而且該檔案的權限也無法修改...

linux /proc目錄下的檔案為何無法用vi編輯儲存

  要搞清楚上邊的問題,我們必須要首先知道Linux系統上的/proc目錄是幹嘛的。

   Linux系統上的/proc目錄是一種檔案系統,即proc檔案系統。與其它常見的檔案系統不同的是,/proc是一種僞檔案系統(也即:虛拟檔案系統),存儲的是目前核心運作狀态的一系列特殊檔案,使用者可以通過這些檔案檢視有關系統硬體及目前正在運作程序的資訊,甚至可以通過更改其中某些檔案來改變核心的運作狀态。

   基于/proc檔案系統如上所述的特殊性,其内的檔案也常被稱作虛拟檔案,并具有一些獨特的特點。例如,其中有些檔案雖然使用檢視指令檢視時會傳回大量資訊,但檔案本身的大小卻會顯示為0位元組。此外,這些特殊檔案中大多數檔案的時間及日期屬性通常為目前系統時間和日期,這跟它們随時會被重新整理(存儲于RAM中)有關。

   為了檢視及使用上的友善,這些檔案通常會按照相關性進行分類存儲于不同的目錄甚至子目錄中,如/proc/scsi目錄中存儲的就是目前系統上所有SCSI裝置的相關資訊,/proc/N中存儲的則是系統目前正在運作的程序的相關資訊,其中N為正在運作的程序(可以想象得到,在某程序結束後其相關目錄則會消失)。

   大多數虛拟檔案可以使用檔案檢視指令如cat、more或者less進行檢視,有些檔案資訊表述的内容可以一目了然,但也有檔案的資訊卻不怎麼具有可讀性。不過,這些可讀性較差的檔案在使用一些指令如apm、free、lspci或top檢視時卻可以有着不錯的表現。

如何使核心設定具有持久性

   這裡提供了一個友善的實用程式,用于更改 /proc/sys 目錄下的任何核心參數。它使您可以更改運作中的核心(類似于echo和重定向方法),但它還有一個在系統引導時執行的配置檔案。這使您可以更改運作中的核心,并将這些更改添加到配置檔案,以便于在系統重新開機之後,這些更改仍然生效。

   該實用程式稱為 sysctl,在 sysctl(8) 的聯機幫助頁中,對這個實用程式進行了完整的文檔說明。

sysctl 的配置檔案是 /etc/sysctl.conf,可以編輯該檔案,并在 sysctl.conf(8) 下記錄了該檔案。

   sysctl配置與顯示在/proc/sys目錄中的核心參數.可以用sysctl來設定或重新設定聯網功能,如IP轉發、IP碎片去除以及源路由檢查等。使用者隻需要編輯/etc/sysctl.conf檔案,即可手工或自動執行由sysctl控制的功能。

   指令格式:

   sysctl [-n] [-e] -w variable=value
   sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf)
   sysctl [-n] [-e] -a      

   常用參數的意義:

   -w   臨時改變某個指定參數的值,如

        sysctl -w net.ipv4.ip_forward=1

   -a   顯示所有的系統參數

   -p   從指定的檔案加載系統參數,如不指定即從/etc/sysctl.conf中加載

   如果僅僅是想臨時改變某個系統參數的值,可以用兩種方法來實作,例如想啟用IP路由轉發功能:

   1) #echo 1 > /proc/sys/net/ipv4/ip_forward
   2) #sysctl -w net.ipv4.ip_forward=1      

   以上兩種方法都可能立即開啟路由功能,但如果系統重新開機,或執行了service network restart指令,所設定的值即會丢失,如果想永久保留配置,可以修改/etc/sysctl.conf檔案,

net.ipv4.ip_forward=0改為net.ipv4.ip_forward=1      

   sysctl 将 /proc/sys 下的檔案視為可以更改的單個變量。以 /proc/sys 下的檔案 /proc/sys/fs/file-max 為例,它表示系統中所允許的檔案句柄的最大數目,這個檔案被表示成 fs.file-max。

   這個示例揭示了 sysctl 表示法中的一些奇妙事情。由于 sysctl 隻能更改 /proc/sys 目錄下的變量,并且人們始終認為變量是在這個目錄下,是以省略了變量名的那一部分(/proc/sys)。

   另一個要說明的更改是,将目錄分隔符(正斜杠 /)換成了英文中的句号(點 .)。

   将 /proc/sys 中的檔案轉換成 sysctl 中的變量有兩個簡單的規則:

   1、去掉前面部分 /proc/sys。

   2、将檔案名中的正斜杠變為點。

   這兩條規則使您能将 /proc/sys 中的任一檔案名轉換成 sysctl 中的任一變量名。

   一般檔案到變量的轉換為:

   /proc/sys/dir/file --> dir.file

   dir1.dir2.file --> /proc/sys/dir1/dir2/file

可以使用指令 sysctl -a 檢視所有可以更改的變量和其目前設定。

用 sysctl 還可以更改變量,它所做的工作與上面所用的 echo 方法完全一樣。其表示法為:

sysctl -w dir.file="value"

還是用 file-max 作為示例,使用下面兩種方法中的一種将該值更改為 16384:

sysctl -w fs.file-max="16384"

或者:

echo "16384" > /proc/sys/fs/file-max

   不要忘記 sysctl 不會将所做的更改添加到配置檔案中;這要您用手工來完成。如果您希望在重新開機之後,前面所做的更改仍然有效,則必須維護這個配置檔案。

   注:不是所有的分發版都提供 sysctl 支援。如果您的特定系統屬于這種情況,則可以用上面所描述的 echo 和重定向方法,将這些指令添加到啟動腳本中,這樣系統每次引導時,都會執行它們。

   詳細介紹有關 /proc 中每個檔案的用法和确切資訊超出了本文所涉及的範圍。要獲得任何關于本文沒有涉及到的 /proc 檔案的其它資訊,一個最佳來源就是 Linux 核心源代碼本身,它包含了一些非常優秀的文檔。對于系統管理者,/proc 中的以下檔案較有用。這不意味着它是一份詳盡的說明,而隻是日常使用中便于查閱的參考。

/proc/scsi

/proc/scsi/scsi

     作為系統管理者,需要了解的最有用内容是,在有熱交換驅動器情況下,如何不重新開機系統就可以添加更多磁盤空間。假使不使用 /proc,您可以插入驅動器,但為了使系統識别新磁盤,必須随即重新開機系統。這裡,可以用以下指令來使系統識别新的驅動器:

echo "scsi add-single-device w x y z" > /proc/scsi/scsi

為使該指令正常運作,必須指定正确的參數值 w、x、y 和 z,如下所示:

w 是主機擴充卡辨別,第一個擴充卡為零(0)

x 是主機擴充卡上的 SCSI 通道,第一個通道為零(0)

y 是裝置的 SCSI 辨別

z 是 LUN 号,第一個 LUN 為零(0)

     一旦将磁盤添加到系統中之後,可以挂裝任何先前已格式化的檔案系統,也可以開始對它進行格式化等。例如,如果不确定磁盤是什麼裝置,或者想檢查任何先前已有的分區,則可以用如 fdisk -l 這樣的指令來向您報告這方面的資訊。

相反的,在不重新開機系統的情況下将裝置從系統中除去的指令是:

echo "scsi remove-single-device w x y z" > /proc/scsi/scsi

在輸入這條指令并将熱交換 SCSI 磁盤從系統中除去之前,請確定首先卸下已從該磁盤安裝的任何檔案系統。

/proc/sys/fs/

/proc/sys/fs/file-max

     該檔案指定了可以配置設定的檔案句柄的最大數目。如果使用者得到的錯誤消息聲明由于打開檔案數已經達到了最大值,進而他們不能打開更多檔案,則可能需要增加該值。可将這個值設定成有任意多個檔案,并且能通過将一個新數字值寫入該檔案來更改該值。

預設設定:4096

/proc/sys/fs/file-nr

該檔案與 file-max 相關,它有三個值:

已配置設定檔案句柄的數目

已使用檔案句柄的數目

檔案句柄的最大數目

該檔案是隻讀的,僅用于顯示資訊。

/proc/sys/fs/inode-*

任何以名稱“inode”開頭的檔案所執行的操作與上面那些以名稱“file”開頭的檔案所執行的操作一樣,但所執行的操作與索引節點有關,而與檔案句柄無關。

/proc/sys/fs/overflowuid 和 /proc/sys/fs/overflowgid

這兩個檔案分别儲存那些支援 16 位使用者辨別群組辨別的任何檔案系統的使用者辨別(UID)群組辨別(GID)。可以更改這些值,但如果您确實覺得需要這樣做,那麼您可能會發現更改組和密碼檔案項更容易些。

預設設定:65534

/proc/sys/fs/super-max

該檔案指定超級塊處理程式的最大數目。挂裝的任何檔案系統需要使用超級塊,是以如果挂裝了大量檔案系統,則可能會用盡超級塊處理程式。

預設設定:256

/proc/sys/fs/super-nr

該檔案顯示目前已配置設定超級塊的數目。該檔案是隻讀的,僅用于顯示資訊。

/proc/sys/kernel

/proc/sys/kernel/acct

該檔案有三個可配置值,根據包含日志的檔案系統上可用空間的數量(以百分比表示),這些值控制何時開始進行程序記帳:

如果可用空間低于這個百分比值,則停止程序記帳

如果可用空間高于這個百分比值,則開始程序記帳

檢查上面兩個值的頻率(以秒為機關)

要更改這個檔案的某個值,應該回送用空格分隔開的一串數字。

預設設定:2 4 30

如果包含日志的檔案系統上隻有少于 2% 的可用空間,則這些值會使記帳停止,如果有 4% 或更多可用空間,則再次啟動記帳。每 30 秒做一次檢查。

/proc/sys/kernel/ctrl-alt-del

該檔案有一個二進制值,該值控制系統在接收到 ctrl+alt+delete 按鍵組合時如何反應。這兩個值表示:

零(0)值表示捕獲 ctrl+alt+delete,并将其送至 init 程式。這将允許系統可以完美地關閉和重新開機,就好象您輸入 shutdown 指令一樣。

壹(1)值表示不捕獲 ctrl+alt+delete,将執行非幹淨的關閉,就好象直接關閉電源一樣。

預設設定:0

/proc/sys/kernel/domainname

該檔案允許您配置網絡域名。它沒有預設值,也許已經設定了域名,也許沒有設定。

/proc/sys/kernel/hostname

該檔案允許您配置網絡主機名。它沒有預設值,也許已經設定了主機名,也許沒有設定。

/proc/sys/kernel/msgmax

該檔案指定了從一個程序發送到另一個程序的消息的最大長度。程序間的消息傳遞是在核心的記憶體中進行,不會交換到磁盤上,是以如果增加該值,則将增加作業系統所使用的記憶體數量。

預設設定:8192

/proc/sys/kernel/msgmnb

該檔案指定在一個消息隊列中最大的位元組數。

預設設定:16384

/proc/sys/kernel/msgmni

該檔案指定消息隊列辨別的最大數目。

預設設定:16

/proc/sys/kernel/panic

該檔案表示如果發生“核心嚴重錯誤(kernel panic)”,則核心在重新開機之前等待的時間(以秒為機關)。零(0)秒設定在發生核心嚴重錯誤時将禁止重新開機。

/proc/sys/kernel/printk

該檔案有四個數字值,它們根據日志記錄消息的重要性,定義将其發送到何處。關于不同日志級别的更多資訊,請閱讀 syslog(2) 聯機幫助頁。該檔案的四個值為:

控制台日志級别:優先級高于該值的消息将被列印至控制台

預設的消息日志級别:将用該優先級來列印沒有優先級的消息

最低的控制台日志級别:控制台日志級别可被設定的最小值(最高優先級)

預設的控制台日志級别:控制台日志級别的預設值

預設設定:6 4 1 7

/proc/sys/kernel/shmall

該檔案是在任何給定時刻系統上可以使用的共享記憶體的總量(以位元組為機關)。

預設設定:2097152

/proc/sys/kernel/shmax

該檔案指定核心所允許的最大共享記憶體段的大小(以位元組為機關)。

預設設定:33554432

/proc/sys/kernel/shmmni

該檔案表示用于整個系統共享記憶體段的最大數目。

/proc/sys/kernel/sysrq

如果該檔案指定的值為非零,則激活 System Request Key。

/proc/sys/kernel/threads-max

該檔案指定核心所能使用的線程的最大數目。

預設設定:2048

/proc/sys/net

/proc/sys/net/core/message_burst

寫新的警告消息所需的時間(以 1/10 秒為機關);在這個時間内所接收到的其它警告消息會被丢棄。這用于防止某些企圖用消息“淹沒”您系統的人所使用的拒絕服務(Denial of Service)攻擊。

預設設定:50(5 秒)

/proc/sys/net/core/message_cost

該檔案存有與每個警告消息相關的成本值。該值越大,越有可能忽略警告消息。

預設設定:5

/proc/sys/net/core/netdev_max_backlog

該檔案指定了,在接口接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目。

預設設定:300

/proc/sys/net/core/optmem_max

該檔案指定了每個套接字所允許的最大緩沖區的大小。

/proc/sys/net/core/rmem_default

該檔案指定了接收套接字緩沖區大小的預設值(以位元組為機關)。

/proc/sys/net/core/rmem_max

該檔案指定了接收套接字緩沖區大小的最大值(以位元組為機關)。

/proc/sys/net/core/wmem_default

該檔案指定了發送套接字緩沖區大小的預設值(以位元組為機關)。

/proc/sys/net/core/wmem_max

該檔案指定了發送套接字緩沖區大小的最大值(以位元組為機關)。

/proc/sys/net/ipv4

所有 IPv4 和 IPv6 的參數都被記錄在核心源代碼文檔中。請參閱檔案 /usr/src/linux/Documentation/networking/ip-sysctl.txt。

/proc/sys/net/ipv6

同 IPv4。

/proc/sys/vm

/proc/sys/vm/buffermem

該檔案控制用于緩沖區記憶體的整個系統記憶體的數量(以百分比表示)。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值。

用于緩沖區的記憶體的最低百分比

如果發生所剩系統記憶體不多,而且系統記憶體正在減少這種情況,系統将試圖維護緩沖區記憶體的數量。

用于緩沖區的記憶體的最高百分比

預設設定:2 10 60

/proc/sys/vm/freepages

該檔案控制系統如何應對各種級别的可用記憶體。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值。

如果系統中可用頁面的數目達到了最低限制,則隻允許核心配置設定一些記憶體。

如果系統中可用頁面的數目低于這一限制,則核心将以較積極的方式啟動交換,以釋放記憶體,進而維持系統性能。

核心将試圖保持這個數量的系統記憶體可用。低于這個值将啟動核心交換。

預設設定:512 768 1024

/proc/sys/vm/kswapd

該檔案控制允許核心如何交換記憶體。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值:

核心試圖一次釋放的最大頁面數目。如果想增加記憶體交換過程中的帶寬,則需要增加該值。

核心在每次交換中試圖釋放頁面的最少次數。

核心在一次交換中所寫頁面的數目。這對系統性能影響最大。這個值越大,交換的資料越多,花在磁盤尋道上的時間越少。然而,這個值太大會因“淹沒”請求隊列而反過來影響系統性能。

預設設定:512 32 8

/proc/sys/vm/pagecache

該檔案與 /proc/sys/vm/buffermem 的工作内容一樣,但它是針對檔案的記憶體映射和一般高速緩存。

/proc目錄介紹:(摘自網絡)

一、程序目錄中的常見檔案介紹

/proc目錄中包含許多以數字命名的子目錄,這些數字表示系統目前正在運作程序的程序号,裡面包含對應程序相關的多個資訊檔案。

[root@rhel5 ~]# ll /proc

 total 0

 dr-xr-xr-x  5 root      root               0 Feb  8 17:08 1

 dr-xr-xr-x  5 root      root               0 Feb  8 17:08 10

 dr-xr-xr-x  5 root      root               0 Feb  8 17:08 11

 dr-xr-xr-x  5 root      root               0 Feb  8 17:08 1156

 dr-xr-xr-x  5 root      root               0 Feb  8 17:08 139

 dr-xr-xr-x  5 root      root               0 Feb  8 17:08 140

 dr-xr-xr-x  5 root      root               0 Feb  8 17:08 141

 dr-xr-xr-x  5 root      root               0 Feb  8 17:09 1417

 dr-xr-xr-x  5 root      root               0 Feb  8 17:09 1418

上面列出的是/proc目錄中一些程序相關的目錄,每個目錄中是當程本身相關資訊的檔案。下面是作者系統(RHEL5.3)上運作的一個PID為2674的程序saslauthd的相關檔案,其中有些檔案是每個程序都會具有的,後文會對這些常見檔案做出說明。

[root@rhel5 ~]# ll /proc/2674

 dr-xr-xr-x 2 root root 0 Feb  8 17:15 attr

 -r-------- 1 root root 0 Feb  8 17:14 auxv

 -r--r--r-- 1 root root 0 Feb  8 17:09 cmdline

 -rw-r--r-- 1 root root 0 Feb  8 17:14 coredump_filter

 -r--r--r-- 1 root root 0 Feb  8 17:14 cpuset

 lrwxrwxrwx 1 root root 0 Feb  8 17:14 cwd -> /var/run/saslauthd

 -r-------- 1 root root 0 Feb  8 17:14 environ

 lrwxrwxrwx 1 root root 0 Feb  8 17:09 exe -> /usr/sbin/saslauthd

 dr-x------ 2 root root 0 Feb  8 17:15 fd

 -r-------- 1 root root 0 Feb  8 17:14 limits

 -rw-r--r-- 1 root root 0 Feb  8 17:14 loginuid

 -r--r--r-- 1 root root 0 Feb  8 17:14 maps

 -rw------- 1 root root 0 Feb  8 17:14 mem

 -r--r--r-- 1 root root 0 Feb  8 17:14 mounts

 -r-------- 1 root root 0 Feb  8 17:14 mountstats

 -rw-r--r-- 1 root root 0 Feb  8 17:14 oom_adj

 -r--r--r-- 1 root root 0 Feb  8 17:14 oom_score

 lrwxrwxrwx 1 root root 0 Feb  8 17:14 root -> /

 -r--r--r-- 1 root root 0 Feb  8 17:14 schedstat

 -r-------- 1 root root 0 Feb  8 17:14 smaps

 -r--r--r-- 1 root root 0 Feb  8 17:09 stat

 -r--r--r-- 1 root root 0 Feb  8 17:14 statm

 -r--r--r-- 1 root root 0 Feb  8 17:10 status

 dr-xr-xr-x 3 root root 0 Feb  8 17:15 task

 -r--r--r-- 1 root root 0 Feb  8 17:14 wchan

1.1、cmdline— 啟動目前程序的完整指令,但僵屍程序目錄中的此檔案不包含任何資訊;

[root@rhel5 ~]# more /proc/2674/cmdline

 /usr/sbin/saslauthd

1.2、cwd— 指向目前程序運作目錄的一個符号連結;

1.3、environ — 目前程序的環境變量清單,彼此間用空字元(NULL)隔開;變量用大寫字母表示,其值用小寫字母表示;

[root@rhel5 ~]# more /proc/2674/environ

 TERM=linuxauthd

1.4、exe— 指向啟動目前程序的可執行檔案(完整路徑)的符号連結,通過/proc/N/exe可以啟動目前程序的一個拷貝;

1.5、fd — 這是個目錄,包含目前程序打開的每一個檔案的檔案描述符(file descriptor),這些檔案描述符是指向實際檔案的一個符号連結;

[root@rhel5 ~]# ll /proc/2674/fd

 lrwx------ 1 root root 64 Feb  8 17:17 0 -> /dev/null

 lrwx------ 1 root root 64 Feb  8 17:17 1 -> /dev/null

 lrwx------ 1 root root 64 Feb  8 17:17 2 -> /dev/null

 lrwx------ 1 root root 64 Feb  8 17:17 3 -> socket:[7990]

 lrwx------ 1 root root 64 Feb  8 17:17 4 -> /var/run/saslauthd/saslauthd.pid

 lrwx------ 1 root root 64 Feb  8 17:17 5 -> socket:[7991]

 lrwx------ 1 root root 64 Feb  8 17:17 6 ->  /var/run/saslauthd/mux.accept

1.6、limits— 目前程序所使用的每一個受限資源的軟限制、硬限制和管理單元;此檔案僅可由實際啟動目前程序的UID使用者讀取;(2.6.24以後的核心版本支援此功能);

1.7、maps — 目前程序關聯到的每個可執行檔案和庫檔案在記憶體中的映射區域及其通路權限所組成的清單;

[root@rhel5 ~]# cat /proc/2674/maps

 00110000-00239000 r-xp 00000000 08:02 130647      /lib/libcrypto.so.0.9.8e

 00239000-0024c000 rwxp  00129000 08:02 130647     /lib/libcrypto.so.0.9.8e

 0024c000-00250000 rwxp  0024c000 00:00 0

 00250000-00252000 r-xp 00000000 08:02 130462      /lib/libdl-2.5.so

 00252000-00253000 r-xp 00001000 08:02 130462      /lib/libdl-2.5.so

1.8、mem — 目前程序所占用的記憶體空間,由open、read和lseek等系統調用使用,不能被使用者讀取;

1.9、root — 指向目前程序運作根目錄的符号連結;在Unix和Linux系統上,通常采用chroot指令使每個程序運作于獨立的根目錄;

1.10、stat — 目前程序的狀态資訊,包含一系統格式化後的資料列,可讀性差,通常由ps指令使用;

1.11、statm — 目前程序占用記憶體的狀态資訊,通常以“頁面”(page)表示;

1.12、status — 與stat所提供資訊類似,但可讀性較好,如下所示,每行表示一個屬性資訊;其詳細介紹請參見 proc的man手冊頁;

[root@rhel5 ~]# more /proc/2674/status

 Name:   saslauthd

State:  S  (sleeping)

 SleepAVG:       0%

 Tgid:   2674

 Pid:    2674

 PPid:   1

 TracerPid:      0

 Uid:    0       0        0       0

 Gid:    0       0        0       0

 FDSize: 32

 Groups:

 VmPeak:     5576 kB

 VmSize:     5572 kB

 VmLck:         0 kB

 VmHWM:       696 kB

 VmRSS:       696 kB

 …………

1.13、task— 目錄檔案,包含由目前程序所運作的每一個線程的相關資訊,每個線程的相關資訊檔案均儲存在一個由線程号(tid)命名的目錄中,這類似于其内容類似于每個程序目錄中的内容;(核心2.6版本以後支援此功能)

二、/proc目錄下常見的檔案介紹

2.1、/proc/apm

進階電源管理(APM)版本資訊及電池相關狀态資訊,通常由apm指令使用;

2.2、/proc/buddyinfo

用于診斷記憶體碎片問題的相關資訊檔案;

2.3、/proc/cmdline

在啟動時傳遞至核心的相關參數資訊,這些資訊通常由lilo或grub等啟動管理工具進行傳遞;

[root@rhel5 ~]# more /proc/cmdline

 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

2.4、/proc/cpuinfo

處理器的相關資訊的檔案;

2.5、/proc/crypto

系統上已安裝的核心使用的密碼算法及每個算法的詳細資訊清單;

[root@rhel5 ~]# more /proc/crypto

 name         : crc32c

 driver       : crc32c-generic

 module       : kernel

 priority     : 0

 type         : digest

 blocksize    : 32

 digestsize   : 4

2.6、/proc/devices

系統已經加載的所有塊裝置和字元裝置的資訊,包含主裝置号和裝置組(與主裝置号對應的裝置類型)名;

[root@rhel5 ~]# more /proc/devices

 Character devices:

   1 mem

   4 /dev/vc/0

   4 tty

   4 ttyS

   …………

 Block devices:

   1 ramdisk

   2 fd

   8 sd

2.7、/proc/diskstats

每塊磁盤裝置的磁盤I/O統計資訊清單;(核心2.5.69以後的版本支援此功能)

2.8、/proc/dma

每個正在使用且注冊的ISA DMA通道的資訊清單;

[root@rhel5 ~]# more /proc/dma

 2: floppy

 4: cascade

2.9、/proc/execdomains

核心目前支援的執行域(每種作業系統獨特“個性”)資訊清單;

[root@rhel5 ~]# more /proc/execdomains

 0-0     Linux                    [kernel]

2.10、/proc/fb

幀緩沖裝置清單檔案,包含幀緩沖裝置的裝置号和相關驅動資訊;

2.11、/proc/filesystems

目前被核心支援的檔案系統類型清單檔案,被标示為nodev的檔案系統表示不需要塊裝置的支援;通常mount一個裝置時,如果沒有指定檔案系統類型将通過此檔案來決定其所需檔案系統的類型;

[root@rhel5 ~]# more /proc/filesystems

 nodev   sysfs

 nodev   rootfs

 nodev   proc

         iso9660

         ext3

2.12、/proc/interrupts

X86或X86_64體系架構系統上每個IRQ相關的中斷号清單;多路處理器平台上每個CPU對于每個I/O裝置均有自己的中斷号;

[root@rhel5 ~]# more /proc/interrupts

            CPU0        

   0:    1305421     IO-APIC-edge  timer

   1:         61     IO-APIC-edge  i8042

 185:       1068   IO-APIC-level  eth0

2.13、/proc/iomem

每個實體裝置上的記憶體(RAM或者ROM)在系統記憶體中的映射資訊;

[root@rhel5 ~]# more /proc/iomem

 00000000-0009f7ff : System RAM

0009f800-0009ffff :  reserved

000a0000-000bffff :  Video RAM area

000c0000-000c7fff : Video ROM

2.14、/proc/ioports

目前正在使用且已經注冊過的與實體裝置進行通訊的輸入-輸出端口範圍資訊清單;如下面所示,第一清單示注冊的I/O端口範圍,其後表示相關的裝置;

[root@rhel5 ~]# less /proc/ioports

 0000-001f : dma1

 0020-0021 : pic1

 0040-0043 : timer0

 0050-0053 : timer1

 0060-006f : keyboard

2.15、/proc/kallsyms

子產品管理工具用來動态連結或綁定可裝載子產品的符号定義,由核心輸出;(核心2.5.71以後的版本支援此功能);通常這個檔案中的資訊量相當大;

[root@rhel5 ~]# more /proc/kallsyms

 c04011f0 T _stext

 c04011f0 t  run_init_process

 c04011f0 T stext

2.16、/proc/kcore

系統使用的實體記憶體,以ELF核心檔案(core file)格式存儲,其檔案大小為已使用的實體記憶體(RAM)加上4KB;這個檔案用來檢查核心資料結構的目前狀态,是以,通常由GBD通常調試工具使用,但不能使用檔案檢視指令打開此檔案;

2.17、/proc/kmsg

此檔案用來儲存由核心輸出的資訊,通常由/sbin/klogd或/bin/dmsg等程式使用,不要試圖使用檢視指令打開此檔案;

2.18、/proc/loadavg

儲存關于CPU和磁盤I/O的負載平均值,其前三列分别表示每1秒鐘、每5秒鐘及每15秒的負載平均值,類似于uptime指令輸出的相關資訊;第四列是由斜線隔開的兩個數值,前者表示目前正由核心排程的實體(程序和線程)的數目,後者表示系統目前存活的核心排程實體的數目;第五清單示此檔案被檢視前最近一個由核心建立的程序的PID;

[root@rhel5 ~]# more /proc/loadavg

 0.45 0.12 0.04 4/125 5549

 [root@rhel5 ~]# uptime

 06:00:54 up  1:06,  3 users,  load average:  0.45, 0.12, 0.04

2.19、/proc/locks

儲存目前由核心鎖定的檔案的相關資訊,包含核心内部的調試資料;每個鎖定占據一行,且具有一個惟一的編号;如下輸出資訊中每行的第二清單示目前鎖定使用的鎖定類别,POSIX表示目前較新類型的檔案鎖,由lockf系統調用産生,FLOCK是傳統的UNIX檔案鎖,由flock系統調用産生;第三列也通常由兩種類型,ADVISORY表示不允許其他使用者鎖定此檔案,但允許讀取,MANDATORY表示此檔案鎖定期間不允許其他使用者任何形式的通路;

[root@rhel5 ~]# more /proc/locks

 1: POSIX  ADVISORY  WRITE 4904 fd:00:4325393 0 EOF

 2: POSIX  ADVISORY  WRITE 4550 fd:00:2066539 0 EOF

 3: FLOCK  ADVISORY  WRITE 4497 fd:00:2066533 0 EOF

2.20、/proc/mdstat

儲存RAID相關的多塊磁盤的目前狀态資訊,在沒有使用RAID機器上,其顯示為如下狀态:

[root@rhel5 ~]# less /proc/mdstat

 Personalities :

 unused devices: <none>

2.21、/proc/meminfo

系統中關于目前記憶體的利用狀況等的資訊,常由free指令使用;可以使用檔案檢視指令直接讀取此檔案,其内容顯示為兩列,前者為統計屬性,後者為對應的值;

[root@rhel5 ~]# less /proc/meminfo

 MemTotal:       515492 kB

 MemFree:          8452 kB

 Buffers:         19724 kB

 Cached:         376400 kB

 SwapCached:          4 kB

2.22、/proc/mounts

在核心2.4.29版本以前,此檔案的内容為系統目前挂載的所有檔案系統,在2.4.19以後的核心中引進了每個程序使用獨立挂載名稱空間的方式,此檔案則随之變成了指向/proc/self/mounts(每個程序自身挂載名稱空間中的所有挂載點清單)檔案的符号連結;/proc/self是一個獨特的目錄,後文中會對此目錄進行介紹;

[root@rhel5 ~]# ll /proc |grep mounts

 lrwxrwxrwx  1 root      root              11 Feb  8 06:43 mounts ->  self/mounts

如下所示,其中第一清單示挂載的裝置,第二清單示在目前目錄樹中的挂載點,第三點表示目前檔案系統的類型,第四清單示挂載屬性(ro或者rw),第五列和第六列用來比對/etc/mtab檔案中的轉儲(dump)屬性;

 [root@rhel5 ~]# more /proc/mounts

 rootfs / rootfs rw 0 0

 /dev/root / ext3 rw,data=ordered 0 0

 /dev /dev tmpfs rw 0 0

 /proc /proc proc rw 0 0

 /sys /sys sysfs rw 0 0

 /proc/bus/usb /proc/bus/usb usbfs rw 0 0

2.23、/proc/modules

目前裝入核心的所有子產品名稱清單,可以由lsmod指令使用,也可以直接檢視;如下所示,其中第一清單示子產品名,第二清單示此子產品占用記憶體空間大小,第三清單示此子產品有多少執行個體被裝入,第四清單示此子產品依賴于其它哪些子產品,第五清單示此子產品的裝載狀态(Live:已經裝入;Loading:正在裝入;Unloading:正在解除安裝),第六清單示此子產品在核心記憶體(kernel memory)中的偏移量;

[root@rhel5 ~]# more /proc/modules

 autofs4 24517 2 - Live 0xe09f7000

 hidp 23105 2 - Live 0xe0a06000

 rfcomm 42457 0 - Live 0xe0ab3000

l2cap 29505 10 hidp,rfcomm, Live 0xe0aaa000

2.24、/proc/partitions

塊裝置每個分區的主裝置号(major)和次裝置号(minor)等資訊,同時包括每個分區所包含的塊(block)數目(如下面輸出中第三列所示);

[root@rhel5 ~]# more /proc/partitions

 major minor  #blocks  name

    8     0   20971520 sda

    8     1     104391 sda1

    8     2    6907950 sda2

    8     3    5630782 sda3

    8     4           1 sda4

    8     5    3582463 sda5

2.25、/proc/pci

核心初始化時發現的所有PCI裝置及其配置資訊清單,其配置資訊多為某PCI裝置相關IRQ資訊,可讀性不高,可以用“/sbin/lspci –vb”指令獲得較易了解的相關資訊;在2.6核心以後,此檔案已為/proc/bus/pci目錄及其下的檔案代替;

2.26、/proc/slabinfo

在核心中頻繁使用的對象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo檔案列出了這些對象相關slap的資訊;詳情可以參見核心文檔中slapinfo的手冊頁;

[root@rhel5 ~]# more /proc/slabinfo

 slabinfo - version: 2.1

 # name            <active_objs>  <num_objs> <objsize> <objperslab> <pagesperslab> :  tunables <limit> <batchcount> <sharedfactor> : slabdata  <ac

 tive_slabs> <num_slabs> <sharedavail>

 rpc_buffers            8       8   2048    2    1 :  tunables   24   12    8 : slabdata       4      4      0

 rpc_tasks               8     20    192    20    1 : tunables  120   60     8 : slabdata      1      1       0

 rpc_inode_cache        6       9    448    9    1 : tunables    54   27    8 : slabdata       1      1      0

2.27、/proc/stat

實時追蹤自系統上次啟動以來的多種統計資訊;如下所示,其中,

“cpu”行後的八個值分别表示以1/100(jiffies)秒為機關的統計值(包括系統運作于使用者模式、低優先級使用者模式,運系統模式、空閑模式、I/O等待模式的時間等);

“intr”行給出中斷的資訊,第一個為自系統啟動以來,發生的所有的中斷的次數;然後每個數對應一個特定的中斷自系統啟動以來所發生的次數;

“ctxt”給出了自系統啟動以來CPU發生的上下文交換的次數。

“btime”給出了從系統啟動到現在為止的時間,機關為秒;

“processes (total_forks) 自系統啟動以來所建立的任務的個數目;

“procs_running”:目前運作隊列的任務的數目;

“procs_blocked”:目前被阻塞的任務的數目;

[root@rhel5 ~]# more /proc/stat

 cpu  2751 26 5771 266413 2555 99 411 0

 cpu0 2751 26 5771 266413 2555 99 411 0

 intr 2810179 2780489 67 0 3 3 0 5 0 1 0 0 0 1707 0 0 9620 0 0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0 5504 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12781 0 0 0

 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0 0 0

 ctxt 427300

 btime 1234084100

 processes 3491

 procs_running 1

 procs_blocked 0

2.28、/proc/swaps

目前系統上的交換分區及其空間利用資訊,如果有多個交換分區的話,則會每個交換分區的資訊分别存儲于/proc/swap目錄中的單獨檔案中,而其優先級數字越低,被使用到的可能性越大;下面是作者系統中隻有一個交換分區時的輸出資訊;

[root@rhel5 ~]# more /proc/swaps

 Filename                                  Type             Size    Used    Priority

 /dev/sda8                                 partition       642560  0        -1

2.29、/proc/uptime

系統上次啟動以來的運作時間,如下所示,其第一個數字表示系統運作時間,第二個數字表示系統空閑時間,機關是秒;

[root@rhel5 ~]# more /proc/uptime

 3809.86 3714.13

2.30、/proc/version

目前系統運作的核心版本号,在作者的RHEL5.3上還會顯示系統安裝的gcc版本,如下所示;

[root@rhel5 ~]# more /proc/version

 Linux version 2.6.18-128.el5 ([email protected])  (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Wed Dec 17 11:42:39  EST 2008

2.31、/proc/vmstat

目前系統虛拟記憶體的多種統計資料,資訊量可能會比較大,這因系統而有所不同,可讀性較好;下面為作者機器上輸出資訊的一個片段;(2.6以後的核心支援此檔案)

[root@rhel5 ~]# more /proc/vmstat

 nr_anon_pages 22270

 nr_mapped 8542

 nr_file_pages 47706

 nr_slab 4720

 nr_page_table_pages 897

 nr_dirty 21

 nr_writeback 0

2.32、/proc/zoneinfo

記憶體區域(zone)的詳細資訊清單,資訊量較大,下面列出的是一個輸出片段:

[root@rhel5 ~]# more /proc/zoneinfo

 Node 0, zone      DMA

   pages free     1208

         min      28

         low      35

         high     42

         active   439

         inactive 1139

         scanned  0 (a: 7 i: 30)

         spanned  4096

         present  4096

     nr_anon_pages 192

     nr_mapped    141

     nr_file_pages 1385

     nr_slab      253

     nr_page_table_pages 2

     nr_dirty     523

     nr_writeback 0

     nr_unstable  0

     nr_bounce    0

         protection: (0, 0, 296, 296)

   pagesets

   all_unreclaimable: 0

   prev_priority:     12

   start_pfn:         0