
Linux內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個偽文件系統(即虛擬文件系統),它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。
用戶和應用程序可以通過/proc得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取/proc文件系統時,proc文件系統是動態從系統內核讀出所需信息并提交的。
【資料圖】
我們查看內核版本號、加載的模塊、CPU和內存使用等信息,甚至修改路由轉發都是通過/proc文件系統進行的,下面列出的這些文件或子文件夾,并不是都是在你的系統中存在,這取決于你的內核配置和裝載的模塊。另外,在/proc下還有三個很重要的目錄:net,scsi和sys。sys目錄是可寫的,可以通過它來訪問或修改內核的參數,而net和scsi則依賴于內核配置。例如,如果系統不支持scsi,則scsi 目錄不存在。
目的 | 命令 |
---|---|
查看系統內核符號表,用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/buddyinfo | 每個內存區中的每個order有多少塊可用,和內存碎片問題有關 |
/proc/cmdline | 啟動時傳遞給kernel的參數信息 |
/proc/cpuinfo | cpu的信息 |
/proc/crypto | 內核使用的所有已安裝的加密密碼及細節 |
/proc/devices | 已經加載的設備并分類 |
/proc/dma | 已注冊使用的ISA DMA頻道列表 |
/proc/execdomains | Linux內核當前支持的execution domains |
/proc/fb 幀緩沖設備列表, | 包括數量和控制它的驅動 |
/proc/filesystems | 內核當前支持的文件系統類型 |
/proc/interrupts | x86架構中的每個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/meminfo | RAM使用的相關信息 |
/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/version | Linux內核版本和gcc版本 |
/proc/bus | 系統總線(Bus)信息,例如pci/usb等 |
/proc/driver | 驅動信息 |
/proc/fs | 文件系統信息 |
/proc/ide | ide設備信息 |
/proc/irq | 中斷請求設備信息 |
/proc/net | 網卡設備信息 |
/proc/scsi | scsi設備信息 |
/proc/tty | tty設備信息 |
/proc/net/dev | 顯示網絡適配器及統計信息 |
/proc/vmstat | 虛擬內存統計信息 |
/proc/vmcore | 內核panic時的內存映像 |
/proc/diskstats | 取得磁盤信息 |
/proc/schedstat | kernel調度器的統計信息 |
/proc/zoneinfo | 顯示內存空間的統計信息,對分析虛擬內存行為很有用 |
除了以上介紹的這些,還有的是一些以數字命名的目錄,它們是進程目錄。系統中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的 PID號為目錄名,它們是讀取進程信息的接口。而self目錄則是讀取進程本身的信息接口,是一個link。
以下是/proc目錄中進程N的信息
路徑 | 描述 |
---|---|
/proc/N | pid為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下其它文件的“只讀”屬性不同的是,管理員可對/proc/sys子目錄中的許多文件內容進行修改以更改內核的運行特性,事先可以使用“ls -l”命令查看某文件是否“可寫入”。
標簽: