proc文件系統是一個(gè)偽文件系統

發(fā)布時(shí)間:2009-12-14 12:07    發(fā)布者:linux_Ultra
關(guān)鍵詞: proc , 文件系統
proc文件系統是一個(gè)偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪(fǎng)問(wèn)系統內核數據的操作提供接口。用戶(hù)和應用程序可以通過(guò)proc得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進(jìn)程,是動(dòng)態(tài)改變的,所以用戶(hù)或應用程序讀取proc文件時(shí),proc文件系統是動(dòng)態(tài)從系統內核讀出所需信息并提交的。它的目錄結構如下:

目錄名稱(chēng)                       目錄內容
apm                               高級電源管理信息
cmdline                          內核命令行
Cpuinfo                          關(guān)于Cpu信息
Devices                          可以用到的設備(塊設備/字符設備)
Dma                               使用的DMA通道
Filesystems                支持的文件系統
Interrupts                  中斷的使用
Ioports                          I/O端口的使用
Kcore                              內核核心印象
Kmsg                             內核消息
Ksyms                           內核符號表
Loadavg                          負載均衡
Locks                           內核鎖
Meminfo                          內存信息
Misc                             雜項
Modules                          加載模塊列表
Mounts                            加載的文件系統
Partitions                  系統識別的分區表
Rtc                               實(shí)時(shí)時(shí)鐘
Slabinfo                       Slab池信息
Stat                             全面統計狀態(tài)表
Swaps                             對換空間的利用情況
Version                          內核版本
Uptime                            系統正常運行時(shí)間   

并不是所有這些目錄在你的系統中都有,這取決于你的內核配置和裝載的模塊。另外,在/proc下還有三個(gè)很重要的目錄:net,scsi和 sys。Sys目錄是可寫(xiě)的,可以通過(guò)它來(lái)訪(fǎng)問(wèn)或修改內核的參數(見(jiàn)下一部分),而net和scsi則依賴(lài)于內核配置。例如,如果系統不支持scsi,則 scsi目錄不存在。   

除了以上介紹的這些,還有的是一些以數字命名的目錄,它們是進(jìn)程目錄。系統中當前運行的每一個(gè)進(jìn)程都有對應的一個(gè)目錄在/proc下,以進(jìn)程的 PID號為目錄名,它們是讀取進(jìn)程信息的接口。而self目錄則是讀取進(jìn)程本身的信息接口,是一個(gè)link。Proc文件系統的名字就是由之而起。進(jìn)程目錄的結構如下:   

目錄名稱(chēng)                          目錄內容
Cmdline                         命令行參數
Environ                         環(huán)境變量值
Fd                                   一個(gè)包含所有文件描述符的目錄
Mem                               進(jìn)程的內存被利用情況
Stat                             進(jìn)程狀態(tài)
Status                            進(jìn)程當前狀態(tài),以可讀的方式顯示出來(lái)
Cwd                               當前工作目錄的鏈接
Exe                               指向該進(jìn)程的執行命令文件
Maps                             內存映象
Statm                              進(jìn)程內存狀態(tài)信息
Root                             鏈接此進(jìn)程的root目錄

用戶(hù)如果要查看系統信息,可以用cat命令。例如:

# cat /proc/interrupts
CPU0
0: 8728810 XT-PIC timer
1: 895 XT-PIC keyboard
2: 0 XT-PIC cascade
3: 531695 XT-PIC aha152x
4: 2014133 XT-PIC serial
5: 44401 XT-PIC pcnet_cs
8: 2 XT-PIC rtc
11: 8 XT-PIC i82365
12: 182918 XT-PIC Mouse
13: 1 XT-PIC fpu PS/2
14: 1232265 XT-PIC ide0
15: 7 XT-PIC ide1
NMI: 0   

用戶(hù)還可以實(shí)現修改內核參數。在/proc文件系統中有一個(gè)有趣的目錄:/proc/sys。它不僅提供了內核信息,而且可以通過(guò)它修改內核參數,來(lái)優(yōu)化你的系統。但是你必須很小心,因為可能會(huì )造成系統崩潰。最好是先找一臺無(wú)關(guān)緊要的機子,調試成功后再應用到你的系統上。

