proc文件目录浅析

youncyb 发布于 2018-12-22 1701 次阅读 linux


1. /proc介绍

  /proc是linux的文件系统,即proc文件系统,但它只是一个虚拟的文件系统,存在于内存中。其主要功能是显示内核(硬件)信息和进程运行信息。由于/proc将自己注册到虚拟文件系统层(VFS),所以在使用 ls -al 命令时,我们可以发现许多文件的大小都为0,但是当我们用cat more等命令查看内容时,又会显示出文件内容。

root@we:~# ls -al /proc/sys
total 0
dr-xr-xr-x   1 root root 0 Dec 19 16:16 .
dr-xr-xr-x 131 root root 0 Dec 19 16:16 ..
dr-xr-xr-x   1 root root 0 Dec 20 23:04 abi
dr-xr-xr-x   1 root root 0 Dec 20 23:04 debug
dr-xr-xr-x   1 root root 0 Dec 20 23:04 dev
dr-xr-xr-x   1 root root 0 Dec 19 16:16 fs
dr-xr-xr-x   1 root root 0 Dec 19 16:16 kernel
dr-xr-xr-x   1 root root 0 Dec 19 16:16 net
dr-xr-xr-x   1 root root 0 Dec 20 23:04 user
dr-xr-xr-x   1 root root 0 Dec 19 16:16 vm

2. /proc结构

  /proc由进程pid目录、sys等子目录以及内核相关文件组成。重要的子目录:

  1. sys 系统信息和内核参数,可供我们修改,以此改变内核运行状态
  2. net 网卡设备相关,只读,可以读取网口设备相关信息,如route、netstat等命令调用的相关信息。
  3. scsi 磁盘设备相关,有些linux发行版是没有这个目录的,如:kali。

3. /proc/sys 目录浅析

root@we:~# ls -al  /proc/sys/
total 0
dr-xr-xr-x   1 root root 0 Dec 19 16:16 .
dr-xr-xr-x 131 root root 0 Dec 19 16:16 ..
dr-xr-xr-x   1 root root 0 Dec 20 23:04 abi
dr-xr-xr-x   1 root root 0 Dec 20 23:04 debug
dr-xr-xr-x   1 root root 0 Dec 20 23:04 dev
dr-xr-xr-x   1 root root 0 Dec 19 16:16 fs
dr-xr-xr-x   1 root root 0 Dec 19 16:16 kernel
dr-xr-xr-x   1 root root 0 Dec 19 16:16 net
dr-xr-xr-x   1 root root 0 Dec 20 23:04 user
dr-xr-xr-x   1 root root 0 Dec 19 16:16 vm
  1. abi目录 用于对外部二进制的支持,不是传统linux系统。
  2. dev目录 可用于改写特殊设备相关信息,如:光盘(cdrom)和硬盘(scsi)
  3. fs目录 用于增加操作系统支持的文件系统和控制磁盘配额
  4. kernel目录 用于修改内核参数,优化内核运行
  5. net目录 改变网络配置相关参数,如
    开启包转发:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    开启icmp包屏蔽:
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  6. vm目录 用于缓存和缓冲区的设置

4. /proc/self目录浅析

root@we:~# ls -al /proc/self/
total 0
dr-xr-xr-x   9 root root 0 Dec 21 00:14 .
dr-xr-xr-x 131 root root 0 Dec 19 16:16 ..
dr-xr-xr-x   2 root root 0 Dec 21 00:14 attr
-rw-r--r--   1 root root 0 Dec 21 00:14 autogroup
-r--------   1 root root 0 Dec 21 00:14 auxv
-r--r--r--   1 root root 0 Dec 21 00:14 cgroup
--w-------   1 root root 0 Dec 21 00:14 clear_refs
-r--r--r--   1 root root 0 Dec 21 00:14 cmdline
-rw-r--r--   1 root root 0 Dec 21 00:14 comm
-rw-r--r--   1 root root 0 Dec 21 00:14 coredump_filter
-r--r--r--   1 root root 0 Dec 21 00:14 cpuset
lrwxrwxrwx   1 root root 0 Dec 21 00:14 cwd -> /root
-r--------   1 root root 0 Dec 21 00:14 environ
lrwxrwxrwx   1 root root 0 Dec 21 00:14 exe -> /bin/ls
dr-x------   2 root root 0 Dec 21 00:14 fd
........
  1. cmdline 命令行参数(完整命令)
root@we:~# ls -al /proc/self/cmdline 
-r--r--r-- 1 root root 0 Dec 21 00:24 /proc/self/cmdline
  1. environ 环境变量值 (key(大写)/value(小写))
root@we:~# cat /proc/self/environ
CLUTTER_IM_MODULE=xim
  1. fd 一个包含所有文件描述符的目录
root@we:~# ls -al /proc/self/fd
total 0
dr-x------ 2 root root  0 Dec 21 00:27 .
dr-xr-xr-x 9 root root  0 Dec 21 00:27 ..
lrwx------ 1 root root 64 Dec 21 00:27 0 -> /dev/pts/1
lrwx------ 1 root root 64 Dec 21 00:27 1 -> /dev/pts/1
lrwx------ 1 root root 64 Dec 21 00:27 2 -> /dev/pts/1
lr-x------ 1 root root 64 Dec 21 00:27 3 -> /proc/2542/fd
  1. mem 进程的内存被利用情况,不能被用户读,由open、read、lseek等命令调用
  2. stat 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
  3. status 进程当前状态,以可读的方式显示出来
root@we:~# cat /proc/self/status 
Name:   cat
Umask:  0022
State:  R (running)
Tgid:   2556
Ngid:   0
Pid:    2556
PPid:   1174
  1. cwd 当前工作目录的符号链接,可通过/proc/self/cwd/文件名,查看对应的文件内容
  2. exe 指向当前进程的执行命令文件
  3. maps 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表
root@we:~# cat /proc/self/maps
5566be297000-5566be299000 r--p 00000000 08:01 131894    /bin/cat
5566be299000-5566be29e000 r-xp 00002000 08:01 131894    /bin/cat
5566be29e000-5566be2a0000 r--p 00007000 08:01 131894    /bin/cat
5566be2a1000-5566be2a2000 r--p 00009000 08:01 131894 
  1. statm 当前进程内存状态信息
root@we:~# cat /proc/self/statm
1042 187 171 7 0 111 0
  1. root 链接此进程的root目录

5. /proc目录下重要的子文件

  1. /proc/cmdline 启动时传到内核的参数,由lilo或grub工具传递
root@we:~# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.17.0-kali3-amd64 root=UUID=f1c4045c-4b33-46e3-96b7-c79a7531a831 ro initrd=/install/gtk/initrd.gz quiet
  1. /proc/cpuinfo cpu相关信息
  2. /proc/crypto 加密信息及参数信息
  3. /proc/devices 系统加载了的块设备和字符设备
  4. /proc/meminfo 当前内存信息
  5. /proc/mounts 已挂载了的所有文件系统
  6. /proc/modules 装入内核的所有模块名
  7. /proc/partitions 块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目(如下面输出中第三列所示)
root@we:~# cat /proc/partitions 
major minor  #blocks  name

   8        0   52428800 sda
   8        1   51904512 sda1
   8        2          1 sda2
   8        5     521216 sda5
  11        0    3019904 sr0
  1. /proc/uptime
    系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒;
root@we:~# cat /proc/uptime 
23936.88 23272.55
  1. /proc/version 显示内核版本号和gcc版本