- Linux程序設計(第4版)
- (英)Neil Matthew Richard Stones
- 1491字
- 2021-04-09 20:04:45
3.10 /proc文件系統
我們在前面提到過,Linux將一切事物都看作為文件,硬件設備在文件系統中也有相應的條目。我們使用底層系統調用這樣一種特殊方式通過/dev目錄中的文件來訪問硬件。
控制硬件的軟件驅動程序通??梢砸阅撤N特定方式配置,或者能夠報告相關信息。例如,一個硬盤控制程序可以被配置為使用一個特殊的DMA模式。一塊網卡可以報告它是否協商了一個高速、雙工的連接。
用于與設備驅動程序進行通信的工具在過去就已經十分常見。例如,hdparm可以用來配置一些磁盤參數,ifconfig可以報告網絡統計信息。近年來,傾向于提供更一致的方式來訪問驅動程序的信息。事實上,這種一致的方式甚至延伸到包括與Linux內核的各種元素的通信。
Linux提供了一個特殊的文件系統procfs,它通常以/proc目錄的形式呈現。該目錄中包含了許多特殊文件用來對驅動程序和內核信息進行更高層的訪問。只要應用程序有正確的訪問權限,它們就可以通過讀寫這些文件來獲得信息或設置參數。
/proc目錄中的文件會隨系統的不同而不同,當Linux版本中有更多的驅動程序和設施支持procfs文件系統時,該目錄中就會包含更多的文件。在這里,我們將介紹一些/proc目錄中常用的文件,并簡單討論它們的用途。
用來撰寫本章內容的電腦上的/proc目錄列表包括如下項目:

在多數情況下,只需直接讀取這些文件就可以獲得狀態信息。例如,/proc/cpuinfo給出的是cpu的詳細信息:

類似地,/proc/meminfo和/proc/version分別給出的是內存使用情況和內核版本信息:

每次讀取這些文件的內容時,它們所提供的信息都會及時更新。所以再讀一次meminfo文件會給出最新的信息。
你可以通過特定內核函數獲得更多的信息,它們位于/proc目錄的子目錄中。例如,你可以通過/proc/net/sockstat文件獲得網絡套接字的使用統計:

/proc目錄中的有些條目不僅可以被讀取,而且可以被修改。例如,系統中所有運行的程序同時能打開的文件總數是Linux內核的一個參數。它的當前值可通過讀取/proc/sys/fs/file-max文件得到:

這個值被設置為76593。如果你需要增大該值,則可以通過寫同一個文件來實現。如果你正在運行一個需要同時打開很多文件的應用程序套件(例如,一個使用了很多表的數據庫系統),你可能就需要這么做。
對/proc目錄中的文件進行寫操作需要超級用戶的權限。你在修改數據時需要特別小心,寫入不適當的值可能會引發嚴重的問題,比如系統崩潰和數據丟失。
如果要將系統范圍的文件句柄限制增加為80000,你只需將新的上限值寫入file-max文件即可:

現在,當你再次讀取該文件時,你就可以看到新設定的值:

/proc目錄中以數字命名的子目錄用于提供正在運行的程序的信息。你將在第11章中學習程序如何以進程的方式執行。
現在,你只需要知道每個進程都有一個唯一的標識符:一個在1~32000的數字。ps命令會給出當前正在運行進程的列表。例如,在本章正在編寫的時候:

你可以看到有幾個正在運行bash shell的終端會話和一個正在運行ftp程序的文件傳輸會話。你可以通過查看/proc目錄來獲得更多關于ftp會話的細節。
ftp的進程標識符是9118,所以你需要查看/proc/9118來獲得關于它的更多細節:

你可以看到各種特殊文件,它們可以告訴你該進程的相關信息。
從上面的輸出中你可以知道程序/usr/bin/pftp正在運行,它的當前工作目錄是/home/neil/BLP4e/chapter03。通過查看這個目錄下的其他文件,你還可以看到啟動它的命令行以及它的shell環境。cmdline和environ文件以一系列null終止的字符串來提供這些信息,所以你在查看它們時需要小心。我們將在第4章對Linux環境進行深入討論。

你可以看到ftp是由命令行ftp 192.168.0.12啟動的。
fd子目錄提供該進程正在使用的打開的文件描述符的信息。這個信息在確定一個程序同時打開了多少文件時十分有用。每個打開的描述符都有對應的一個條目,條目名字與描述符的數字相匹配。在本例中,你可以看到ftp如我們所預期的那樣打開了0、1、2和3描述符。它們分別是標準輸入、標準輸出和標準錯誤描述符以及一個到遠程服務器的連接。

- 一步一步學Spring Boot 2:微服務項目實戰
- Learning Cython Programming(Second Edition)
- SOA實踐
- C語言程序設計教程(第2版)
- PyTorch自然語言處理入門與實戰
- Java Web程序設計
- HDInsight Essentials(Second Edition)
- Learning Zurb Foundation
- HTML+CSS+JavaScript編程入門指南(全2冊)
- 大學計算機基礎
- Scala編程實戰
- INSTANT Apache ServiceMix How-to
- Practical Maya Programming with Python
- 你必須知道的.NET(第2版)
- Web程序設計與架構