參考:/proc
/proc簡介
本文着重關注/proc目錄,查看其中文件並熟悉它。 /proc目錄存在於所有Linux系統上,無論什么發行版或體系結構。首先,必須澄清一個誤解:
就文件系統這一術語而言,/ proc目錄並不是真正的文件系統,它是一個虛擬文件系統,有時也被稱為進程信息偽文件系統。
procfs中包含有關進程和其他系統信息的信息。 它映射到/ proc目錄並在OS啟動時掛載(mount)。
切換到/proc目錄,除了普通文件就是一些數字目錄。數字目錄代表進程,更為熟知的一種叫法是PID。
事實上,相當多Linux命令都是調用此目錄中的文件來顯示系統相關信息。
例如,'lsmod'與'cat /proc/modules相同,而'lspci'是'cat /proc/pci'相同。
通過更改位於此目錄中的文件,您甚至可以在系統運行時讀取/更改內核參數(sysctl)。
/proc目錄下的文件還有個有趣的想像,就是大多數目錄或文件大小都是0(除了kcore,mtrr和self)。對於大小為0的文件或目錄,可以把它想象成一扇窗戶。內核是一個黑盒子,為了方便我們觀察里面到底發生了什么,開個窗戶方便我們窺探里面的秘密。
/proc/<fileneme>
/proc/<fileneme>不代表某一具體文件,而是/proc目錄下除數字目錄外的文件。
/proc/meminfo
首先查看meminfo

[root@localhost proc]# more /proc/meminfo MemTotal: 4028432 kB MemFree: 3719100 kB MemAvailable: 3648008 kB Buffers: 2108 kB Cached: 87436 kB SwapCached: 0 kB Active: 90512 kB Inactive: 68592 kB Active(anon): 70192 kB Inactive(anon): 11080 kB Active(file): 20320 kB Inactive(file): 57512 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4063228 kB SwapFree: 4063228 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 69572 kB Mapped: 23944 kB Shmem: 11712 kB Slab: 63616 kB SReclaimable: 21248 kB SUnreclaim: 42368 kB KernelStack: 4256 kB PageTables: 3840 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6077444 kB Committed_AS: 287024 kB VmallocTotal: 34359738367 kB VmallocUsed: 187504 kB VmallocChunk: 34359310332 kB HardwareCorrupted: 0 kB AnonHugePages: 12288 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 94016 kB DirectMap2M: 3051520 kB DirectMap1G: 3145728 kB
/ proc / meminfo包含有關系統內存的大量信息,包括總物理內存大小,當前可用物理內存大小(以kb為單位),見輸出前兩行。
使用man手冊查看/proc/<fileneme>幫助信息

man 5 /proc/<filename>
/proc/<fileneme>其他文件速覽
- /proc/cmdline – Kernel command line information.
- /proc/console – Information about current consoles including tty.
- /proc/devices – Device drivers currently configured for the running kernel.
- /proc/dma – Info about current DMA channels.
- /proc/fb – Framebuffer devices.
- /proc/filesystems – Current filesystems supported by the kernel.
- /proc/iomem – Current system memory map for devices.
- /proc/ioports – Registered port regions for input output communication with device.
- /proc/loadavg – System load average.
- /proc/locks – Files currently locked by kernel.
- /proc/meminfo – Info about system memory (see above example).
- /proc/misc – Miscellaneous drivers registered for miscellaneous major device.
- /proc/modules – Currently loaded kernel modules.
- /proc/mounts – List of all mounts in use by system.
- /proc/partitions – Detailed info about partitions available to the system.
- /proc/pci – Information about every PCI device.
- /proc/stat – Record or various statistics kept from last reboot.
- /proc/swap – Information about swap space.
- /proc/uptime – Uptime information (in seconds).
- /proc/version – Kernel version, gcc version, and Linux distribution installed.
/proc/<numbers>
在/proc的數字目錄中,可以找到一些文件和鏈接。這些目錄的數字編號與其中運行的命令的PID相關。舉個栗子,在我的系統上sshd進程的PID為1018

[root@localhost proc]# ps ax | grep sshd 1018 ? Ss 0:00 /usr/sbin/sshd -D 1278 ? Ss 0:00 sshd: root@pts/0 1520 pts/0 S+ 0:00 grep --color=auto sshd
切換到/proc/1018目錄,有如下內容

[root@localhost 1018]# ls attr cmdline environ io mem ns pagemap sched stack task autogroup comm exe limits mountinfo numa_maps patch_state schedstat stat timers auxv coredump_filter fd loginuid mounts oom_adj personality sessionid statm uid_map cgroup cpuset fdinfo map_files mountstats oom_score projid_map setgroups status wchan clear_refs cwd gid_map maps net oom_score_adj root smaps syscall
隨便點開一個文件看看,以status為例

[root@localhost 1018]# cat status Name: sshd Umask: 0022 State: S (sleeping) Tgid: 1018 Ngid: 0 Pid: 1018 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 64 Groups: VmPeak: 112816 kB VmSize: 112796 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 4292 kB VmRSS: 4292 kB RssAnon: 1024 kB RssFile: 3268 kB RssShmem: 0 kB VmData: 628 kB VmStk: 132 kB VmExe: 800 kB VmLib: 12304 kB VmPTE: 232 kB VmSwap: 0 kB Threads: 1 SigQ: 0/15640 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000001000 SigCgt: 0000000180014005 CapInh: 0000000000000000 CapPrm: 0000001fffffffff CapEff: 0000001fffffffff CapBnd: 0000001fffffffff CapAmb: 0000000000000000 Seccomp: 0 Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff Cpus_allowed_list: 0-127 Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 Mems_allowed_list: 0 voluntary_ctxt_switches: 22 nonvoluntary_ctxt_switches: 0
文件里面內容是什么意思? 好吧,重要的部分是在頂部。 我們可以從狀態文件中看到此進程屬於sshd。 當前狀態正在休眠,其進程ID顯然是1018。 我們也可以看到誰在運行它,因為UID和GID為0,表明此進程屬於root用戶。
在任何數字目錄中,抖有類似的文件結構。 最重要最常用的一些文件描述如下:
- cmdline – command line of the process
- environ – environmental variables
- fd – file descriptors
- limits – contains information about the limits of the process
- mounts – related information
除了普通文件外,還有一些鏈接文件
- cwd – a link to the current working directory of the process
- exe – link to the executable of the process
- root – link to the work directory of the process