要改變內核的參數,只要用vi編輯或echo參數重定向到文件中即可。下面有一個(gè)例子:   

# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192   

如果你優(yōu)化了參數,則可以把它們寫(xiě)成添加到文件rc.local中,使它在系統啟動(dòng)時(shí)自動(dòng)完成修改。

/proc文件系統中網(wǎng)絡(luò )參數
在/proc/sys/net/ipv4/目錄下,包含的是和tcp/ip協(xié)議相關(guān)的各種參數,下面我們就對這些網(wǎng)絡(luò )參數加以詳細的說(shuō)明。

ip_forward  參數類(lèi)型:BOOLEAN
0 - 關(guān)閉(默認值)
not 0 - 打開(kāi)ip轉發(fā)

在網(wǎng)絡(luò )本地接口之間轉發(fā)數據報。該參數非常特殊,對該參數的修改將導致其它所有相關(guān)配置參數恢復其默認值(對于主機參閱RFC1122,對于路由器參見(jiàn)RFC1812)

ip_default_ttl 參數類(lèi)型:INTEGER
默認值為 64 。表示IP數據報的Time To Live值。

ip_no_pmtu_disc 參數類(lèi)型:BOOLEAN
關(guān)閉路徑MTU探測,默認值為FALSE

ipfrag_high_thresh  參數類(lèi)型:整型
用來(lái)組裝分段的IP包的最大內存量。當ipfrag_high_thresh數量的內存被分配來(lái)用來(lái)組裝IP包,則IP分片處理器將丟棄數據報直到ipfrag_low_thresh數量的內存被用來(lái)組裝IP包。

ipfrag_low_thresh 參數類(lèi)型:整型
參見(jiàn)ipfrag_high_thresh。

ipfrag_time 參數類(lèi)型:整型
保存一個(gè)IP分片在內存中的時(shí)間。

inet_peer_threshold  參數類(lèi)型:整型
INET對端存儲器某個(gè)合適值,當超過(guò)該閥值條目將被丟棄。該閥值同樣決定生存時(shí)間以及廢物收集通過(guò)的時(shí)間間隔。條目越多,存活期越低,GC 間隔越短

inet_peer_minttl  參數類(lèi)型:整型
條目的最低存活期。在重組端必須要有足夠的碎片(fragment)存活期。這個(gè)最低存活期必須保證緩沖池容積是否少于 inet_peer_threshold。該值以 jiffies為單位測量。

inet_peer_maxttl  參數類(lèi)型:整型
條目的最大存活期。在此期限到達之后,如果緩沖池沒(méi)有耗盡壓力的話(huà)(例如,緩沖池中的條目數目非常少),不使用的條目將會(huì )超時(shí)。該值以 jiffies為單位測量。

inet_peer_gc_mintime  參數類(lèi)型:整型
廢物收集(GC)通過(guò)的最短間隔。這個(gè)間隔會(huì )影響到緩沖池中內存的高壓力。 該值以 jiffies為單位測量。

inet_peer_gc_maxtime  參數類(lèi)型:整型
廢物收集(GC)通過(guò)的最大間隔,這個(gè)間隔會(huì )影響到緩沖池中內存的低壓力。 該值以 jiffies為單位測量。

tcp_syn_retries  參數類(lèi)型:整型
對于一個(gè)新建連接,內核要發(fā)送多少個(gè) SYN 連接請求才決定放棄。不應該大于255,默認值是5,對應于180秒左右。

tcp_synack_retries  參數類(lèi)型:整型
對于遠端的連接請求SYN,內核會(huì )發(fā)送SYN + ACK數據報,以確認收到上一個(gè) SYN連接請求包。這是所謂的三次握手( threeway handshake)機制的第二個(gè)步驟。這里決定內核在放棄連接之前所送出的 SYN+ACK 數目。

