歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用 /proc 文件系統來訪問 Linux 內核的內容

使用 /proc 文件系統來訪問 Linux 內核的內容

日期:2017/2/28 16:30:41   编辑:Linux教程
/proc 文件系統是一個虛擬文件系統,通過它可以使用一種新的方法在 Linux? 內核空間和用戶空間之間進行通信。在 /proc 文件系統中,我們可以將對虛擬文件的讀寫作為與內核中實體進行通信的一種手段,但是與普通文件不同的是,這些虛擬文件的內容都是動態創建的。本文對 /proc 虛擬文件系統進行了介紹,並展示了它的用法。

最初開發 /proc 文件系統是為了提供有關系統中進程的信息。但是由於這個文件系統非常有用,因此內核中的很多元素也開始使用它來報告信息,或啟用動態運行時配置。

/proc 文件系統包含了一些目錄(用作組織信息的方式)和虛擬文件。虛擬文件可以向用戶呈現內核中的一些信息,也可以用作一種從用戶空間向內核發送信息的手段。實際上我們並不會同時需要實現這兩點,但是本文將向您展示如何配置這個文件系統進行輸入和輸出。

盡管像本文這樣短小的一篇文章無法詳細介紹 /proc 的所有用法,但是它依然對這兩種用法進行了展示,從而可以讓我們體會一下 /proc 是多麼強大。清單 1 是對 /proc 中部分元素進行一次交互查詢的結果。它顯示的是 /proc 文件系統的根目錄中的內容。注意,在左邊是一系列數字編號的文件。每個實際上都是一個目錄,表示系統中的一個進程。由於在 GNU/Linux 中創建的第一個進程是 init 進程,因此它的 process-id1。然後對這個目錄執行一個 ls 命令,這會顯示很多文件。每個文件都提供了有關這個特殊進程的詳細信息。例如,要查看 init 的 command-line 項的內容,只需對 cmdline 文件執行 cat 命令。

/proc 中另外一些有趣的文件有:cpuinfo,它標識了處理器的類型和速度;pci,顯示在 PCI 總線上找到的設備;modules,標識了當前加載到內核中的模塊。


清單 1. 對 /proc 的交互過程
        
[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]#
Copyright © Linux教程網 All Rights Reserved