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