全面了解Linux下Proc文件系统
Proc
是一个虚拟文件系统,在
Linux
系统中它被挂载于
/proc
目录之上。
Proc
有多个功能
,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有
用的功能,也是
Linux
变得更加特别的功能就是以文本流的形式来访问进程信息。很
Linux
命令
(
比如
ps
、
toPpstree
等
)
都需要使用这个文件系统的信息。
本文就是向用户介绍一些访问这些信息的方法
。需要说明的是,本文所述的内容并不
一定适用所有内核版本,有部分操作只适用于
2.6
内核。
一、进程信息
在
/proc
文件系统中,每一个进程都有一个相应的文件
。下面是
/proc
目录下的一些重要文件
:
/proc/pid/cmdline
包含了用于开始进程的命令
;
/proc/pid/cwd
包含了当前进程工作目录的一个链接
;
/proc/pid/environ
包含了可用进程环境变量的列表
;
/proc/pid/exe
包含了正在进程中运行的程序链接;
/proc/pid/fd/
这个目录包含了进程打开的每一个文件的链接;
/proc/pid/mem
包含了进程在内存中的内容;
/proc/pid/stat
包含了进程的状态信息;
/proc/pid/statm
包含了进程的内存使用信息。
下面是一些获取进程信息的例子:
◆
假设现在要查看是否所有的进程都会做存储器清除工作。在
/proc/pid/stat
文件中的每一
个进程标识
(
第
8
个属性
)
提供了有关进程的很多
“个人”信
息。这个信
息可以对每一个
进程标识进行。
0x00000002 Process being created
0x00000004 Exiting
0x00000008 Dead
0x00000040 Process using
superuser privflage
0x00000200 P rocess dumping core
0x00000400 Prooess received some signal
0x00000800 Process allocating memory
0x00001000 Killed due to out-of--memory condition
笔者从
/usr/src/linux/include/linux/sched.h
中提取了这些信息。
◆
/proc/pid/fd/
目录提供
了有关打开文件的信息。要查看被进程使用的输入文件,使用以下命令
:
# ls –l /proc/pid/fd/0
◆
查看被进程使用
socket
,使用以下命令
:
#ls –l /proc/pid/fd|sed –n `/socket/{s/.*\[//;s/\]//p}`
有关这些
socket
的信息可以使用以下命令获取
:
# netstat --ae
◆
要将命令行参数传递给任意进程,使用以下命令
:
~~cat /proc/pid/cmdline
◆
要
获取某一进程父进程的
ID
号,使用以下命令:
#grep PPid/proc/pid/status
二、普通的系统信息
Proc
包含了很多系统信息,这其中包括
CPU
负载、文件系统和网络配置
。下面是一些通过
Proc
查看和更改系统的例子:
◆
获取可用系统内存的空间
:
# grep Free /proc/meminfo
◆
自从系统最后一次启动后的系统统计可以从
/proc/stat
文件中获取
:
#grep processes /proc/stat
◆
获知第
1
、
5
和
15
分钟系统负载的平均值
:
#awk `{print “1 min:\t” $1 “\n5 min:\t” $2 “\n15 min:\t” $3}` /proc/loadavg
◆
/proc/partitions
可用于获取系统的分区信息
。
◆
/proc/net
和
/proc/sys/net
可用于查看和更改重要的网络信息。比如,禁用
ping
命令,可以以
root
身份运行以下命令
:
#echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all
如果要启用
IP
转发
/IP
伪装,使用以下命令
:
#echo 1> /proc/sys/net/ipv4/ip_forward
◆
已经挂载的文件系统信息可以从
/proc/mounts
中检索。
◆
要改变正在使用的主机名
,使用以下命令:
# echo www.abc.corn >/proc/sys/kernel/hostname
◆
要获取
CPU
信息,使用以下命令
:
# cat /proc/cpuinfo
◆
要获知
swap
空间的使用情况
,使用以下命令:
# cat /proc/swaps
◆
获取系统的正常运行时间:
#cat /proc/uptime
◆
列出由
NFS
共享的文件系统:
# cat /proc/fs/nfsd/exports
三、相关内核的信息
这是一个非常宽泛的主题,这里只介绍其中一小部分内容:
◆
从正在运行的内核中获知内核的版本:
#cat /proc/version
◆
/proc/kmsg
文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用。
◆
/proc/kcore
文件提供了以内核文件格式形式访问系统物理内存,并且可以被
gdb
用于检查任意内核数据结构的当前状态。如果装了源码,那么可以通过查看
/usr/src/linux/Documentation/filesystems/proc.txt
文件来获取更多的信息
。
从中可以看出来,
Proc
是一个非常不错的获取系统信息渠道。如果利用得好,则它对
Linux
系统的维护和管理能提供非常大的帮助。
本文出自 “李晨光原创技术博客” 博客,谢绝转载!