linux proc详解.docx

上传人:b****7 文档编号:8808914 上传时间:2023-02-01 格式:DOCX 页数:22 大小:76.92KB
下载 相关 举报
linux proc详解.docx_第1页
第1页 / 共22页
linux proc详解.docx_第2页
第2页 / 共22页
linux proc详解.docx_第3页
第3页 / 共22页
linux proc详解.docx_第4页
第4页 / 共22页
linux proc详解.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

linux proc详解.docx

《linux proc详解.docx》由会员分享,可在线阅读,更多相关《linux proc详解.docx(22页珍藏版)》请在冰豆网上搜索。

linux proc详解.docx

linuxproc详解

Linuxprocfs详解

1.proc文件系统总览

在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作。

在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs、devfs、sysfs和procfs。

而procfs就是其中应用最广泛的一种伪文件系统。

procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就可以简单直接的通过echo或cat这样的文件操作命令对系统信息进行查取和调整了。

同时procfs也提供了一个接口,使得我们自己的内核模块或用户态程序可以通过procfs进行参数的传递。

在当今的Linux系统中,大量的系统工具也通过procfs获取内核参数,例如ps、lspci等等,没有procfs它们将可能不能正常工作。

在proc文件系统中,主要包含三大类内容,进程相关部分,系统信息部分,以及系统子系统部分。

在下面我们可以看到一个典型的procfs布局:

>ls/proc

内核各子系统相关部分(部分可调)

这部分是系统内核参数调整的重头戏,在procfs中,除去上面所述的两部分内容外,还有很大一部分信息文件被存放在了一些并非以数字命名的特殊目录中,这些目录下的信息就是内核各个重要子系统的信息和可调参数,主要有:

bus总线信息(只读)

drivers驱动信息(只读)

fs文件系统特别信息(只读)

ideIDE接口信息(只读)

irqIRQ信息(只读)

net网络子系统信息(只读)

scsiSCSI系统信息(只读)

sysvipcIPC子系统信息(只读)

ttytty子系统信息(只读)

sys系统内核可调参数(可调)

作为Linux系统内核参数的抽象文件接口,Linux内核的大部分默认可调参数都被放在了/proc/sys目录下,这些参数都以常规文件的形式体现,并且可以用echo/cat等文件操作命令进行调整,调整的效果是即时的,并且在系统运行的整个生命周期之间都有效(直到再次改变它们或者系统重启)。

当然Linux也提供了另外一种途径sysctl来调整这些参数,sysctl是从BSD系统继承而来的一种系统参数动态调整方法,sysctl的使用更为简单,并且可以使用/etc/sysctl.conf保存配置以在下次启动时自动加载这些设置。

2.进程相关部分,系统信息部分,以及系统子系统部分

2.1进程相关部分

在/proc目录中包含了一些以数字为名的子目录,这些目录就是系统当前运行进程的proc抽象。

每一个目录都以相关联的活动系统进程PID为目录名,在目录下包含了一些文件,用于显示进程相关的信息。

..............................................................................

文件名内容

cmdline执行进程的命令行参数

cpu在SMP系统中近程最后的执行CPU(2.4)(smp)

cwd到当前工作目录的符号链接

environ环境变量

exe链接到进程对应的源可执行文件

fd包含所有进程打开的文件描述符的子目录

maps进程内存映射,包含进程执行空间以及动态链接库信息(2.4)

mem进程内存空间

root连接到进程执行时的/(root)目录

stat进程状态

statm进程内存状态信息

status进程状态总览,包含进程名字、当前状态和各种信息统计

..............................................................................

举例来说,要获取一个进程的状态,只要读取下面进程PID子目录下的status文件/proc/PID/status:

>cat/proc/self/status

Name:

cat

State:

R(running)

Pid:

5452

PPid:

743

TracerPid:

0(2.4)

Uid:

501501501501

Gid:

100100100100

Groups:

1001416

VmSize:

1112kB

VmLck:

0kB

VmRSS:

348kB

VmData:

24kB

VmStk:

12kB

VmExe:

8kB

VmLib:

1044kB

SigPnd:

0000000000000000

SigBlk:

0000000000000000

SigIgn:

0000000000000000

SigCgt:

0000000000000000

CapInh:

00000000fffffeff

CapPrm:

0000000000000000

CapEff:

0000000000000000

如同第一节所说,/proc/self连接指向读取它自身的进程映像,在之后一节的例子中都将以它作为我们的范例。

这条命令显示的信息与你通过/bin/ps命令获取到的进程信息基本相同,这恰巧是因为,ps也是通过读取procfs来获取这些信息的。

statm文件包含了更详细的进程内存状态,statm的详细内容按照数据项由左向右依次如Table1-2.

>cat/proc/self/statm

105105934128912

..............................................................................

数据项内容

size程序大小

resident常驻内存空间大小

shared共享内存页数

trs代码段占用内存页数

