91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Linux系統中的虛擬文件系統

發布時間:2021-09-26 15:36:31 來源:億速云 閱讀:137 作者:iii 欄目:系統運維

這篇文章主要介紹“如何理解Linux系統中的虛擬文件系統”,在日常操作中,相信很多人在如何理解Linux系統中的虛擬文件系統問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解Linux系統中的虛擬文件系統”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

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

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

代碼如下:


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


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

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

代碼如下:


mount -t proc proc /proc


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

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

代碼如下:


$ 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 的系統中得到的結果,上述大部分的信息十分清楚地給出了這個系 統的有用的硬件信息。有些 /proc 的文件是經過編碼的,不同的工具可以被用來解釋 這些編碼過的信息并輸出成可讀的形式。這樣的工具包括:'top', 'ps', 'apm' 等。
 

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

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

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

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

代碼如下:


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


上述命令顯示有一個正在運行的 mozilla 進程的 PID 是 32558。相對應的,/proc 中應該有一個名叫 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" 包含啟動進程時調用的命令行。"envir" 進程的環境變兩。 "status" 是進程的狀態信息,包括啟動進程的用戶的用戶ID (UID) 和組ID(GID) , 父進程ID (PPID),還有進程當前的狀態,比如"Sleelping"和"Running"。 每個進程的目錄都有幾個符號鏈接,"cwd"是指向進程當前工作目錄的符號 鏈接,"exe"指向運行的進程的可執行程序,"root"指向被這個進程看作是 根目錄的目錄 (通常是"/")。目錄"fd"包含指向進程使用的文件描述符的鏈接。 "cpu"僅在運行 SMP 內核時出現,里面是按 CPU 劃分的進程時間。
 

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

 
通過 /proc 與內核交互

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

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

代碼如下:


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

代碼如下:


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


這將在網絡上癮藏你的機器,因為它不響應 icmp_echo。主機將不會響應其 他主機發出的 ping 查詢。

代碼如下:


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


要改回缺省設置,只要

代碼如下:


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


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

到此,關于“如何理解Linux系統中的虛擬文件系統”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

牡丹江市| 东海县| 扎赉特旗| 湖南省| 贵定县| 湘乡市| 红安县| 织金县| 临漳县| 潢川县| 伊金霍洛旗| 石渠县| 台南县| 民丰县| 彩票| 临漳县| 赞皇县| 木兰县| 焉耆| 虹口区| 麦盖提县| 尖扎县| 桃园市| 财经| 繁昌县| 莫力| 清远市| 罗山县| 五寨县| 新安县| 行唐县| 宜章县| 中西区| 茌平县| 屯昌县| 大余县| 儋州市| 贡觉县| 泰州市| 孝昌县| 益阳市|