linuxproc详解proc文件系统总览:在unixlike操作系统中,几乎所有的数据实体都被抽象成文件。可以认为procfs文件系统的作用是将内核信息抽象成文件接口,内核信息和可设置参数都以文件的形式存在,并组成1个目录树。使得用户可通过文件系统接口(echo,cat等命令,只要权限允许)来获取和调整内核状态。同时procfs文件系统也为用户提供了1个接口,使得用户的内核模块或用户态程序可通过procfs传递参数。linux中的一些系统工具需要通过procfs获取内核参数,比如ps、lspci等命令。可通过以下命令加载1个procfs文件系统(首先需要确认目标系统支持procfs):#mount–tprocnone/proc也可在/etc/fstab文件中加入以下命令,使得系统在启动时自动加载procfs:none/procprocdefaults00在proc文件系统中,主要包含3部分内容,进程相关部分、系统信息部分以及各子系统相关部分。以下为1个典型的procfs文件系统目录示例:ls/proc1221662281cmdlineinterruptsmeminfostat13200121673cpuinfoiomemmiscswaps1646204221684cryptoioportsmodulessys1780205821695devicesirqmountssysrq-trigger1834208721706dmaisapnpmtrrsysvipc1838209621717driverkcorenettty18572107220771execdomainskmsgpartitionsuptime1877211722088fbksymspciversion1889214322169filesystemsloadavgscsi190521532217apmfslocksself196021652219busidemdstatslabinfo从以上输出中可看到procfs所包含的内容:1.进程相关部分(只读):在procfs中存在一些以数字(pid)命名的目录,该数字即为对应进程的pid。/proc/self目录是1个指向当前进程的符号链接。当用户执行catself/cmdline命令时,会为执行cat命令而创建1个进程,并输出当前进程的命令行参数,也就是catself/cmdline(会省略空格)。2.内核信息部分(只读):这部分文件一般位于/proc目录下,可通过cat命令进行查看。会在/proc/cmdline文件中保存内核引导时的命令行参数:cat/proc/cmdlineroroot=/dev/hda23.内核各子系统相关部分(部分可调):在proc文件系统中会保存内核各子系统的信息和可调参数。主要有:(1)bus:总线信息;(2)drivers:驱动信息;(3)fs:文件系统特别信息;(4)ide:IDE接口信息;(5)irq:IRQ信息:(6)net:网络子系统信息;(7)scsi:SCSI系统信息;(8)sysvipc:IPC子系统信息;(9)tty:tty子系统信息(以上9项均为只读的);(10)sys:系统内核可调参数。linux内核中的大部分可调整参数被放置到/proc/sys目录下,这些参数以常规文件的形式体现,并可通过echo、cat等文件操作命令进行调整。在linux中也可通过sysctl方法来调整内核参数。sysctl方法是从BSD系统继承而来的1种动态调整内核参数的方法。在使用sysctl方法时,可将配置参数保存在/etc/sysctl.conf文件中,以便在启动时自动加载这些配置进程相关子目录:在/proc目录下存在一系列以数字命名的子目录,每个目录对应系统中当前存在的1个进程,目录名即为进程pid。进程相关目录用来存放对应进程的相关信息。进程相关目录中存在如下文件:文件名内容cmdline执行进程的命令行参数cpusmp系统中最后使用的cpucwd到当前工作目录的符号链接environ环境变量exe链接到进程对应的可执行文件fd该目录中保存进程所有打开的文件描述符maps进程内存映射,包含进程执行空间和动态链接库信息(2.4)mem进程内存空间root链接到进程执行时的‘/’(root)目录stat进程状态statm进程内存状态status进程状态总览,包含进程名字,当前状态和各种信息统计。可通过读取/proc/pid目录下的status文件,获得pid进程的当前状态。cat/proc/self/status#/proc/self为指向当前执行进程的符号链接Name:catState:R(running)Pid:5452PPid:743TracerPid:0(2.4)Uid:501501501501Gid:100100100100Groups:1001416VmSize:1112kBVmLck:0kBVmRSS:348kBVmData:24kBVmStk:12kBVmExe:8kBVmLib:1044kBSigPnd:0000000000000000SigBlk:0000000000000000SigIgn:0000000000000000SigCgt:0000000000000000CapInh:00000000fffffeffCapPrm:0000000000000000CapEff:0000000000000000以上示例显示的进程信息与用户执行/bin/ps命令获得的进程信息基本相同,这是因为ps命令也是通过procfs来获取进程信息的。在statm文件中记录了进程内存信息,如下所示:cat/proc/self/statm105105934128912以上输出信息含义如下:size:程序大小;resident:常驻内存空间大小;shared:共享内存页数;trs:代码段占用内存页数;drs:数据/堆栈段占用内存页数;lrs:引用库占用内存页数;dt:脏页数量。内核数据信息:/proc目录下的某些文件和目录记录了内核相关信息,这些文件有如下几种(根据系统配置和所加载的模块,不同系统所显示的文件种类不同):文件说明apm高级电源管理busbus总线相关信息cmdline内核引导命令行参数cpuinfocpu信息devices当前可用设备(块设备和字符设备)dmadma通道使用情况filesystem当前内核支持的文件系统类型driver驱动相关信息(2.4)execdomains安全相关的execdomains信息(2.4)fbframebuffer设备(2.4)fs本地文件系统参数(2.4)ideide子系统相关信息interrupts中断使用情况iomem内存映射图(2.4)ioportsio端口使用情况irqcpu的irq使用情况(2.4,smp)isapnpISApnp相关信息kcorekernelcoreimage内核转储映像(2.4)kmsgkernelmessagesksymskernelsymboltable内核符号表loadavg最后1,5,15分钟的平均负载lockskernellocks,内核锁信息meminfo内存信息misc内核杂项信息modules已加载的内核模块列表mounts已加载文件系统net网络子系统信息partitions已识别的本地系统分区表pcipci总线相关信息,在新版本中指向/proc/bus/pci(2.4)rtcrtc实时时钟scsiscsi总线信息slabinfoslab内存分配池信息stat内核状态总览swapsswap空间状态sys内核系统参数sysvipcsysvipc资源状态(msg,sem,shm)(2.4)ttytty驱动信息uptime系统uptimeversion内核版本videovideo资源状态(2.4)可使用系统中的文件访问命令访问/proc目录中的文件(只要权限允许),例如查看系统中断信息:cat/proc/interruptsCPU00:8728810XT-PICtimer1:895XT-PICkeyboard2:0XT-PICcascade3:531695XT-PICaha152x4:2014133XT-PICserial5:44401XT-PICpcnet_cs8:2XT-PICrtc11:8XT-PICi8236512:182918XT-PICPS/2Mouse13:1XT-PICfpu14:1232265XT-PICide015:7XT-PICide1NMI:0在2.4版本内核中,当使能smp时这个文件末尾会多出2行smp相关属性LOC&ERR:cat/proc/interruptsCPU0CPU10:12434981214548IO-APIC-edgetimer1:89498958IO-APIC-edgekeyboard2:00XT-PICcascade5:1128610161IO-APIC-edgesoundblaster8:10IO-APIC-edgertc9:2742227407IO-APIC-edge3c50312:113645113873IO-APIC-edgePS/2Mouse13:00XT-PICfpu14:2249124012IO-APIC-edgeide015:21832415IO-APIC-edgeide117:3056430414IO-APIC-leveleth018:177164IO-APIC-levelbttvNMI:24579612457959LOC:24578822457881ERR:2155NMI是每个cpu上产生的不可屏蔽中断(NonMaskableInterrupt)计数。LOC是每个cpu上APIC本地中断计数。ERR是smp系统中IO-APIC总线失败错误的计数。若该数值较高,可能当前内核的运行会有问题,此时可能需要测试内核,查看硬件和APIC是否有兼容性问题。ide设备:/proc/ide目录包含内核识别出的所有ide设备的信息。在/proc/ide目录下包含drivers文件和若干个以ide设备或ide控制器命名的子目录。ls-alF/proc/ide/total3dr-xr-xr-x4rootroot010月923:36./dr-xr-xr-x54rootroot02004-10-10../-r--r--r--1rootroot010月923:36driverslrwxrwxrwx1rootroot810月923:36hda-ide0/hda/lrwxrwxrwx1rootroot810月923:36hdb-ide0/hdb/lrwxrwxrwx1rootroot810月923:36hdc-ide1/hdc/dr-xr-xr-x4rootroot010月923:36ide0/dr-xr-xr-x3rootroot010月923:36ide1/-r--r--r--1rootroot010月923:36piix在/proc/ide/drivers文件中记录了当前加载的ide设备驱动:cat/proc/ide/driverside-floppyversion0.99.newideide-diskversion1.17ide-defaultversion0.9.newide在/proc/ide目录下还存在一些以设备命名的目录,比如piix是某系统中ide控制芯片组的名字(在其它系统中,ide控制芯片组可能是其它名字)。此外还包含若干以ide控制器命名的目录(一般pc系统为2个),以及以ide终端设备命名的快捷方式,它们将链接到控制器目录下对应的设备文件中。在/proc/ide目录下存在以下文件和目录:文件名内容channelide通道(0or1)config配置文件(onlyforpci/idebridge)matematenamemodelide控制器的类型/芯片组hdide总线上连接的可用设备当前连接在控制器上的每个设备也作为1