虛擬文件系統 PROC

簡介:
Linux系統上的/proc目錄是一種文件系統,與其它常見的文件系統不同的是,/proc是一種偽文件系統(即虛擬文件系統)。
儲存的是當前核心運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬體及當前正在運行進程的信息。
甚至可以通過更改其中某些文件來改變內核的運行狀態。
基於/proc文件系統如上所述的特殊性,其內的文件也常被稱作虛擬文件,並具有一些獨特的特點。
比如有些文件雖然使用查看命令查看時會返回大量信息,但文件本身的大小卻會顯示為0字節。
此外,這些特殊文件中大多數文件的時間及日期屬性通常為當前系統時間和日期,這跟它們隨時會被刷新(儲存於RAM中)有關。
為了查看及使用上的方便,這些文件通常會按照相關性進行分類儲存於不同的目錄甚至子目錄中。
如/proc/scsi目錄中儲存的就是當前系統上所有SCSI設備的相關信息,/proc/N中儲存的則是系統當前正在運行的進程的相關信息,其中N為正在運行的進程的PID。
大多數虛擬文件可以使用文件查看命令如cat、more或者less進行查看,有些文件信息表述的內容可以一目了然,但也有文件的信息卻不怎麼具有可讀性。
不過,這些可讀性較差的文件在使用一些命令如apm、free、lspci或top查看時卻可以有著不錯的表現。


常見文件介紹:

/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
total 0
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


cmdline 啟動當前進程的完整命令,但僵屍進程目錄中的此文件不包含任何信息。
[root@rhel5 ~]# more /proc/2674/cmdline
/usr/sbin/saslauthd


cwd 指向當前進程運行目錄的一個符號鏈接。


environ 當前進程的環境變量列表,環境變量彼此之間用空字符(NULL)隔開。變量名用大寫字母表示,其值用小寫字母表示。
[root@rhel5 ~]# more /proc/2674/environ
TERM=linuxauthd


exe 指向啟動當前進程的可執行文件(完整路徑)的符號鏈接,通過/proc/N/exe可以啟動當前進程的一個拷貝。


fd 這是個目錄,包含當前進程打開的每一個文件的文件描述符(file descriptor),這些文件描述符是指向實際文件的一個符號鏈接。
[root@rhel5 ~]# ll /proc/2674/fd
total 0
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


limits 當前進程所使用的每一個受限資源的軟限制、硬限制和管理單元。此文件僅可由實際啟動當前進程的UID用戶讀取。


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


mem 當前進程所占用的內存空間,由open、read和lseek等系統調用使用,不能被用戶讀取。


root 指向當前進程運行根目錄的符號鏈接。在Unix和Linux系統上,通常采用chroot命令使每個進程運行於獨立的根目錄。


stat 當前進程的狀態信息,包含一系統格式化後的數據列,可讀性差,通常由ps命令使用。


statm 當前進程占用內存的狀態信息,通常以“頁面”(page)表示。


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
…………


task 目錄文件,包含由當前進程所運行的每一個線程的相關信息,每個線程的相關信息文件均保存在一個由線程號(tid)命名的目錄中,這類似於其內容類似於每個進程目錄中的內容。


/proc下其他文件介紹:

/proc/apm
高級電源管理(APM)版本信息及電池相關狀態信息,通常由apm命令使用。

/proc/buddyinfo
用於診斷內存碎片問題的相關信息文件。

/proc/cmdline
在啟動時傳遞至內核的相關參數信息,這些信息通常由lilo或grub等啟動管理工具進行傳遞。
[root@rhel5 ~]# more /proc/cmdline
ro root=/dev/VolGroup00/LogVol00 rhgb quiet

/proc/cpuinfo
處理器的相關信息的文件。


/proc/crypto
系統上已安裝的內核使用的密碼算法及每個算法的詳細信息列表。
[root@rhel5 ~]# more /proc/crypto
name : crc32c
driver : crc32c-generic
module : kernel
priority : 0
type : digest
blocksize : 32
digestsize : 4
…………


/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
…………


/proc/diskstats
每塊磁盤設備的磁盤I/O統計信息列表。


/proc/dma
每個正在使用且注冊的ISA DMA通道的信息列表。
[root@rhel5 ~]# more /proc/dma
2: floppy
4: cascade


/proc/execdomains
內核當前支持的執行域(每種操作系統獨特“個性”)信息列表;
[root@rhel5 ~]# more /proc/execdomains
0-0 Linux [kernel]


/proc/fb
幀緩沖設備列表文件,包含幀緩沖設備的設備號和相關驅動信息。


/proc/filesystems
當前被內核支持的文件系統類型列表文件,被標示為nodev的文件系統表示不需要塊設備的支持。通常mount一個設備時,如果沒有指定文件系統類型將通過此文件來決定其所需文件系統的類型。
[root@rhel5 ~]# more /proc/filesystems
nodev sysfs
nodev rootfs
nodev proc
iso9660
ext3
…………


/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
…………


/proc/ioports
當前正在使用且已經注冊過的與物理設備進行通訊的輸入-輸出端口範圍信息列表。如下面所示,第一列表示注冊的I/O端口範圍,其後表示相關的設備。
[root@rhel5 ~]# less /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
......
......


REF:http://blogold.chinaunix.net/u3/93994/showart_1962269.html

arrow
arrow
    全站熱搜

    BB 發表在 痞客邦 留言(0) 人氣()