linux下proc是什麼檔案系統

2023-03-15 14:00:50

在linux中,proc是虛擬檔案系統,是一個控制中心,可以通過更改其中某些檔案改變核心執行狀態;它也是核心提空給我們的查詢中心,使用者可以通過它檢視系統硬體及當前執行的程序資訊。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是什麼檔案系統的詳細內容,更多請關注TW511.COM其它相關文章!