- 論壇徽章:
- 1
|
請誰介紹下/proc,如何編程應用?
/proc文件系統簡介
proc文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。用戶和應用程序可以通過proc得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息并提交的。它的目錄結構如下:
目錄名稱 目錄內容
apm 高級電源管理信息
cmdline 內核命令行
Cpuinfo 關于Cpu信息
Devices 可以用到的設備(塊設備/字符設備)
Dma Used DMS channels
Filesystems 支持的文件系統
Interrupts 中斷的使用
Ioports I/O端口的使用
Kcore 內核核心印象
Kmsg 內核消息
Ksyms 內核符號表
Loadavg 負載均衡
Locks 內核鎖
Meminfo 內存信息
Misc Miscellaneous
Modules 加載模塊列表
Mounts 加載的文件系統
Partitions 系統識別的分區表
Rtc Real time clock
Slabinfo Slab pool info
Stat 全面統計狀態表s
Swaps 對換空間的利用情況
Version 內核版本
Uptime 系統正常運行時間
并不是所有這些目錄在你的系統中都有,這取決于你的內核配置和裝載的模塊。另外,在/proc下還有三個很重要的目錄:net,scsi和sys。Sys目錄是可寫的,可以通過它來訪問或修改內核的參數(見下一部分),而net和scsi則依賴于內核配置。例如,如果系統不支持scsi,則scsi目錄不存在。
除了以上介紹的這些,還有的是一些以數字命名的目錄,它們是進程目錄。系統中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的PID號為目錄名,它們是讀取進程信息的接口。而self目錄則是讀取進程本身的信息接口,是一個link。Proc文件系統的名字就是由之而起。進程目錄的結構如下:
目錄名稱 目錄內容
Cmdline 命令行參數
Environ 環境變量值
Fd 一個包含所有文件描述符的目錄
Mem 進程的內存被利用情況
Stat 進程狀態
Status Process status in human readable form
Cwd 當前工作目錄的鏈接
Exe Link to the executable of this process
Maps 內存印象
Statm 進程內存狀態信息
Root 鏈接此進程的root目錄
用戶如果要查看系統信息,可以用cat命令。例如:
>; cat /proc/interrupts
CPU0
0: 8728810 XT-PIC timer
1: 895 XT-PIC keyboard
2: 0 XT-PIC cascade
3: 531695 XT-PIC aha152x
4: 2014133 XT-PIC serial
5: 44401 XT-PIC pcnet_cs
8: 2 XT-PIC rtc
11: 8 XT-PIC i82365
12: 182918 XT-PIC Mouse
13: 1 XT-PIC fpu PS/2
14: 1232265 XT-PIC ide0
15: 7 XT-PIC ide1
NMI: 0
2、 修改內核參數
在/proc文件系統中有一個有趣的目錄:/proc/sys。它不僅提供了內核信息,而且可以通過它修改內核參數,來優化你的系統。但是你必須很小心,因為可能會造成系統崩潰。最好是先找一臺無關緊要的機子,調試成功后再應用到你的系統上。
要改變內核的參數,只要用vi編輯或echo參數重定向到文件中即可。下面有一個例子:
# cat /proc/sys/fs/file-max
4096
# echo 8192 >; /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
如果你優化了參數,則可以把它們寫成腳本文件,使它在系統啟動時自動完成修改。
×××××××××××××××××××××××××××××××××
/proc 文件系統是一個假的文件系統。它不存在在磁盤某個磁盤上。而是由核心在內存中產生。用于提供關于系統的信息(originally about processes, hence the name)。下面說明一些最重要的文件和目錄。 /proc 文件系統在proc man頁中有更詳細的說明。
/proc/1
關于進程1的信息目錄。每個進程在/proc 下有一個名為其進程號的目錄。
/proc/cpuinfo
處理器信息,如類型、制造商、型號和性能。
/proc/devices
當前運行的核心配置的設備驅動的列表。
/proc/dma
顯示當前使用的DMA通道。
/proc/filesystems
核心配置的文件系統。
/proc/interrupts
顯示使用的中斷,and how many of each there have been.
/proc/ioports
當前使用的I/O端口。
/proc/kcore
系統物理內存映象。與物理內存大小完全一樣,但不實際占用這么多內存;it is generated on the fly as programs access it. (記。撼悄惆阉截惖绞裁吹胤,/proc 下沒有任何東西占用任何磁盤空間。)
/proc/kmsg
核心輸出的消息。也被送到syslog 。
/proc/ksyms
核心符號表。
/proc/loadavg
系統"平均負載";3個沒有意義的指示器指出系統當前的工作量。
/proc/meminfo
存儲器使用信息,包括物理內存和swap。
/proc/modules
當前加載了哪些核心模塊。
/proc/net
網絡協議狀態信息。
/proc/self
到查看/proc 的程序的進程目錄的符號連接。當2個進程查看/proc 時,是不同的連接。這主要便于程序得到它自己的進程目錄。
/proc/stat
系統的不同狀態,such as the number of page faults since the system was booted.
/proc/uptime
系統啟動的時間長度。
/proc/version
核心版本。
注意所有上述文件給出易讀的文本文件,有時可能是不易讀的格式。有許多命令做了些格式化以更容易讀。例如,free 程序讀/proc/meminfo 并將給出的字節數轉換為千字節(并增加了一些信息)。
××××××××××××××××××××××××××××××××
不用重新啟動而去看 CMOS ,就可以知道系統信息。這就是 /proc 的妙處之一。
/proc 文件系統是了解系統信息的一個窗口,本文將就此展開討論,舉例說明/proc 文件系統的內部結構。 /proc 文件系統是虛擬的文件系統,看似存在的文件實際并沒有在硬盤上。其實,/proc 是你了解自己系統的一個窗口,它實際存在于內存。 例如: /proc/cpuinfo 包含了處理器的信息,例如,類型、制造商、型號等。一個輸出的例子如下: [albert@www tmp]$ cat /proc/cpuinfo processor: 1 vendor_id: GenuineIntel cpu family: 6 model: 7 model name: Pentium III (Katmai) stepping: 3 cpu MHz: 501.146145 cache size: 512 KB fdiv_bug: no hlt_bug: no sep_bug: no f00f_bug: no coma_bug: no fpu: yes fpu_exception: yes cpuid level: 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx osfxsr kni bogomips : 499.71 /proc/devices 列出內核中配置的設備驅動程序 /proc/interrupts 列出使用中的中斷號,這在硬件沖突的診斷中十分有用。 /proc/kmsg 這些是內核輸出的信息,也送到syslog。 /proc/meminfo 列出系統的內存情況,包括物理內存和交換區。一個輸出的例子如下: [albert@www tmp]$ cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 263806976 206512128 57294848 39387136 92950528 56168448 Swap: 279617536 7405568 272211968 MemTotal: 257624 kB MemFree: 55952 kB MemShared: 38464 kB Buffers: 90772 kB Cached: 54852 kB SwapTotal: 273064 kB SwapFree: 265832 kB /proc/modules 輸出當前加載的內核模塊。 /proc/net 這個目錄包含了系統網絡配置的信息,我將另外撰文講述。 /proc/pci 列出系統的PCI 設備 可以看出,/proc 文件系統是十分有用的,其實,有些我們平時使用的命令就來源于 /proc。例如 uname -a 的部分信息來自 /proc/version , uptime 的部分信息來自 /proc/uptime 和 /proc/loadavg , 所以,下次有人問你機器的主頻是多少時,就沒有必要翻箱倒柜尋找手冊了,一切都在 /proc 文件系統之中。 |
|