tcp_keepalive_time  參數類(lèi)型:整型
當keepalive打開(kāi)的情況下,TCP發(fā)送keepalive消息的頻率,默認值是2個(gè)小時(shí)。

tcp_keepalive_probes 參數類(lèi)型:整型
TCP發(fā)送keepalive探測以確定該連接已經(jīng)斷開(kāi)的次數,默認值是9。

tcp_keepalive_interval  參數類(lèi)型:整型
探測消息發(fā)送的頻率,乘以tcp_keepalive_probes就得到對于從開(kāi)始探測以來(lái)沒(méi)有響應的連接殺除的時(shí)間。默認值為75秒,也就是沒(méi)有活動(dòng)的連接將在大約11分鐘以后將被丟棄。

tcp_retries1  參數類(lèi)型:整型
當出現可疑情況而必須向網(wǎng)絡(luò )層報告這個(gè)可疑狀況之前,需要進(jìn)行多少次重試。最低的 RFC 數值是 3 ,這也是默認值,根據RTO的值大約在3秒 - 8分鐘之間。

tcp_retries2  參數類(lèi)型:整型
在丟棄激活的TCP連接之前,需要進(jìn)行多少次重試。RFC1122規定,該值必須大于100秒。默認值為15,根據RTO的值來(lái)決定,相當于13-30分鐘,

tcp_orphan_retries  參數類(lèi)型:整型
在近端丟棄TCP連接之前,要進(jìn)行多少次重試。默認值是 7 個(gè),相當于 50秒 - 16分鐘,視 RTO 而定。如果您的系統是負載很大的web服務(wù)器,那么也許需要降低該值,這類(lèi) sockets 可能會(huì )耗費大量的資源。另外參的考 tcp_max_orphans 。

tcp_fin_timeout  參數類(lèi)型:整型
對于本端斷開(kāi)的socket連接,TCP保持在FIN-WAIT-2狀態(tài)的時(shí)間。對方可能會(huì )斷開(kāi)連接或一直不結束連接或不可預料的進(jìn)程死亡。默認值為 60 秒。過(guò)去在2.2版本的內核中是 180 秒。您可以設置該值,但需要注意,如果您的機器為負載很重的web服務(wù)器,您可能要冒內存被大量無(wú)效數據報填滿(mǎn)的風(fēng)險,FIN-WAIT-2 sockets 的危險性低于 FIN-WAIT-1 ,因為它們最多只吃 1.5K 的內存,但是它們存在時(shí)間更長(cháng)。另外參考 tcp_max_orphans。   

tcp_max_tw_buckets  參數類(lèi)型:整型
系統在同時(shí)所處理的最大timewait sockets 數目。如果超過(guò)此數的話(huà),time-wait socket 會(huì )被立即砍除并且顯示警告信息。之所以要設定這個(gè)限制,純粹為了抵御那些簡(jiǎn)單的 DoS 攻擊,千萬(wàn)不要人為的降低這個(gè)限制,不過(guò),如果網(wǎng)絡(luò )條件需要比默認值更多,則可以提高它(或許還要增加內存)。   

tcp_tw_recycle  參數類(lèi)型:布爾
打開(kāi)快速 TIME-WAIT sockets 回收。默認值是1。除非得到技術(shù)專(zhuān)家的建議或要求,請不要隨意修改這個(gè)值。

tcp_max_orphans  參數類(lèi)型:整型
系統所能處理不屬于任何進(jìn)程的TCP sockets最大數量。假如超過(guò)這個(gè)數量,那么不屬于任何進(jìn)程的連接會(huì )被立即reset,并同時(shí)顯示警告信息。之所以要設定這個(gè)限制,純粹為了抵御那些簡(jiǎn)單的 DoS 攻擊,千萬(wàn)不要依賴(lài)這個(gè)或是人為的降低這個(gè)限制

tcp_abort_on_overflow  參數類(lèi)型:布爾
當守護進(jìn)程太忙而不能接受新的連接,就象對方發(fā)送reset消息,默認值是false。這意味著(zhù)當溢出的原因是因為一個(gè)偶然的猝發(fā),那么連接將恢復狀態(tài)。只有在你確信守護進(jìn)程真的不能完成連接請求時(shí)才打開(kāi)該選項,該選項會(huì )影響客戶(hù)的使用。

