一 文件信息
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。它的目录结构如下: 文件名称 | 文件内容 |
apm | 高级电源管理信息 |
cmdline | 内核命令行 |
Cpuinfo | 关于Cpu信息 |
Devices | 可以用到的设备(块设备/字符设备) |
Dma | 使用的DMA通道 |
Filesystems | 支持的文件系统 |
Interrupts | 中断的使用 |
Ioports | I/O端口的使用 |
Kcore | 内核核心印象 |
Kmsg | 内核消息 |
Ksyms | 内核符号表 |
Loadavg | 负载均衡 |
Locks | 内核锁 |
Meminfo | 内存信息 |
Misc | 杂项 |
Modules | 加载模块列表 |
Mounts | 加载的文件系统 |
Partitions | 系统识别的分区表 |
Rtc | 实时时钟 |
stat | CPU利用率,磁盘,内存页,内存对换,全部中断,接触开关以及赏赐自举时间(自1970年1月1日起的秒数)。 |
二 系统目录
并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数(见下一部分),而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi目录不存在。 目录名称 | 目录内容 |
net | 网络配置参数 |
sys | 可写,修改系统内核参数 |
scsi | 可选,列出了所有检测到的SCSI设备的文件 |
三 进程目录及其文件
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc 下,以进程的PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。Proc文件系统的名字就是由之而起。进程目录的结构如下: 进程目录 | 目录内容 |
Cmdline | 命令行参数 |
Environ | 环境变量值 |
Fd | 一个包含所有文件描述符的目录 |
Mem | 进程的内存被利用情况 |
Stat | 进程状态 |
Status | 进程当前状态,以可读的方式显示出来 |
Cwd | 当前工作目录的链接 |
Exe | 指向该进程的执行命令文件 |
Maps | 内存映象 |
Statm | 进程内存状态信息 |
Root | 链接此进程的root目录 |
四 修改内核配置参数
1) 改变内核的参数
只要用vi编辑或echo参数重定向到文件中即可。下面有一个例子:# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
如果你优化了参数,则可以把它们写成添加到文件rc.local中,使它在系统启动时自动完成修改。
2) 持久改变内核参数
这里提供了一个方便的实用程序,用于更改 /proc/sys 目录下的任何内核参数。它使您可以更改运行中的内核(类似于上面用到的 echo 和重定向方法),但它还有一个在系统引导时执行的配置文件。这使您可以更改运行中的内核,并将这些更改添加到配置文件,以便于在系统重新引导之后,这些更改仍然生效。
该实用程序称为 sysctl,在 sysctl(8) 的联机帮助页中,对这个实用程序进行了完整的文档说明。sysctl 的配置文件是 /etc/sysctl.conf,可以编辑该文件,并在 sysctl.conf(8) 下记录了该文件。sysctl 将 /proc/sys 下的文件视为可以更改的单个变量。所以,以 /proc/sys 下的文件 /proc/sys/fs/file-max 为例,它表示系统中所允许的文件句柄的最大数目,这个文件被表示成 fs.file-max。将 /proc/sys 中的文件转换成 sysctl 中的变量有两个简单的规则:
去掉前面部分 /proc/sys。
将文件名中的正斜杠变为点。
这两条规则使您能将 /proc/sys 中的任一文件名转换成 sysctl 中的任一变量名。一般文件到变量的转换为:
/proc/sys/dir/file --> dir.file
dir1.dir2.file --> /proc/sys/dir1/dir2/file
可以使用命令 sysctl -a 查看所有可以更改的变量和其当前设置。
用 sysctl 还可以更改变量,它所做的工作与上面所用的 echo 方法完全一样。其表示法为:还是用 file-max 作为示例,使用下面两种方法中的一种将该值更改为 16384:
sysctl -w fs.file-max="16384"
五 系统目录下的文件目录
1) /proc/net 目录
[wuqifu@localhost net]$ ls /proc/net anycast6 dev_snmp6 ip6_flowlabel mcfilter packet route rt_cache sockstat tcp udp6 arp if_inet6 ip_mr_cache mcfilter6 psched rpc sk98lin sockstat6 tcp6 unix dev igmp ip_mr_vif netlink raw rt6_stats snmp softnet_stat tr_rif wireless dev_mcast igmp6 ipv6_route netstat raw6 rt_acct snmp6 stat udp 文件名称 | 文件内容 |
arp | 转储每个网络接口的arp表中dev包的统计 |
dev | 来自网络设备的统计 |
dev_mcast | 列出二层(数据链路层)多播组 |
igmp | 加入的IGMP多播组 |
netstat | 网络流量的多种统计。第一行是信息头,带有每个变量的名称。接下来的一行保存相应变量的值 |
sockstat | 列出使用的tcp/udp/raw/pac/syc_cookies的数量 |
raw | 原始套接口的套接口表 |
rt6_stats | |
rt_acct | |
route | 静态路由表 |
snmp | snmp agent的ip/icmp/tcp/udp协议统计;各行交替给出字段名和值 |
tcp | TCP连接的套接口 |
udp | UDP连接的套接口 |
unix | UNIX域套接口的套接口表 |
2) /proc/sys目录
[wuqifu@localhost sys]$ ls /proc/sys debug dev fs kernel net proc sunrpc vm 目录名称 | 目录内容 |
kernel | 内核参数 |
net | 内核网络配置参数 |
fs | 文件配置参数 |
proc | 进程配置参数 |
vm | 缓冲区,内存 |
dev | 系统设备 |
debug | |
sunrpc |
/proc/sys/kernel/ 目录中的文件
文件名 | 描述 |
threads-max | 内核可运行的最大任务数。 |
ctrl-alt-del | 如果值为 1,那么顺序按下这几个键将“彻底地”重新引导系统。 |
sysrq | 如果值为 1,Alt-SysRq 则为激活状态。 |
osrelease | 显示操作系统的发行版版本号 |
ostype | 显示操作系统的类型。 |
hostname | 系统的主机名。 |
domainname | 网络域,系统是该网络域的一部分。 |
modprobe | 指定 modprobe 是否应该在启动时自动运行并加载必需的模块。 |
acct | 该文件有三个可配置值,根据包含日志的文件系统上可用空间的数量(以百分比表示),这些值控制何时开始进行进程记帐 |
msgmax | 从一个进程发送到另一个进程的消息的最大长度。 |
msgmnb | 在一个消息队列中最大的字节数。 |
msgmni | 消息队列标识的最大数目 |
panic | 零(0)秒设置在发生内核严重错误时将禁止重新引导。 |
printk | 该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。该文件的四个值为: 控制台日志级别:优先级高于该值的消息将被打印至控制台 缺省的消息日志级别:将用该优先级来打印没有优先级的消息 最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级) 缺省的控制台日志级别:控制台日志级别的缺省值 |
threads-max | 内核所能使用的线程的最大数目 |
suid_dumpable | 使用了suid位的是否产生core文件 |
文件名 | 描述 |
ip_forward | 在网络本地接口之间转发数据报 |
ip_default_ttl | 表示IP数据报的Time To Live值 |
ip_no_pmtu_disc | 关闭路径MTU探测,默认值为FALSE |
ipfrag_high_thresh | 用来组装分段的IP包的最大内存量 |
ipfrag_low_thresh | |
ipfrag_time | 保存一个IP分片在内存中的时间 |
inet_peer_threshold | INET对端存储器某个合适值,该阀值同样决定生存时间以及废物收集通过的时间间隔。 |
/proc/sys/net/core 目录中的文件
文件名 | 描述 |
optmem_max | 每个套接字所允许的最大缓冲区的大小 |
rmem_default | 接收套接字缓冲区大小的缺省值(以字节为单位)。 |
rmem_max | |
/proc/sys/fs 目录中的文件
文件名 | 描述 |
file-max | 可以分配的文件句柄的最大数目 |
file-nr | 该文件与 file-max 相关,它有三个值: 已分配文件句柄的数目 已使用文件句柄的数目 文件句柄的最大数目 该文件是只读的,仅用于显示信息。 |
inode-* | 操作与索引节点有关,而与文件句柄无关。 |
overflowuid | uid的最大值 |
overflowgid | gid的最大值 |
super-max | 超级块处理程序的最大数目 |
super-nr | 显示当前已分配超级块的数目。该文件是只读的,仅用于显示信息。 |
/proc/sys/vm 目录中的文件
文件名 | 描述 |
freepages | 该文件控制系统如何应对各种级别的可用内存 |
kswapd | 该文件控制允许内核如何交换内存 |
pagecache | 针对文件的内存映射和一般高速缓存。 |
参考文献:
http://www.faq-it.org/archives/linux_basic/9ed4777508c82a3fa7048252a17cf6f3.php
http://www.linuxsir.org/bbs/showthread.php?threadid=57792