Linux入职基础-3.1_了解proc目录文件(设备管理)

了解proc目录文件(设备管理)

/proc 文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行时访问内核内部数据结构、改变内核设置的机制。

/proc 由内核控制,没有承载 /proc 的设备,它只存在内存当中,而不占用外存空间,对 /proc 进行一次 'ls -l' 可以看到大部分文件都是 0 字节大的。

不过”cat /proc/partitions”这些文件的时候,确实可以看到一些信息,这怎么?

因为/proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层 (VFS) 。当用户或应用程序读取proc文件时(VFS 调用),比如,请求文件、目录的i-node 的,此时/proc 文件系统是动态根据内核中的信息读出所需信息来建立相应的文件和目录,所以我们才能得到“系统最新的物理环境、正在运行的进程状态等信息”。可以使用任何文件编辑器或像'more', 'less'或 'cat'这样的程序来查看。

下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。

另外,在/proc下还有三个很重要的目录netscsisys

sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。

一、常见的文件列表

/proc/partitions

这个文件给出分区信息。

示例:

[root@localhostproc]# cat partitions

majorminor  #blocks  name

   8    0   76035645 sda

   8    1     104391 sda1

   8    2    5116702 sda2

   8    3   20482875 sda3

   8    4          1 sda4

   8    5   20482843 sda5

   8    6   10241406 sda6

   8    7   10241406 sda7

   8    8    2048256 sda8

   8    9    2048256 sda9

   8   10     497983 sda10

/proc/cmdline文件

这个文件给出了内核启动的命令行。它和用于进程的cmdline项非常相似。

示例:

[root@localhost proc]# cat cmdline

ro root=LABEL=/ rhgb quiet crashkernel=128M@16M

/proc/cpuinfo文件

这个文件提供了有关系统CPU的多种信息。这些信息是从内核里对CPU的测试代码中得到的。文件列出了CPU的普通型号(386,486,586,686等),以及能得到的更多特定信息(制造商,型号和版本)。文件还包含了以bogomips表示的处理器速度,而且如果检测到CPU的多种特性或者bug,文件还会包含相应的标志。

示例:

[root@localhost proc]# cat cpuinfo

/proc/devices文件

这个文件列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。这块会重点说明,与目录/dev有联系,见下一篇。

示例:

[root@localhost proc]#  cat /proc/devices

Character devices:

  1mem

  4/dev/vc/0

  4tty

  4ttyS

  5/dev/tty

  5/dev/console

  5/dev/ptmx

  6lp

  7vcs

 10misc

 13input

 14sound

 21sg

 29fb

116 alsa

128 ptm

136 pts

162 raw

180 usb

189 usb_device

216 rfcomm

254 pcmcia

Block devices:

  1ramdisk

  8sd

  9md

 22ide1

 65sd

 66sd

 67sd

 68sd

 69sd

 70sd

 71sd

128 sd

129 sd

130 sd

131 sd

132 sd

133 sd

134 sd

135 sd

253 device-mapper

254 mdp

/proc/dma文件

这个文件列出由驱动程序保留的DMA通道和保留它们的驱动程序名称。casade项用于把次DMA控制器从主控制器分出的DMA行所使用;

示例:

[root@localhostproc]# cat dma

 4: cascade

/proc/filesystems文件

这个文件列出可供使用的文件系统类型,一种类型一行。虽然它们通常是编入内核的文件系统类型,但该文件还可以包含可加载的内核模块加入的其它文件系统类型。

示例:

[root@localhostproc]# cat filesystems

nodev   sysfs

nodev   rootfs

nodev   bdev

nodev   proc    #没有承载的设备

nodev   cpuset

nodev   binfmt_misc

nodev   debugfs

nodev   securityfs

nodev   sockfs

nodev   usbfs

nodev   pipefs

nodev   anon_inodefs

nodev   futexfs

nodev   tmpfs

nodev   inotifyfs

nodev   eventpollfs

nodev  devpts

        ext2

nodev   ramfs

nodev   hugetlbfs

        iso9660

nodev   mqueue

nodev   selinuxfs

        ext3

nodev   rpc_pipefs

nodev   autofs

/proc/interrupts文件