tcp_syncookies  參數類(lèi)型:整型
只有在內核編譯時(shí)選擇了CONFIG_SYNCOOKIES時(shí)才會(huì )發(fā)生作用。當出現syn等候隊列出現溢出時(shí)象對方發(fā)送syncookies。目的是為了防止syn flood攻擊。默認值是false。

注意:該選項千萬(wàn)不能用于那些沒(méi)有收到攻擊的高負載服務(wù)器,如果在日志中出現synflood消息,但是調查發(fā)現沒(méi)有收到synflood攻擊,而是合法用戶(hù)的連接負載過(guò)高的原因,你應該調整其它參數來(lái)提高服務(wù)器性能。參考: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.

syncookie嚴重的違背TCP協(xié)議,不允許使用TCP擴展,可能對某些服務(wù)導致嚴重的性能影響(如SMTP轉發(fā))。

tcp_stdurg  參數類(lèi)型:整型
使用 TCP urg pointer 字段中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋?zhuān)虼巳绻?Linux 打開(kāi)它,或會(huì )導致不能和它們正確溝通。默認值為為:FALSE

tcp_max_syn_backlog  參數類(lèi)型:整型
對于那些依然還未獲得客戶(hù)端確認的連接請求,需要保存在隊列中最大數目。對于超過(guò) 128Mb 內存的系統,默認值是 1024 ,低于 128Mb 的則為 128。如果服務(wù)器經(jīng)常出現過(guò)載,可以嘗試增加這個(gè)數字。警告!假如您將此值設為大于 1024,最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE ,以保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog ,并且編進(jìn)核心之內。

tcp_window_scaling  參數類(lèi)型:布爾
正常來(lái)說(shuō),TCP/IP 可以接受最大到65535字節的 windows。對于寬帶網(wǎng)絡(luò ),該值可能是不夠的,通過(guò)調整該參數有助于提高寬帶服務(wù)器性能。

tcp_timestamps  參數類(lèi)型:布爾
Timestamps 用在其它一些東西中,可以防范那些偽造的 sequence 號碼。一條1G的寬帶線(xiàn)路或許會(huì )重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由于上次產(chǎn)生的)。Timestamp 會(huì )讓它知道這是個(gè) '舊封包'。

tcp_sack  參數類(lèi)型:布爾
使用 Selective ACK,它可以用來(lái)查找特定的遺失的數據報--- 因此有助于快速恢復狀態(tài)。

tcp_fack  參數類(lèi)型:布爾
打開(kāi)FACK擁塞避免和快速重傳功能。

tcp_dsack  參數類(lèi)型:布爾
允許TCP發(fā)送"兩個(gè)完全相同"的SACK。

tcp_ecn  參數類(lèi)型:布爾
打開(kāi)TCP的直接擁塞通告功能。

tcp_reordering  參數類(lèi)型:整型
TCP流中重排序的數據報最大數量默認值是 3 。

tcp_retrans_collapse  參數類(lèi)型:布爾
對于某些有bug的打印機提供針對其bug的兼容性。

tcp_wmem - 三個(gè)整數的向量: min, default, max
min:為T(mén)CP socket預留用于發(fā)送緩沖的內存最小值。每個(gè)tcp socket都可以在建議以后都可以使用它。默認值為4K。

default:為T(mén)CP socket預留用于發(fā)送緩沖的內存數量,默認情況下該值會(huì )影響其它協(xié)議使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默認值為16K。

max: 用于TCP socket發(fā)送緩沖的內存最大值。該值不會(huì )影響n(yōu)et.core.wmem_max,今天選擇參數SO_SNDBUF則不受該值影響。默認值為128K。

tcp_rmem - 三個(gè)整數的向量: min, default, max
min:為T(mén)CP socket預留用于接收緩沖的內存數量,即使在內存出現緊張情況下tcp socket都至少會(huì )有這么多數量的內存用于接收緩沖,默認值為8K。

