<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一江春水向東流

    做一個有思想的人,期待與每一位熱愛思考的人交流,您的關(guān)注是對我最大的支持。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks

    理解 Proc 文件系統(tǒng)

    目錄:
    ?

    摘要:

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


    _________________ _________________ _________________

    ?

    /proc --- 一個虛擬文件系統(tǒng)

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


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

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

    ?

    加載 proc 文件系統(tǒng)

    如果系統(tǒng)中還沒有加載 proc 文件系統(tǒng),可以通過如下命令加載 proc 文件系統(tǒng):

    mount -t proc proc /proc

    上述命令將成功加載你的 proc 文件系統(tǒng)。更多細(xì)節(jié)請閱讀 mount 命令的 man page。

    ?

    察看 /proc 的文件

    /proc 的文件可以用于訪問有關(guān)內(nèi)核的狀態(tài)、計(jì)算機(jī)的屬性、正在運(yùn)行的進(jìn)程的狀態(tài)等信息。大部分 /proc 中的文件和目錄提供系統(tǒng)物理環(huán)境最新的信息。盡管 /proc 中的文件是虛擬的,但它們?nèi)钥梢允褂萌魏挝募庉嬈骰蛳?more', 'less'或 'cat'這樣的程序來查看。當(dāng)編輯程序試圖打開一個虛擬文件時,這個文件就通過內(nèi)核中的信息被憑空地 (on the fly) 創(chuàng)建了。這是一些我從我的系統(tǒng)中得到的一些有趣結(jié)果:

    $ 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
    

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

    ?

    得到有用的系統(tǒng)/內(nèi)核信息


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

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

    ?

    有關(guān)運(yùn)行中的進(jìn)程的信息

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

    $ ps -aef | grep mozilla
    root 32558 32425 8  22:53 pts/1  00:01:23  /usr/bin/mozilla
    
    上述命令顯示有一個正在運(yùn)行的 mozilla 進(jìn)程的 PID 是 32558。相對應(yīng)的,/proc 中應(yīng)該有一個名叫 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" 包含啟動進(jìn)程時調(diào)用的命令行。"envir" 進(jìn)程的環(huán)境變兩。 "status" 是進(jìn)程的狀態(tài)信息,包括啟動進(jìn)程的用戶的用戶ID (UID) 和組ID(GID) ,父進(jìn)程ID (PPID),還有進(jìn)程當(dāng)前的狀態(tài),比如"Sleelping"和"Running"。每個進(jìn)程的目錄都有幾個符號鏈接,"cwd"是指向進(jìn)程當(dāng)前工作目錄的符號鏈接,"exe"指向運(yùn)行的進(jìn)程的可執(zhí)行程序,"root"指向被這個進(jìn)程看作是根目錄的目錄 (通常是"/")。目錄"fd"包含指向進(jìn)程使用的文件描述符的鏈接。 "cpu"僅在運(yùn)行 SMP 內(nèi)核時出現(xiàn),里面是按 CPU 劃分的進(jìn)程時間。

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

    ?

    通過 /proc 與內(nèi)核交互


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

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

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

    $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
    這將在網(wǎng)絡(luò)上癮藏你的機(jī)器,因?yàn)樗豁憫?yīng) icmp_echo。主機(jī)將不會響應(yīng)其他主機(jī)發(fā)出的 ping 查詢。

    $ ping machinename.domainname.com
    no answer from machinename.domainname.com
    
    要改回缺省設(shè)置,只要
    $ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
    /proc/sys 下還有許多其它可以用于改變內(nèi)核屬性。讀者可以通過參考文獻(xiàn) [1], [2] 獲取更多信息。

    ?

    結(jié)論

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

    ?

    參考文獻(xiàn)


    posted on 2007-06-04 14:53 allic 閱讀(244) 評論(0)  編輯  收藏 所屬分類: linux/UNIX 應(yīng)用開發(fā)
    主站蜘蛛池模板: 久久久久久av无码免费看大片| 日韩国产精品亚洲а∨天堂免| 中国国产高清免费av片| 自拍偷自拍亚洲精品偷一| 中文字幕成人免费高清在线 | 亚洲精品视频在线观看视频| 亚洲精品9999久久久久无码| 97无码免费人妻超级碰碰碰碰 | 亚洲日韩AV一区二区三区四区| 国产高潮流白浆喷水免费A片 | 亚洲AV伊人久久青青草原| 亚洲视频一区二区三区| 免费观看无遮挡www的视频| 亚洲精品国产日韩无码AV永久免费网| 日韩欧美亚洲国产精品字幕久久久| 国产在线观看免费不卡| 亚洲综合激情六月婷婷在线观看| 在线日本高清免费不卡| 最新国产成人亚洲精品影院| 久久青草免费91观看| 亚洲欧洲日产国码二区首页| 妞干网免费观看视频| 午夜不卡AV免费| 亚洲AV日韩精品久久久久| 青青视频观看免费99| 国产精品观看在线亚洲人成网| 亚洲日韩国产精品乱| 老汉精品免费AV在线播放| 国产亚洲精品影视在线| 免费a级毛片18以上观看精品| 三上悠亚电影全集免费| 亚洲国产亚洲片在线观看播放| 午夜色a大片在线观看免费| a级毛片免费网站| 亚洲毛片在线免费观看| 国产在线19禁免费观看| 久久青草免费91观看| 在线亚洲v日韩v| 亚洲久本草在线中文字幕| 亚洲国产成人无码av在线播放| 在线a级毛片免费视频|