drs数据/堆栈段占用内存页数

lrs引用库占用内存页数

dt脏页数量

..............................................................................

2.2系统信息部分

相似于进程入口,在/proc目录下的其他一些文件给出了内核信息数据,这些文件包含了系统当前运行内核相关信息。

/proc目录下内核相关信息文件在Table1-3中列出,依赖于您的系统配置和加载的内核模块,在您的系统中的显示可能会略有不同。

..............................................................................

文件内容

apm高级电源管理信息

busbus总线相关信息

cmdline内核引导命令行参数

cpuinfocpu信息

devices当前可用设备(包含所有块设备和字符设备)

dmaDMA通道使用状况

filesystems当前内核支持的文件系统

driver驱动相关信息(2.4)

execdomains安全相关的Execdomains信息(2.4)

fbFrameBuffer设备(2.4)

fs本地文件系统参数(2.4)

ideIDE子系统相关信息的子目录

interrupts中断使用状况

iomem内存映射图(2.4)

ioportsI/O端口使用状况

irq关联到cpu的irq使用状况(2.4)(smp?

isapnpISAPnP(即插即用)信息(2.4)

kcoreKernelcoreimage,内核转储映像(2.4)

kmsgKernelmessages

ksymsKernelsymboltable,内核符号表

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系统uptime

version内核版本

videovideo资源状态(2.4)

..............................................................................

在proc文件系统中大多数文件都是可读的文本,可以直接使用系统中的常规文件处理命令进行操作。

当然,这也依赖于目标文件的权限属性。

例如要查看系统中断信息/proc/interrupts:

>cat/proc/interrupts

CPU0

0:

8728810XT-PICtimer

1:

895XT-PICkeyboard

2:

0XT-PICcascade

3:

531695XT-PICaha152x

4:

2014133XT-PICserial

5:

44401XT-PICpcnet_cs

8:

2XT-PICrtc

11:

8XT-PICi82365

12:

182918XT-PICPS/2Mouse

13:

1XT-PICfpu

14:

1232265XT-PICide0

15:

7XT-PICide1

NMI:

0

在2.4版内核中,当使用了SMP时这个文件末尾会多出两行SMP相关属性LOC&ERR:

>cat/proc/interrupts

CPU0CPU1

0:

12434981214548IO-APIC-edgetimer

1:

89498958IO-APIC-edgekeyboard

2:

00XT-PICcascade

5:

1128610161IO-APIC-edgesoundblaster

8:

10IO-APIC-edgertc

9:

2742227407IO-APIC-edge3c503

12:

113645113873IO-APIC-edgePS/2Mouse

13:

00XT-PICfpu

14:

2249124012IO-APIC-edgeide0

15:

21832415IO-APIC-edgeide1

17:

3056430414IO-APIC-leveleth0

18:

177164IO-APIC-levelbttv

NMI:

24579612457959

LOC:

24578822457881

ERR:

2155

NMI是每个CPU上产生的不可屏蔽中断(NonMaskableInterrupt)的计数;

LOC是每个CPU上APIC本地中断的计数。

ERR是SMP系统中IO-APIC总线失败错误的计数,如果这个数量太高,可能你的内核运行会有问题,这时候就需要测试内核,查看硬件和APIC是否有兼容性问题。

在2.4内核中irq相关的内核信息被放在/proc/irq目录下,在这个目录下包含一个文件

prof_cpu_mask和每个IRQ独属的一个子目录。

>ls/proc/irq/

010121416182468prof_cpu_mask

111131517193579

>ls/proc/irq/0/

smp_affinity

2.4内核中可以使用IRQ绑定属性,是某个或全部的IRQ挂接到SMP集合中的某个CPU上,这个特性可以通过prof_cpu_mask和smp_affinity来调整。

在默认情况下这两个文件的内容都"ffffffff",作为一个位映射而存在,你可以使用echo命令来指定一个CPU处理IRQ事件。

>cat/proc/irq/0/smp_affinity

ffffffff

>echo1>/proc/irq/prof_cpu_mask

这条命令的结果就是系统中只有第一个CPU可以捕获IRQ事件,如果您使用的是"echo5"的话那么第一和第四个CPU都可以捕获和处理事件(1+4)。

在默认情况下IRQ事件由IO-APIC分配,它将轮询每个配置中的CPU,等待其中一个处理事件响应。

在slabinfo文件文件中我们可以看到Linux内核的内存分配池信息,2.4版本内核中使用slab算法来为内核对象(网络缓存、目录高速缓存以及文件分配表等等)分配内存页。

在/proc目录下还有三个重要的目录:

net,scsi和sys,我们会在后面的章节中陆续描述;此外如果您的系统中没有SCSI设备(或没有SCSI驱动)的话,/proc/scsi目录是不存在的。

2.3系统子系统部分

2.3.1IDE设备/proc/ide

/proc/ide目录下包含了所有内核识别出的IDE设备的信息。

在/proc/ide目录下包含drivers文件和若干个以IDE设备名或IDE控制器名为名的子目录。

>ls-alF/proc/ide/

total3

dr-xr-xr-x4rootroot010月923:

36./

dr-xr-xr-x54rootroot02004-10-10../

-r--r--r--1rootroot010月923:

36drivers

lrwxrwxrwx1rootroot810月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

drivers文件包含了当前加载的IDE设备驱动:

>cat/proc/ide/drivers

ide-floppyversion0.99.newide

ide-diskversion1.17

ide-defaultversion0.9.newide

在/proc/ide目录下还可以看到其他一些以设备命名的目录,在这些目录下我们可以看到更详细的信息。

piix是IDE控制芯片组的名字,在你的系统中可能是其他名字。

此外还包含若干个(一般的PC上是2个)IDE控制器为名的目录,以及以IDE终端设备名命名的快捷方式,它门将链接到控制器目录下对应的设备文件上。

在ide*目录中我们可以得到更多的信息,如Table1-4.

..............................................................................

文件名内容

channelIDE通道(0or1)

config配置(onlyforPCI/IDEbridge)

mateMatename

modelIDE控制器的类型/芯片组

hd?

IDE总线上连接的可用设备

..............................................................................

当前连接在控制器上的每个设备也将成为一个单独的子目录,如Table1-5.

..............................................................................

文件名内容

cache设备缓存大小

capacity设备数据块数量(按512Byte块)

driver驱动和版本

geometry物理和逻辑的设备参数

identify设备标示块

media媒体类型

model设备标识符(型号或名字)

settings设备配置参数

smart_thresholdsIDEdiskmanagementthresholds

smart_valuesIDEdiskmanagementvalues

..............................................................................

在这里比较有用的信息是settings文件,它包含了一个驱动器相关的信息总览:

#cat/proc/ide/ide0/hda/settings(根据您的PC机情况各异)

namevalueminmaxmode

-------------------

bios_cyl526065535rw

bios_head2550255rw

bios_sect63063rw

breada_readahead40127rw

bswap001r

file_readahead7202097151rw

io_32bit003rw

keepsettings001rw

max_kb_per_request1221127rw

multcount008rw

nice1101rw

nowerr001rw

pio_modewrite-only0255w

slow001rw

unmaskirq001rw

using_dma001rw

2.3.2网络信息/proc/net

/proc/net子目录包含了系统中网络相关的内核统计信息和视图,常规的文件列表如Table1-7中说明;如果你的内核支持IPV6,那么还有一些IPV6相关信息在Table1-6中

..............................................................................

文件名内容

udp6UDPsockets(IPv6)

tcp6TCPsockets(IPv6)

raw6Raw设备状态(IPv6)

igmp6系统当前加入的IP多播地址(IPv6)

if_inet6IPv6网络接口地址列表

ipv6_routeIPv6内核路由表

rt6_statsIPv6全局路由表状态

sockstat6Socket状态(IPv6)

snmp6Snmp数据(IPv6)

..............................................................................

..............................................................................

文件名内容

arp内核ARP表

atmatm设备接口信息

drivers加载的驱动模块信息

dev网络设备以及状态

dev_mcast二层多播组以及监听设备信息

(包含interfaceindex,label,numberofreferences,numberof

boundaddresses).

dev_stat网络设备状态

ip_fwchainsipchains防火墙规则链(2.2)

ip_fwnamesipchains防火墙规则链名(2.2)

ip_masq包含IP伪装映射表的目录(2.2)

ip_masquerade主IP伪装映射表(2.2)

netstat网络状态

raw原始设备状态

route内核路由表

rpc包含rpc信息的目录

rt_cache路由cache

snmpSNMP数据

sockstatSocket状态

tcpTCPsockets

tr_rifTokenringRIF令牌环网路由表

udpUDPsockets

unixUNIXdomainsockets

wirelessWireless接口数据(Wavelanetc)

igmp主机当前加入的IP多播组地址

psched全局数据包调度参数

netlinkPF_NETLINKsockets列表

ip_mr_vifs多播虚拟地址列表

ip_mr_cache多播路由cache列表

..............................................................................

由于2.4之后的内核引入了netfilter/iptables防火墙,因此在防火墙部分的信息与2.2略有不同:

..............................................................................

文件名内容

ip_tables_matchesiptables支持的过滤模式

ip_tables_namesiptables规则表名字

ip_tables_targetsiptables规则链目标

ip_conntrackiptables状态检测跟踪表

..............................................................................

您可以使用这些信息来查看当前系统中可用的网络设备,以及这些设备上通过的流量和路由信息:

>cat/proc/net/dev

Inter-|Receive|[...

face|bytespacketserrsdropfifoframecompressedmulticast|[...

lo:

9081885596000000[...

ppp0:

15475140

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1