Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux /proc 檔案系統:零拷貝訪問核心數據結構的系統資訊寶庫

編輯:Linux 教學

什麼是 /proc?

/proc 是**虛擬檔案系統 (VFS)**,掛載於記憶體,**不佔用磁碟空間**。它將核心內部數據結構 (進程表、記憶體管理、裝置驅動、網路協議棧等) 以**檔案/目錄**形式暴露給用戶空間,**讀取即觸發核心回調即時生成內容**,實現「零拷貝」核心狀態檢視。

核心目錄與檔案速查

路徑內容典型用途
/proc/cpuinfoCPU 型號、核心數、旗標、BogoMIPS、快取大小grep -c processor /proc/cpuinfo 獲取邏輯核心數
/proc/meminfo記憶體總量、可用、緩衝/快取、Swap 使用、HugePages監控腳本解析 MemAvailable 判斷壓力
/proc/version核心版本、GCC 版本、編譯時間驗證核心版本
/proc/modules已載入核心模組 (同 lsmod)檢查驅動是否載入
/proc/mounts目前掛載點 (同 cat /etc/mtab 但更即時)腳本檢查掛載狀態
/proc/filesystems核心支援的檔案系統類型確認 ext4/btrfs/fuse 等支援
/proc/interrupts每 CPU 中斷計數、類型、驅動名稱定位中斷風暴、IRQ 平衡
/proc/statCPU 時間片 (user/nice/system/idle/iowait/irq/softirq/steal)、進程統計計算 CPU 使用率
/proc/loadavg1/5/15 分鐘負載、運行/總進程數、最後 PID負載監控
/proc/uptime系統運行時間 (秒)、閒置時間 (秒)計算開機時長
/proc/cmdline核心啟動參數排查啟動問題
/proc/sys/**可調核心參數** (對應 sysctl)運行時調優 (如 net.ipv4.tcp_fin_timeout)

進程資訊目錄:/proc/[PID]/

每個運行進程對應一個數字命名目錄,關鍵檔案:

檔案內容解析工具
cmdline啟動命令列 (以 \0 分隔參數)cat /proc/1234/cmdline | tr '\0' ' '
environ環境變數 (以 \0 分隔)cat /proc/1234/environ | tr '\0' '\n'
status進程狀態 (State, Pid, PPid, Uid/Gid, VmRSS, VmSize, Threads, SigQ...)grep VmRSS /proc/1234/status
fd/開啟檔案描述符符號連結 (指向實際檔案/管道/socket)ls -l /proc/1234/fd/ 追蹤檔案洩漏
cwd當前工作目錄符號連結定位進程工作目錄
exe執行檔路徑符號連結識別進程來源
maps記憶體映射區域 (位址、權限、對應檔案/匿名/堆/棧)分析記憶體佈局、找共享庫基址
stack當前棧內容 (需 root、CONFIG_STACKTRACE)無侵入式調試
ioI/O 統計 (read/write bytes, syscrs/syscw)I/O 熱點分析
oom_scoreOOM Killer 分數 (越高越易被殺)調整 oom_score_adj 保護關鍵進程
ns/Namespace 連結 (ipc, mnt, net, pid, user, uts)容器隔離檢查

網路與裝置資訊

  • /proc/net/tcp, /proc/net/udp:連線表 (十六進位 IP/埠、狀態、UID、Inode) → ss -tunap 友善顯示。
  • /proc/net/dev:介面流量統計 (bytes/packets/errs/drop/fifo/colls/carrier) → ifconfig/ip -s link 來源。
  • /proc/bus/usb/devices:USB 裝置樹 (舊),新用 /sys/bus/usb/ 或 lsusb -t。

實戰:系統健康度一鍵檢查腳本

#!/bin/bash
echo "=== CPU ==="; grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2
echo "Cores: $(grep -c ^processor /proc/cpuinfo)"
echo "=== Memory ==="; grep -E 'MemTotal|MemAvailable|SwapTotal|SwapFree' /proc/meminfo
echo "=== Load ==="; cat /proc/loadavg
echo "=== Disk ==="; df -h / | tail -1
echo "=== Top 5 Mem Processes ==="; ps aux --sort=-%mem | head -6
echo "=== Kernel ==="; cat /proc/version

寫入 /proc 進行核心參數調優

/proc/sys/ 下多數檔案可寫入 (需 root),即時生效:

# 開啟 IP 轉發
echo 1 > /proc/sys/net/ipv4/ip_forward
# 調整 TCP TIME_WAIT 回收
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# 限制核心最大 PID
echo 65535 > /proc/sys/kernel/pid_max
# 永久生效請寫入 /etc/sysctl.d/99-custom.conf 並執行 sysctl --system

權限與安全

  • 進程目錄 /proc/[PID]/ 預設僅擁有者可讀 (隱藏他人環境變數/命令列)。
  • hidepid= 掛載選項可加強隔離:mount -o remount,hidepid=2 /proc (僅 root 可見所有進程)。
  • 容器環境下 /proc 可能被過濾 (如 lxcfs 提供虛擬視圖)。

結語

/proc 是核心與用戶空間的「零拷貝」契約界面。熟練掌握 /proc/cpuinfo、/proc/meminfo、/proc/[PID]/ 等核心檔案,能在無任何額外工具情況下完成:系統資源監控、進程深度診斷、核心參數熱調優、容器可見性審計。將其內化為肌肉記憶,是 Linux 運維與開發的核心基本功。

Copyright © Windows教程網 All Rights Reserved