大龙的博客

常用链接

统计

最新评论

Proc令系统信息了如指掌

Proc是一个虚拟文件系统,在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系统的维护和管理能提供非常大的帮助。

posted on 2013-02-16 23:16 大龙 阅读(214) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理