您的位置:首页 > 运维架构 > Linux

Linux Proc文件系统详解

2017-12-24 22:03 141 查看


Linux Proc文件系统详解

Proc文件系统是一个伪文件系统,做为一个特殊接口来访问内核,常常挂载在/proc下,里面的大多数文件时只读的,但是我们仍然可以设置其中一些变量来改变内核设置。

通过Man5 proc
 来进行查阅proc文件系统的详细信息。

我们可以用cat more grep等linux命令来进行查看proc文件系统的内容

I)进程相关

系统任何时刻正在运行的用户进程在/proc下都有自己的一个目录,目录的名称就是进程号的十进制表示。如/proc/1

/proc/self是链接到正在访问proc目录的那个进程的符号链接。

每个进程进程号目录下有以下的文件:

cmdline文件:进程的命令行,包括程序的名称和所有的参数,僵死进程或者被交换出去的进程可能没有任何内容。如cat
./self/cmdline

cwd目录:进程当前工作目录的符号链接

exe文件:指向当前进程运行的二进制可执行程序的符号链接,可以直接运行它

environ文件:记录了进程的环境信息,单个的环境字符串之间由空字节分隔,以文件结束标志作为环境结束的标志

 

fd目录:为每个打开得文件描述符提供一个入口,它是到实际文件的索引节点的符号链接。每个索引节点包含节点所在的设备信息、加锁信息、文件的模式和类型、到该文件的链接、文件所有者和所有组ID、文件字节数等。

maps文件:

address          
     perms                           
offset   dev  
      inode      pathname

10000000-1064b000 
r-xp          00000000
01:00         13         /ramdisk/kdvmt.linux (deleted)

1065b000-106c6000 
rwxp         0064b000 01:00
        13         /ramdisk/kdvmt.linux (deleted)

106c6000-1108d000 
rwxp                  106c6000
00:00                   0

30000000-30120000 
rw-p          30000000
00:00         0

30120000-30121000
 rw-s 22000000
1f:09          8          /usr/dev/hpi2

30121000-30122000
 rw-s 21000000
1f:09          7          /usr/dev/hpi1

30122000-30123000
 rw-s 20000000
1f:09          6          /usr/dev/hpi0

30123000-30c83000
 rw-p         
30123000 00:00         0

 

                  
r = read

                  
w = write

                  
x = execute

         
         s = shared

                  
p = private (copy on write)

offset是文件的偏移量,
dev 是设备号(主设备号:从设备号),
而 inode
则是设备的节点号. 0
表明没有节点与内存相对应,
就象 bss
的情形.

root文件:root目录的符号链接,可以由chroot系统调用改变

stat文件:包含了通常由PS显示的有关某个进程的大多数信息。

pid %d

进程标识.

comm %s

可执行文件的文件名,
包括路径.
该文件是否可见取决于该文件是否已被交换出内存.

state %c

";RSDZT";
中的一个, R
是正在运行, S
是在可中断的就绪态中睡眠, D
是在不可中断的等待或交换态中睡眠, Z
是僵死, T
是被跟踪或被停止(由于收到信号).

ppid %d

父进程 PID.

pgrp %d

进程的进程组 ID.

session %d

进程的会话 ID.

tty %d

进程所使用终端.

tpgid %d

当前拥有该进程所连接终端的进程所在的进程组 ID.

flags %u

进程标志,依赖内核版本

minflt %u

进程所导致的小错误(minor faults)数目,
这样的小错误(minorfaults)不需要从磁盘重新载入一个内存页.

cminflt %u

进程及其子进程所导致的小错误(minor faults)数目.

majflt %u

进程所导致的大错误(major faults)数目,
这样的大错误(majorfaults)需要重新载入内存页.

cmajflt %u

进程及其子进程所导致的大错误(major faults)数目.

utime %d

用户时间——进程被调度进用户态的时间(以
jiffy 为单位).

stime %d

系统时间——进程被调度进内核态的时间,
以 jiffy
为单位.

cutime %d

累计用户时间——进程及其子进程被调度进用户态的时间,
以 jiffy
为单位.

cstime %d

累计系统时间——进程及其子进程被调度进内核态的时间,
以 jiffy
为单位.

priority %d

标准优先数只再加上 15,
在内核里该值总是正的.

nice %ld

nice值

itrealvalue%u

下一个SIGALARM信号到来的延时,以
jiffy 为单位.

starttime %d

进程自系统启动以来的时间,
以 jiffy
为单位.

vsize %u

虚拟内存大小.

rss %u

Resident Set Size(驻留大小):
进程所占用的真实内存大小,
以页为单位,
为便于管理而减去了 3. rss
只包括代码段,
数据

以及堆栈的空间,
但不包括尚未要求装入内存的或已被交换出去的.

rlim %u

当前进程的 rss
限制,
以字节为单位,
通常为 2,147,483,647.

