今天再來介紹一下Linux下的 /proc這個目錄.
/proc 在 Linux 中是一個比較奇妙的目錄,保存了當前系統所有的詳細信息,包括進程、文件系統、硬體…… 而且還可以通過 /proc 來即時修改系統中的某些參數.
你可能會認為,「文件」指的就是硬碟上保存的數據,要麼是文本,要麼就是二進位文件.而在 Linux 的世界中,所有的東西都可以通過文件來表示和管理,哪怕是硬體設備,也可以通過 /dev 下的設備文件來操作硬體設備.
/proc 就是這樣一種文件,它並不存在於硬碟上,每當系統啟動的時候,操作系統自動創建 /proc 下的內容,你可以查看這些文件的列表,但是你會發現大部分文件的大小都是 0 ,這並不奇怪,這些文件屬於「virtual files「,也就是說,當你讀取這些文件的時候,系統內核為你即時生成文件中的內容.
/proc 下的信息包括了有關硬體、進程、系統的詳細信息,先看看 /proc 下大致都有啥吧:
可以看到,除了一些文件之外,更多的是一堆以數字為名稱的目錄,每個目錄代表了系統中的一個進程,目錄下是有關這個進程的詳細信息,這個等下我們再說. /proc 下還有一個 self 文件,實際上是一個連接,指向了當前運行中的進程目錄.
我們看看 /proc 目錄下一些非常有用的文件,查看這些文件的內容很簡單,用 cat 命令就可以了~
/proc/cpuinfo 即是當前系統 cpu 的詳細信息,從型號到支持的特性,如果你是多核 cpu 的話,會看到多個這樣的輸出.檢測 cpu 的程序,也是通過 /proc/cpuinfo 來得到當前 cpu 的詳細信息的.
/proc/meminfo/proc/meminfo 是當前系統內存的詳細信息,當然,隨著系統的運行,這些信息也會隨時變化.像 top、free 這些可以查看當前系統內存信息的程序,就是通過讀取 /proc/meminfo 來實現的.
/proc/version/proc/version 是當前系統的版本信息,uname 這個命令,就是通過它來得到內核版本和系統版本的.
/proc/filesystems/proc/filesystems 為當前系統支持的文件系統列表,你可以在程序中讀取這個文件,以獲得當前系統對文件系統的支持信息.
上面這幾個只是比較常用的,實際上 /proc 下的信息相當豐富,很多文件都可以 cat 一下看看,比如:
* /proc/apm: APM 高級電源管理信息.
* /proc/acpi: 目錄下為 ACPI 的詳細信息. 比方說, 你想知道你的筆記本電腦是否連接了電源, 你可以 cat /proc/acpi/ac_adapter/AC/state 看看結果是 "on line" 還是 "off line" .
* /proc/cmdline: 顯示內核的啟動參數,一般就是你 grub 中傳入內核的那些參數,比如我的就是: root=/dev/sda9 video=uvesafb:1680x1050-32,mtrr:3,ywrap
* /proc/loadav: 顯示系統的負載,w、top 這類程序也是從此得到系統負載信息.
* /proc/uptime: 系統自啟動來所經歷的秒數,uptime 程序就是從此計算出系統啟動后經歷的時間的.
* /proc/devices: 系統中所有可用的字元和塊設備.
* /proc/ioports: IO 埠信息.
* /proc/dma: 當前可用的 DMA 通道.
* /proc/mounts: 系統當前的掛載信息.
除此之外,還有一些文件和硬體相關,比如 /proc/interrupts 為終端信息,/proc/irq 為 IRQ 信息,還有 /proc/pci、/proc/bus 等等.
隨便挑選了一個名稱為 11108 的目錄,在我的機子上對應的進程是 firefox-bin,讓我們看看目錄下這些文件都是啥:
* cmdline: 啟動進程的命令和參數.
* cwd: 指向進程當前目錄的一個連接.
* environ: 進程所有的環境變數.
* fd: 進程所有打開的文件描述符,目錄下是一個個以數字為名稱的連接,指向了進程當前正在使用的文件.
* maps, statm, mem: 進程的內存信息.
* stat, status: 進程的狀態信息,比如查看 /proc/status 中是否含有 「Zombie」字樣,來查看殭屍進程.
/proc/sys
/proc/sys 目錄下不僅提供了系統某些設置信息,你還可以修改這些文件來在運行中改變系統的參數,比如,你想讓別人 ping 不到你,只要:
這樣就可以讓系統忽略所有的 ICMP 回應,別人就 ping 不到你了.
/proc/sys 下的可配置的選項很多,主要有 6 類: debug、dev、fs、kernel、net、vm,只要文件屬性是可讀寫的,一般都對應了系統某個可以修改的參數.
不過系統重啟之後參數就恢復默認值了,其實有專門的工具來修改這些參數,那就是 sysctl 和 /etc/sysctl.conf 這個配置文件,不過這不是本文的內容,感興趣的就去搜一下吧.
如上所述,/proc 是一個強大的特殊目錄,其中的文件提供了非常詳細的系統信息,很多常用的程序就是從此得到系統各個方面的信息的,在你寫的程序和腳本中,也可以通過 /proc 方便的獲得一些系統參數,甚至修改系統的某些參數,本文只是 /proc 的一個簡要的介紹,更詳細的內容留給各位自己去探索吧.
修改自: http://www.linux.com/feature/126718
[火星人 ] Linux 下的 /proc 目錄初探已經有438次圍觀