Linux內(nèi)核提供了一種通過(guò) /proc 文件系統(tǒng),在運(yùn)行時(shí)訪問(wèn)內(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)的方式為訪問(wèn)系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。
用戶和應(yīng)用程序可以通過(guò)/proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。由于系統(tǒng)的信息,如進(jìn)程,是動(dòng)態(tài)改變的,所以用戶或應(yīng)用程序讀取/proc文件系統(tǒng)時(shí),proc文件系統(tǒng)是動(dòng)態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的。
【資料圖】
我們查看內(nèi)核版本號(hào)、加載的模塊、CPU和內(nèi)存使用等信息,甚至修改路由轉(zhuǎn)發(fā)都是通過(guò)/proc文件系統(tǒng)進(jìn)行的,下面列出的這些文件或子文件夾,并不是都是在你的系統(tǒng)中存在,這取決于你的內(nèi)核配置和裝載的模塊。另外,在/proc下還有三個(gè)很重要的目錄:net,scsi和sys。sys目錄是可寫的,可以通過(guò)它來(lái)訪問(wèn)或修改內(nèi)核的參數(shù),而net和scsi則依賴于內(nèi)核配置。例如,如果系統(tǒng)不支持scsi,則scsi 目錄不存在。
目的 | 命令 |
---|---|
查看系統(tǒng)內(nèi)核符號(hào)表,用kprobes時(shí)會(huì)用到 | cat /proc/kallsyms |
查看系統(tǒng)內(nèi)核版本號(hào) | cat /proc/version |
查看系統(tǒng)當(dāng)前加載的模塊 | cat /proc/modules |
查看系統(tǒng)可用設(shè)備的列表 | cat /proc/devices |
查看系統(tǒng)CPU 的信息 (型號(hào),家族,緩存) | cat /proc/cpuinfo |
查看物理內(nèi)存、交換空間等的信息 | cat /proc/meminfo |
查看已加載的文件系統(tǒng)的列表 | cat /proc/mounts |
查看被支持的文件系統(tǒng) | cat /proc/filesystems |
查看系統(tǒng)啟動(dòng)時(shí)內(nèi)核命令行參數(shù)(grub.cfg, menu.lst) | cat /proc/cmdline |
查看socket狀態(tài) | cat /proc/net/sockstat |
查看arp表 | cat /proc/net/arp |
開(kāi)啟路由轉(zhuǎn)發(fā) | echo 1 >/proc/sys/net/ipv4/ip_forward |
/proc目錄下的文件是虛擬文件;因此,proc 被稱為虛擬文件系統(tǒng)。大多數(shù)虛擬文件的大小為零字節(jié),但在查看時(shí)包含大量信息。虛擬文件上的大多數(shù)時(shí)間和日期戳反映了當(dāng)前時(shí)間和日期;但是,這些文件會(huì)不斷更新。/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 的信息,請(qǐng)輸入:
[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 權(quán)限訪問(wèn)。/proc 中的某些文件包含非人類可讀的信息。使用 lspci、free 和 top 等實(shí)用程序查看這些文件。
/proc 目錄中的大多數(shù)虛擬文件都是只讀的。但是,有些是可寫的,可用于調(diào)整內(nèi)核中的設(shè)置。對(duì)于 /proc/sys 目錄中的文件尤其如此。要更改虛擬文件的值,請(qǐng)使用以下語(yǔ)法:
# echo value > /proc/file
例如,要更改主機(jī)名,請(qǐng)輸入:
# echo test > /proc/sys/kernel/hostname
執(zhí)行命令后,退出當(dāng)前會(huì)話,重新建立會(huì)話后,即可發(fā)現(xiàn)主機(jī)名已完成修改,結(jié)果如下:
其他文件充當(dāng)二進(jìn)制或者布爾開(kāi)關(guān)。查看文件會(huì)返回 0(關(guān)閉或者假)或者 1(開(kāi)或者真)。例子:
# cat /proc/sys/net/ipv4/ip_forward0
0 表示內(nèi)核不轉(zhuǎn)發(fā)網(wǎng)絡(luò)數(shù)據(jù)包。要打開(kāi)數(shù)據(jù)包轉(zhuǎn)發(fā):
# echo 1 > /proc/sys/net/ipv4/ip_forward# cat /proc/sys/net/ipv4/ip_forward1
這里描述了 /proc 目錄頂層中一些更有用的虛擬文件。這并不是一個(gè)包羅萬(wàn)象的列表,而是提供一些文件及其用途的示例。其中許多文件在后文適用的情況中有進(jìn)一步的描述。
路徑 | 描述 |
---|---|
/proc/buddyinfo | 每個(gè)內(nèi)存區(qū)中的每個(gè)order有多少塊可用,和內(nèi)存碎片問(wèn)題有關(guān) |
/proc/cmdline | 啟動(dòng)時(shí)傳遞給kernel的參數(shù)信息 |
/proc/cpuinfo | cpu的信息 |
/proc/crypto | 內(nèi)核使用的所有已安裝的加密密碼及細(xì)節(jié) |
/proc/devices | 已經(jīng)加載的設(shè)備并分類 |
/proc/dma | 已注冊(cè)使用的ISA DMA頻道列表 |
/proc/execdomains | Linux內(nèi)核當(dāng)前支持的execution domains |
/proc/fb 幀緩沖設(shè)備列表, | 包括數(shù)量和控制它的驅(qū)動(dòng) |
/proc/filesystems | 內(nèi)核當(dāng)前支持的文件系統(tǒng)類型 |
/proc/interrupts | x86架構(gòu)中的每個(gè)IRQ中斷數(shù) |
/proc/iomem | 每個(gè)物理設(shè)備當(dāng)前在系統(tǒng)內(nèi)存中的映射 |
/proc/ioports | 一個(gè)設(shè)備的輸入輸出所使用的注冊(cè)端口范圍 |
/proc/kcore | 代表系統(tǒng)的物理內(nèi)存,存儲(chǔ)為核心文件格式,里邊顯示的是字節(jié)數(shù),等于RAM大小加上4kb |
/proc/kmsg | 記錄內(nèi)核生成的信息,可以通過(guò)/sbin/klogd或/bin/dmesg來(lái)處理 |
/proc/loadavg | 根據(jù)過(guò)去一段時(shí)間內(nèi)CPU和IO的狀態(tài)得出的負(fù)載狀態(tài),與uptime命令有關(guān) |
/proc/locks | 內(nèi)核鎖住的文件列表 |
/proc/mdstat | 多硬盤,RAID配置信息(md=multiple disks) |
/proc/meminfo | RAM使用的相關(guān)信息 |
/proc/misc | 其他的主要設(shè)備(設(shè)備號(hào)為10)上注冊(cè)的驅(qū)動(dòng) |
/proc/modules | 所有加載到內(nèi)核的模塊列表 |
/proc/mounts | 系統(tǒng)中使用的所有掛載 |
/proc/mtrr | 系統(tǒng)使用的Memory Type Range Registers(MTRRs) |
/proc/partitions | 分區(qū)中的塊分配信息 |
/proc/pci | 系統(tǒng)中的PCI設(shè)備列表 |
/proc/slabinfo | 系統(tǒng)中所有活動(dòng)的 slab 緩存信息 |
/proc/stat | 所有的CPU活動(dòng)信息 |
/proc/sysrq-trigger | 使用echo命令來(lái)寫這個(gè)文件的時(shí)候,遠(yuǎn)程root用戶可以執(zhí)行大多數(shù)的系統(tǒng)請(qǐng)求關(guān)鍵命令,就好像在本地終端執(zhí)行一樣。要寫入這個(gè)文件,需要把/proc/sys/kernel/sysrq不能設(shè)置為0。這個(gè)文件對(duì)root也是不可讀的 |
/proc/uptime | 系統(tǒng)已經(jīng)運(yùn)行了多久 |
/proc/swaps | 交換空間的使用情況 |
/proc/version | Linux內(nèi)核版本和gcc版本 |
/proc/bus | 系統(tǒng)總線(Bus)信息,例如pci/usb等 |
/proc/driver | 驅(qū)動(dòng)信息 |
/proc/fs | 文件系統(tǒng)信息 |
/proc/ide | ide設(shè)備信息 |
/proc/irq | 中斷請(qǐng)求設(shè)備信息 |
/proc/net | 網(wǎng)卡設(shè)備信息 |
/proc/scsi | scsi設(shè)備信息 |
/proc/tty | tty設(shè)備信息 |
/proc/net/dev | 顯示網(wǎng)絡(luò)適配器及統(tǒng)計(jì)信息 |
/proc/vmstat | 虛擬內(nèi)存統(tǒng)計(jì)信息 |
/proc/vmcore | 內(nèi)核panic時(shí)的內(nèi)存映像 |
/proc/diskstats | 取得磁盤信息 |
/proc/schedstat | kernel調(diào)度器的統(tǒng)計(jì)信息 |
/proc/zoneinfo | 顯示內(nèi)存空間的統(tǒng)計(jì)信息,對(duì)分析虛擬內(nèi)存行為很有用 |
除了以上介紹的這些,還有的是一些以數(shù)字命名的目錄,它們是進(jìn)程目錄。系統(tǒng)中當(dāng)前運(yùn)行的每一個(gè)進(jìn)程都有對(duì)應(yīng)的一個(gè)目錄在/proc下,以進(jìn)程的 PID號(hào)為目錄名,它們是讀取進(jìn)程信息的接口。而self目錄則是讀取進(jìn)程本身的信息接口,是一個(gè)link。
以下是/proc目錄中進(jìn)程N(yùn)的信息
路徑 | 描述 |
---|---|
/proc/N | pid為N的進(jìn)程信息 |
/proc/N/cmdline | 進(jìn)程啟動(dòng)命令 |
/proc/N/cwd | 鏈接到進(jìn)程當(dāng)前工作目錄 |
/proc/N/environ | 進(jìn)程環(huán)境變量列表 |
/proc/N/exe | 鏈接到進(jìn)程的執(zhí)行命令文件 |
/proc/N/fd | 包含進(jìn)程相關(guān)的所有的文件描述符 |
/proc/N/maps | 與進(jìn)程相關(guān)的內(nèi)存映射信息 |
/proc/N/mem | 指代進(jìn)程持有的內(nèi)存,不可讀 |
/proc/N/root | 鏈接到進(jìn)程的根目錄 |
/proc/N/stat | 進(jìn)程的狀態(tài) |
/proc/N/statm | 進(jìn)程使用的內(nèi)存的狀態(tài) |
/proc/N/status | 進(jìn)程狀態(tài)信息,比stat/statm更具可讀性 |
/proc/self | 鏈接到當(dāng)前正在運(yùn)行的進(jìn)程 |
與 /proc下其它文件的“只讀”屬性不同的是,管理員可對(duì)/proc/sys子目錄中的許多文件內(nèi)容進(jìn)行修改以更改內(nèi)核的運(yùn)行特性,事先可以使用“l(fā)s -l”命令查看某文件是否“可寫入”。
標(biāo)簽: