Proc 檔案系統是一個即時的,常駐記憶體的檔案系統,它跟蹤進程在你機器上的運行情況和你系統的狀態。/proc檔案系統是常駐虛擬記憶體並且維持著作業系統的動態資料。大部分的 /proc檔案系統資訊被即時更新來與當前作業系統的狀態一致。/proc檔案系統的內容能被任何有相應許可權的人讀取。但是,/proc檔案系統的特定的 部分只能被這個進程的擁有者和root使用者讀取。/proc檔案系統的內容從特定的/proc目錄得到資料並且顯示出來,它們有很多用途。
下面是一個PROC檔案系統的例子,可以看出proc檔案系統裡面有很多數字,其它的資訊相對容易理解,這裡不作介紹,本文主要深入分析proc目錄下的數字資訊。#cd proc#ls
1 4 9 diskstats iomem meminfo self uptime
10 5 97 driver ioports misc slabinfo version
114 6 buddyinfo execdomains irq mounts stat vmstat
126 7 bus filesystems kcore mtd swaps zoneinfo
128 8 cmdline fs kmsg net sys
2 85 cpuinfo ide loadavg partitions sysvipc
3 88 devices interrupts locks pci tty
你看到的上面列出的那些數字目錄代表進程,這些進程在我們對/proc檔案系統作快照時正運行在機器上。我們隨便看一個進程目錄的內容:
# ll 126
total 0
-r--r--r-- 1 root root 0 Jan 1 00:08 cmdline
lrwxrwxrwx 1 root root 0 Jan 1 00:09 cwd -> /proc
-r-------- 1 root root 0 Jan 1 00:09 environ
lrwxrwxrwx 1 root root 0 Jan 1 00:09 exe -> /bin/bash
dr-x------ 2 root root 0 Jan 1 00:00 fd
-r--r--r-- 1 root root 0 Jan 1 00:09 maps
-rw------- 1 root root 0 Jan 1 00:09 mem
-r--r--r-- 1 root root 0 Jan 1 00:00 mounts
-rw-r--r-- 1 root root 0 Jan 1 00:09 oom_adj
-r--r--r-- 1 root root 0 Jan 1 00:09 oom_score
lrwxrwxrwx 1 root root 0 Jan 1 00:09 root -> /
-r--r--r-- 1 root root 0 Jan 1 00:09 smaps
-r--r--r-- 1 root root 0 Jan 1 00:08 stat
-r--r--r-- 1 root root 0 Jan 1 00:09 statm
-r--r--r-- 1 root root 0 Jan 1 00:08 status
dr-xr-xr-x 3 root root 0 Jan 1 00:09 task
看上面輸出的第一行。
-r--r--r-- 1 root root 0 Jan 1 00:08 cmdline
"cmdline",這個檔案包含整個用來產生進程的命令列。這個檔案的內容是命令列參數包括傳遞來啟動進程的所有參數。所有包含在這個檔案的資訊即命令和各個啟動參數,沒有任何的格式和任何的空格。
lrwxrwxrwx 1 root root 0 Jan 1 00:09 cwd -> /proc
"cwd",像我們從上面看見的,這是一個符號連結,它指向進程的當前工作目錄。
-r-------- 1 root root 0 Jan 1 00:09 environ
"environ"包括在VARIABL=value為這個進程定義的所有的環境變數。正如"cmdline"一樣,包含在檔案中的命令和各個參數的資訊沒有任何的格式和空格。
lrwxrwxrwx 1 root root 0 Jan 1 00:09 exe -> /bin/ver
"exe",這是一個符號連結指向啟動當前進程的可執行檔。
dr-x------ 2 root root 0 Jan 1 00:00 fd
"fd",這個目錄包括被指定進程開啟的檔案描述符,如果一個進程開啟的檔案描述符過多,會造成開啟檔案失敗,通過檢查這個目錄可以尋找開啟檔案失敗的原因。
-r--r--r-- 1 root root 0 Jan 1 00:09 maps
"maps", 當你打出這個具名管道的內容,你可以看到進程的地址空間部分,當前被映射到一個檔案。這個部分,從左至右是:和這個映射有關的地址空間,和這個映射有關的 許可權,距離檔案開始(即這個映射開始的地方)的位移量,這個對應檔所在的裝置,檔案的inode號,最後是檔案名稱本身。
"root",這是一個符號連結指向這個進程的/proc目錄。
-r--r--r-- 1 root root 0 Jan 1 00:08 status
"status",這個檔案給你有關進程名的資訊,它的當前的狀態,睡眠或者清醒,它的PID,UID,PPID和大量其它基本資料。這個資訊可以在一個更簡單和結構化的文法中看到,通過使用工具如"ps"和"top"。