/proc 文件系統是一個虛擬文件系統,通過它可以使用一種新的方法在 Linux? 內核空間和用戶空間之間進行通信。在 /proc 文件系統中,我們可以將對虛擬文件的讀寫作為與內核中實體進行通信的一種手段,但是與普通文件不同的是,這些虛擬文件的內容都是動態創建的。本文對 /proc 虛擬文件系統進行了介紹,並展示了它的用法。
最初開發 /proc 文件系統是為了提供有關系統中進程的信息。但是由於這個文件系統非常有用,因此內核中的很多元素也開始使用它來報告信息,或啟用動態運行時配置。
/proc 文件系統包含了一些目錄(用作組織信息的方式)和虛擬文件。虛擬文件可以向用戶呈現內核中的一些信息,也可以用作一種從用戶空間向內核發送信息的手段。實際上我們並不會同時需要實現這兩點,但是本文將向您展示如何配置這個文件系統進行輸入和輸出。
盡管像本文這樣短小的一篇文章無法詳細介紹 /proc 的所有用法,但是它依然對這兩種用法進行了展示,從而可以讓我們體會一下 /proc 是多麼強大。清單 1 是對 /proc 中部分元素進行一次交互查詢的結果。它顯示的是 /proc 文件系統的根目錄中的內容。注意,在左邊是一系列數字編號的文件。每個實際上都是一個目錄,表示系統中的一個進程。由於在 GNU/Linux 中創建的第一個進程是 init
進程,因此它的 process-id
為 1。然後對這個目錄執行一個 ls
命令,這會顯示很多文件。每個文件都提供了有關這個特殊進程的詳細信息。例如,要查看 init
的 command-line 項的內容,只需對 cmdline
文件執行 cat
命令。
/proc 中另外一些有趣的文件有:cpuinfo
,它標識了處理器的類型和速度;pci
,顯示在 PCI 總線上找到的設備;modules
,標識了當前加載到內核中的模塊。
[root@plato]# ls /proc 1 2040 2347 2874 474 fb mdstat sys 104 2061 2356 2930 9 filesystems meminfo sysrq-trigger 113 2073 2375 2933 acpi fs misc sysvipc 1375 21 2409 2934 buddyinfo ide modules tty 1395 2189 2445 2935 bus interrupts mounts uptime 1706 2201 2514 2938 cmdline iomem mtrr version 179 2211 2515 2947 cpuinfo ioports net vmstat 180 2223 2607 3 crypto irq partitions 181 2278 2608 3004 devices kallsyms pci 182 2291 2609 3008 diskstats kcore self 2 2301 263 3056 dma kmsg slabinfo 2015 2311 2805 394 driver loadavg stat 2019 2337 2821 4 execdomains locks swaps [root@plato 1]# ls /proc/1 auxv cwd exe loginuid mem oom_adj root statm task cmdline environ fd maps mounts oom_score stat status wchan [root@plato]# cat /proc/1/cmdline init [5] [root@plato]#