"这篇文章主要介绍了Linux的proc文件系统,它是一个虚拟文件系统,用于提供操作系统内部状态的实时信息。通过proc文件系统,用户可以获取CPU、内存、设备、中断等关键系统信息,以及进行系统配置。本文将探讨proc文件系统的用法和相关代码示例。" 在Linux中,`/proc`文件系统是系统核心为了与用户空间交互而创建的一个特殊文件系统。它并不像其他文件系统那样存储持久化的数据,而是动态地反映了系统的当前状态。下面我们将深入探讨 `/proc` 文件系统中的各个关键部分。 1. `/proc/cpuinfo`: 提供了关于CPU的信息,如型号、频率、核心数等。这对于诊断硬件问题或优化系统性能非常有用。 2. `/proc/partitions`: 显示了系统中的磁盘分区信息,包括逻辑和物理分区的大小和类型。 3. `/proc/meminfo`: 提供内存使用情况的详细统计,包括总内存、已用内存、空闲内存等。 4. `/proc/uptime`: 显示系统自启动以来的运行时间,以及最近一次空闲的时间。 5. `/proc/devices`: 列出了系统中注册的所有设备及其对应的设备驱动程序。 6. `/proc/interrupts`: 统计了每个中断处理程序的中断次数,有助于分析系统中断性能。 7. `/proc/kmsg`: 包含内核消息日志,可以用来诊断内核相关的错误。 8. `/proc/*`: 每个以数字开头的子目录代表一个正在运行的进程,其中`/proc/self`指向当前执行进程,`/proc/PID`则提供了指定进程的详细信息。 9. `/proc/sys`: 用于查看和修改内核参数。例如,`/proc/sys/kernel/hostname`保存了主机名,`/proc/sys/net/ipv4/ip_forward`控制着IP转发功能,`/proc/sys/vm/drop_caches`可用于释放缓存内存。 10. `/proc/sys/*`: 这些文件和子目录提供了系统各种配置的接口,可以通过`sysctl`命令来操作。`sysctl -a`显示所有可调整的内核参数,`sysctl -w`则用于设置参数值。 此外,还有一些实用工具,如`free`显示内存使用情况,`vmstat`报告虚拟内存、进程、块I/O等统计信息,`swapon`管理交换分区,`pmap`查看进程内存映射,`ps`列出进程状态,`top`实时监控系统资源使用,`uname`报告系统信息,`iostat`分析I/O性能,`vmstat`显示虚拟内存统计,`mpstat`报告多处理器系统上的CPU活动,`netstat`显示网络连接状态,`dmesg`打印内核消息。 在编程中,开发者可以读取`/proc`目录下的文件以获取系统信息,比如通过读取`/proc/<pid>/status`来获取进程的状态,或者分析`/proc/net/tcp`和`/proc/net/udp`来监控网络连接。 `/proc`文件系统是Linux系统中一个至关重要的组成部分,它为用户和管理员提供了宝贵的系统诊断和管理工具,使得无需重启或使用特殊工具就能获取和修改系统内部状态。理解和熟练使用`/proc`对于任何Linux用户或开发者来说都是必不可少的技能。
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。 下面简要介绍其下文件:/proc/cpuinfo cpu信息 /proc/partitions 系统识别的分区表/proc/meminfo 内存信息/proc/uptime 系统正常运行时间/proc/devices 可以用到的设备(块设备/字符设备)/proc/interrupts 中断进程/proc/kmsg 内核信息 并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi目录不存在。
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程。系统中当前运行的每一个进程都有对应的一个目录在 /proc下,以进程的PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。proc文件系统的名字就是由之而起。/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改, 不过重新启动机器后会失效,可以通过更改/proc/sys中内核参数对应的文件 /etc/sysctl.conf 的内核参数来永久更改。 在/proc/sys/下有几个重要目录:/proc/sys/kernel/hostname/proc/sys/net/ipv4/ip_forward/proc/sys/vm/drop_caches/proc/sys/vm/swappiness 要改变内核的参数,可以用vi编辑或echo参数重定向到文件。还有命令“sysctl”, 其作用在运行时配置内核参数其中, sysctl -a 显示所有的系统参数 sysctl -p 从指定的文件加载系统参数 sysctl -w 改动某个指定参数的值 与/dev目录相关的一些命令选项: free 显示内存信息 -b 以Byte为单位显示内存使用情况
-k 以KB为单位显示内存使用情况
-m 以MB为单位显示内存使用情况
-o 不显示缓冲区调节列
-s 持续观察内存使用状况
-t 显示内存总和列
-V 显示版本信息 vmstat 对内存使用监视 swapon -s 显示交换分区信息 swapon -a 激活所有在/etc/fstab中有sw标记的分区 swapon -p 后面接数字,设定交换分区优先级 pmap 查看一个具体进程所用内存的分布情况 ps 主要用于监控后台进程的工作情况 -e 显示所有进程
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
-a 显示终端上的所有进程
-r 只显示正在运行的 top 显示系统当前的进程和其他状况
-d 指定屏幕刷新的时间间隔 -i 不显示闲置或僵死进程 gnome-system-monitor uname -a 显示信息依次是:内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称 -n 主机名称 -m cpu名称 -r 内核版本号 -s 内核名称 -v 操作系统版本号 -p 处理器类型 -i 硬件平台类型 -o 操作系统名称 uptime 显示信息依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载 -V 查询版本号 tload 显示系统负载情况 -d<间隔秒数> 设置tload检测系统负载的间隔时间,单位以秒计算 -s<刻度大小> 设置图表的垂直刻度大小,单位以列计算 -V 显示版本信息
mknod 创建设备文件
linux proc接口的建立与使用
/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux? 内核空间和用户空间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。
/proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。
/proc 文件系统包含了一些目录(用作组织信息的方式)和虚拟文件。虚拟文件可以向用户呈现内核中的一些信息,也可以用作一种从用户空间向内核发送信息的手段。
尽管像本文这样短小的一篇文章无法详细介绍 /proc 的所有用法,但是它依然对这两种用法进行了展示,从而可以让我们体会一下 /proc 是多么强大。清单 1 是对 /proc 中部分元素进行一次交互查询的结果。它显示的是 /proc 文件系统的根目录中的内容。注意,在左边是一系列数字编号的文件。每个实际上都是一个目录,表示系统中的一个进程。由于在 GNU/Linux 中创建的第一个进程是 init 进程,因此它的 process-id 为 1。然后对这个目录执行一个 ls 命令,这会显示很多文件。每个文件都提供了有关这个特殊进程的详细信息。例如,要查看 init 的 command-line 项的内容,只需对 cmdline 文件执行 cat 命令。
/proc 中另外一些有趣的文件有:cpuinfo,它标识了处理器的类型和速度;pci,显示在 PCI 总线上找到的设备;modules,标识了当前加载到内核中的模块。
清单 1. 对 /proc 的交互过程
[root@plato]# ls /proc
1 2040 2347 2874 474 fb mdstat sys
104 2061 2356 2930 9 filesystems meminfo sysrq-trigger
113 2073 2375 2933 acpi fs misc sysvipc
1375 21 2409 2934 buddyinfo ide modules tty
1395 2189 2445 2935 bus interrupts mounts uptime
1706 2201 2514 2938 cmdline iomem mtrr version
179 2211 2515 2947 cpuinfo ioports net vmstat
180 2223 2607 3 crypto irq partitions
181 2278 2608 3004 devices kallsyms pci
182 2291 2609 3008 diskstats kcore self
2 2301 263 3056 dma kmsg slabinfo
2015 2311 2805 394 driver loadavg stat
2019 2337 2821 4 execdomains locks swaps
[root@plato 1]# ls /proc/1
auxv cwd exe loginuid mem oom_adj root statm task
cmdline environ fd maps mounts oom_score stat status wchan
[root@plato]# cat /proc/1/cmdline
init [5]
[root@plato]#
清单 2 展示了对 /proc 中的一个虚拟文件进行读写的过程。这个例子首先检查内核的 TCP/IP 栈中的 IP 转发的目前设置,然后再启用这种功能。
剩余17页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