Linux内核设备驱动/proc文件系统详解

/proc文件系统提供了一个基于文件的Linux 内部接口。它可以用于确定系统的各种不同设备和进程的状态。对他们进行配置。因而,理解和应用有关这个文件系统的知识是理解你的Linux 系统的关键。

一、/proc文件系统的特点和/proc文件的说明

/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用磁盘空间。

/proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容。也可以通过写/proc文件修改内核参数

/proc目录下的文件分析  /proc/$pid 关于进程$pid的信息目录。每个进程在/proc 下有一个名为其进程号的目录。
/proc/cmdline  内核启动的命令行
/proc/cpuinfo  处理器信息,如类型、制造商、型号和性能。 
/proc/devices  列出字符和块设备的主设备号,以及分配到这些设备号的设备名称
/proc/dma  显示当前使用的DMA通道。 
/proc/filesystems  列出了可供使用的文件系统类型,通常是编入内核的文件系统类型,但可以通过模块加入新的类型
/proc/interrupts  显示使用的中断号,中断名称,以及这些中断从系统启动后产生的次数
/proc/ioports  当前使用的I/O端口。 
/proc/kallsyms  内核符号表。安装新的模块后,会在这里体现出来 
/proc/kcore  系统物理内存映象。与物理内存大小完全一样,但不实际占用这么多内存;(记住:除非拷贝到文件中,/proc下没有任何东西占用任何磁盘空间) 
/proc/kmsg  内核输出的消息。也被送到syslog。 
/proc/loadavg  系统的平均负载,前3个是过去1分钟,5分钟,15分钟的负载,然后是正在运行的任务数和总任务数,最后是上次运行的进程号
/proc/meminfo  存储器使用信息,包括物理内存和swap。 
/proc/modules  当前加载了哪些核心模块。 
/proc/partitions  系统当前挂载硬盘的分区信息
/proc/pci  系统的pci总线信息
/proc/net  网络协议状态信息。 
/proc/self  到查看/proc的程序的进程目录的符号连接。当2个进程查看/proc时,是不同的连接。这主要便于程序得到它自己的进程目录。
/proc/slabinfo  系统中slab缓存的分配信息
/proc/stat  系统的一些状态信息
/proc/swaps  系统采用的交换区信息
/proc/sysrq-trigger  用于启动sysRq键 $>echo 1 > sysrq-trigger
/proc/uptime  系统启动的时间长度和空闲的时间长度。供uptime使用
/proc/version  内核版本

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

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

ps -ef | grep httpd

在这里插入图片描述
上述命令显示有一个正在运行的 httpd 进程的 PID 是5658。相对应的,/proc 中应该有一个名叫5658的目录

ls –l /proc/5658

在这里插入图片描述
文件里有:

"cmdline" 包含启动进程时调用的命令行。
"environ" 进程的环境变两。
"status" 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"。每个进程的目录都有几个符号链接,
"cwd"是指向进程当前工作目录的符号链接,
"exe"指向运行的进程的可执行程序,
"root"指向被这个进程看作是根目录的目录 (通常是"/")。
"fd"包含指向进程使用的文件描述符的链接。
"cpu"仅在运行 SMP 内核时出现,里面是按 CPU 划分的进程时间。

三、通过/proc 与内核交互

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

/proc/sys/kernel - 这个目录包含反通用内核行为的信息。/proc/sys/kernel/{domainname, hostname} 存放着机器/网络的域名和主机名。这些文件可以用于修改这些名字。

$ hostname
machinename.domainname.com
$ cat /proc/sys/kernel/domainname
domainname.com
$ cat /proc/sys/kernel/hostname
machinename
$ echo "new-machinename"  > /proc/sys/kernel/hostname
$ hostname
new-machinename.domainname.com

这样,通过修改 /proc 文件系统中的文件,我们可以修改主机名。很多其他可配置的文件存在于/proc/sys/kernel/。这里不可能列出所有这些文件,读者可以自己去这个目录查看以得到更多细节信息。另一个可配置的目录是 /proc/sys/net。这个目录中的文件可以用于修改机器/网络的网络属性。比如,简单修改一个文件,你可以在网络上瘾藏匿的计算机。

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这将在网络上瘾藏你的机器,因为它不响应 icmp_echo。主机将不会响应其他主机发出的 ping 查询。

$ ping machinename.domainname.com
no answer from machinename.domainname.com

要改回缺省设置,只要

$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/proc/sys 下还有许多其它可以用于改变内核属性。可自行在网上搜索。
在这里插入图片描述
观注快乐程序员公众号,每日分享一点小知识。爱编程,爱生活!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值