首頁 >運維 >linux運維 >linux下proc是什麼檔案系統

linux下proc是什麼檔案系統

青灯夜游
青灯夜游原創
2023-03-15 11:31:061942瀏覽

在linux中,proc是虛擬檔案系統,是一個控制中心,可以透過更改其中某些檔案來改變核心運作狀態;它也是核心提空給我們的查詢中心,使用者可以透過它查看系統硬體及目前運作的進程資訊。 proc系統只存在記憶體當中,以檔案系統的方式為存取系統核心資料的操作提供接口,可以透過更改其中的某些檔案來改變核心運作狀態。

linux下proc是什麼檔案系統

本教學操作環境:linux7.3系統、Dell G3電腦。

proc是什麼檔案系統

proc被稱為虛擬檔案系統,它是一個控制中心,可以透過更改其中某些檔案來改變核心運行狀態,它也是核心提空給我們的查詢中心,使用者可以透過它查看系統硬體及目前運行的進程資訊。

Linux中許多工具的資料來源正是proc目錄中的內容,例如lsmod的指令是cat /proc/modules的別名。

在Linux中存在著一類特殊的偽檔案系統,用於使用與檔案介面統一的操作來完成各種功能,例如ptyfs、devfs、sysfs和procfs。而procfs就是其中應用最廣泛的一種偽檔案系統。

就檔案系統這個術語而言,/ proc目錄並不是真正的檔案系統,它是一個虛擬檔案系統,有時也被稱為進程資訊偽檔案系統。

proc 放置的資料都是在記憶體當中,例如係統核心、行程、外部裝置的狀態及網路狀態等。因為這個目錄下的資料都是在記憶體當中,所以本身不佔任何硬碟空間。

procfs是Linux內核資訊的抽象文件接口,大量內核中的信息以及可調參數都被作為常規文件映射到一個目錄樹中,這樣我們就可以簡單直接的通過echo或cat這樣的文件操作指令對系統資訊進行查取和調整了。同時procfs也提供了一個接口,使得我們自己的核心模組或用戶態程式可以透過procfs進行參數的傳遞。在當今的Linux系統中,大量的系統工具也透過procfs獲取核心參數,例如ps、lspci等等,沒有procfs它們將可能無法正常運作。

proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為存取系統核心資料的操作提供介面。使用者和應用程式可以透過proc得到系統的訊息,並且可以改變核心的某些參數。由於系統的信息,如進程,是動態改變的,所以用戶或應用程式讀取proc檔案時,proc檔案系統是動態從系統核心讀出所需資訊並提交的。

linux proc檔案系統詳解

Linux系統上的/proc目錄是一種檔案系統,即proc檔案系統。與其它常見的檔案系統不同的是,/proc是一種偽檔案系統(也即虛擬檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為存取系統核心資料的操作提供介面),儲存的是當前核心運行狀態的一系列特殊文件,使用者可以透過這些文件查看有關係統硬體及目前正在運行進程的信息,甚至可以透過更改其中某些文件來改變核心的運行狀態。

PID

