Linux平臺/proc虛擬文件系統詳解 實時焦點

2023-06-08 11:14:34 來源:Linux二進制

Linux內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個偽文件系統(即虛擬文件系統),它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。

用戶和應用程序可以通過/proc得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取/proc文件系統時,proc文件系統是動態從系統內核讀出所需信息并提交的。


【資料圖】

我們查看內核版本號、加載的模塊、CPU和內存使用等信息,甚至修改路由轉發都是通過/proc文件系統進行的,下面列出的這些文件或子文件夾,并不是都是在你的系統中存在,這取決于你的內核配置和裝載的模塊。另外,在/proc下還有三個很重要的目錄:net,scsi和sys。sys目錄是可寫的,可以通過它來訪問或修改內核的參數,而net和scsi則依賴于內核配置。例如,如果系統不支持scsi,則scsi 目錄不存在。

一、/proc下常用文件列表

目的命令
查看系統內核符號表,用kprobes時會用到cat /proc/kallsyms
查看系統內核版本號cat /proc/version
查看系統當前加載的模塊cat /proc/modules
查看系統可用設備的列表cat /proc/devices
查看系統CPU 的信息 (型號,家族,緩存)cat /proc/cpuinfo
查看物理內存、交換空間等的信息cat /proc/meminfo
查看已加載的文件系統的列表cat /proc/mounts
查看被支持的文件系統cat /proc/filesystems
查看系統啟動時內核命令行參數(grub.cfg, menu.lst)cat /proc/cmdline
查看socket狀態cat /proc/net/sockstat
查看arp表cat /proc/net/arp
開啟路由轉發echo 1 >/proc/sys/net/ipv4/ip_forward

/proc目錄下的文件是虛擬文件;因此,proc 被稱為虛擬文件系統。大多數虛擬文件的大小為零字節,但在查看時包含大量信息。虛擬文件上的大多數時間和日期戳反映了當前時間和日期;但是,這些文件會不斷更新。/proc/interrupts、/proc/meminfo、/proc/cpuinfo 和 /proc/devices 等虛擬文件提供了系統硬件的視圖。其他的,如 /proc/filesystems 文件和 /proc/sys 目錄提供系統配置信息和接口。包含類似主題信息的文件被分組到虛擬目錄中。例如,進程目錄包含有關系統上每個正在運行的進程的信息。

/proc 中的大多數虛擬文件都可以使用 cat、more 和 less 等命令查看。

例如,要查看有關系統 CPU 的信息,請輸入:

[root@localhost ~]# cat /proc/cpuinfoprocessor       : 0vendor_id       : GenuineIntelcpu family      : 6model           : 85model name      : Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHzstepping        : 7cpu MHz         : 2095.078cache size      : 22528 KBphysical id     : 0siblings        : 1core id         : 0cpu cores       : 1apicid          : 0initial apicid  : 0fpu             : yesfpu_exception   : yescpuid level     : 22wp              : yesflags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase avx2 invpcid rdseed clflushopt md_clear flush_l1d arch_capabilitiesbugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihitbogomips        : 4190.15clflush size    : 64cache_alignment : 64address sizes   : 46 bits physical, 48 bits virtualpower management:

某些文件只能以 root 權限訪問。/proc 中的某些文件包含非人類可讀的信息。使用 lspci、free 和 top 等實用程序查看這些文件。

/proc 目錄中的大多數虛擬文件都是只讀的。但是,有些是可寫的,可用于調整內核中的設置。對于 /proc/sys 目錄中的文件尤其如此。要更改虛擬文件的值,請使用以下語法:

# echo value > /proc/file

例如,要更改主機名,請輸入:

# echo test > /proc/sys/kernel/hostname

執行命令后,退出當前會話,重新建立會話后,即可發現主機名已完成修改,結果如下:

其他文件充當二進制或者布爾開關。查看文件會返回 0(關閉或者假)或者 1(開或者真)。例子:

# cat /proc/sys/net/ipv4/ip_forward0

0 表示內核不轉發網絡數據包。要打開數據包轉發:

# echo 1 > /proc/sys/net/ipv4/ip_forward# cat /proc/sys/net/ipv4/ip_forward1

這里描述了 /proc 目錄頂層中一些更有用的虛擬文件。這并不是一個包羅萬象的列表,而是提供一些文件及其用途的示例。其中許多文件在后文適用的情況中有進一步的描述。