这个文件的每一行都有一个保留的中断。每行中的域有:中断号,本行中断的发生次数,可能带有一个加号的域(SA_INTERRUPT标志设置),以及登记这个中断的驱动程序的名字。

可以在安装新硬件前,像查看/proc/dma/proc/ioports一样用cat命令手工查看手头的这个文件。这几个文件列出了当前投入使用的资源(但是不包括那些没有加载驱动程序的硬件所使用的资源)。

示例:

[root@localhostproc]# cat interrupts

           CPU0       CPU1

  0: 210180596          0    IO-APIC-edge  timer

  1:        11          0    IO-APIC-edge  i8042

  8:         3          0    IO-APIC-edge  rtc

  9:       815    1712330   IO-APIC-level  acpi

 12:       125          0    IO-APIC-edge  i8042

 14:      63515         0    IO-APIC-edge  ata_piix

 15:       120    1885171    IO-APIC-edge  ide1

169:         34          0  IO-APIC-level  yenta,uhci_hcd:usb4

177:          2          0  IO-APIC-level  ehci_hcd:usb1,uhci_hcd:usb2

185:          0          0  IO-APIC-level  uhci_hcd:usb3

193:          0          0  IO-APIC-level  uhci_hcd:usb5

201:          8     30243   IO-APIC-level  eth0

225:        103          0         PCI-MSI  hda_intel

NMI:          0          0

LOC:  210180504 210180483

ERR:          0

MIS:          0

/proc/ioports文件

这个文件列出了诸如磁盘驱动器,以太网卡和声卡设备等多种设备驱动程序登记的许多I/O端口范围。

示例:

[root@localhostproc]# cat ioports

/proc/kcore文件

这个文件是系统的物理内存以core文件格式保存的文件。例如,GDB能用它考察内核的数据结构。它不是纯文本,而是/proc目录下为数不多的几个二进制格式的项之一。

/proc/kmsg文件

这个文件用于检索用printk生成的内核消息。任何时刻只能有一个具有超级用户权限的进程可以读取这个文件。也可以用系统调用syslog检索这些消息。通常使用工具dmesg或守护进程klogd检索这些消息。

示例:

[root@localhost proc]# dmesg kmsg

/proc/ksyms文件

这个文件列出了已经登记的内核符号;这些符号给出了变量或函数的地址。每行给出一个符号的地址,符号名称以及登记这个符号的模块。程序ksyms,insmodkmod使用这个文件。它还列出了正在运行的任务数,总任务数和最后分配的PID

/proc/loadavg文件

这个文件给出以几个不同的时间间隔计算的系统平均负载,这就如同uptime命令显示的结果那样。前三个数字是平均负载。这是通过计算过去1分钟,5分钟,15分钟里运行队列中的平均任务数得到的。随后是正在运行的任务数和总任务数。最后是上次使用的进程号。

示例:

[root@localhostproc]# cat loadavg

0.000.00 0.00 1/122 13800

proc/locks文件

这个文件包含在打开的文件上的加锁信息。文件中的每一行描述了特定文件和文档上的加锁信息以及对文件施加的锁的类型。内核也可以需要时对文件施加强制性锁。

示例:

[root@localhost proc]# cat locks

proc/mdstat文件

这个文件包含了由md设备驱动程序控制的RAID设备信息。

示例:

[root@localhostproc]# cat mdstat

Personalities:

unuseddevices: <none>

/proc/meminfo文件

这个文件给出了内存状态的信息。它显示出系统中空闲内存,已用物理内存和交换内存的总量。它还显示出内核使用的共享内存和缓冲区总量。这些信息的格式和free命令显示的结果类似。

示例:

[root@localhostproc]#  cat meminfo

/proc/misc文件

这个文件报告用内核函数misc_register登记的设备驱动程序

示例:

[root@localhostproc]# cat misc

 62 autofs

 63 device-mapper

175agpgart

144nvram

228hpet

135rtc

231snapshot

proc/modules文件

这个文件给出可加载内核模块的信息lsmod程序用这些信息显示有关模块的名称,大小,使用数目方面的信息。

示例:

[root@localhostproc]#  cat modules

/proc/mounts文件

这个文件以/etc/mtab文件的格式给出当前系统所安装的文件系统信息。这个文件也能反映出任何手工安装从而在/etc/mtab文件中没有包含的文件系统。

示例:

[root@localhostproc]# cat mounts

rootfs/ rootfs rw 0 0

/dev/root/ ext3 rw,data=ordered 0 0

/dev/dev tmpfs rw 0 0

/proc/proc proc rw 0 0

/sys/sys sysfs rw 0 0

none/selinux selinuxfs rw 0 0

/proc/bus/usb/proc/bus/usb usbfs rw 0 0

devpts /dev/pts devpts rw 0 0

/dev/sda9/tmp ext3 rw,data=ordered 0 0

/dev/sda7/home ext3 rw,data=ordered 0 0

/dev/sda5/usr ext3 rw,data=ordered 0 0

/dev/sda6/usr/local ext3 rw,data=ordered 0 0

/dev/sda3/var ext3 rw,data=ordered 0 0

/dev/sda1/boot ext3 rw,data=ordered 0 0

tmpfs/dev/shm tmpfs rw 0 0

none/proc/sys/fs/binfmt_misc binfmt_misc rw 0 0

sunrpc/var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0

/etc/auto.misc/misc autofs rw,fd=7,pgrp=2984,timeout=300,minproto=5,maxproto=5,indirect 0 0

-hosts/net autofs rw,fd=13,pgrp=2984,timeout=300,minproto=5,maxproto=5,indirect 0 0

proc/pci文件

这个文件给出PCI设备的信息。用它可以方便地诊断PCI问题。你可以从这个文件中检索到的信息包括诸如IDE接口或USB控制器这样的设备,总线,设备和功能编号,设备延迟以及IRQ编号。

示例:

[root@localhostproc]# cat pci

proc/stat文件

这个文件包含的信息有CPU利用率,磁盘,内存页,内存对换,全部中断,接触开关以及赏赐自举时间(自197011日起的秒数)。

示例:

[root@localhostproc]# cat stat

/proc/uptime文件

这个文件给出自从上次系统自举以来的秒数,以及其中有多少秒处于空闲。这主要供uptime程序使用。比较这两个数字能够告诉你长期来看CPU周期浪费的比例。系统已经运行了多久。

示例:

[root@localhostproc]# cat uptime

212918.01212823.23

/proc/version文件

这个文件只有一行内容,说明正在运行的内核版本。可以用标准的编程方法进行分析获得所需的系统信息。

示例:

[root@localhostproc]# cat version

Linuxversion 2.6.18-238.el5 (mockbuild@ls20-bc2-13.build.redhat.com) (gcc version4.1.2 20080704 (Red Hat 4.1.2-50)) #1 SMP Sun Dec 19 14:24:47 EST 2010

proc/net子目录

此目录下的文件描述或修改了联网代码的行为。可以通过使用arp,netstat,routeipfwadm命令设置或查询这些特殊文件中的许多文件。

示例:

[root@localhostproc]# ls net

[root@localhostproc]# ls net | sort

以下介绍此目录下常用的文件功能:

arp        #转储每个网络接口的arp表中dev包的统计

dev         #来自网络设备的统计

dev_mcast       #列出二层(数据链路层)多播组

igmp         #加入的IGMP多播组

netlink     #netlink套接口的信息

netstat     #网络流量的多种统计。第一行是信息头,带有每个变量的名称。接下来的一行保存相应变量的值

raw           #原始套接口的套接口表

route        #静态路由表

rpc            #包含RPC信息的目录

rt_cache          #路由缓冲

snmp        #snmp agentip/icmp/tcp/udp协议统计;各行交替给出字段名和值

sockstat           #列出使用的tcp/udp/raw/pac/syc_cookies的数量

tcp            #TCP连接的套接口

udp           #UDP连接的套接口表

unix          #UNIX域套接口的套接口表

示例:

[root@localhostproc]# cat ./net/route

IfaceDestination  Gateway  Flags  RefCnt  Use  Metric Mask   MTU   Window IRTT

eth0  0001A8C0   00000000    0001    0    0     0    00FFFFFF0    0       0                                                              

eth0  0000FEA9   00000000   0001    0   0    0     0000FFFF0      0       0                                                              

eth0  00000000  0101A8C0   0003   0     0     0   000000000       0      0                                                              

/proc/scsi子目录

此目录下包含一个列出了所有检测到的SCSI设备的文件,并且为每种控制器驱动程序提供一个目录,在这个目录下又为已安装的此种控制器的每个实例提供一个子目录。

