Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25642
  • 博文数量: 9
  • 博客积分: 198
  • 博客等级: 入伍新兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-10 12:34
文章分类
文章存档

2011年(5)

2010年(4)

最近访客

分类:

2011-02-23 22:01:38

抄至别人,为了放便自已查看

Proc 文件系统是一个实时的,常驻内存的文件系统,它跟踪进程在你机器上的运行情况和你系统的状态。继续阅读你可以学到很多/proc文件系统的知识。

/proc伪文件系统最令人震惊的是它事实上不存在于任何的媒介上。/proc文件系统是常驻虚拟内存并且维持着操作系统的动态数据的一个伪文件系 统。大部分的/proc文件系统信息被实时更新来与当前操作系统的状态一致。/proc文件系统的内容能被任何有相应权限的人读取。但是,/proc文件 系统的特定的部分只能被这个进程的拥有者和root用户读取。/proc文件系统的内容从特定的/proc目录得到数据并且显示出来,它们有很多用途。

在linux下,我们有工具像lscpi,scanpci和pnpdump,它们帮助我们检测大量的PCI,ISA 硬件芯片设置并且帮助我们对io,dma和irq的值作最好的选择。通过查看/proc文件系统的各种参数的值,我们可以看到许多内核和进程的当前状态。 我们用dmesg命令举个例子。

bash# dmesg

Dmesg 帮助我们确定已经被内核检测到和初始化的设备。我们有工具像"ps"和"top",给我们一个准确的快照,这个快照是关于进程在机器上运行的状态和一个当 前运行在机器上的清醒和睡眠的进程的列表。你曾经想过这些通过"ps"和"top"进程给出的信息的准确的出处吗?这些进程的信息来自/proc文件系 统,当进程发生改变的时候它随时更新。

让我们看一下linux机器的root目录的列表快照。

drwxr-xr-x 14 root root 291 Oct 25 18:47 opt
dr-xr-xr-x 86 root root 0 Nov 30 2000 proc <--
drwx--x--x 16 root root 841 Nov 20 00:10 root
drwxr-xr-x 5 root root 4627 Oct 15 11:42 sbin

因为/proc文件系统是一个虚拟的文件系统并且常驻内存,每次当你的linux机器重启的时候它被重新创建。看一下上面的root目录。proc目录的大小是0并且最后一次修改时间是当前日期。

使用/proc/sys文件系统来解析内核参数。

/proc文件系统的另一个非常重要的部分是/proc/sys目录。在这个目录下你可以对指定的内核参数做实时的改变。一个好的例子如下。

/proc/sys/net/ipv4/ip_forward

当你cat这个文件的内容的时候你可以看到以上这个文件中ip_forward有一个默认值为"0"。这意味着通过这个机器作IP转发是不允许的。 但是通过改变这个文件中的值从"0"到"1",这个配置能实时地被改变。然后我们立刻可以在我们的linux机器上作IP转发,不用重启系统。

/proc文件系统的内容

/proc目录列表如下。实际的列表很长。我们下面给出的是一个比较短的版本。

1 114 1210 1211 1212 1227 133 137 148 160 161 163 167 168 169
170 171 172 173 174 186 190 193 194 195 203 206 207 208 209
210 211 220 221 222 223 224 225 226 227 229 230 234 246 253 279
296 3 4 5 500 501 6 667 668 669 683 684 685 7 711 712 713 737 763
764 765 766 773 774 775 782 79 88 92 asound bus cmdline config.gz
cpuinfo devices dma fb filesystems fs ide interrupts ioports
kcore kcore_elf kmsg ksyms loadavg locks lvm mdstat meminfo
memstat misc modules mounts net partitions pci rtc scsi self
slabinfo stat swaps sys tty uptime version

在上面的快照中你看到的每一个数字和单词都是/proc目录的内容。让我们学习更多这个目录中用数字命名的内容。

数字命名的目录

1 114 1210 1211 1212 1227 133 137 148 160 161 163 167 168 169
170 171 172 173 174 186 190 193 194 195 203 206 207 208 209
210 211 220 221 222 223 224 225 226 227 229 230 234 246 253 279
296 3 4 5 500 501 6 667 668 669 683 684 685 7 711 712 713 737 763
764 765 766 773 774 775 782 79 88 92

