- 論壇徽章:
- 1
|
請誰介紹下/proc,如何編程應(yīng)用?
/proc文件系統(tǒng)簡介
proc文件系統(tǒng)是一個(gè)偽文件系統(tǒng),它只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。用戶和應(yīng)用程序可以通過proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。由于系統(tǒng)的信息,如進(jìn)程,是動(dòng)態(tài)改變的,所以用戶或應(yīng)用程序讀取proc文件時(shí),proc文件系統(tǒng)是動(dòng)態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的。它的目錄結(jié)構(gòu)如下:
目錄名稱 目錄內(nèi)容
apm 高級(jí)電源管理信息
cmdline 內(nèi)核命令行
Cpuinfo 關(guān)于Cpu信息
Devices 可以用到的設(shè)備(塊設(shè)備/字符設(shè)備)
Dma Used DMS channels
Filesystems 支持的文件系統(tǒng)
Interrupts 中斷的使用
Ioports I/O端口的使用
Kcore 內(nèi)核核心印象
Kmsg 內(nèi)核消息
Ksyms 內(nèi)核符號(hào)表
Loadavg 負(fù)載均衡
Locks 內(nèi)核鎖
Meminfo 內(nèi)存信息
Misc Miscellaneous
Modules 加載模塊列表
Mounts 加載的文件系統(tǒng)
Partitions 系統(tǒng)識(shí)別的分區(qū)表
Rtc Real time clock
Slabinfo Slab pool info
Stat 全面統(tǒng)計(jì)狀態(tài)表s
Swaps 對換空間的利用情況
Version 內(nèi)核版本
Uptime 系統(tǒng)正常運(yùn)行時(shí)間
并不是所有這些目錄在你的系統(tǒng)中都有,這取決于你的內(nèi)核配置和裝載的模塊。另外,在/proc下還有三個(gè)很重要的目錄:net,scsi和sys。Sys目錄是可寫的,可以通過它來訪問或修改內(nèi)核的參數(shù)(見下一部分),而net和scsi則依賴于內(nèi)核配置。例如,如果系統(tǒng)不支持scsi,則scsi目錄不存在。
除了以上介紹的這些,還有的是一些以數(shù)字命名的目錄,它們是進(jìn)程目錄。系統(tǒng)中當(dāng)前運(yùn)行的每一個(gè)進(jìn)程都有對應(yīng)的一個(gè)目錄在/proc下,以進(jìn)程的PID號(hào)為目錄名,它們是讀取進(jìn)程信息的接口。而self目錄則是讀取進(jìn)程本身的信息接口,是一個(gè)link。Proc文件系統(tǒng)的名字就是由之而起。進(jìn)程目錄的結(jié)構(gòu)如下:
目錄名稱 目錄內(nèi)容
Cmdline 命令行參數(shù)
Environ 環(huán)境變量值
Fd 一個(gè)包含所有文件描述符的目錄
Mem 進(jìn)程的內(nèi)存被利用情況
Stat 進(jìn)程狀態(tài)
Status Process status in human readable form
Cwd 當(dāng)前工作目錄的鏈接
Exe Link to the executable of this process
Maps 內(nèi)存印象
Statm 進(jìn)程內(nèi)存狀態(tài)信息
Root 鏈接此進(jìn)程的root目錄
用戶如果要查看系統(tǒng)信息,可以用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、 修改內(nèi)核參數(shù)
在/proc文件系統(tǒng)中有一個(gè)有趣的目錄:/proc/sys。它不僅提供了內(nèi)核信息,而且可以通過它修改內(nèi)核參數(shù),來優(yōu)化你的系統(tǒng)。但是你必須很小心,因?yàn)榭赡軙?huì)造成系統(tǒng)崩潰。最好是先找一臺(tái)無關(guān)緊要的機(jī)子,調(diào)試成功后再應(yīng)用到你的系統(tǒng)上。
要改變內(nèi)核的參數(shù),只要用vi編輯或echo參數(shù)重定向到文件中即可。下面有一個(gè)例子:
# cat /proc/sys/fs/file-max
4096
# echo 8192 >; /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
如果你優(yōu)化了參數(shù),則可以把它們寫成腳本文件,使它在系統(tǒng)啟動(dòng)時(shí)自動(dòng)完成修改。
×××××××××××××××××××××××××××××××××
/proc 文件系統(tǒng)是一個(gè)假的文件系統(tǒng)。它不存在在磁盤某個(gè)磁盤上。而是由核心在內(nèi)存中產(chǎn)生。用于提供關(guān)于系統(tǒng)的信息(originally about processes, hence the name)。下面說明一些最重要的文件和目錄。 /proc 文件系統(tǒng)在proc man頁中有更詳細(xì)的說明。
/proc/1
關(guān)于進(jìn)程1的信息目錄。每個(gè)進(jìn)程在/proc 下有一個(gè)名為其進(jìn)程號(hào)的目錄。
/proc/cpuinfo
處理器信息,如類型、制造商、型號(hào)和性能。
/proc/devices
當(dāng)前運(yùn)行的核心配置的設(shè)備驅(qū)動(dòng)的列表。
/proc/dma
顯示當(dāng)前使用的DMA通道。
/proc/filesystems
核心配置的文件系統(tǒng)。
/proc/interrupts
顯示使用的中斷,and how many of each there have been.
/proc/ioports
當(dāng)前使用的I/O端口。
/proc/kcore
系統(tǒng)物理內(nèi)存映象。與物理內(nèi)存大小完全一樣,但不實(shí)際占用這么多內(nèi)存;it is generated on the fly as programs access it. (記。撼悄惆阉截惖绞裁吹胤剑/proc 下沒有任何東西占用任何磁盤空間。)
/proc/kmsg
核心輸出的消息。也被送到syslog 。
/proc/ksyms
核心符號(hào)表。
/proc/loadavg
系統(tǒng)"平均負(fù)載";3個(gè)沒有意義的指示器指出系統(tǒng)當(dāng)前的工作量。
/proc/meminfo
存儲(chǔ)器使用信息,包括物理內(nèi)存和swap。
/proc/modules
當(dāng)前加載了哪些核心模塊。
/proc/net
網(wǎng)絡(luò)協(xié)議狀態(tài)信息。
/proc/self
到查看/proc 的程序的進(jìn)程目錄的符號(hào)連接。當(dāng)2個(gè)進(jìn)程查看/proc 時(shí),是不同的連接。這主要便于程序得到它自己的進(jìn)程目錄。
/proc/stat
系統(tǒng)的不同狀態(tài),such as the number of page faults since the system was booted.
/proc/uptime
系統(tǒng)啟動(dòng)的時(shí)間長度。
/proc/version
核心版本。
注意所有上述文件給出易讀的文本文件,有時(shí)可能是不易讀的格式。有許多命令做了些格式化以更容易讀。例如,free 程序讀/proc/meminfo 并將給出的字節(jié)數(shù)轉(zhuǎn)換為千字節(jié)(并增加了一些信息)。
××××××××××××××××××××××××××××××××
不用重新啟動(dòng)而去看 CMOS ,就可以知道系統(tǒng)信息。這就是 /proc 的妙處之一。
/proc 文件系統(tǒng)是了解系統(tǒng)信息的一個(gè)窗口,本文將就此展開討論,舉例說明/proc 文件系統(tǒng)的內(nèi)部結(jié)構(gòu)。 /proc 文件系統(tǒng)是虛擬的文件系統(tǒng),看似存在的文件實(shí)際并沒有在硬盤上。其實(shí),/proc 是你了解自己系統(tǒng)的一個(gè)窗口,它實(shí)際存在于內(nèi)存。 例如: /proc/cpuinfo 包含了處理器的信息,例如,類型、制造商、型號(hào)等。一個(gè)輸出的例子如下: [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 列出內(nèi)核中配置的設(shè)備驅(qū)動(dòng)程序 /proc/interrupts 列出使用中的中斷號(hào),這在硬件沖突的診斷中十分有用。 /proc/kmsg 這些是內(nèi)核輸出的信息,也送到syslog。 /proc/meminfo 列出系統(tǒng)的內(nèi)存情況,包括物理內(nèi)存和交換區(qū)。一個(gè)輸出的例子如下: [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 輸出當(dāng)前加載的內(nèi)核模塊。 /proc/net 這個(gè)目錄包含了系統(tǒng)網(wǎng)絡(luò)配置的信息,我將另外撰文講述。 /proc/pci 列出系統(tǒng)的PCI 設(shè)備 可以看出,/proc 文件系統(tǒng)是十分有用的,其實(shí),有些我們平時(shí)使用的命令就來源于 /proc。例如 uname -a 的部分信息來自 /proc/version , uptime 的部分信息來自 /proc/uptime 和 /proc/loadavg , 所以,下次有人問你機(jī)器的主頻是多少時(shí),就沒有必要翻箱倒柜尋找手冊了,一切都在 /proc 文件系統(tǒng)之中。 |
|