Linux中proc浅析

1.什么是proc

观察LINUX F8的/etc/rc.d/sysinit文件可以发现,在该脚本的21行出现如下语句:

if [ ! -e/proc/mounts ]; then
    mount -n -t proc /proc /proc
    mount -n -t sysfs /sys /sys >/dev/null 2>&1
fi

这断话的意思是,如果/proc/mounts文件存在,便挂载proc类型的文件系统的proc设备到proc目录下,挂载sysfs类型的文件系统的sys设备到/sys目录下。那么,究竟proc文件系统是什么东西呢?

proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

2. proc的主要目录和文件

它的主要目录和文件结构如下:(/proc/)

apm             # 高级电源管理信息
bus             # 总线配置信息(USB的配置也记录在此)
cmdline         # 内核命令行
Cpuinfo         # 关于Cpu信息
Devices         # 可以用到的设备(块设备/字符设备)
Dma             # 使用的DMA通道
Filesystems     # 支持的文件系统
Interrupts      # 中断的使用
Ioports         # I/O端口的使用
Kcore           # 内核核心印象
Kmsg            # 内核消息
Ksyms           # 内核符号表
Loadavg         # 负载均衡
Locks           # 内核锁
Meminfo         # 内存信息
Misc            # 杂项
Modules         # 加载模块列表(可以想成是驱动程序)
Mounts          # 加载的文件系统
Partitions      # 系统识别的分区表
PCI             # 在PCI总线上,每台设备的详细情况(可以使用lspci来查看)
Rtc             # 实时时钟
Slabinfo Slab   # 池信息
Stat            # 全面统计状态表
Swaps           # 对换空间的利用情况
Version         # 内核版本
Uptime          # 系统正常运行时间

除了以上的目录外,主机上正在运行的各进程的PID号也以目录名的形式存在于/proc目录下。其中cmdline文件和environ文件值得一提,前者表示启动这个进程的命令串;后者是这个进程的环境变量的内容。它们均可以使用cat命令进行查看。

如图1所示,2088号进程是由startx命令产生的,即当前的Xwindows模式。

图1

3. proc目录下的cmdline是什么

在/etc/rc.d/sysinit脚本的306行出现了如下代码:

cmdline=$(cat /proc/cmdline)

意思是把/proc/cmdline的内容赋予cmdline变量。而前面说过/proc/cmdline的内容指的是内核命令行。我们先不去纠缠什么是内核命令行,来看看它的内容。如图2所示。

图2

可以发现,它的内容是一段一段离散的字段。很显然这些字符是由内核产生的,它们表示了系统运行环境的一些基本信息,它们在系统完全启动之前就已经确定。这些字段就像标志位一样,因此后续的启动,就可以根据这些“标志位”来进行相关的启动操作。

那么它是由谁产生的呢?粗糙的讲,可以说是由grub生成的。Grub(Grand Unified Bootloader)引导加载程序,它是计算机读取完BIOS信息后,从第一个启动设备的MBR中被读取的内容。没有它,核心根本就不能被加载到系统上。Grub的功能有很多,我们暂时不需要深入的了解。其中的kernel语句,告诉了磁盘的MBR到什么地方去读取系统内核以及辅助系统启动的initrd(InitalRAM
Disk)印象文件在什么地方。同时可以加入一些启动参数,如是否打开RHGB,是否强制扫描...而这些字段,都通通的反映在了内核虚拟文件系统/proc里面的cmdline里面。

因此,当我们需要在系统启动的时候判断某些服务是否被激活时,当然要看看/proc/cmdline里面的内容啦。

时间: 2024-08-06 12:44:08

Linux中proc浅析的相关文章

linux中proc文件系统 -- ldd3读书笔记

1./proc 文件系统概述 /proc 文件系统是由软件创建,被内核用来向外界报告信息的一个文件系统./proc 下面的每一个文件都和一个内核函数相关联,当文件的被读取时,与之对应的内核函数用于产生文件的内容.我们已经见到了很多这样的文件,例如,/proc/modules 总是返回当前内核中加载的模块. /proc 广泛的应用在 linux 文件系统中,现代 linux 发行版上的许多应用程序,例如 ps ,top 和 uptime 都从 /proc 获取他们所需要的信息.一些驱动程序也通过

linux 中/proc 详解

proc 文件系统 在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统.最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告的内核使用,例如/proc/modules 有模块的列表/proc/meminfo 有内存使用的统计表.  使用proc 文件系统的方法和使用设备驱动程序非常相似--创建一个/proc 文件需要的所有信息的结构,包括任何处理函数的指针(在我们的例子中只有一个,当某人试图从/proc 文件读时调用的那

Linux中/proc/[pid]/status详细说明

[[email protected] ~]# cat /proc/self/status Name: cat State: R (running) SleepAVG: 88% Tgid: 5783 Pid: 5783 PPid: 5742 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 256 Groups: 0 1 2 3 4 6 10 VmSize: 6588 kB VmLck: 0 kB VmRSS: 400 kB VmData: 144 kB

Linux中 /proc/[pid] 目录各文件简析

Linux 内核提供了一种通过 proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口. 用户和应用程序可以通过 proc 得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取 proc 文件时,proc 文件系统是动态从系统内核读出所需信息并提交的. 下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,

浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程【转】

本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程",主要涉及到浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程方面的内容,对于浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程感兴趣的同学可以参考一下. 简介: 本文试图完整地描述 Linux 系统中 C 语言编程中的时间问

Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的分析与比较

本文主要讲解Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的作用以及不同之处. /etc/fstab 运维都知道的文件,若想把mount的disk和dir设置为每次开机自动加载,那么就要把相关信息写到这个文件中.当用"mount -a"命令自动mount的时候,也会去读这个文件.例如: LABEL=/hadoop/9 /hadoop/9 ext3 defaults,noatime,nodiratime,noauto 0 2 LABEL=/had

Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的分析与比较 分区表位置

本文主要讲解Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的作用以及不同之处. 转自http://haohaozhang.blog.51cto.com/9176600/1681827/ /etc/fstab 运维都知道的文件,若想把mount的disk和dir设置为每次开机自动加载,那么就要把相关信息写到这个文件中.当用"mount -a"命令自动mount的时候,也会去读这个文件.例如: 1 2 LABEL=/hadoop/9 /hadoop

辛星浅析Linux中的信号

要说Linux中的信号,不得不先提一下中断这个概念.中断是系统中对于异步事件的响应,也就是说某个进程可以在代码执行的过程中被打断了,它先去执行一段异常处理程序.中断可以分为硬件中断,也就是外部中断,它是由外部设备通过硬件请求的方式产生的中断.而软件中断,也就是内部中断,它是由CPU运行程序的一些错误或者执行内部程序调用的时候引起的一种中断. 在CPU的层面去看中断,是这样的一个步骤: ①中断源发出中断信号  ②CPU判断是屏蔽该中断以及现场保护③CPU查询中断向量表,找到相应服务程序的入口地址,

辛星浅析linux中的日志

linux中对于连接时间的日志,一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这两个文件无法直接使用cat查看,并且该文件由系统自动更新,我们可以通过w.who.finger.id.last.lastlog.ac命令进行查看. linux中对于进程的监控日志,首先说进程监控日志在监控用户的操作指令是很有效的,当服务器最近发现经常发生无故宕机或者无故被人删除文件等现象时,可以通过使用进程统计日志来查看.我们使用accton  /var/account/pacct来