#目錄,系統中目前執行的每一個行程都有對應的目錄在/proc下,以進程的PID號碼為目錄名稱.

  • #attr

    ##目錄,提供了安全相關的屬性,可讀可寫,以支援安全模組如SELinux等,需配置CONFIG_SECURITY。

  • current

    文件,目前的安全性相關的屬性。

  • exec

    文件,執行指令execve時設定的安全性相關的屬性。

  • fscreate

    文件,執行指令open、mkdir、symlink、mknod時設定的安全相關的屬性。

  • keycreate

    文件,執行指令add_key時設定的安全相關的屬性。

  • prev

    文件,最後一次執行指令execve時的安全相關的屬性,即前一個「/ proc/[pid]/attr/current」。

  • sockcreate

    #文件,建立socket時設定的安全相關的屬性。

  • autogroup

    文件,可以用來修改指派給自動分組的CPU頻寬。這是透過在「nice」範圍內寫入數字來設定自動分組的nice值來完成的。取值範圍為 19(低優先權)~ -20(高優先權)。 (寫入值超出這個範圍會導致write(2)失敗,錯誤為EINVAL。)

  • auxv

    文件,ELF解釋器信息,格式為一個unsigned long類型的ID加一個unsigned long類型的值,最後為兩個0(man getauxval)。

  • cgroup

    文件,進程所屬的控制組,格式為冒號分隔的三個字段,分別是結構ID、子系統、控制組,需配置CONFIG_CGROUPS。

  • clear_refs

    #文件,只寫,只用於進程的擁有者,清除用於估算記憶體使用量的PG_Referenced和ACCESSED/YOUNG,有1、2、3、4四種策略,1表示清除相關的所有頁,2表示清除相關的匿名頁,3表示清除相關的映射文件的頁,4表示清除相關的soft-dirty的頁,需設定CONFIG_PROC_PAGE_MONITOR。

  • cmdline

    文件,只讀,保存啟動進程的完整的命令列字串,如果是殭屍進程,這個檔案為空。

  • comm

    文件,進程的命令名,不同的線程(man clone prctl pthread_setname_np)可能有不同的線程名,位置在“task/[tid]/comm”,名字長度超過TASK_COMM_LEN時會被截斷。

  • coredump_filter

    文件,coredump過濾器,如00000037(man core),不同的二進位位表示過濾不同的訊息。

  • cpuset

    文件,控制CPU和記憶體的節點(man cpuset)。

  • cwd -> /

    目錄,符號連結到目前工作目錄。

  • environ

    文件,環境變數。

  • exe

    文件,符號連結到啟動進程的完整命令。 q

  • fd

    目錄,包含目前的fd,這些fd符號連結到真正開啟的檔案。

  • fdinfo

    目錄,包含目前fd的信息,不同類型的fd資訊不同。

  • gid_map

    文件,從使用者命名空間映射的群組ID的資訊(man user_namespaces)。

  • io

    文件,IO資訊。

  • limits

    文件,資源軟、硬限制(man getrlimit)。

  • loginuid

    #檔案,審計守護程式在核心中啟用稽核工具。在核心中開啟稽核功能之前執行的任何進程都將獲得 loginuid 4294967295。
    4294967295 只是 (unsigned long) -1。 -1 表示未設定 loginuid。對於不是由任何登入程序(例如守護程序)產生的進程,這是正常行為。 loginuid 預設為 -1;每當您登入時(在 tty/在 DM/透過 ssh),pam_loginuid 模組都會將其變更為您的使用者 ID,並且該值由子程序保留。

  • map_files

    #目錄,包含一些記憶體對映檔案(man mmap),檔案名稱格式為BeginAddress-EndAddress ,符號連結到映射的文件,需要配置CONFIG_CHECKPOINT_RESTORE。

  • maps

    文件,記憶體映射資訊。

  • mem

    文件,用於透過open、read、lseek存取進程的記憶體頁。

  • mountinfo

    文件,掛載訊息,格式為44 41 253:1 / / rw,relatime shared :35 master:1 - ext4 /dev/vda1 rw,data=ordered,以空格作為分隔符,從左到右各字段的意思分別是唯一掛載ID、父掛載ID、檔案系統的設備主從號碼、檔案系統中掛載的根節點、相對於進程根節點的掛載點、掛載權限等掛載配置、可選配置、短橫線表示前面可選配置的結束、檔案系統類型、檔案系統特有的掛載來源或為none、額外配置。

  • mounts

    #文件,掛載在目前進程的文件系統列表,/dev/vda1 / ext4 rw ,relatime,data=ordered 0 0 格式參考(man fstab)。

  • mountstats

    文件,掛載訊息,格式形如device /dev/vda1 mounted on / with fstype ext4 [statistics]。

  • net

    #目錄,儲存行程的網路相關檔案和目錄。

  • ns

    #目錄,儲存了每個名字空間的入口,詳見(man namespaces)。

  • numa_maps

    文件,numa即Non Uniform Memory Access,詳見(man numa)。

  • oom_adj

    #

    文件,調整OOM分數,OOM即Out Of Memory,發生OOM時OOM Killer根據OOM分數殺掉分數高的進程,預設值為0,會繼承自父進程的設定。

  • oom_score

    #文件,OOM分數。

  • oom_score_adj

    文件,OOM分數介於-1000到1000之間。

  • pagemap

    文件,目前進程的虛擬記憶體頁映射訊息,需要配置CONFIG_PROC_PAGE_MONITOR。

  • personality

    文件,使進程個性標誌在/proc中可見。因為一個行程的個性可能是敏感的(例如READ_IMPLIES_EXEC),所以這個檔案只能被進程擁有者讀。

  • projid_map

    #文件,與使用者和群組ID映射類似,可以為使用者名稱空間建立專案ID映射。 (項目id用於磁碟配額;請參閱setquota(8)和quotactl(2)。)

  • patch_state

    #文件,公開每個任務的補丁狀態值,以便使用者可以確定哪些任務正在阻止修補操作的完成。

  • root -> /

    #目錄,連結到了目前程序的根目錄。

  • sched

    #檔,行程的調度統計、狀態資訊。

  • schedstat

    檔案,流程的調度資訊。

  • sessionid

    文件,進程會話ID,預設4294967295。

  • setgroups

    文件,如果使用者命名空間中包含進程pid的進程被允許使用setgroups(2)系統調用,則/proc/[pid]/setgroups檔案顯示字串"allow";如果使用者名稱空間中不允許setgroups(2),則顯示「deny」。注意,不管/proc/[pid]/setgroups檔案中的值是多少(也不管進程的能力是多少),如果/proc/[pid]/gid_map還沒有設置,調用setgroups(2)也是不允許的。

  • smaps

    文件,記憶體映射訊息,類似於pmap指令,需要配置CONFIG_PROC_PAGE_MONITOR。

  • stack

    文件,核心空間的函數呼叫堆疊,需要設定CONFIG_STACKTRACE。

  • stat

    文件,進程狀態信息,用於ps命令。

  • statm

    文件,進程記憶體使用信息,以空格分隔的7個數字,從左到右分別表示程式總大小、常駐記憶體大小、共享記憶體頁大小、text code、library、data stack、dirty pages。

  • status

    文件,可讀性好的進程相關資訊。

  • syscall

    文件,系統呼叫相關訊息,需要設定CONFIG_HAVE_ARCH_TRACEHOOK。

  • task

    #目錄,每個執行緒一個子目錄,目錄名為執行緒ID。

  • timers

    文件,POSIT定時器列表,包括定時器ID、訊號等資訊。

  • uid_map

    #文件,使用者ID映射資訊。

  • wchan

    文件,在進程休眠時內核中對應位置的符號表示,如do_wait。

