Linux
為什麼 /proc/stat 的大小會顯示為零?
ls -rlth /proc/stat -r--r--r-- 1 root root 0 Feb 21 04:25 /proc/stat
雖然如果我們
cat
它,它有足夠的內容。
proc 是一個虛擬文件系統,將文件名映射到內部 linux 結構/變數;所以它是正常的 /proc/stat 有 0 個字節。
來自維基百科:procfs
proc 文件系統 (procfs) 是類 Unix 作業系統中的一種特殊文件系統,它以分層文件結構呈現有關程序的資訊和其他系統資訊,為動態訪問核心中保存的程序數據提供了一種更方便和標準化的方法。傳統的跟踪方法或直接訪問核心記憶體。通常,它在引導時映射到名為 /proc 的掛載點。proc 文件系統充當核心中內部資料結構的介面。它可用於獲取有關係統的資訊並在執行時更改某些核心參數 (sysctl)。
從 TLDP Linux 文件系統層次結構:/proc
這個目錄中的文件最有特色的一點是,除了 kcore、mtrr 和 self 之外,所有文件的文件大小都是 0。
注意:實際上我的伺服器中只有 mtrr 和 self 的大小為 0 - kcore 是您能夠定址的記憶體,即核心虛擬記憶體地址,因此是 128TB。與此討論也相關的是,
/proc/kcore
未在 MIPS 和 ARM 架構中實現。
那是因為它是一個沒有預定義已知大小的虛擬文件,實際大小,即返回的數據量將根據您讀取它的時間而有所不同。
某些
/proc
文件可能具有非空大小,因為它是預先知道的。/proc/kcore This file represents the physical memory of the system and is stored in the ELF core file for- mat. With this pseudo-file, and an unstripped kernel (/usr/src/linux/vmlinux) binary, GDB can be used to examine the current state of any kernel data structures. The total length of the file is the size of physical memory (RAM) plus 4KB.
但是,鑑於我的機器上沒有 128 TB 的 RAM,報告的值和可能讀取的大小與文件不匹配:
$ ls -lh /proc/kcore -r--------. 1 root root 128T Feb 23 16:10 /proc/kcore