default:為T(mén)CP socket預留用于接收緩沖的內存數量,默認情況下該值影響其它協(xié)議使用的 net.core.wmem_default 值。該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win:0是默認值情況下,tcp 窗口大小為65535。

max:用于TCP socket接收緩沖的內存最大值。該值不會(huì )影響 net.core.wmem_max,今天選擇參數 SO_SNDBUF則不受該值影響。默認值為 128K。默認值為87380*2 bytes。

tcp_mem - 三個(gè)整數的向量: low, pressure, high
low:當TCP使用了低于該值的內存頁(yè)面數時(shí),TCP不會(huì )考慮釋放內存。

pressure:當TCP使用了超過(guò)該值的內存頁(yè)面數量時(shí),TCP試圖穩定其內存使用,進(jìn)入pressure模式,當內存消耗低于low值時(shí)則退出pressure狀態(tài)。

high:允許所有tcp sockets用于排隊緩沖數據報的頁(yè)面量。

一般情況下這些值是在系統啟動(dòng)時(shí)根據系統內存數量計算得到的。

tcp_app_win - 整數

保留max(window/2^tcp_app_win, mss)數量的窗口由于應用緩沖。當為0時(shí)表示不需要緩沖。默認值是31。

tcp_adv_win_scale - 整數
計算緩沖開(kāi)銷(xiāo)bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0),默認值為2。

ip_local_port_range - 兩個(gè)整數
定于TCP和UDP使用的本地端口范圍,第一個(gè)數是開(kāi)始,第二個(gè)數是最后端口號,默認值依賴(lài)于系統中可用的內存數:
> 128Mb 32768-61000
< 128Mb 1024-4999 or even less.
該值決定了活動(dòng)連接的數量,也就是系統可以并發(fā)的連接數

icmp_echo_ignore_all - 布爾類(lèi)型
icmp_echo_ignore_broadcasts - 布爾類(lèi)型
如果任何一個(gè)設置為true(>0)則系統將忽略所有發(fā)送給自己的ICMP ECHO請求或那些廣播地址的請求。

icmp_destunreach_rate - 整數
icmp_paramprob_rate - 整數
icmp_timeexceed_rate - 整數
icmp_echoreply_rate - 整數(not enabled per default)
限制發(fā)向特定目標的ICMP數據報的最大速率。0表示沒(méi)有任何限制,否則表示jiffies數據單位中允許發(fā)送的個(gè)數。

icmp_ignore_bogus_error_responses - 布爾類(lèi)型
某些路由器違背RFC1122標準,其對廣播幀發(fā)送偽造的響應來(lái)應答。這種違背行為通常會(huì )被以告警的方式記錄在系統日志中。如果該選項設置為T(mén)rue,內核不會(huì )記錄這種警告信息。默認值為False。

(1) Jiffie: 內核使用的內部時(shí)間單位,在i386系統上大小為1/100s,在A(yíng)lpha中為1/1024S。在/usr/include/asm/param.h中的HZ定義有特定系統的值。

