Linux proc filesystem (procfs)


參考:/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
View Code

/ proc / meminfo包含有關系統內存的大量信息,包括總物理內存大小,當前可用物理內存大小(以kb為單位),見輸出前兩行。

使用man手冊查看/proc/<fileneme>幫助信息

man 5 /proc/<filename>
View Code

/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
View Code

切換到/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
View Code

隨便點開一個文件看看,以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
View Code

文件里面內容是什么意思? 好吧,重要的部分是在頂部。 我們可以從狀態文件中看到此進程屬於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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM