Linux 內(nèi)核提供了一種通過 /proc 文件系統(tǒng),在運(yùn)行時(shí)訪問內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)、改變內(nèi)核設(shè)置的機(jī)制。proc文件系統(tǒng)是一個(gè)偽文件系統(tǒng)(即虛擬文件系統(tǒng)),它只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。
用戶和應(yīng)用程序可以通過/proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。由于系統(tǒng)的信息,如進(jìn)程,是動態(tài)改變的,所以用戶或應(yīng)用程序讀取/proc文件系統(tǒng)時(shí),proc文件系統(tǒng)是動態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的。
我們查看內(nèi)核版本號、加載的模塊、CPU和內(nèi)存使用等信息,甚至修改路由轉(zhuǎn)發(fā)都是通過/proc文件系統(tǒng)進(jìn)行的,下面列出的這些文件或子文件夾,并不是都是在你的系統(tǒng)中存在,這取決于你的內(nèi)核配置和裝載的模塊。另外,在/proc下還有三個(gè)很重要的目錄:net,scsi和sys。sys目錄是可寫的,可以通過它來訪問或修改內(nèi)核的參數(shù),而net和scsi則依賴于內(nèi)核配置。例如,如果系統(tǒng)不支持scsi,則scsi 目錄不存在。
一、/proc下常用文件列表
目的 | 命令 |
---|---|
查看系統(tǒng)內(nèi)核符號表,用kprobes時(shí)會用到 | cat /proc/kallsyms |
查看系統(tǒng)內(nèi)核版本號 | cat /proc/version |
查看系統(tǒng)當(dāng)前加載的模塊 | cat /proc/modules |
查看系統(tǒng)可用設(shè)備的列表 | cat /proc/devices |
查看系統(tǒng)CPU 的信息 (型號,家族,緩存) | cat /proc/cpuinfo |
查看物理內(nèi)存、交換空間等的信息 | cat /proc/meminfo |
查看已加載的文件系統(tǒng)的列表 | cat /proc/mounts |
查看被支持的文件系統(tǒng) | cat /proc/filesystems |
查看系統(tǒng)啟動時(shí)內(nèi)核命令行參數(shù)(grub.cfg, menu.lst) | cat /proc/cmdline |
查看socket狀態(tài) | cat /proc/net/sockstat |
查看arp表 | cat /proc/net/arp |
開啟路由轉(zhuǎn)發(fā) | echo 1 >/proc/sys/net/ipv4/ip_forward |
/proc目錄下的文件是虛擬文件;因此,proc 被稱為虛擬文件系統(tǒng)。大多數(shù)虛擬文件的大小為零字節(jié),但在查看時(shí)包含大量信息。虛擬文件上的大多數(shù)時(shí)間和日期戳反映了當(dāng)前時(shí)間和日期;但是,這些文件會不斷更新。/proc/interrupts、/proc/meminfo、/proc/cpuinfo 和 /proc/devices 等虛擬文件提供了系統(tǒng)硬件的視圖。其他的,如 /proc/filesystems 文件和 /proc/sys 目錄提供系統(tǒng)配置信息和接口。包含類似主題信息的文件被分組到虛擬目錄中。例如,進(jìn)程目錄包含有關(guān)系統(tǒng)上每個(gè)正在運(yùn)行的進(jìn)程的信息。
/proc 中的大多數(shù)虛擬文件都可以使用 cat、more 和 less 等命令查看。
例如,要查看有關(guān)系統(tǒng) CPU 的信息,請輸入:
[root@localhost ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz
stepping : 7
cpu MHz : 2095.078
cache size : 22528 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : 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_capabilities
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips : 4190.15
clflush size : 64