二、proc下的文件解析

路徑描述
/proc/buddyinfo每個內存區中的每個order有多少塊可用,和內存碎片問題有關
/proc/cmdline啟動時傳遞給kernel的參數信息
/proc/cpuinfocpu的信息
/proc/crypto內核使用的所有已安裝的加密密碼及細節
/proc/devices已經加載的設備并分類
/proc/dma已注冊使用的ISA DMA頻道列表
/proc/execdomainsLinux內核當前支持的execution domains
/proc/fb 幀緩沖設備列表,包括數量和控制它的驅動
/proc/filesystems內核當前支持的文件系統類型
/proc/interruptsx86架構中的每個IRQ中斷數
/proc/iomem每個物理設備當前在系統內存中的映射
/proc/ioports一個設備的輸入輸出所使用的注冊端口范圍
/proc/kcore代表系統的物理內存,存儲為核心文件格式,里邊顯示的是字節數,等于RAM大小加上4kb
/proc/kmsg記錄內核生成的信息,可以通過/sbin/klogd或/bin/dmesg來處理
/proc/loadavg根據過去一段時間內CPU和IO的狀態得出的負載狀態,與uptime命令有關
/proc/locks內核鎖住的文件列表
/proc/mdstat多硬盤,RAID配置信息(md=multiple disks)
/proc/meminfoRAM使用的相關信息
/proc/misc其他的主要設備(設備號為10)上注冊的驅動
/proc/modules所有加載到內核的模塊列表
/proc/mounts系統中使用的所有掛載
/proc/mtrr系統使用的Memory Type Range Registers(MTRRs)
/proc/partitions分區中的塊分配信息
/proc/pci系統中的PCI設備列表
/proc/slabinfo系統中所有活動的 slab 緩存信息
/proc/stat所有的CPU活動信息
/proc/sysrq-trigger使用echo命令來寫這個文件的時候,遠程root用戶可以執行大多數的系統請求關鍵命令,就好像在本地終端執行一樣。要寫入這個文件,需要把/proc/sys/kernel/sysrq不能設置為0。這個文件對root也是不可讀的
/proc/uptime系統已經運行了多久
/proc/swaps交換空間的使用情況
/proc/versionLinux內核版本和gcc版本
/proc/bus系統總線(Bus)信息,例如pci/usb
/proc/driver驅動信息
/proc/fs文件系統信息
/proc/ideide設備信息
/proc/irq中斷請求設備信息
/proc/net網卡設備信息
/proc/scsiscsi設備信息
/proc/ttytty設備信息
/proc/net/dev顯示網絡適配器及統計信息
/proc/vmstat虛擬內存統計信息
/proc/vmcore內核panic時的內存映像
/proc/diskstats取得磁盤信息
/proc/schedstatkernel調度器的統計信息
/proc/zoneinfo顯示內存空間的統計信息,對分析虛擬內存行為很有用

除了以上介紹的這些,還有的是一些以數字命名的目錄,它們是進程目錄。系統中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的 PID號為目錄名,它們是讀取進程信息的接口。而self目錄則是讀取進程本身的信息接口,是一個link。

子文件或子文件夾

以下是/proc目錄中進程N的信息

路徑描述
/proc/Npid為N的進程信息
/proc/N/cmdline進程啟動命令
/proc/N/cwd鏈接到進程當前工作目錄
/proc/N/environ進程環境變量列表
/proc/N/exe鏈接到進程的執行命令文件
/proc/N/fd包含進程相關的所有的文件描述符
/proc/N/maps與進程相關的內存映射信息
/proc/N/mem指代進程持有的內存,不可讀
/proc/N/root鏈接到進程的根目錄
/proc/N/stat進程的狀態
/proc/N/statm進程使用的內存的狀態
/proc/N/status進程狀態信息,比stat/statm更具可讀性
/proc/self鏈接到當前正在運行的進程

三、/proc/sys目錄

與 /proc下其它文件的“只讀”屬性不同的是,管理員可對/proc/sys子目錄中的許多文件內容進行修改以更改內核的運行特性,事先可以使用“ls -l”命令查看某文件是否“可寫入”。

標簽:

上一篇:【世界播資訊】Linux內核模塊編程基礎知識
下一篇:最后一頁