http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html 极力推荐,详细
http://bbs.chinaunix.net/thread-2002769-1-1.html
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。
为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。
大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。
一、 进程目录中的常见文件介绍
/proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。
[root@rhel5 ~]# ll /proc total 0 dr-xr-xr-x 5 root root 0 Feb 8 17:08 1 dr-xr-xr-x 5 root root 0 Feb 8 17:08 10 dr-xr-xr-x 5 root root 0 Feb 8 17:08 11 dr-xr-xr-x 5 root root 0 Feb 8 17:08 1156 dr-xr-xr-x 5 root root 0 Feb 8 17:08 139 dr-xr-xr-x 5 root root 0 Feb 8 17:08 140 dr-xr-xr-x 5 root root 0 Feb 8 17:08 141 dr-xr-xr-x 5 root root 0 Feb 8 17:09 1417 dr-xr-xr-x 5 root root 0 Feb 8 17:09 1418
|
上面列出的是/proc目录中一些进程相关的目录,每个目录中是当程本身相关信息的文件。下面是作者系统(RHEL5.3)上运行的一个PID为2674的进程saslauthd的相关文件,其中有些文件是每个进程都会具有的,后文会对这些常见文件做出说明。
[root@rhel5 ~]# ll /proc/2674 total 0 dr-xr-xr-x 2 root root 0 Feb 8 17:15 attr -r-------- 1 root root 0 Feb 8 17:14 auxv -r--r--r-- 1 root root 0 Feb 8 17:09 cmdline -rw-r--r-- 1 root root 0 Feb 8 17:14 coredump_filter -r--r--r-- 1 root root 0 Feb 8 17:14 cpuset lrwxrwxrwx 1 root root 0 Feb 8 17:14 cwd -> /var/run/saslauthd -r-------- 1 root root 0 Feb 8 17:14 environ lrwxrwxrwx 1 root root 0 Feb 8 17:09 exe -> /usr/sbin/saslauthd dr-x------ 2 root root 0 Feb 8 17:15 fd -r-------- 1 root root 0 Feb 8 17:14 limits -rw-r--r-- 1 root root 0 Feb 8 17:14 loginuid -r--r--r-- 1 root root 0 Feb 8 17:14 maps -rw------- 1 root root 0 Feb 8 17:14 mem -r--r--r-- 1 root root 0 Feb 8 17:14 mounts -r-------- 1 root root 0 Feb 8 17:14 mountstats -rw-r--r-- 1 root root 0 Feb 8 17:14 oom_adj -r--r--r-- 1 root root 0 Feb 8 17:14 oom_score lrwxrwxrwx 1 root root 0 Feb 8 17:14 root -> / -r--r--r-- 1 root root 0 Feb 8 17:14 schedstat -r-------- 1 root root 0 Feb 8 17:14 smaps -r--r--r-- 1 root root 0 Feb 8 17:09 stat -r--r--r-- 1 root root 0 Feb 8 17:14 statm -r--r--r-- 1 root root 0 Feb 8 17:10 status dr-xr-xr-x 3 root root 0 Feb 8 17:15 task -r--r--r-- 1 root root 0 Feb 8 17:14 wchan
|
1.1、cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息;
[root@rhel5 ~]# more /proc/2674/cmdline /usr/sbin/saslauthd
|
1.2、cwd — 指向当前进程运行目录的一个符号链接;
1.3、environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示;
[root@rhel5 ~]# more /proc/2674/environ TERM=linuxauthd
|
1.4、exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝;
1.5、fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接;
[root@rhel5 ~]# ll /proc/2674/fd total 0 lrwx------ 1 root root 64 Feb 8 17:17 0 -> /dev/null lrwx------ 1 root root 64 Feb 8 17:17 1 -> /dev/null lrwx------ 1 root root 64 Feb 8 17:17 2 -> /dev/null lrwx------ 1 root root 64 Feb 8 17:17 3 -> socket:[7990] lrwx------ 1 root root 64 Feb 8 17:17 4 -> /var/run/saslauthd/saslauthd.pid lrwx------ 1 root root 64 Feb 8 17:17 5 -> socket:[7991] lrwx------ 1 root root 64 Feb 8 17:17 6 -> /var/run/saslauthd/mux.accept
|
1.6、limits — 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(2.6.24以后的内核版本支持此功能);
1.7、maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表;
[root@rhel5 ~]# cat /proc/2674/maps 00110000-00239000 r-xp 00000000 08:02 130647 /lib/libcrypto.so.0.9.8e 00239000-0024c000 rwxp 00129000 08:02 130647 /lib/libcrypto.so.0.9.8e 0024c000-00250000 rwxp 0024c000 00:00 0 00250000-00252000 r-xp 00000000 08:02 130462 /lib/libdl-2.5.so 00252000-00253000 r-xp 00001000 08:02 130462 /lib/libdl-2.5.so
|
1.8、mem — 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取;
1.9、root — 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录;
1.10、stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用;
1.11、statm — 当前进程占用内存的状态信息,通常以“页面”(page)表示;
1.12、status — 与stat所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;其详细介绍请参见 proc的man手册页;
[root@rhel5 ~]# more /proc/2674/status Name: saslauthd State: S (sleeping) SleepAVG: 0% Tgid: 2674 Pid: 2674 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 32 Groups: VmPeak: 5576 kB VmSize: 5572 kB VmLck: 0 kB VmHWM: 696 kB VmRSS: 696 kB …………
|
1.13、task — 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核2.6版本以后支持此功能)
二、/proc目录下常见的文件介绍
2.1、/proc/apm
高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用;
2.2、/proc/buddyinfo
用于诊断内存碎片问题的相关信息文件;
2.3、/proc/cmdline
在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递;
[root@rhel5 ~]# more /proc/cmdline ro root=/dev/VolGroup00/LogVol00 rhgb quiet
|
2.4、/proc/cpuinfo
处理器的相关信息的文件;
2.5、/proc/crypto
系统上已安装的内核使用的密码算法及每个算法的详细信息列表;
[root@rhel5 ~]# more /proc/crypto name : crc32c driver : crc32c-generic module : kernel priority : 0 type : digest blocksize : 32 digestsize : 4 ………… |
2.6、/proc/devices
系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名;
[root@rhel5 ~]# more /proc/devices Character devices: 1 mem 4 /dev/vc/0 4 tty 4 ttyS …………
Block devices: 1 ramdisk 2 fd 8 sd ………… |
2.7、/proc/diskstats
每块磁盘设备的磁盘I/O统计信息列表;(内核2.5.69以后的版本支持此功能)
2.8、/proc/dma
每个正在使用且注册的ISA DMA通道的信息列表;
[root@rhel5 ~]# more /proc/dma 2: floppy 4: cascade
|
2.9、/proc/execdomains
内核当前支持的执行域(每种操作系统独特“个性”)信息列表;
[root@rhel5 ~]# more /proc/execdomains 0-0 Linux [kernel]
|
2.10、/proc/fb
帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息;
2.11、/proc/filesystems
当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型;
[root@rhel5 ~]# more /proc/filesystems nodev sysfs nodev rootfs nodev proc iso9660 ext3 ………… …………
|
2.12、/proc/interrupts
X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号;
[root@rhel5 ~]# more /proc/interrupts CPU0 0: 1305421 IO-APIC-edge timer 1: 61 IO-APIC-edge i8042 185: 1068 IO-APIC-level eth0 …………
|
2.13、/proc/iomem
每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息;
[root@rhel5 ~]# more /proc/iomem 00000000-0009f7ff : System RAM 0009f800-0009ffff : reserved 000a0000-000bffff : Video RAM area 000c0000-000c7fff : Video ROM …………
|
2.14、/proc/ioports
当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备;
[root@rhel5 ~]# less /proc/ioports 0000-001f : dma1 0020-0021 : pic1 0040-0043 : timer0 0050-0053 : timer1 0060-006f : keyboard …………
|
2.15、/proc/kallsyms
模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;(内核2.5.71以后的版本支持此功能);通常这个文件中的信息量相当大;
[root@rhel5 ~]# more /proc/kallsyms c04011f0 T _stext c04011f0 t run_init_process c04011f0 T stext …………
|
2.16、/proc/kcore
系统使用的物理内存,以ELF核心文件(core file)格式存储,其文件大小为已使用的物理内存(RAM)加上4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由GBD通常调试工具使用,但不能使用文件查看命令打开此文件;
2.17、/proc/kmsg
此文件用来保存由内核输出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要试图使用查看命令打开此文件;
2.18、/proc/loadavg
保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID;
[root@rhel5 ~]# more /proc/loadavg 0.45 0.12 0.04 4/125 5549
[root@rhel5 ~]# uptime 06:00:54 up 1:06, 3 users, load average: 0.45, 0.12, 0.04
|
2.19、/proc/locks
保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户任何形式的访问;
[root@rhel5 ~]# more /proc/locks 1: POSIX ADVISORY WRITE 4904 fd:00:4325393 0 EOF 2: POSIX ADVISORY WRITE 4550 fd:00:2066539 0 EOF 3: FLOCK ADVISORY WRITE 4497 fd:00:2066533 0 EOF
|
2.20、/proc/mdstat
保存RAID相关的多块磁盘的当前状态信息,在没有使用RAID机器上,其显示为如下状态:
[root@rhel5 ~]# less /proc/mdstat Personalities : unused devices: <none>
|
2.21、/proc/meminfo
系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;
[root@rhel5 ~]# less /proc/meminfo MemTotal: 515492 kB MemFree: 8452 kB Buffers: 19724 kB Cached: 376400 kB SwapCached: 4 kB ………… |
2.22、/proc/mounts
在内核2.4.29版本以前,此文件的内容为系统当前挂载的所有文件系统,在2.4.19以后的内核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向/proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接;/proc/self是一个独特的目录,后文中会对此目录进行介绍;
[root@rhel5 ~]# ll /proc |grep mounts lrwxrwxrwx 1 root root 11 Feb 8 06:43 mounts -> self/mounts
|
如下所示,其中第一列表示挂载的设备,第二列表示在当前目录树中的挂载点,第三点表示当前文件系统的类型,第四列表示挂载属性(ro或者rw),第五列和第六列用来匹配/etc/mtab文件中的转储(dump)属性;
[root@rhel5 ~]# more /proc/mounts rootfs / rootfs rw 0 0 /dev/root / ext3 rw,data=ordered 0 0 /dev /dev tmpfs rw 0 0 /proc /proc proc rw 0 0 /sys /sys sysfs rw 0 0 /proc/bus/usb /proc/bus/usb usbfs rw 0 0 ………… |
2.23、/proc/modules
当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;如下所示,其中第一列表示模块名,第二列表示此模块占用内存空间大小,第三列表示此模块有多少实例被装入,第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:已经装入;Loading:正在装入;Unloading:正在卸载),第六列表示此模块在内核内存(kernel memory)中的偏移量;
[root@rhel5 ~]# more /proc/modules autofs4 24517 2 - Live 0xe09f7000
|