你看到的大量在这里列出的目录是进程,在我们对/proc文件系统作快照的时候它们正运行在你的机器上。让我们看一下目录的内容。

freeos:~ # cd /proc
freeos:/proc # ls -la 114
total 0
dr-xr-xr-x 3 named named 0 Nov 30 12:20 .
dr-xr-xr-x 89 root root 0 Nov 30 2000 ..
-r--r--r-- 1 root root 0 Nov 30 12:20 cmdline
lrwx------ 1 root root 0 Nov 30 12:20 cwd -> /var/named
-r-------- 1 root root 0 Nov 30 12:20 environ
lrwx------ 1 root root 0 Nov 30 12:20 exe -> /usr/sbin/named
dr-x------ 2 root root 0 Nov 30 12:20 fd
pr--r--r-- 1 root root 0 Nov 30 12:20 maps
-rw------- 1 root root 0 Nov 30 12:20 mem
lrwx------ 1 root root 0 Nov 30 12:20 root -> /
-r--r--r-- 1 root root 0 Nov 30 12:20 stat
-r--r--r-- 1 root root 0 Nov 30 12:20 statm
-r--r--r-- 1 root root 0 Nov 30 12:20 status

在我们执行命令之前我们需要作为root登录,因为大量的运行在系统上的进程可能被其他人拥有。通常你只有权限访问你开启的进程。在作为root登录之后,对任意的目录执行以上的命令并且与以上的输出作比较。

你有没有注意到你得到的输出与上面列出的内容有任何相似之处?是的,所有你选择查看的无关的目录的内容都是一样的,因为这些目录包括大量的进程的参数和状态,它的PID是你所在的当前目录的名字。各个参数的值和状态信息当然因进程不同而不同。

看上面输出的第一行。

-r--r--r-- 1 root root 0 Nov30 12:20 cmdline

"cmdline",这个文件包含整个用来产生进程的命令行。这个文件的内容是命令行参数包括传递来启动进程的所有参数。所有包含在这个文件的信息即命令和各个启动参数,没有任何的格式和任何的空格。

lrwx------ 1 root root 0 Nov 30 12:20 cwd -> /var/named

"cwd",像我们从上面看见的,这是一个符号链接,它指向进程的当前工作目录。

-r-------- 1 root root 0 Nov 30 12:20 environ

"environ"包括在VARIABL=value为这个进程定义的所有的环境变量。正如"cmdline"一样,包含在文件中的命令和各个参数的信息没有任何的格式和空格。

lrwx------ 1 root root 0 Nov 30 12:20 exe -> /usr/sbin/named

"exe",这是一个符号链接指向启动当前进程的可执行文件。

dr-x------ 2 root root 0 Nov 30 12:20 fd

"fd",这个目录包括被指定进程打开的文件描述符。

pr--r--r-- 1 root root 0 Nov 30 12:20 maps

"maps",当你打出这个命名管道的内容,你可以看到进程的地址空间部分,当前被映射到一个文件。这个部分,从左到右是:和这个映射有关的地址空 间,和这个映射有关的权限,距离文件开始(即这个映射开始的地方)的偏移量,这个映射文件所在的设备,文件的inode号,最后是文件名本身。

"root",这是一个符号链接指向这个进程的/proc目录。

-r--r--r-- 1 root root 0 Nov 30 12:20 status

"status",这个文件给你有关进程名的信息,它的当前的状态,睡眠或者清醒,它的PID,UID,PPID和大量其它基本信息。这个信息可以在一个更简单和结构化的语法中看到,通过使用工具如"ps"和"top"。

关于大量/proc/*目录的基本信息

这个信息已经存在LASG, 第三章《/proc 文件系统》中。

/proc/cpuinfo

关于处理器,诸如它的类型,产地,型号和性能。

/proc/devices

当前运行的内核配置的设备的驱动列表。

/proc/dma

显示DMA通道此刻正在被使用。

/proc/filesystems

内核配置的文件系统。

/proc/interrupts

显示在使用的中断,和每个中断已经使用的次数

/proc/ioports

哪一个I/O端口正在使用

阅读(758) | 评论(0) | 转发(0) |
0

上一篇:玩转qemu虚拟机. 

下一篇:hwinfo 用法

给主人留下些什么吧!~~