startcode %u

代码段部分地址下限.

endcode %u

代码段部分地址上限.

startstack %u

堆栈开始地址.

kstkesp %u

esp(32
位堆栈指针)
的当前值,
与在进程的内核堆栈页得到的一致.

kstkeip %u

EIP(32
位指令指针)的当前值.

signal %d

待处理信号的 bitmap(通常为
0).

blocked %d

被阻塞信号的 bitmap(对
shell 通常是 0, 2).

sigignore %d

被忽略信号的 bitmap.

sigcatch %d

被俘获信号的 bitmap.

wchan %u

进程睡眠的内核函数名

nswap %lu

交换出去的页数

cnswap %lu

累计交换出去的页数

exit_signal %d

退出时发送的信号名

 processor %d

 SMP处理器中最后执行的CPU
ID

status文件:进程状态,以更好的可读格式显示出来。

statm文件:进程对内存的使用情况。

           
        size      total program size

 
             resident   resident set size

              
share      shared pages

              
text       text (code)

              
lib        library

              
data       data/stack

              
dt         dirty pages (unused in Linux 2.6)

task目录:多线程程序中,task目录里面包含每个线程号的子目录,目录下内容与进程号目录相同

II)其他系统信息

/proc

cmdline文件:内核的启动命令行,通过bootloader设置,grub或者u-boot等

cpuinfo文件:提供CPU的多种信息

devices文件:列出字符设备和快设备的主设备号,以及分配到这些设备号的设备名称

dma文件:驱动程序保留的DMA通道和保留它们的驱动程序名称

file systems文件:列出可以使用的文件类型

interrupts文件:列出系统注册过的中断

ioports文件:列出了诸如磁盘驱动器、声卡等设备的IO端口范围

kcore文件:系统的物理内存以core文件格式保存的文件

kmsg文件:检索printk生成的内核信息,同dmesg

ksysm文件:列出已经登记的内核符号,给出了变量或者函数的地址

loadavg文件:列出以几个不同的时间间隔计算的系统平均负载,前三个数字表示过去1分钟、5分钟、15分钟运行队列的平均负载,随

后正在运行任务数/活跃任务数,最后是上次使用CPU的进程号

                            
                                                1.061.06 0.95 6/85 214

locks文件:包含在打开的文件上的加锁信息,由/linux/fs/lock.c中的get_locks_status函数产生

mdstat文件:md设备驱动程序控制的RAID设备信息

meminfo文件:给出了内存状态的信息,显示出系统中空闲内存、已用物理内存和交换内存的总量,还显示出内核使用的共享内存和缓

冲区总量,free命令就是读取这个的

misc文件:报告内核函数misc_register函数登记的设备驱动程序

modues文件:给出可加载内核模块的信息,lsmod由此得出

mounts文件:挂载信息

rtc文件:硬件实时时钟的信息

stat文件:cput利用率、磁盘、内存页、内存对换、全部中断、接触开关以及上次自举时间(1970.1.1以来的秒数)

version文件:说明系统正在运行的内核版本

slabinfo文件:内核slab控制器使用情况

 

III)net目录

arp文件:arp表

dev文件:来自网络设备的统计,ifconfig命令就是解析它而来

dev_mcast:列出链路层多播组

igmp:加入的IGMP多播组

netlink:netlingk套接口信息

netstat:网络流量的多种统计

raw:原始套接口的套接口表

route:静态路由表

rpc:包含RPC信息的目录

rt_cache:路由缓冲

snmp:snmpagent的ip/icmp/tcp/udp协议统计,各行交替给出字段名和值

sockstat:列出使用tcp/udp/raw/pac/syn_cookies的数量

tcp:TCP连接的套接口表

udp:UDP连接的套接口表

unix:UNIX域套接口的套接口表

其他网卡驱动加入的相关信息

 

IV)其他繁多的目录

proc/scsi子目录:包含一个列出所有检测到的scsi设备的文件,并且为每个控制器驱动程序建立一个目录,这个目录下面又为每个驱动实例提供一个子目录

 

proc/sys目录:该目录下的文件基本都是内核中的一些变量,我们可以通过改变这些变量的值来改变内核的参数。该目录内容较多,且一般不常用,例子:

                            
 ./fs/file-max:内核分配的文件句柄的最大数目

                            
 ./fs/file-nr:已经分配的文件句柄数、已使用的句柄数、最大数

                            
 ./kernel/osrelase:内核版本号

                            
 ./kernel/rtsig-nr:当前队列中实时信号的数目

         
./kernel/shmall:共享内存的最大值

                            
 ./core/rmem_default:套接口读缓冲的默认值

                            
 ./core/wmem_default:套接口写缓冲的默认值

                            
 ./net/ipv4/ip_forward:是否允许内部转发(net目录包含繁多的各种网络参数)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: