分类: LINUX
2009-06-30 22:05:22
简介:
Linux系统上的/proc目录是一种文件系统,与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点,比如有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。
为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程的PID。
大多数虚拟文件可以使用文件查看命令如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
cmdline 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息。
[root@rhel5 ~]# more /proc/2674/cmdline
/usr/sbin/saslauthd
cwd 指向当前进程运行目录的一个符号链接。
environ 当前进程的环境变量列表,环境变量彼此之间用空字符(NULL)隔开。变量名用大写字母表示,其值用小写字母表示。
[root@rhel5 ~]# more /proc/2674/environ
TERM=linuxauthd
exe 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝。
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
limits 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元。此文件仅可由实际启动当前进程的UID用户读取。
maps 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表。
[root@rhel5 ~]# cat /proc/2674/maps
00110000-00239000 r-xp 00000000 08:02 130647 /lib/libcrypto.so.
00239000
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
mem 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取。
root 指向当前进程运行根目录的符号链接。在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录。
stat 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用。
statm 当前进程占用内存的状态信息,通常以“页面”(page)表示。
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
…………
task 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容。
/proc下其他文件介绍:
/proc/apm
高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用。
/proc/buddyinfo
用于诊断内存碎片问题的相关信息文件。
/proc/cmdline
在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递。
[root@rhel5 ~]# more /proc/cmdline
ro root=/dev/VolGroup00/LogVol00 rhgb quiet
/proc/cpuinfo
处理器的相关信息的文件。
/proc/crypto
系统上已安装的内核使用的密码算法及每个算法的详细信息列表。
[root@rhel5 ~]# more /proc/crypto
name : crc
driver : crc
module : kernel
priority : 0
type : digest
blocksize : 32
digestsize : 4
…………
/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
…………
/proc/diskstats
每块磁盘设备的磁盘I/O统计信息列表。
/proc/dma
每个正在使用且注册的ISA DMA通道的信息列表。
[root@rhel5 ~]# more /proc/dma
2: floppy
4: cascade
/proc/execdomains
内核当前支持的执行域(每种操作系统独特“个性”)信息列表;
[root@rhel5 ~]# more /proc/execdomains
0-0 Linux [kernel]
/proc/fb
帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息。
/proc/filesystems
当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持。通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型。
[root@rhel5 ~]# more /proc/filesystems
nodev sysfs
nodev rootfs
nodev proc
iso9660
ext3
…………
/proc/iomem
每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息。
[root@rhel5 ~]# more /proc/iomem
00000000
…………
/proc/ioports
当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表。如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备。
[root@rhel5 ~]# less /proc/ioports
0000
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060
......
......