linux /proc 詳解
本文整理了一下 linux /proc
下的幾個常用的目錄和文件,可供查閱,之后在學習工作中有別的用到的話會再補充。
/proc 簡介
Linux系統上的/proc
目錄是一種文件系統,即proc文件系統。與其它常見的文件系統不同的是,/proc
是一種偽文件系統(也即虛擬文件系統),存儲的是當前內核運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬件及當前正在運行進程的信息,甚至可以通過更改其中某些文件來改變內核的運行狀態。
另外,/proc
是存儲在內存(RAM)中,而非硬盤中的,不占用外部存儲空間。
基于/proc
文件系統如上所述的特殊性,其內的文件也常被稱作虛擬文件,并具有一些獨特的特點。例如,其中有些文件雖然使用查看命令查看時會返回大量信息,但文件本身的大小卻會顯示為0字節。此外,這些特殊文件中大多數文件的時間及日期屬性通常為當前系統時間和日期,這跟它們隨時會被刷新(存儲于RAM中)有關。
為了查看及使用上的方便,這些文件通常會按照相關性進行分類存儲于不同的目錄甚至子目錄中,如/proc/scsi
目錄中存儲的就是當前系統上所有SCSI設備的相關信息,/proc/N
中存儲的則是系統當前正在運行的進程的相關信息,其中N
為正在運行的進程(可以想象得到,在某進程結束后其相關目錄則會消失)。
大多數虛擬文件可以使用文件查看命令如cat
、more
或者less
進行查看,注意\proc
中文件通常比較長,直接使用cat
命令來查看全部信息可讀性不佳。可以用more
和cat
命令,關于Linux中查看文件內容的命令,可參考博客:Linux查看文件內容命令:cat, tail, head, more, less。
\proc
中有些文件信息表述的內容可以一目了然,但大部分文件的信息卻不怎么具有可讀性。不過,這些可讀性較差的文件在使用一些命令如apm
、free
、lspci
或top
查看時卻可以有著不錯的表現。
/proc的目錄結構
/proc的目錄結構大致如下:
/proc
├── 1
│?? ├── arch_status
│?? ├── attr [error opening dir]
│?? ├── autogroup
│?? ├── auxv
...
├── 2
│?? ├── arch_status
│?? ├── attr [error opening dir]
│?? ├── autogroup
...
...
├── execdomains
├── fb
├── filesystems
├── sys
...
- 有些以數字為名稱的目錄,對應著當前運行的各個進程,目錄中時該進程的相關信息,將在下一小節介紹。
- 直接在
/proc
目錄下的文件,則存儲了本機相關的一些信息,如/proc/cpuinfo
存儲cpu的相關信息等,將在下下小節較少。 - 不同于
/proc
的其他文件或目錄都是只讀的,在/proc/sys
目錄下,有一些可以修改的文件,將在下下下小節介紹。
/proc/[PID] 進程目錄中的常見文件介紹
/proc
目錄中包含許多以數字命名的子目錄,這些數字表示系統當前正在運行進程的進程號,里面包含對應進程相關的多個信息文件。即下表中的文件或目錄均在/proc/[PID]/
之下。
文件 | 內容 |
---|---|
cmdline | 啟動當前進程的完整命令,但僵尸進程目錄中的此文件不包含任何信息 |
cwd | 指向當前進程運行目錄的一個符號鏈接 |
environ | 當前進程的環境變量列表,彼此間用空字符(NULL)隔開;變量用大寫字母表示,其值用小寫字母表示 |
exe | 指向啟動當前進程的可執行文件(完整路徑)的符號鏈接,通過/proc/N/exe可以啟動當前進程的一個拷貝 |
fd | 這是個目錄,包含當前進程打開的每一個文件的文件描述符(file descriptor),這些文件描述符是指向實際文件的一個符號鏈接 |
limits | 當前進程所使用的每一個受限資源的軟限制、硬限制和管理單元;此文件僅可由實際啟動當前進程的UID用戶讀取 |
maps | 當前進程關聯到的每個可執行文件和庫文件在內存中的映射區域及其訪問權限所組成的列表 |
mem | 當前進程所占用的內存空間,由open、read和lseek等系統調用使用,不能被用戶讀取 |
root | 指向當前進程運行根目錄的符號鏈接;在Unix和Linux系統上,通常采用chroot命令使每個進程運行于獨立的根目錄 |
stat | 當前進程的狀態信息,包含一系統格式化后的數據列,可讀性差,通常由ps命令使用 |
statm | 當前進程占用內存的狀態信息,通常以“頁面”(page)表示 |
status | 與stat所提供信息類似,但可讀性較好,其詳細介紹請參見 proc的man手冊頁 |
task | 目錄文件,包含由當前進程所運行的每一個線程的相關信息,每個線程的相關信息文件均保存在一個由線程號(tid)命名的目錄中,這類似于其內容類似于每個進程目錄中的內容 |
/proc 目錄下常見的文件介紹
/proc
目錄中包含許多以數字命名的子目錄,這些數字表示系統當前正在運行進程的進程號,里面包含對應進程相關的多個信息文件。即下表中的文件或目錄均直接在/proc
之下。
信息文件 | 內容 |
---|---|
/proc/apm | 高級電源管理(APM)版本信息及電池相關狀態信息,通常由apm命令使用 |
/proc/buddyinfo | 用于診斷內存碎片問題的相關信息文件 |
/proc/cmdline | 在啟動時傳遞至內核的相關參數信息,這些信息通常由lilo或grub等啟動管理工具進行傳遞 |
/proc/cpuinfo | 處理器的相關信息的文件 |
/proc/crypto | 系統上已安裝的內核使用的密碼算法及每個算法的詳細信息列表 |
/proc/devices | 系統已經加載的所有塊設備和字符設備的信息,包含主設備號和設備組(與主設備號對應的設備類型)名 |
/proc/diskstats | 每塊磁盤設備的磁盤I/O統計信息列表 |
/proc/dma | 每個正在使用且注冊的ISA DMA通道的信息列表 |
/proc/execdomains | 內核當前支持的執行域(每種操作系統獨特“個性”)信息列表 |
/proc/fb | 幀緩沖設備列表文件,包含幀緩沖設備的設備號和相關驅動信息 |
/proc/filesystems | 當前被內核支持的文件系統類型列表文件,被標示為nodev的文件系統表示不需要塊設備的支持;通常mount一個設備時,如果沒有指定文件系統類型將通過此文件來決定其所需文件系統的類型 |
/proc/interrupts | X86或X86_64體系架構系統上每個IRQ相關的中斷號列表;多路處理器平臺上每個CPU對于每個I/O設備均有自己的中斷號 |
/proc/iomem | 每個物理設備上的記憶體(RAM或者ROM)在系統內存中的映射信息 |
/proc/ioports | 當前正在使用且已經注冊過的與物理設備進行通訊的輸入-輸出端口范圍信息列表;如下面所示,第一列表示注冊的I/O端口范圍,其后表示相關的設備 |
/proc/kallsyms | 模塊管理工具用來動態鏈接或綁定可裝載模塊的符號定義,由內核輸出;通常這個文件中的信息量相當大 |
/proc/kcore | 系統使用的物理內存,以ELF核心文件(core file)格式存儲,其文件大小為已使用的物理內存(RAM)加上4KB;這個文件用來檢查內核數據結構的當前狀態,因此,通常由GBD通常調試工具使用,但不能使用文件查看命令打開此文件 |
/proc/kmsg | 此文件用來保存由內核輸出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要試圖使用查看命令打開此文件 |
/proc/loadavg | 保存關于CPU和磁盤I/O的負載平均值,其前三列分別表示每1秒鐘、每5秒鐘及每15秒的負載平均值,類似于uptime命令輸出的相關信息;第四列是由斜線隔開的兩個數值,前者表示當前正由內核調度的實體(進程和線程)的數目,后者表示系統當前存活的內核調度實體的數目;第五列表示此文件被查看前最近一個由內核創建的進程的PID |
/proc/locks | 保存當前由內核鎖定的文件的相關信息,包含內核內部的調試數據;每個鎖定占據一行,且具有一個惟一的編號;如下輸出信息中每行的第二列表示當前鎖定使用的鎖定類別,POSIX表示目前較新類型的文件鎖,由lockf系統調用產生,FLOCK是傳統的UNIX文件鎖,由flock系統調用產生;第三列也通常由兩種類型,ADVISORY表示不允許其他用戶鎖定此文件,但允許讀取,MANDATORY表示此文件鎖定期間不允許其他用戶任何形式的訪問 |
/proc/mdstat | 保存RAID相關的多塊磁盤的當前狀態信息 |
/proc/meminfo | 系統中關于當前內存的利用狀況等的信息,常由free命令使用;可以使用文件查看命令直接讀取此文件,其內容顯示為兩列,前者為統計屬性,后者為對應的值 |
/proc/mounts | 在內核2.4.29版本以前,此文件的內容為系統當前掛載的所有文件系統,在2.4.19以后的內核中引進了每個進程使用獨立掛載名稱空間的方式,此文件則隨之變成了指向/proc/self/mounts(每個進程自身掛載名稱空間中的所有掛載點列表)文件的符號鏈接;/proc/self是一個獨特的目錄,后文中會對此目錄進行介紹; |
/proc/modules | 當前裝入內核的所有模塊名稱列表,可以由lsmod命令使用,也可以直接查看 |
/proc/partitions | 塊設備每個分區的主設備號(major)和次設備號(minor)等信息,同時包括每個分區所包含的塊(block)數目 |
/proc/pci | 內核初始化時發現的所有PCI設備及其配置信息列表,其配置信息多為某PCI設備相關IRQ信息,可讀性不高,可以用“/sbin/lspci –vb”命令獲得較易理解的相關信息 |
/proc/slabinfo | 在內核中頻繁使用的對象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了這些對象相關slap的信息;詳情可以參見內核文檔中slapinfo的手冊頁 |
/proc/stat | 實時追蹤自系統上次啟動以來的多種統計信息 |
/proc/swaps | 當前系統上的交換分區及其空間利用信息,如果有多個交換分區的話,則會每個交換分區的信息分別存儲于/proc/swap目錄中的單獨文件中,而其優先級數字越低,被使用到的可能性越大 |
/proc/uptime | 系統上次啟動以來的運行時間,如下所示,其第一個數字表示系統運行時間,第二個數字表示系統空閑時間,單位是秒 |
/proc/version | 當前系統運行的內核版本號,在作者的RHEL5.3上還會顯示系統安裝的gcc版本 |
/proc/vmstat | 當前系統虛擬內存的多種統計數據,信息量可能會比較大,這因系統而有所不同,可讀性較好 |
/proc/zoneinfo | 內存區域(zone)的詳細信息列表,信息量較大,下面列出的是一個輸出片段 |
/proc/sys目錄詳解
與/proc
下其它文件的“只讀”屬性不同的是,管理員可對/proc/sys
子目錄中的許多文件內容進行修改以更改內核的運行特性,事先可以使用ls -l
命令查看某文件是否“可寫入”。寫入操作通常使用類似于echo DATA > /path/to/your/filename
的格式進行。
需要注意的是,即使文件可寫,其一般也不可以使用編輯器進行編輯。
/proc/sys/net
所有的TCP/IP調優參數都位于/proc/sys/net
目錄。例如, 下面是最重要的一些調優參數。
文件名 | 內容 |
---|---|
/proc/sys/net/core/rmem_max | 最大的TCP數據接收緩沖 |
/proc/sys/net/core/wmem_max | 最大的TCP數據發送緩沖 |
/proc/sys/net/ipv4/tcp_timestamps | 時間戳在TCP的包頭增加12個字節 |
/proc/sys/net/ipv4/tcp_sack | 有選擇的應答 |
/proc/sys/net/ipv4/tcp_window_scaling | 支持更大的TCP窗口. 如果TCP窗口最大超過64K, 必須設置該數值為1 |
/proc/sys/dev
為系統上特殊設備提供參數信息文件的目錄,其不同設備的信息文件分別存儲于不同的子目錄中,如大多數系統上都會具有的/proc/sys/dev/cdrom
和/proc/sys/dev/raid
(如果內核編譯時開啟了支持raid的功能) 目錄,其內存儲的通常是系統上cdrom和raid的相關參數信息文件。
/proc/sys/kernel
文件名 | 內容 |
---|---|
/proc/sys/kernel/ctrl-alt-del | 該文件有一個二進制值,該值控制系統在接收到ctrl+alt+delete按鍵組合時如何反應。 |
proc/sys/kernel/msgmax | 該文件指定了從一個進程發送到另一個進程的消息的最大長度(bytes)。進程間的消息傳遞是在內核的內存中進行的,不會交換到磁盤上,所以如果增加該值,則將增加操作系統所使用的內存數量。 |
/proc/sys/kernel/msgmnb | 該文件指定一個消息隊列的最大長度(bytes) |
/proc/sys/kernel/msgmni | 該文件指定消息隊列標識的最大數目,即系統范圍內最大多少個消息隊列 |
/proc/sys/kernel/panic | 該文件表示如果發生“內核嚴重錯誤(kernel panic),則內核在重新引導之前等待的時間(秒) |
proc/sys/kernel/shmall | 該文件表示在任何給定時刻,系統上可以使用的共享內存的總量(bytes) |
/proc/sys/kernel/shmmax | 該文件表示內核所允許的最大共享內存段的大小(bytes)(建議:物理內存*0.5) |
/proc/sys/kernel/shmmni | 該文件表示用于整個系統的共享內存段的最大數目(個) |
/proc/sys/kernel/sem | 該文件用于控制內核信號量,信號量是System VIPC用于進程間通訊的方法 |
/proc/sys/kernel/threads-max | 該文件表示內核所能使用的線程的最大數目 |
/proc/sys/fs
文件名 | 含義 |
---|---|
/proc/sys/fs/file-max | 該文件指定了可以分配的文件句柄的最大數目。 |
/proc/sys/fs/file-nr | 該文件與 file-max 相關,它有三個值:已分配文件句柄的數目、已使用文件句柄的數目、文件句柄的最大數目。該文件是只讀的,僅用于顯示信息。 |
Ref:
https://www.cnblogs.com/liushui-sky/p/9354536.html
http://blog.chinaunix.net/uid-22159621-id-1789315.html
https://www.cnblogs.com/machangwei-8/p/10354636.html