proc 文件系统

/proc 文件系统


关于/proc文件系统

以前只知道/proc这个文件夹比较特殊,有一些内核参数可以在这里修改,并无更深入的了解。之后在一次笔试题中看到有问对/proc文件系统的理解,因为当时去打酱油了,所以也就没怎么在意。后来实验室的一个项目中要用到进程监控相关的东西,再次想到了/proc,这次正好好好学习一下。

/proc文件夹有什么特殊的地方?

大概更专业的叫法应该叫做proc文件系统(procfs),“/proc”是这个文件系统的挂载点,系统启动时完成自动挂载。说它奇怪是因为虽然你可以像平常的文件系统一样浏览,但是这个文件系统中的东西在硬盘是却是不存在的!当你用”ls -l”查看的时候,会发现除了一些链接文件之外,绝大部分文件的大小都是0。

Linux或是Unix设计时遵循的一个原则就是“一切皆文件”,除了正常的文本文件和二进制文件,比较典型的就是/dev下的文件,代表了系统的所有设备。另外还有用于进程间通信的管道和网络通信的socket,同样是以特殊文件的形式存在的。所以这里也就不难解释了,/proc 包含了当前系统运行时的所有状态。包括了内核状态,全部的进程信息,cpu信息,内存信息等等。既然是用来表示系统状态这种实时信息的,所以这个文件系统中的内容也会由系统实时生成。

查看和修改/proc中的内容

使用ls命令查看/proc文件系统的话,显示的内容大致如下:

 

allen@allen-laptop:/proc$ ls /proc/
1     1169  1612  1775  1839  1894  22    30   478  691  925        execdomains    mdstat        sys
10    1199  1652  1783  1840  1896  23    31   480  7    928        fb             meminfo       sysrq-trigger
1075  12    1666  1787  1843  19    2387  32   49   70   934        filesystems    misc          sysvipc
1095  1201  1677  1789  1844  1902  2393  327  5    71   acpi       fs             modules       timer_list
11    1256  1678  1794  1845  1904  24    33   50   789  asound     interrupts     mounts        timer_stats
1101  13    1696  18    1846  1914  25    330  51   790  binder     iomem          mtrr          tty
1104  1300  17    1813  1847  1980  2518  34   52   8    buddyinfo  ioports        net           uptime
1109  1352  1711  1814  1848  1984  2522  35   523  834  bus        irq            pagetypeinfo  version
1110  14    1750  1817  1853  2     2530  36   6    837  cgroups    kallsyms       partitions    version_signature
1112  1491  1754  1818  1856  20    2531  37   62   840  cmdline    kcore          sched_debug   vmallocinfo
1115  15    1755  1820  1864  2003  2532  38   63   842  cpuinfo    key-users      schedstat     vmstat
1122  1509  1757  1823  1868  2016  26    4    64   847  crypto     kmsg           scsi          zoneinfo
1135  1510  1762  1827  1874  2019  2610  401  65   850  devices    kpagecount     self
1136  1511  1765  1832  1886  2021  27    41   66   851  diskstats  kpageflags     slabinfo
1137  16    1766  1833  1889  2045  28    419  67   858  dma        latency_stats  softirqs
1138  1603  1770  1837  1890  21    29    420  68   9    dri        loadavg        stat
1140  1607  1773  1838  1892  2191  3     421  69   924  driver     locks          swaps

可以将其中的内容分为三类来看:以数字命名的文件夹,非数字命名的文件夹和单纯的文件。
全数字的文件夹代表了系统的所有进程,进程的PID即为文件夹名。如果仔细查看文件夹属性的话,这一类文件夹都是只读的。值得注意的是这里有一个特殊的符号连接“self”,代表了系统中的当前正在执行的进程。关于进程的更详细的内容就都包含在文件夹中的各个文件中了。那些非数字命名的文件夹比如:driver,bus,scsi等等一般表示了系统不同模块的相应信息。其中的sys是设置内核运行时参数很重要的途径。另外就是一些文件了,比如:cpuinfo,meminfo,devices等等,直接表示系统相应硬件信息。常用的总结如下:

/proc/cpuinfo:记录了这台机器的cpu相关信息。/proc/meminfo:记录了相应的内存信息。/proc/apm:包含了高级电源管理(Advanced Power Management)相关的信息。/proc/cmdline:记录了系统启动的时候传递给内核的一些参数。/proc/loadavg:记录了系统之前一分钟,五分钟和十分钟的cpu负载。/proc/uptime:记录了系统从启动开始到现在经过的秒数和系统空闲的秒数。

上边说这里的内容都是由系统实时生成的,而且大部分内容都是只读的,所以想要查看其中某一文件的信息,只需要使用cat就可以了(习惯用法)。比如查看cpu信息,命令如下:

$cat/proc/cpuinfo关于进程信息

上边已经说过,以数字命名的文件夹都是对应相应的进程的信息。随便选一个文件夹,查看一下内容大致如下:

allen@allen-laptop:/proc/3348$ ls
attr cpuset io mountinfo pagemap smaps task
auxv cwd latency mounts personality stack wchan
cgroup environ limits mountstats root stat
clear_refs exe loginuid net sched statm
cmdline fd maps oom_adj schedstat status
coredump_filter fdinfo mem oom_score sessionid syscall

3348这个进程是我正在运行的bash的进程。需要注意的是当你进入一个不属于你的进程文件夹之后,某些文件可能权限不允许而不能访问。和上边情况类似,每个文件都表示所属进程某一方面的信息。常用的如下:

cmdline:表示进程启动时给它传递的所有参数。cwd:一个连接到此进程当前工作目录的符号连接。environ:包含此进程的全部环境变量。fd/:包含此进程所属的全部文件描述符的符号连接,可能会指向正在使用的文件或设备。status:包含全部的进程状态信息,监控进程主要查看这个文件。

平时常用来显示进程信息的ps和top命令就是通过读取/proc文件系统中的内容来获取进程信息的。

设置内核参数

虽说/proc下大部分文件都是只读的,仍然有一小部分是管理员可写的。其中最重要的就是/proc/sys文件夹中的内容。在这里管理员可以动态设定系统内核的各种参数,而不必等机器重启之后才生效。同样应为这里的内容是实时变化的,使用不同编辑器打开->编辑->保存这样的方式来设置参数是不可行的。因为很可能在你编辑内容的时候,它已经发生了变化。正确的方法是使用echo命令。比如你想修改系统默认允许进程打开最大文件描述上限,可以这样:

#echo "16384" > /proc/sys/fs/file-max

更详细内容可以在参考文章中查看。

参考文章

http://en.wikipedia.org/wiki/Procfs

http://www.linux.com/archive/articles/126718

http://www.ibm.com/developerworks/library/l-proc.html

http://www.ibm.com/developerworks/linux/library/l-adfly.html


本文转载自:http://hi.baidu.com/allense7en/item/42852f5ca57d6f12da16358b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值