Proc令系統(tǒng)信息了如指掌
原創(chuàng)【51CTO原創(chuàng)】Proc是一個(gè)虛擬文件系統(tǒng),在Linux系統(tǒng)中它被掛載于/proc目錄之上。Proc有多個(gè)功能 ,這其中包括用戶(hù)可以通過(guò)它訪(fǎng)問(wèn)內(nèi)核信息或用于排錯(cuò),這其中一個(gè)非常有 用的功能,也是Linux變得更加特別的功能就是以文本流的形式來(lái)訪(fǎng)問(wèn)進(jìn)程信息。很Linux命令(比如 ps、toPpstree等)都需要使用這個(gè)文件系統(tǒng)的信息。
本文就是向用戶(hù)介紹一些訪(fǎng)問(wèn)這些信息的方法 。需要說(shuō)明的是,本文所述的內(nèi)容并不 一定適用所有內(nèi)核版本,有部分操作只適用于2.6內(nèi)核。
一、進(jìn)程信息
在/proc文件系統(tǒng)中,每一個(gè)進(jìn)程都有一個(gè)相應(yīng)的文件 。下面是/proc目錄下的一些重要文件 :
/proc/pid/cmdline 包含了用于開(kāi)始進(jìn)程的命令 ;
/proc/pid/cwd包含了當(dāng)前進(jìn)程工作目錄的一個(gè)鏈接 ;
/proc/pid/environ 包含了可用進(jìn)程環(huán)境變量的列表 ;
/proc/pid/exe 包含了正在進(jìn)程中運(yùn)行的程序鏈接;
/proc/pid/fd/ 這個(gè)目錄包含了進(jìn)程打開(kāi)的每一個(gè)文件的鏈接;
/proc/pid/mem 包含了進(jìn)程在內(nèi)存中的內(nèi)容;
/proc/pid/stat包含了進(jìn)程的狀態(tài)信息;
/proc/pid/statm 包含了進(jìn)程的內(nèi)存使用信息。
下面是一些獲取進(jìn)程信息的例子:
◆ 假設(shè)現(xiàn)在要查看是否所有的進(jìn)程都會(huì)做存儲(chǔ)器清除工作。在/proc/pid/stat文件中的每一 個(gè)進(jìn)程標(biāo)識(shí) (第8個(gè)屬性)提供了有關(guān)進(jìn)程的很多 “個(gè)人”信 息。這個(gè)信 息可以對(duì)每一個(gè) 進(jìn)程標(biāo)識(shí)進(jìn)行。
0x00000002 Process being created
0x00000004 Exiting
0x00000008 Dead
0x00000040 Process using
superuser privflage
0x00000200 P rocess dumping core
0x00000400 Prooess received some signal
0x00000800 Process allocating memory
0x00001000 Killed due to out-of--memory condition
筆者從/usr/src/linux/include/linux/sched.h 中提取了這些信息。
◆ /proc/pid/fd/ 目錄提供 了有關(guān)打開(kāi)文件的信息。要查看被進(jìn)程使用的輸入文件,使用以下命令 :
# ls –l /proc/pid/fd/0
◆ 查看被進(jìn)程使用socket,使用以下命令 :
#ls –l /proc/pid/fd|sed –n `/socket/{s/.*\[//;s/\]//p}`
有關(guān)這些socket的信息可以使用以下命令獲取 :
# netstat --ae
◆ 要將命令行參數(shù)傳遞給任意進(jìn)程,使用以下命令 :
~~cat /proc/pid/cmdline
◆ 要 獲取某一進(jìn)程父進(jìn)程的ID號(hào),使用以下命令:
#grep PPid/proc/pid/status
二、普通的系統(tǒng)信息
Proc包含了很多系統(tǒng)信息,這其中包括CPU負(fù)載、文件系統(tǒng)和網(wǎng)絡(luò)配置 。下面是一些通過(guò)Proc查看和更改系統(tǒng)的例子:
◆ 獲取可用系統(tǒng)內(nèi)存的空間 :
# grep Free /proc/meminfo
◆ 自從系統(tǒng)***一次啟動(dòng)后的系統(tǒng)統(tǒng)計(jì)可以從/proc/stat文件中獲取 :
#grep processes /proc/stat
◆ 獲知第 1、5和15分鐘系統(tǒng)負(fù)載的平均值 :
#awk `{print “1 min:\t” $1 “\n5 min:\t” $2 “\n15 min:\t” $3` /proc/loadavg
◆ /proc/partitions可用于獲取系統(tǒng)的分區(qū)信息 。
◆ /proc/net和/proc/sys/net可用于查看和更改重要的網(wǎng)絡(luò)信息。比如,禁用ping命令,可以以 root身份運(yùn)行以下命令 :
#echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all
如果要啟用IP轉(zhuǎn)發(fā)/IP偽裝,使用以下命令 :
#echo 1> /proc/sys/net/ipv4/ip_forward
◆ 已經(jīng)掛載的文件系統(tǒng)信息可以從/proc/mounts中檢索。
◆ 要改變正在使用的主機(jī)名 ,使用以下命令:
# echo www.abc.corn >/proc/sys/kernel/hostname
◆ 要獲取CPU信息,使用以下命令 :
# cat /proc/cpuinfo
◆ 要獲知swap空間的使用情況 ,使用以下命令:
# cat /proc/swaps
◆ 獲取系統(tǒng)的正常運(yùn)行時(shí)間:
#cat /proc/uptime
◆ 列出由NFS共享的文件系統(tǒng):
# cat /proc/fs/nfsd/exports
三、相關(guān)內(nèi)核的信息
這是一個(gè)非常寬泛的主題,這里只介紹其中一小部分內(nèi)容:
◆ 從正在運(yùn)行的內(nèi)核中獲知內(nèi)核的版本:
#cat /proc/version
◆ /proc/kmsg文件被作為內(nèi)核日志信息源,它可以被作為一個(gè)系統(tǒng)信息調(diào)用的接口使用。
◆ /proc/kcore文件提供了以?xún)?nèi)核文件格式形式訪(fǎng)問(wèn)系統(tǒng)物理內(nèi)存,并且可以被gdb用于檢查任意內(nèi)核數(shù)據(jù)結(jié)構(gòu)的當(dāng)前狀態(tài)。如果裝了源碼,那么可以通過(guò)查看/usr/src/linux/Documentation/filesystems/proc.txt文件來(lái)獲取更多的信息 。
從中可以看出來(lái),Proc是一個(gè)非常不錯(cuò)的獲取系統(tǒng)信息渠道。如果利用得好,則它對(duì)Linux系統(tǒng)的維護(hù)和管理能提供非常大的幫助。
【編輯推薦】