二、有关运行中的进程的信息

/proc文件系统可以用于获取运行中的进程的信息。

/proc中有一些编号的子目录,每个编号的目录对应一个进程 id (PID)。这样每一个运行中的进程 /proc 中都有一个用它的 PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。

/proc目录中进程N的信息

/proc/N pidN的进程信息

/proc/N/cmdline 进程启动命令

/proc/N/cwd 链接到进程当前工作目录

/proc/N/environ 进程环境变量列表

/proc/N/exe 链接到进程的执行命令文件

/proc/N/fd 包含进程相关的所有的文件描述符

/proc/N/maps 与进程相关的内存映射信息

/proc/N/mem 指代进程持有的内存,不可读

/proc/N/root 链接到进程的根目录

/proc/N/stat 进程的状态

/proc/N/statm 进程使用的内存的状态

/proc/N/status 进程状态信息,比stat/statm更具可读性

/proc/self 链接到当前正在运行的进程

三、有关与内核交互

上面讨论的大部分 /proc 的文件是只读的。而实际上 /proc 文件系统通过 /proc 中可读写的文件提供了对内核的交互机制。写这些文件可以改变内核的状态,因而要慎重改动这些文件。

/proc/sys目录存放所有可读写的文件的目录:

/proc/sys/kernel/ #可以用于改变内核行为;

/proc/sys/net    #用可以于修改机器/网络的属性。

/proc/sys子目录

在此目录下有许多子目录。此目录中的许多项都可以用来调整系统的性能。这个目录包含信息太多,无法介绍全部。只在示例中展示目录下的一些文件。

示例:

[root@localhostproc]#  ls sys

crypto  debug dev  fs  kernel net  sunrpc  vm

示例:

[root@localhostproc]# ls ./sys/net

core  ipv4 token-ring  unix

/proc/sys/fs/file-max

这个文件指定了可以分配的文件句柄的最大数目。如果用户得到的错误消息声明由于打开文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。可将这个值设置成有任意多个文件,并且能通过将一个新数字值写入该文件来更改该值。

改变内核的参数,用vi编辑或echo参数重定向到文件中。

示例:

[root@localhostproc]# cat sys/fs/file-max

185252

[root@localhostproc]# echo 185253 > sys/fs/file-max

[root@localhostproc]# cat sys/fs/file-max

185253

/proc/sys/kernel/hostname

这个文件指定计算机名称,我们可以修改试试看。

示例:

[root@localhost~]# hostname

localhost

[root@localhost~]# echo "0xfffff" > /proc/sys/kernel/hostname

[root@localhost~]# hostname

0xfffff

/proc/sys/net/ipv4/icmp_echo_ignore_all

这个文件与主机响应网络icmp回应有关。简单修改这个文件,可以在网络上隐藏计算机。

示例:

##不响应 icmp_echo。主机将不会响应其他主机发出的 ping 查询,如下:

[root@localhost ~]# $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

##恢复默认设置

[root@localhost ~]# $ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

四、与/proc目录有关的命令(抛砖引玉)

free 

显示内存信息

uptime

显示信息依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载

示例:

[root@localhost~]# uptime

 10:31:00 up 2 days, 21:38,  1 user, load average: 0.00, 0.00, 0.00

Uname -a

显示信息依次是:内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称

示例:

[root@localhost~]# uname -a

Linux0xfffff 2.6.18-238.el5 #1 SMP Sun Dec 19 14:24:47 EST 2010 i686 i686 i386GNU/Linux

top

显示系统当前的进程和其他状况

ps  

主要用于监控后台进程的工作情况

vmstat 

对内存使用监视

swapon  -s 

显示交换分区信息

sysctl  -a 

显示所有的系统参数

一般日常使用的,均需重点了解,如下:

/proc/cpuinfo   #CPU的信息 (型号, 家族, 缓存大小等)

/proc/meminfo  #物理内存、交换空间等的信息

/proc/mounts   #已加载的文件系统的列表

/proc/devices   #可用设备的列表

/proc/filesystems  #被支持的文件系统

/proc/modules   #已加载的模块

/proc/version   #内核版本

/proc/cmdline  #系统启动时输入的内核命令行参数


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值