在linux中,proc是虛擬文件系統(tǒng),是一個控制中心,可以通過更改其中某些文件改變內(nèi)核運行狀態(tài);它也是內(nèi)核提空給我們的查詢中心,用戶可以通過它查看系統(tǒng)硬件及當前運行的進程信息。proc系統(tǒng)只存在內(nèi)存當中,以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口,可以通過更改其中的某些文件來改變內(nèi)核運行狀態(tài)。
本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。
proc是什么文件系統(tǒng)
proc被稱為虛擬文件系統(tǒng),它是一個控制中心,可以通過更改其中某些文件改變內(nèi)核運行狀態(tài),它也是內(nèi)核提空給我們的查詢中心,用戶可以通過它查看系統(tǒng)硬件及當前運行的進程信息。
Linux中許多工具的數(shù)據(jù)來源正是proc目錄中的內(nèi)容,比如lsmod的命令是cat /proc/modules的別名。
在Linux中存在著一類特殊的偽文件系統(tǒng),用于使用與文件接口統(tǒng)一的操作來完成各種功能,例如ptyfs、devfs、sysfs和procfs。而procfs就是其中應用最廣泛的一種偽文件系統(tǒng)。
就文件系統(tǒng)這一術(shù)語而言,/ proc目錄并不是真正的文件系統(tǒng),它是一個虛擬文件系統(tǒng),有時也被稱為進程信息偽文件系統(tǒng)。
proc 放置的數(shù)據(jù)都是在內(nèi)存當中,例如系統(tǒng)內(nèi)核、進程、外部設備的狀態(tài)及網(wǎng)絡狀態(tài)等。因為這個目錄下的數(shù)據(jù)都是在內(nèi)存當中,所以本身不占任何硬盤空間。
procfs是Linux內(nèi)核信息的抽象文件接口,大量內(nèi)核中的信息以及可調(diào)參數(shù)都被作為常規(guī)文件映射到一個目錄樹中,這樣我們就可以簡單直接的通過echo或cat這樣的文件操作命令對系統(tǒng)信息進行查取和調(diào)整了。同時procfs也提供了一個接口,使得我們自己的內(nèi)核模塊或用戶態(tài)程序可以通過procfs進行參數(shù)的傳遞。在當今的Linux系統(tǒng)中,大量的系統(tǒng)工具也通過procfs獲取內(nèi)核參數(shù),例如ps、lspci等等,沒有procfs它們將可能不能正常工作。
proc文件系統(tǒng)是一個偽文件系統(tǒng),它只存在內(nèi)存當中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。用戶和應用程序可以通過proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。由于系統(tǒng)的信息,如進程,是動態(tài)改變的,所以用戶或應用程序讀取proc文件時,proc文件系統(tǒng)是動態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的。
linux proc文件系統(tǒng)詳解
Linux系統(tǒng)上的/proc目錄是一種文件系統(tǒng),即proc文件系統(tǒng)。與其它常見的文件系統(tǒng)不同的是,/proc是一種偽文件系統(tǒng)(也即虛擬文件系統(tǒng),它只存在內(nèi)存當中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口),存儲的是當前內(nèi)核運行狀態(tài)的一系列特殊文件,用戶可以通過這些文件查看有關(guān)系統(tǒng)硬件及當前正在運行進程的信息,甚至可以通過更改其中某些文件來改變內(nèi)核的運行狀態(tài)。
目錄,系統(tǒng)中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的 PID號為目錄名.
-
目錄,提供了安全相關(guān)的屬性,可讀可寫,以支持安全模塊如SELinux等,需配置CONFIG_SECURITY。
-
文件,當前的安全相關(guān)的屬性。
-
文件,執(zhí)行命令execve時設置的安全相關(guān)的屬性。
-
文件,執(zhí)行命令open、mkdir、symlink、mknod時設置的安全相關(guān)的屬性。
-
文件,執(zhí)行命令add_key時設置的安全相關(guān)的屬性。
-
文件,最后一次執(zhí)行命令execve時的安全相關(guān)的屬性,即前一個“/proc/[pid]/attr/current”。
-
文件,創(chuàng)建socket時設置的安全相關(guān)的屬性。
-
文件,可以用來修改分配給自動分組的CPU帶寬。這是通過在“nice”范圍內(nèi)寫入一個數(shù)字來設置自動分組的nice值來完成的。取值范圍為+19(低優(yōu)先級)~ -20(高優(yōu)先級)。(寫入值超出這個范圍會導致write(2)失敗,錯誤為EINVAL。)
-
文件,ELF解釋器信息,格式為一個unsigned long類型的ID加一個unsigned long類型的值,最后為兩個0(man getauxval)。
-
文件,進程所屬的控制組,格式為冒號分隔的三個字段,分別是結(jié)構(gòu)ID、子系統(tǒng)、控制組,需配置CONFIG_CGROUPS。
-
文件,只寫,只用于進程的擁有者,清除用于估算內(nèi)存使用量的PG_Referenced和ACCESSED/YOUNG,有1、2、3、4四種策略,1表示清除相關(guān)的所有頁,2表示清除相關(guān)的匿名頁,3表示清除相關(guān)的映射文件的頁,4表示清除相關(guān)的soft-dirty的頁,需配置CONFIG_PROC_PAGE_MONITOR。
-
文件,只讀,保存啟動進程的完整的命令行字符串,如果是僵尸進程,這個文件為空。
-
文件,進程的命令名,不同的線程(man clone prctl pthread_setname_np)可能有不同的線程名,位置在“task/[tid]/comm”,名字長度超過TASK_COMM_LEN時會被截斷。
-
文件,coredump過濾器,如00000037(man core),不同的二進制位表示過濾不同的信息。
-
文件,控制CPU和內(nèi)存的節(jié)點(man cpuset)。
-
目錄,符號鏈接到當前工作目錄。
-
文件,環(huán)境變量。
-
文件,符號鏈接到啟動進程的完整命令。q
-
目錄,包含當前的fd,這些fd符號鏈接到真正打開的文件。
-
目錄,包含當前fd的信息,不同類型的fd信息不同。
-
文件,從用戶命名空間映射的組ID的信息(man user_namespaces)。
-
文件,IO信息。
-
文件,資源軟、硬限制(man getrlimit)。
-
文件,審計守護進程在內(nèi)核中啟用審計工具。在內(nèi)核中打開審計功能之前運行的任何進程都將獲得 loginuid 4294967295。
4294967295 只是 (unsigned long) -1。-1 表示未設置 loginuid。對于不是由任何登錄進程(例如守護進程)產(chǎn)生的進程,這是正常行為。loginuid 默認為 -1;每當您登錄時(在 tty/在 DM/通過 ssh),pam_loginuid 模塊都會將其更改為您的用戶 ID,并且該值由子進程保留。 -
目錄,包括一些內(nèi)存映射文件(man mmap),文件名格式為BeginAddress-EndAddress,符號鏈接到映射的文件,需要配置CONFIG_CHECKPOINT_RESTORE。
-
文件,內(nèi)存映射信息。
-
文件,用于通過open、read、lseek訪問進程的內(nèi)存頁。
-
文件,掛載信息,格式為44 41 253:1 / / rw,relatime shared:35 master:1 – ext4 /dev/vda1 rw,data=ordered,以空格作為分隔符,從左到右各字段的意思分別是唯一掛載ID、父掛載ID、文件系統(tǒng)的設備主從號碼、文件系統(tǒng)中掛載的根節(jié)點、相對于進程根節(jié)點的掛載點、掛載權(quán)限等掛載配置、可選配置、短橫線表示前面可選配置的結(jié)束、文件系統(tǒng)類型、文件系統(tǒng)特有的掛載源或者為none、額外配置。
-
文件,掛載在當前進程的文件系統(tǒng)列表,/dev/vda1 / ext4 rw,relatime,data=ordered 0 0 格式參照(man fstab)。
-
文件,掛載信息,格式形如 device /dev/vda1 mounted on / with fstype ext4 [statistics]。
-
目錄,保存進程的網(wǎng)絡相關(guān)文件和目錄。
-
目錄,保存了每個名字空間的入口,詳見(man namespaces)。
-
文件,numa即Non Uniform Memory Access,詳見(man numa)。
-
文件,調(diào)整OOM分數(shù),OOM即Out Of Memory,發(fā)生OOM時OOM Killer根據(jù)OOM分數(shù)殺掉分數(shù)高的進程,默認值為0,會繼承自父進程的設置。
-
文件,OOM分數(shù)。
-
文件,OOM分值介于-1000到1000之間。
-
文件,當前進程的虛擬內(nèi)存頁映射信息,需要配置CONFIG_PROC_PAGE_MONITOR。
-
文件,使進程個性標志在/proc中可見。因為一個進程的個性可能是敏感的(例如READ_IMPLIES_EXEC),所以這個文件只能被進程所有者讀。
-
文件,與用戶和組ID映射類似,可以為用戶名稱空間創(chuàng)建項目ID映射。(項目id用于磁盤配額;請參見setquota(8)和quotactl(2)。)
-
文件,公開每個任務的補丁狀態(tài)值,以便用戶可以確定哪些任務正在阻止修補操作的完成。
-
目錄,鏈接到了當前進程的根目錄。
-
文件,進程的調(diào)度統(tǒng)計、狀態(tài)信息。
-
文件,進程的調(diào)度信息。
-
文件,進程會話ID,默認4294967295。
-
文件,如果用戶命名空間中包含進程pid的進程被允許使用setgroups(2)系統(tǒng)調(diào)用,則/proc/[pid]/setgroups文件顯示字符串"allow";如果用戶名稱空間中不允許setgroups(2),則顯示“deny”。注意,不管/proc/[pid]/setgroups文件中的值是多少(也不管進程的能力是多少),如果/proc/[pid]/gid_map還沒有設置,調(diào)用setgroups(2)也是不允許的。
-
文件,內(nèi)存映射信息,類似于pmap命令,需要配置CONFIG_PROC_PAGE_MONITOR。
-
文件,內(nèi)核空間的函數(shù)調(diào)用堆棧,需要配置CONFIG_STACKTRACE。
-
文件,進程狀態(tài)信息,用于ps命令。
-
文件,進程內(nèi)存使用信息,以空格分隔的7個數(shù)字,從左到右分別表示程序總大小、常駐內(nèi)存大小、共享內(nèi)存頁大小、text code、library、data + stack、dirty pages。
-
文件,可讀性好的進程相關(guān)信息。
-
文件,系統(tǒng)調(diào)用相關(guān)信息,需要配置CONFIG_HAVE_ARCH_TRACEHOOK。
-
目錄,每個線程一個子目錄,目錄名為線程ID。
-
文件,POSIT定時器列表,包括定時器ID、信號等信息。
-
文件,用戶ID映射信息。
-
文件,進程休眠時內(nèi)核中相應位置的符號表示,如do_wait。
文件,設備喚醒操作。
文件,用于診斷內(nèi)存碎片問題。
目錄,已安裝的總線。
-
文件,輸入設備信息。
-
文件,句柄信息。
-
文件,pci插口信息。
-
文件,pci設備信息。
cgroups信息匯總,字段 subsys_name hierarchy num_cgroups enabled。
文件,系統(tǒng)啟動時傳遞給Linux內(nèi)核的參數(shù),如lilo、grub等boot管理模塊。
文件,要查看系統(tǒng)控制臺/dev/console中當前使用的設備行字符,你可以簡單地查看/proc/console文件.
文件,CPU和系統(tǒng)架構(gòu)信息,lscpu命令使用這個文件。
文件,內(nèi)核加密API提供的加密列表。
文件,設備相關(guān)信息。
文件,磁盤狀態(tài)。
文件,dma即Direct Memory Access。
-
文件,提供對 PC 和 Ataris 上實時時鐘中的非易失性存儲器的訪問。在 PC 上,這通常稱為 CMOS 內(nèi)存并存儲 BIOS 配置選項。
-
文件,系統(tǒng)運行時配置。
文件,執(zhí)行域列表。
文件,F(xiàn)rame Buffer信息,需要配置CONFIG_FB。
文件,內(nèi)核支持的文件系統(tǒng)類型(man filesystems)。
目錄,掛載的文件系統(tǒng)信息。
文件,每個CPU每個IO的中斷信息。依次顯示irq編號,每個cpu對該irq的處理次數(shù),中斷控制器的名字,irq的名字,以及驅(qū)動程序注冊該irq時使用的名字。
文件,IO內(nèi)存映射信息。
文件,IO端口信息。
目錄,下面會為每個注冊的irq創(chuàng)建一個以irq編號為名字的子目錄。
文件,用于動態(tài)鏈接和和模塊綁定的符號定義。
文件,系統(tǒng)中ELF格式的物理內(nèi)存。
文件,公開了讀取線程具有查看權(quán)限的鍵列表,并提供了有關(guān)每個鍵的各種信息。線程不需要擁有密鑰,該密鑰在此文件中可見。
文件,列出了在系統(tǒng)上至少具有一個密鑰的每個用戶ID的各種信息。
文件,內(nèi)核日志信息,dmsg命令使用這個文件。
文件,每個物理頁幀映射的次數(shù),需要配置CONFIG_PROC_PAGE_MONITOR。
文件,每個物理頁幀的掩碼,需要配置CONFIG_PROC_PAGE_MONITOR。
文件,當前系統(tǒng)負載。
文件,當前文件鎖的狀態(tài)。
文件,虛擬設備信息(軟raid等)。
文件,系統(tǒng)內(nèi)存使用統(tǒng)計,free命令使用了這個文件。
文件,其他的主要設備(設備號為10)上注冊的驅(qū)動。
文件,系統(tǒng)加載的模塊信息,相關(guān)命令為lsmod。
文件,鏈接到了/self/mounts。
文件,Memory Type Range Registers。
目錄,網(wǎng)絡偽文件系統(tǒng)相關(guān)。
文件,其他頁面分配器信息。
文件,分區(qū)信息。
文件,調(diào)度器debug信息。
文件,調(diào)度器信息。
目錄,SCSI接口設備。
目錄,鏈接到了當前進程所在的目錄。
文件,內(nèi)核緩存信息,需要配置CONFIG_SLAB。
文件,系統(tǒng)軟中斷信息。
文件,系統(tǒng)和內(nèi)核的統(tǒng)計信息。
文件,swap分區(qū)使用情況。
目錄,系統(tǒng)變量相關(guān)信息。
文件,可寫,觸發(fā)系統(tǒng)調(diào)用。
目錄,包括msg、sem、shm三個文件,為System V IPC對象。
文件,還在運行著的定時器列表。
文件,定時器狀態(tài)。
目錄,tty設備相關(guān)。
文件,系統(tǒng)更新時間和進程空閑時間。
文件,內(nèi)核版本信息。
文件,虛擬內(nèi)存分配信息。
文件,內(nèi)存統(tǒng)計信息,以鍵值對形式顯示。
文件,內(nèi)存區(qū)塊信息,用于分析虛擬內(nèi)存的行為。