Linux 【关于 /proc目录详解】

proc目录:Process Information Pseudo-filesystem:进程信息伪文件系统

/proc目录并不包含实际的文件,而是提供了一个动态的视图,用于显示系统和进程相关的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

其目的:用于管理和监控系统状态和进程信息

/proc文件本身的大小显示为0字节,其中的文件使用查看命令查看时会返回大量信息;

这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于内存);

大多数虚拟文件可以使用文件查看命令如cat.more或者less进行查看,效果可能不同:

less swaps

less ./1/io

进程文件介绍

/proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件 ,在某进程结束后其相关目录则会消失!

可使用以下命令查看进程:

ps aux | grep PID

如:88号进程:

ll 88

1.PID文件介绍:

1.cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息

cat /proc/1049/cmdline
/usr/sbin/sshd-D
more /proc/1049/cmdline
/usr/sbin/sshd

2.cwd — 指向当前进程运行目录的一个符号链接·

3. environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示

more /proc/1049/environ
LANG=zh_CN.UTF-8tify

4.exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝

5.fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接

6.limits — 当前进程所使用的每一个受限资源的软限制.硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(6.24以后的内核版本支持此功能)

7.maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表

cat /proc/1049/maps

8.mem — 当前进程所占用的内存空间,由open.read和lseek等系统调用使用,不能被用户读取

9. root — 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录

10.stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用

11.statm — 当前进程占用内存的状态信息,通常以“页面”(page)表示

12. status — 与stat所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;其详细介绍请参见 proc的man手册页

Name:   sshd
Umask:  0022
State:  S (sleeping)
Tgid:   1049
Ngid:   0
Pid:    1049
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups:  
NStgid: 1049
NSpid:  1049
NSpgid: 1049
NSsid:  1049
VmPeak:   112936 kB
VmSize:   112912 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      7648 kB
VmRSS:      7648 kB
RssAnon:            1028 kB
RssFile:            6620 kB
RssShmem:              0 kB
VmData:      924 kB
VmStk:       132 kB
VmExe:       800 kB
VmLib:     12408 kB
VmPTE:       248 kB
VmSwap:        0 kB
HugetlbPages:          0 kB
CoreDumping:    0
Threads:        1
SigQ:   0/3739
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180014005
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Speculation_Store_Bypass:       vulnerable
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:        21
nonvoluntary_ctxt_switches:     18

13.task — 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核6版本以后支持此功能)

2./proc/sys目录详解

与/proc下其它文件的“只读”属性不同的是,管理员可对/proc/sys子目录中的许多文件内容进行修改以更改内核的运行特性,事先可以使用“ls -l”命令查看某文件是否“可写入”。写入操作通常使用类似于“echo DATA > /path/to/your/filename”的格式进行。需要注意的是,即使文件可写,其一般也不可以使用编辑器进行编辑。

/proc/sys/debug 子目录 :此目录通常是一空目录;

/proc/sys/dev 子目录 :为系统上特殊设备提供参数信息文件的目录,其不同设备的信息文件分别存储于不同的子目录中,如大多数系统上都会具有的/proc/sys/dev/cdrom和/proc/sys/dev/raid(如果内核编译时开启了支持raid的功能) 目录,其内存储的通常是系统上cdrom和raid的相关参数信息文件。

3.其他常见的文件介绍

1./proc/apm :高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用

2./proc/buddyinfo :用于诊断内存碎片问题的相关信息文件

3./proc/cmdline :在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递

4./proc/cpuinfo :处理器的相关信息的文件

cat /proc/cpuinfo

5./proc/crypto :系统上已安装的内核使用的密码算法及每个算法的详细信息列表

cat /proc/crypto
#
name         : crc33c
driver       : crc33c-generic
module       : kernel
priority     : 0
type         : digest
blocksize    : 32
digestsize   : 4

6./proc/devices :系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名

cat /proc/devices
#
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty

 Block devices:
  8 sd
  9 md
 11 sr

7./proc/diskstats :每块磁盘设备的磁盘I/O统计信息列表;(内核5.69以后的版本支持此功能)
8./proc/dma :每个正在使用且注册的ISA DMA通道的信息列表;

more /proc/dma
2: floppy
4: cascade

9./proc/execdomains :内核当前支持的执行域(每种操作系统独特“个性”)信息列表;

more /proc/execdomains 
0-0     Linux                   [kernel]

10./proc/fb :帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息;
11./proc/filesystems :当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型;

more /proc/filesystems 
nodev   sysfs
nodev   rootfs
nodev   proc

12./proc/interrupts :X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号;

more /proc/interrupts 
CPU0       
0:    1305421    IO-APIC-edge  timer
1:         61    IO-APIC-edge  i8042

13./proc/iomem
每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息;

more /proc/iomem 
00000000-0009f7ff : System RAM
0009f800-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM

14./proc/ioports :当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备;

less /proc/ioports 
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1

15./proc/kallsyms :模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;(内核5.71以后的版本支持此功能);通常这个文件中的信息量相当大;

16./proc/kcore :系统使用的物理内存,以ELF核心文件(core file)格式存储,其文件大小为已使用的物理内存(RAM)加上4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由GBD通常调试工具使用,但不能使用文件查看命令打开此文件;
17./proc/kmsg :此文件用来保存由内核输出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要试图使用查看命令打开此文件;
18./proc/loadavg :保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟.每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID;

19./proc/locks :保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户任何形式的访问;

20./proc/mdstat :保存RAID相关的多块磁盘的当前状态信息,在没有使用RAID机器上;

21./proc/meminfo :系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;

22./proc/mounts :在内核4.29版本以前,此文件的内容为系统当前挂载的所有文件系统,在4.19以后的内核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向/proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接;/proc/self是一个独特的目录

23./proc/modules :当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;第一列表示模块名,第二列表示此模块占用内存空间大小,第三列表示此模块有多少实例被装入,第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:已经装入;Loading:正在装入;Unloading:正在卸载),第六列表示此模块在内核内存(kernel memory)中的偏移量;

24./proc/partitions :块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目;

25./proc/pci :内核初始化时发现的所有PCI设备及其配置信息列表,其配置信息多为某PCI设备相关IRQ信息,可读性不高,可以用“/sbin/lspci –vb”命令获得较易理解的相关信息;在6内核以后,此文为/proc/bus/pci目录及其下的文件代替;
26./proc/slabinfo :在内核中频繁使用的对象(如inode.dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息;详情可以参见内核文档中slapinfo的手册页;

27./proc/stat :实时追踪自系统上次启动以来的多种统计信息;

  • “cpu”行后的八个值分别表示以1/100(jiffies)秒为单位的统计值(包括系统运行于用户模式.低优先级用户模式,运系统模式.空闲模式.I/O等待模式的时间等);
  • “intr”行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数;
  • “ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
  • “btime”给出了从系统启动到现在为止的时间,单位为秒;
  • “processes (total_forks) 自系统启动以来所创建的任务的个数目;
  • “procs_running”:当前运行队列的任务的数目;
  • “procs_blocked”:当前被阻塞的任务的数目;

28./proc/swaps :当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别存储于/proc/swap目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大;

29./proc/uptime :系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒;

30./proc/version :当前系统运行的内核版本号,在作者的RHEL5.3上还会显示系统安装的gcc版本;

31./proc/vmstat :当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好;

32./proc/zoneinfo :内存区域(zone)的详细信息列表,信息量较大。

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值