conf/interface/*:
conf/all/*是特定的,用來(lái)修改所有接口的設置,is special and changes the settings for all interfaces.
Change special settings per interface.

log_martians - 布爾類(lèi)型
記錄帶有不允許的地址的數據報到內核日志中。

accept_redirects - 布爾類(lèi)型
收發(fā)接收ICMP重定向消息。對于主機來(lái)說(shuō)默認為T(mén)rue,對于用作路由器時(shí)默認值為False。

forwarding - 布爾類(lèi)型
在該接口打開(kāi)轉發(fā)功能

mc_forwarding - 布爾類(lèi)型
是否進(jìn)行多播路由。只有內核編譯有CONFIG_MROUTE并且有路由服務(wù)程序在運行該參數才有效。

proxy_arp - 布爾類(lèi)型
打開(kāi)proxy arp功能。

shared_media - 布爾類(lèi)型
發(fā)送(路由器)或接收(主機) RFC1620 共享媒體重定向。覆蓋ip_secure_redirects的值。默認為T(mén)rue。

secure_redirects - 布爾類(lèi)型
僅僅接收發(fā)給默認網(wǎng)關(guān)列表中網(wǎng)關(guān)的ICMP重定向消息,默認值是TRUE。

send_redirects - 布爾類(lèi)型
如果是router,發(fā)送重定向消息,默認值是TRUE

bootp_relay - 布爾類(lèi)型
接收源地址為0.b.c.d,目的地址不是本機的數據報。用來(lái)支持BOOTP轉發(fā)服務(wù)進(jìn)程,該進(jìn)程將捕獲并轉發(fā)該包。默認為False,目前還沒(méi)有實(shí)現。

accept_source_route - 布爾類(lèi)型
接收帶有SRR選項的數據報。對于主機來(lái)說(shuō)默認為False,對于用作路由器時(shí)默認值為T(mén)rue。

rp_filter  參數類(lèi)型
1 - 通過(guò)反向路徑回溯進(jìn)行源地址驗證(在RFC1812中定義)。對于單穴主機和stub網(wǎng)絡(luò )路由器推薦使用該選項。
0 - 不通過(guò)反向路徑回溯進(jìn)行源地址驗證。
默認值為0。某些發(fā)布在啟動(dòng)時(shí)自動(dòng)將其打開(kāi)。
本文地址:http://selenalain.com/thread-6517-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
linux_Ultra 發(fā)表于 2009-12-14 12:08:14
理解 Proc 文件系統

--------------------------------------------------------------------------------

作者:王旭 翻譯 2004-10-05 18:25:55 來(lái)自:linuxfocus


目錄:
/proc --- 一個(gè)虛擬文件系統
加載 proc 文件系統
察看 /proc 的文件
得到有用的系統/內核信息
有關(guān)運行中的進(jìn)程的信息
通過(guò) /proc 與內核交互
結論
參考文獻

  摘要:


Linux 內核提供了一種通過(guò) /proc 文件系統,在運行時(shí)訪(fǎng)問(wèn)內核內部數據結構、改變內核設置的機制。盡管在各種硬件平臺上的 Linux 系統的 /proc 文件系統的基本概念都是相同的,但本文只討論基于 intel x86 架構的 Linux /proc 文件系統。



_________________ _________________ _________________

  
/proc --- 一個(gè)虛擬文件系統
/proc 文件系統是一種內核和內核模塊用來(lái)向進(jìn)程 (process) 發(fā)送信息的機制 (所以叫做 /proc)。這個(gè)偽文件系統讓你可以和內核內部數據結構進(jìn)行交互,獲取 有關(guān)進(jìn)程的有用信息,在運行中 (on the fly) 改變設置 (通過(guò)改變內核參數)。 與其他文件系統不同,/proc 存在于內存之中而不是硬盤(pán)上。如果你察看文件 /proc/mounts (和 mount 命令一樣列出所有已經(jīng)加載的文件系統),你會(huì )看到其中 一行是這樣的:



grep proc /proc/mounts
/proc /proc proc rw 0 0

/proc 由內核控制,沒(méi)有承載 /proc 的設備。因為 /proc 主要存放由內核控制的狀態(tài)信息,所以大部分這些信息的邏輯位置位于內核控制的內存。對 /proc 進(jìn)行一次 'ls -l' 可以看到大部分文件都是 0 字節大的;不過(guò)察看這些文件的時(shí)候,確實(shí)可以看到一些信息。這怎么可能?這是因為 /proc 文件系統和其他常規的文件系統一樣把自己注冊到虛擬文件系統層 (VFS) 了。然而,直到當 VFS 調用它,請求文件、目錄的 i-node 的時(shí)候,/proc 文件系統才根據內核中的信息建立相應的文件和目錄。

  
加載 proc 文件系統
如果系統中還沒(méi)有加載 proc 文件系統,可以通過(guò)如下命令加載 proc 文件系統:


mount -t proc proc /proc

上述命令將成功加載你的 proc 文件系統。更多細節請閱讀 mount 命令的 man page。

  
察看 /proc 的文件
/proc 的文件可以用于訪(fǎng)問(wèn)有關(guān)內核的狀態(tài)、計算機的屬性、正在運行的進(jìn)程的狀態(tài)等信息。大部分 /proc 中的文件和目錄提供系統物理環(huán)境最新的信息。盡管 /proc 中的文件是虛擬的,但它們仍可以使用任何文件編輯器或像'more', 'less'或 'cat'這樣的程序來(lái)查看。當編輯程序試圖打開(kāi)一個(gè)虛擬文件時(shí),這個(gè)文件就通過(guò)內核中的信息被憑空地 (on the fly) 創(chuàng )建了。這是一些我從我的系統中得到的一些有趣結果:

$ ls -l /proc/cpuinfo
-r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo

$ file /proc/cpuinfo
/proc/cpuinfo: empty

$ cat /proc/cpuinfo

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1998.85

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1992.29


這是一個(gè)從雙 CPU 的系統中得到的結果,上述大部分的信息十分清楚地給出了這個(gè)系統的有用的硬件信息。有些 /proc 的文件是經(jīng)過(guò)編碼的,不同的工具可以被用來(lái)解釋這些編碼過(guò)的信息并輸出成可讀的形式。這樣的工具包括:'top', 'ps', 'apm' 等。


  
得到有用的系統/內核信息

proc 文件系統可以被用于收集有用的關(guān)于系統和運行中的內核的信息。下面是一些重要的文件:

/proc/cpuinfo - CPU 的信息 (型號, 家族, 緩存大小等)
/proc/meminfo - 物理內存、交換空間等的信息
/proc/mounts - 已加載的文件系統的列表
/proc/devices - 可用設備的列表
/proc/filesystems - 被支持的文件系統
/proc/modules - 已加載的模塊
/proc/version - 內核版本
/proc/cmdline - 系統啟動(dòng)時(shí)輸入的內核命令行參數
proc 中的文件遠不止上面列出的這么多。想要進(jìn)一步了解的讀者可以對 /proc 的每一個(gè)文件都'more'一下或讀參考文獻[1]獲取更多的有關(guān) /proc 目錄中的文件的信息。我建議使用'more'而不是'cat',除非你知道這個(gè)文件很小,因為有些文件 (比如 kcore) 可能會(huì )非常長(cháng)。

  
有關(guān)運行中的進(jìn)程的信息
/proc 文件系統可以用于獲取運行中的進(jìn)程的信息。在 /proc 中有一些編號的子目錄。每個(gè)編號的目錄對應一個(gè)進(jìn)程 id (PID)。這樣,每一個(gè)運行中的進(jìn)程 /proc 中都有一個(gè)用它的 PID 命名的目錄。這些子目錄中包含可以提供有關(guān)進(jìn)程的狀態(tài)和環(huán)境的重要細節信息的文件。讓我們試著(zhù)查找一個(gè)運行中的進(jìn)程。

$ ps -aef | grep mozilla
root 32558 32425 8  22:53 pts/1  00:01:23  /usr/bin/mozilla

上述命令顯示有一個(gè)正在運行的 mozilla 進(jìn)程的 PID 是 32558。相對應的,/proc 中應該有一個(gè)名叫 32558 的目錄


$ ls -l /proc/32558
total 0
-r--r--r--    1 root  root            0 Dec 25 22:59 cmdline
-r--r--r--    1 root  root            0 Dec 25 22:59 cpu
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 cwd -> /proc/
-r--------    1 root  root            0 Dec 25 22:59 environ
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------    2 root  root            0 Dec 25 22:59 fd/
-r--r--r--    1 root  root            0 Dec 25 22:59 maps
-rw-------    1 root  root            0 Dec 25 22:59 mem
-r--r--r--    1 root  root            0 Dec 25 22:59 mounts
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 root -> //
-r--r--r--    1 root  root            0 Dec 25 22:59 stat
-r--r--r--    1 root  root            0 Dec 25 22:59 statm
-r--r--r--    1 root  root            0 Dec 25 22:59 status

文件 "cmdline" 包含啟動(dòng)進(jìn)程時(shí)調用的命令行。"envir" 進(jìn)程的環(huán)境變兩。 "status" 是進(jìn)程的狀態(tài)信息,包括啟動(dòng)進(jìn)程的用戶(hù)的用戶(hù)ID (UID) 和組ID(GID) ,父進(jìn)程ID (PPID),還有進(jìn)程當前的狀態(tài),比如"Sleelping"和"Running"。每個(gè)進(jìn)程的目錄都有幾個(gè)符號鏈接,"cwd"是指向進(jìn)程當前工作目錄的符號鏈接,"exe"指向運行的進(jìn)程的可執行程序,"root"指向被這個(gè)進(jìn)程看作是根目錄的目錄 (通常是"/")。目錄"fd"包含指向進(jìn)程使用的文件描述符的鏈接。 "cpu"僅在運行 SMP 內核時(shí)出現,里面是按 CPU 劃分的進(jìn)程時(shí)間。

/proc/self 是一個(gè)有趣的子目錄,它使得程序可以方便地使用 /proc 查找本進(jìn)程地信息。/proc/self 是一個(gè)鏈接到 /proc 中訪(fǎng)問(wèn) /proc 的進(jìn)程所對應的 PID 的目錄的符號鏈接。


  
通過(guò) /proc 與內核交互

上面討論的大部分 /proc 的文件是只讀的。而實(shí)際上 /proc 文件系統通過(guò) /proc 中可讀寫(xiě)的文件提供了對內核的交互機制。寫(xiě)這些文件可以改變內核的狀態(tài),因而要慎重改動(dòng)這些文件。/proc/sys 目錄存放所有可讀寫(xiě)的文件的目錄,可以被用于改變內核行為。

/proc/sys/kernel - 這個(gè)目錄包含反通用內核行為的信息。 /proc/sys/kernel/{domainname, hostname} 存放著(zhù)機器/網(wǎng)絡(luò )的域名和主機名。這些文件可以用于修改這些名字。



$ hostname
machinename.domainname.com

$ cat /proc/sys/kernel/domainname
domainname.com

$ cat /proc/sys/kernel/hostname
machinename

$ echo "new-machinename"  > /proc/sys/kernel/hostname

$ hostname
new-machinename.domainname.com



這樣,通過(guò)修改 /proc 文件系統中的文件,我們可以修改主機名。很多其他可配置的文件存在于 /proc/sys/kernel/。這里不可能列出所有這些文件,讀者可以自己去這個(gè)目錄查看以得到更多細節信息。
另一個(gè)可配置的目錄是 /proc/sys/net。這個(gè)目錄中的文件可以用于修改機器/網(wǎng)絡(luò )的網(wǎng)絡(luò )屬性。比如,簡(jiǎn)單修改一個(gè)文件,你可以在網(wǎng)絡(luò )上癮藏匿的計算機。


$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

這將在網(wǎng)絡(luò )上癮藏你的機器,因為它不響應 icmp_echo。主機將不會(huì )響應其他主機發(fā)出的 ping 查詢(xún)。



$ ping machinename.domainname.com
no answer from machinename.domainname.com

要改回缺省設置,只要

$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/proc/sys 下還有許多其它可以用于改變內核屬性。讀者可以通過(guò)參考文獻 [1], [2] 獲取更多信息。

  
結論
/proc 文件系統提供了一個(gè)基于文件的 Linux 內部接口。它可以用于確定系統的各種不同設備和進(jìn)程的狀態(tài)。對他們進(jìn)行配置。因而,理解和應用有關(guān)這個(gè)文件系統的知識是理解你的 Linux 系統的關(guān)鍵。



  
參考文獻



[1] 有關(guān)Linux proc 文件系統的文檔位于: /usr/src/linux/Documentation/filesystems/proc.txt

[2] RedHat Guide: The /proc File System: http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/ch-proc.html
geyingzhen 發(fā)表于 2009-12-15 15:41:56
頂!
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页