Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108594
  • 博文数量: 45
  • 博客积分: 1810
  • 博客等级: 上尉
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-03 21:57
文章分类
文章存档

2010年(26)

2009年(19)

我的朋友

分类: LINUX

2010-05-01 09:52:45

proc 文件系统
Linux 内核有二个主要功能: 当程序与硬件交互的时候(when and how processes interact with these devices),控制它们对计算机上硬件的访问。 /proc/ 目录包含表明内核当前状态层次的特殊文件------允许应用程序和使用者知道内核的状态(allowing applications and users to peer into the kernel's view of the system)。 

在 /proc/目录里面,你能发现有价值的很多资讯------系统硬件和现在正在运行的任何程序。 除此之外,在 / proc/ 目录树里面的一些文件能让使用者和应用程序改变内核的配置。 

虚拟的文件系统
在 Linux 下,所有的数据都被当成文件。 绝大多数的使用者熟悉二种主要的文件:文本文件和二进制文件。 但是 /proc/ 目录包含另外类型的文件,它们叫做虚拟的文件。 就因为这个理由, /proc/ 时常被称为虚拟文件系统。 

这些虚拟的文件有独特的性质。他们大部份在大小方面被列成如零的位元组(Most of them are listed as zero bytes in size)然而当被察看的时候,它能包含很多的信息。 比如,大部份时间和日期设置后会立即反映出目前的时间和日期, 表明他们在不停的变动。 

有些虚拟文件,例如 中断,,/proc/meminfo,/proc/mounts, 和 /proc/ 分区提供随时更新的对系统硬件的信息描述。 另外, 像 / proc/ filesystems 和 /proc/sys/ 目录提供系统的配置信息和介面(interfaces)。 

为了达到这个目的,包含一个相似主题的资讯的文件被放在虚拟目录和子目录之内。 举例来说, , /proc/ide/ 包含所有ide硬件的信息。 同样地,程序目录包含每一个系统上正在运行的程序的资讯。 

察看虚拟的文件
在 /proc/目录里面使用 cat ,,more, 和less命令,你能立刻访问一些关於系统的大量的资讯。 举例来说,如果你想看你的计算机的CPU是什么型号的,输入 cat /proc/cpuinfo ,你将会看见与下列各项相似的东西: 
processor : 0
vendor_id : AuthenticAMD
cpu family : 5
model : 9
model name : AMD-K6? 3D+ Processor
stepping : 1
cpu MHz : 400.919
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr mce cx8 pge mmx syscall 3dnow k6_mtrr
bogomips : 799.53


当在 /proc/中看不同的虚拟文件的时候, 你将会注意到一些信息是可以理解的但有一些则是天书一般的。 这是那些能从虚拟文件得到数据并将其显示的程序存在的原因。 这样的应用程序例如: lspci , apm, free, 和top。 


注意
一些在 / proc/ 目录中的虚拟文件只能由 root 来读。 


变更虚拟文件
如同惯例,/ proc/ 目录里面的大部分虚拟文件是只读的。 然而, 一些能用来在内核中调整设置。尤其对/proc/sys/子目录中的文件。 

为了要改变虚拟的文件数值,使用 echo 命令和 > 重定向文件的新数值(To change the value of a virtual file, use the echo command and a > symbol to redirect the new value to the file)。 举例来说, 要立即改变你的主机名称,你可以输入: 
echo bob.subgenius.com > /proc/sys/kernel/hostname 



其他的文件被当作二进制文件或 boolean 开关(Other files act as binary or boolean switches)。 举例来说,如果你键入cat /proc/sys/net/ipv4/ip_forward, 你也将会看见0 或1. 0 表示内核不再转寄网络包。使用 echo 指令改变 ip_forward 的数值为 1,你能立刻把包转寄打开(you can immediately turn packet forwarding on。) 


提示
过去一直用来改变设置的/ proc/sys/ 子目录中的命令现在在/sbin/sysctl中。要得到更多的资讯关於这个指令, 参见使用 sysctl这一部分(see the Section called Using sysctl)


要得到 /proc/sys/中的可用的一些内核配置文件的清单, 请参见/proc/sys/(.see the Section called /proc/sys/.)

在 proc 文件系统中最高层次的文件
下面是 /proc/目录中最高层次的一些比较有用的虚拟文件的列表。 


注意
在大部份的情形下,在这个部分中列出的文件的内容在你机器上将不会总是相同的。 这是因为很多信息取决于你正在运行红帽子 Linux 的硬件。 


/proc/apm
这个文件提供关於高级电源管理 (APM) 的系统状态的资讯并且被 apm 指令使用。 如果没有电池组被连接到 AC 动力源(If the system with no battery is connected to an AC power source), 虚拟的文件看起来类似这个: 

1.16 1.2 0x07 0x01 0xff 0x80-1%-1?


在这样的系统上运行 apm- v指令,会有下面的显示: 

APM BIOS 1.2 (kernel driver 1.16)
AC on-line, no system battery


对于没有使用电池组的系统, apm只能让计算机处于待机状态。 apm 指令在笔记本电脑上更有用。举例来说,在正在运行红帽子 Linux的笔记本电脑上,运行cat/proc/apm指令,会有下列各项输出: 

1.16 1.2 0x03 0x01 0x03 0x09 100%-1?


当这个笔记本电脑拔开它的能源长达几分钟后 ,apm 文件的内容会换成下列相似的东西: 
1.16 1.2 0x03 0x00 0x00 0x01 99% 1792 min


用apm- v 指令将得到更有用的数据,例如 下列各项: 
APM BIOS 1.2 (kernel driver 1.16)
AC off-line, battery status high: 99% (1 day, 5:52)


/proc/cmdline
当它启动的时候 , 这个文件将展现传给内核的叁数。 一个样本 /proc/ cmdline 文件看起来像这样: 

ro root=/dev/hda2


这告诉我们内核以只读挂载------(ro)表明------在第一 IDE 设备上的第二分区(/dev/hda2)。 

/proc/cpuinfo
这个虚拟的文件识别你的系统用的处理机的类型。 下列各项是输出的一个例子,你会在 /proc/cpuinfo看见: 
processor : 0
vendor_id : AuthenticAMD
cpu family : 5
model : 9
model name : AMD-K6? 3D+ Processor
stepping : 1
cpu MHz : 400.919
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr mce cx8 pge mmx syscall 3dnow k6_mtrr
bogomips : 799.53


processor------提供每个处理器一个识别数字。 如果你只有一个处理器, 你将只会看见 0. 

cpu family—简明地告诉你你系统中有的处理器的类型。 如果你的计算机是Intel系列的,在"86"之前的数值加以区分。如果你想了解老机子的信息,例如 586,486, 或 386 ,这将非常有用。因为一些 rpm 软件包是为这些特别的结构编译的,这个数值能够让你决定安装哪些软件包。 

model name------告诉你处理器的通常名字, 包括它的设计(project name)名字。 

CPU MHz —告诉你CPU精确的速度------以MHz为单位,精确到小数点后3位。 

cache size—告诉你处理器可用的二级缓存。 

Flags------定义有关处理器的许多不同的性质, 例如 浮点运算 (FPU) 和处理 MMX 指令能力(the ability to process MMX instructions)。 
/proc/devices
这个文件显示正在为内核配置使用的各种不同的字符(the various character)和区块设备。 它不包括模组未被载入内核的设备。 下面是这个虚拟文件一个样本的输出: 
Character devices:
1 mem
2 pty
3 ttyp
4 ttyS
5 cua
7 vcs
10 misc
14 sound
29 fb
36 netlink
128 ptm
129 ptm
136 pts
137 pts
162 raw
254 iscsictl

Block devices:
1 ramdisk
2 fd
3 ide0
9 md
22 ide1

/proc/devices的信息包括设备的主要数目和名字,并且被分为二个主要的部分: 字符设备和区块设备(Character devices and Block devices)。 

字符设备与区块设备,除了二种基本不同以外,是相似的。 

块状设备有一个可用的缓冲区,在处理他们之前允许他们对命令提出请求(allowing them to order requests before dealing with them) 。这对用来存储信息的设备是非常重要的-------比如硬盘------因为在写入设备之前就能够得到信息,这就比单纯的命令更有效(This is important for devices designed to store information — such as hard drives — because the ability to order the information before writing it to the device allows it to be placed in more efficient order)。 字符设备不需要缓冲。 

另一个不同是区块设备能在每一设备被配置的区块同样大小中送并且接受信息。 字符设备没用送数据 preconfigured 大小(The other difference is that block devices can send and receive information in blocks of a size configured per device. Character devices send data with no preconfigured size。) 

要得到关於设备的更多资讯,请参看 /usr/src/linux-2.4/Documentation/devices.txt 。 

/proc/dma
这个文件包含已注册的正在使用中的ISA 直接内存读取 (DMA) 通道的列表。 一个 /proc/ dma 文件看起来像这样: 
4: cascade


/proc/execdomains
这个文件列出被 Linux 内核支持的运行网域(execution domains),连同他们支持的其他性质。 
0-0 Linux [kernel] 

想象一下,一个特别的操作系统把运行网域当做 "个性" 。 因为其他的二进制格式,例如 Solaris , UnixWare 和 FreeBSD,都能被 Linux 使用,程序设计者能改变操作方式,通过变更任务的特性来适合这些二进制的特别系统的需要。 除了 PER_LINUX 运行网域以外,不同的性质也能被实现,如被动态地载入模块。(Think of execution domains as the "personality" for a particular operating system. Because other binary formats, such as Solaris, UnixWare, and FreeBSD, can be used with Linux, programmers can change the way the operating system treats particular system calls from these binaries by changing the personality of the task. Except for the PER_LINUX execution domain, different personalities can be implemented as dynamically loadable modules) 

[/proc/fb
这个文件包含架框缓冲区设备的列表,有架框缓冲区设备号码和控制它的驱动器。 包含架框缓冲区设备系统的/ proc/ fb,标准的输出类似这:(This file contains a list of frame buffer devices, with the frame buffer device number and the driver that controls it. Typical output of /proc/fb for systems which contain frame buffer devices looks similar to this: )
0 VESA VGA


/proc/filesystems
这个文件显示现在被内核支持的文件系统类型的列表。来自一般内核的(未被编译的)/proc/ filesystems 文件的输出类似以下: 

nodev rootfs
nodev bdev
nodev proc
nodev sockfs
nodev tmpfs
nodev shm
nodev pipefs
ext2
nodev ramfs
iso9660
nodev devpts
ext3
nodev autofs
nodev binfmt_misc

第一栏表明是否文件系统被安装在一个区块设备上。 以nodev开头 的那些不被安装在一个设备上。 第二栏列出被支持的文件系统的名字。 

当一个文件系统不被识别,mount命令将会在这些文件系统中循环寻找适合的方式。(The mount command cycles through these file systems when one is not specified as an argument. )

/proc/interrupts
这个文件记录了 x86 结构上的每个 IRQ( 中断请求)中断的数字。 一个标准 /proc/interrupts类似以下: 
CPU0 
0: 80448940 XT-PIC timer
1: 174412 XT-PIC keyboard
2: 0 XT-PIC cascade
8: 1 XT-PIC rtc
10: 410964 XT-PIC eth0
12: 60330 XT-PIC PS/2 Mouse
14: 1314121 XT-PIC ide0
15: 5195422 XT-PIC ide1
NMI: 0 
ERR: 0




对於一个有多处理器的机器,这个文件可能看起来有些稍微地不同: 
CPU0 CPU1 
0: 1366814704 0 XT-PIC timer
1: 128 340 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
8: 0 1 IO-APIC-edge rtc
12: 5323 5793 IO-APIC-edge PS/2 Mouse
13: 1 0 XT-PIC fpu
16: 11184294 15940594 IO-APIC-level Intel EtherExpress Pro 10/100 Ethernet
20: 8450043 11120093 IO-APIC-level megaraid
30: 10432 10722 IO-APIC-level aic7xxx
31: 23 22 IO-APIC-level aic7xxx
NMI: 0
ERR: 0



第一栏表示 IRQ 数字。 每个处理器在系统中有它的自己的栏和它的 IRQ 中断号(Each CPU in the system has its own column and its own number of interrupts per IRQ)。 下个栏报告中断的类型,而且最后一栏包含使用每个 IRQ 的设备名字(The next column reports the type of interrupt, and the last column contains the name of the device that is located at that IRQ)。 

在这个文件中被看到的每个中断类型, 都是特殊的, 意即有不同之处(which are architecture-specific, mean something a little different)。 对x86 的机器, 下面的数值是通用的: 


XT-PIC 这是老式AT计算机的中断。 

IO-APIC-edge—电压讯号从最低值到高度打断过渡,创造edge, 断续发生和只是向曾经发送讯号。 这种断续 , 和 IO-APIC- level断续, 只在 586 系列产品的处理器和更高的系统上被看到(The voltage signal on this interrupt transitions from low to high, creating an edge, where the interrupt occurs and is only signaled once. This kind of interrupt, as well as the IO-APIC-level interrupt, are only seen on systems with processors from the 586 family and higher)。 

IO-APIC-level当电压讯号高到讯号再一次低下地去的时候 , 产生中断(Generates interrupts when its voltage signal goes high until the signal goes low again。) 

/proc/iomem
这个文件告诉你,目前每个物理设备在系统内存的映像: 
00000000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000f0000-000fffff : System ROM
00100000-07ffffff : System RAM
00100000-00291ba8 : Kernel code
00291ba9-002e09cb : Kernel data
e0000000-e3ffffff : VIA Technologies, Inc. VT82C597 [Apollo VP3]
e4000000-e7ffffff : PCI Bus #01
e4000000-e4003fff : Matrox Graphics, Inc. MGA G200 AGP
e5000000-e57fffff : Matrox Graphics, Inc. MGA G200 AGP
e8000000-e8ffffff : PCI Bus #01
e8000000-e8ffffff : Matrox Graphics, Inc. MGA G200 AGP
ea000000-ea00007f : Digital Equipment Corporation DECchip 21140 [FasterNet]
ea000000-ea00007f : tulip
ffff0000-ffffffff : reserved
(00000000-0009 fbff: 系统随机存取储存器
0009fc00-0009ffff: 保留
000a0000-000bffff: 录像带随机存取储存器区域
000c0000-000c7fff: 录像带只读存储器
000f0000-000fffff: 系统只读存储器
00100000-07 ffffff: 系统随机存取储存器
00100000-00291 ba8: 内核码
00291ba9-002e09cb: 内核数据
e0000000- e3ffffff: 经由技术,公司 VT82C597
e4000000- e7ffffff: PCI 总线 #01
e4000000- e4003fff: Matrox 图形,公司 MGA G200 AGP
e5000000- e57fffff: Matrox 图形,公司 MGA G200 AGP
e8000000- e8ffffff: PCI 总线 #01
e8000000- e8ffffff: Matrox 图形,公司 MGA G200 AGP
ea000000- ea00007f: 数传设备公司 DECchip 21140[ FasterNet]
ea000000- ea00007f: tulip
ffff0000- ffffffff: 保留)


第一栏显示内存被分配成每个不同类型的内存。 第二栏告诉那些内存里面被位于的类型内存(The first column displays the memory registers used by each of the different types of memory. The second column tells the kind of memory located within those registers)。 特别地,这个栏将会告诉你哪一记忆记录器被内核RAM使用或 , 如果你有多个以太网卡在你的 NIC (网络接口)上 , 内存记录器分配作为每个端口(In particular, this column will tell you which memory registers are used by the kernel within the system RAM or, if you have multiple Ethernet ports on your NIC, the memory registers assigned for each port.)。 

/proc/ioports
/proc/ ioports的输出提供用与一个设备通信的输入或输出的被注册的端口区域的列表。 这个文件可能相当长, 它的开始与这相似: 
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
02f8-02ff : serial(auto)
0376-0376 : ide1
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial(auto)
0cf8-0cff : PCI conf1
d000-dfff : PCI Bus #01
e000-e00f : VIA Technologies, Inc. Bus Master IDE
e000-e007 : ide0
e008-e00f : ide1
e800-e87f : Digital Equipment Corporation DECchip 21140 [FasterNet]
e800-e87f : tulip

第一栏给出了为设备保留的 IO 端口地址范围,这些设备在第二栏中列出。 

/proc/isapnp
这个文件列出了在系统上的 ISA 槽中的即插即用 (PnP) 卡。 这最可能是声卡,但是也可能包括设备的任何数目(This is most often seen with sound cards but may include any number of devices)。 若有 Soundblaster ,它的 proc/ isapnp 文件类似这个: 

Card 1 'CTL0070:Creative ViBRA16C PnP' PnP version 1.0 Product version 1.0
Logical device 0 'CTL0001:Audio'
Device is not active
Active port 0x220,0x330,0x388
Active IRQ 5 [0x2]
Active DMA 1,5
Resources 0
Priority preferred
Port 0x220-0x220, align 0x0, size 0x10, 16-bit address decoding
Port 0x330-0x330, align 0x0, size 0x2, 16-bit address decoding
Port 0x388-0x3f8, align 0x0, size 0x4, 16-bit address decoding
IRQ 5 High-Edge
DMA 1 8-bit byte-count compatible
DMA 5 16-bit word-count compatible
Alternate resources 0:1
Priority acceptable
Port 0x220-0x280, align 0x1f, size 0x10, 16-bit address decoding
Port 0x300-0x330, align 0x2f, size 0x2, 16-bit address decoding
Port 0x388-0x3f8, align 0x0, size 0x4, 16-bit address decoding
IRQ 5,7,2/9,10 High-Edge
DMA 1,3 8-bit byte-count compatible
DMA 5,7 16-bit word-count compatible 

这个文件可能相当长,取决于显示的设备数目和他们的资源需求。 

每个卡列出它的名字, PnP 版号和产品版号。 如果设备是活动的和配置过的,这个文件也将会为设备显示端口和 IRQ 数字。 除此之外, 保证更好的兼容性,卡将会指定给不同叁数首选的和可接受的数值(the card will specify preferred and acceptable values for a number of different parameters)。 这里的目标是要允许 PnP 卡在彼此的周围工作并且避免 IRQ 和端口冲突(The goal here is to allow the PnP cards to work around one another and avoid IRQ and port conflicts)。 

/proc/kcore
这个文件表现系统的物理内存并被储存成核心文件格式。 不像大部分的/proc/文件,kcore 显示大小。 这个数值用位元组给出并且和实际的内存 (RAM) 的大小加上 4KB相等。 

这个文件的内容被设计成由调试器调试, 例如 gdb ,它就不是人类的可读(如同天书)。 


警告
不要访问 /proc/ kcore 虚拟文件。 文件的内容将会由终端文本输出。如果你偶然地看这个文件,按ctrl+c停止程序,然后输入reset,返回指令行提示。 


/proc/kmsg
这个文件用来保持被内核产生的信息。 这些信息然后由其他的程序使用, 例如 /sbin/klogd。

/proc/ksyms
这个文件支撑动态地被输出被模组工具用的符号定义到的内核联接并且绑载入模组(This file holds the kernel exported symbol definitions used by the module tools to dynamically link and bind loadable modules)。 

e003def4 speedo_debug[eepro100]
e003b04c eepro100_init[eepro100]
e00390c0 st_template[st]
e002104c RDINDOOR[megaraid]
e00210a4 callDone[megaraid]
e00226cc megaraid_detect[megaraid]


第一栏列出了用于内核运行的内存位址,第二个栏表示运行功能的名字,而且最后一个栏显示载入模块的名字。 

/proc/loadavg
这个文件提供一个显示,处理器在时间上的平均负荷和被 uptime 和其他的指令用的附加数据。 一个/proc/ loadavg 文件类似这: 

0.20 0.18 0.12 1/80 11206


前三个栏表明在最后 1,5, 和 10 分钟时间段内对处理器的使用。 第四栏表明正在运行的程序数和程序的总数目。 最后一个栏显示最后一个进程使用的ID号。 

/proc/lock
这个文件显示正被内核用的块文件。 这个文件的内容包含内核的调试数据和能够做巨大的改变,取决于对系统的使用。 一个轻负荷系统的 /proc/locks文件类似这: 
1: FLOCK ADVISORY WRITE 807 03:05:308731 0 EOF c2a260c0 c025aa48 c2a26120
2: POSIX ADVISORY WRITE 708 03:05:308720 0 EOF c2a2611c c2a260c4 c025aa48


每个块都有一个由独特数字为开头的行。第二栏表明块的类, FLOCK表明来自一个flock系统呼叫的老式UNIX文件块, POSIX 表明来自一个 lockf 系统呼叫的较新的 POSIX块锁(with FLOCK signifying the older-style UNIX file locks from a flock system call and POSIX representing the newer POSIX locks from the lockf system call。) 

第三栏有二个数值。 ADVISORY意谓着该块允许其他的人访问数据;它只避免其他的人来尝试锁定它。 MANDATORY意谓着当块在的时候,他人访问数据不被允许。 第四个栏显示块所有者在访问文件的时候,是否可读或可写 , 第五栏说明拥有块的进程的ID(身份证)。 第六栏表明正被锁的文件的ID,格式如MAJOR-DEVICE:MINOR-DEVICE:INODE-NUMBER.。 第七栏展现文件的块区域的开始和结束。 剩余的栏指出被特殊调试的内核数据结构,它们可以忽略。 

/proc/mdstat
这个文件表明多重-磁盘(multiple-disk)目前的信息,RAID配置。 如果你的系统不包含这样的配置, 那麽你的 /proc/ mdstat 文件将会看起来相似以下: 
Personalities : 
read_ahead not set
unused devices: 

在上面的状态中,这个文件将保留,直到你创建软件RAID或 md 设备。 在那种情况下,你能看到 / proc/ mdstat 给你现在正在用的 mdX RAID设备发生的东西拍快照。 

下面的 proc/ mdstat 文件显示一个md0 被配置成RAID1设备的一个系统。 它现在与磁盘同步: 
Personalities : [linear] [raid1]
read_ahead 1024 sectors
md0: active raid1 sda2[1] sdb2[0] 9940 blocks [2/2] [UU] resync=1% finish=12.3min
algorithm 2 [3/3] [UUU]
unused devices: 

阅读(1078) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~