acpi/wakeup

文件,裝置喚醒操作。

buddyinfo

文件,用於診斷記憶體碎片問題。

bus

目錄,已安裝的匯流排。

  • input/devices

    #文件,輸入裝置資訊。

  • input/handlers

    #文件,句柄資訊。

  • pci/00/00.0-08.0

    文件,pci插口資訊。

  • pci/devices

    文件,pci設備資訊。

cgroups

cgroups資訊匯總,欄位 subsys_name hierarchy num_cgroups enabled。

cmdline

文件,系統啟動時傳遞給Linux核心的參數,如lilo、grub等boot管理模組。

consoles

文件,要查看系統控制台/dev/console中目前使用的裝置行字符,你可以簡單地查看/proc/console文件.

cpuinfo

文件,CPU和系統架構信息,lscpu指令使用這個文件。

crypto

文件,核心加密API提供的加密清單。

devices

文件,裝置相關資訊。

diskstats

文件,磁碟狀態。

dma

文件,dma即Direct Memory Access。

driver

  • nvram

    文件,提供對PC 和Ataris 上實時時鐘中的非揮發性記憶體的存取。在 PC 上,這通常稱為 CMOS 記憶體並儲存 BIOS 配置選項。

  • rtc

    文件,系統運行時配置。

execdomains

文件,執行網域清單。

fb

文件,Frame Buffer訊息,需要設定CONFIG_FB。

filesystems

文件,核心支援的檔案系統類型(man filesystems)。

fs

#目錄,掛載的檔案系統資訊。

interrupts

文件,每個CPU每個IO的中斷資訊。依序顯示irq編號,每個cpu對該irq的處理次數,中斷控制器的名字,irq的名字,以及驅動程式註冊該irq時所使用的名字。

iomem

文件,IO記憶體映射資訊。

ioports

文件,IO連接埠資訊。

irq

#目錄,下面會為每個註冊的irq建立一個以irq編號為名字的子目錄。

kallsyms

文件,用於動態連結和和模組綁定的符號定義。

kcore

文件,系統中ELF格式的實體記憶體。

keys

#檔案,公開了讀取線程具有查看權限的鍵列表,並提供了有關每個鍵的各種資訊。執行緒不需要擁有金鑰,該金鑰在此文件中可見。

key-users

#檔,列出了在系統上至少具有一個金鑰的每個用戶ID的各種資訊。

kmsg

文件,核心日誌訊息,dmsg指令使用這個檔案。

kpagecount

文件,每個物理頁框映射的次數,需要配置CONFIG_PROC_PAGE_MONITOR。

kpageflags

#文件,每個實體頁幀的掩碼,需要設定CONFIG_PROC_PAGE_MONITOR。

loadavg

文件,目前系統負載。

locks

文件,目前文件鎖定的狀態。

mdstat

文件,虛擬設備資訊(軟raid等)。

meminfo

文件,系統記憶體使用統計,free指令使用了這個文件。

misc

文件,其他的主要設備(設備號碼為10)上註冊的驅動程式。

modules

文件,系統載入的模組訊息,相關指令為lsmod。

mounts -> self/mounts

文件,連結到了/self/mounts。

mtrr

文件,Memory Type Range Registers。

net -> self/net

#目錄,網路偽檔案系統相關。

pagetypeinfo

文件,其他頁面分配器資訊。

partitions

文件,分區資訊。

sched_debug

文件,調度器debug資訊。

schedstat

文件,調度器資訊。

scsi

#目錄,SCSI介面裝置。

self -> 22699

目錄,連結到了目前行程所在的目錄。

slabinfo

文件,核心快取訊息,需要配置CONFIG_SLAB。

softirqs

文件,系統軟體中斷資訊。

stat

文件,系統和核心的統計資料。

swaps

文件,swap分割區使用情況。

sys

目錄,系統變數相關資訊。

sysrq-trigger

#文件,可寫,觸發系統呼叫。

sysvipc

目錄,包含msg、sem、shm三個文件,為System V IPC物件。

timer_list

#文件,還在運行著的定時器列表。

timer_stats

#文件,定時器狀態。

tty

#目錄,tty裝置相關。

uptime

文件,系統更新時間和進程空閒時間。

version

文件,核心版本資訊。

vmallocinfo

#文件,虛擬記憶體分配資訊。

vmstat

文件,記憶體統計信息,以鍵值對形式顯示。

zoneinfo

文件,記憶體區塊信息,用於分析虛擬記憶體的行為。

相關推薦:《Linux影片教學

以上是linux下proc是什麼檔案系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn