获取系统信息3——proc文件系统介绍和使用

来源:互联网 发布:ubuntu fedora centos 编辑:程序博客网 时间:2024/06/14 06:26

以下内容源于朱有鹏《物联网大讲堂》课程的学习整理,如有侵权,请告知删除。


一、proc文件系统介绍

1、操作系统级别的调试

  • 简单程序,可以单步调试;(多线程不行,linux内核不行)
  • 复杂程序,可以printf、cout等打印信息调试;(输出信息到控制台)
  • 也可以框架体系日志记录信息调试;(输出信息到某个txt)
  • 但内核很复杂,存在调试困境;

2、proc虚拟文件系统的工作原理

(1)linux内核是一个非常庞大、非常复杂的一个单独的程序,调试此程序是非常复杂的。

  • kernel这样庞大的项目,添加或更改其中一个功能是非常麻烦的,因为该功能可能会影响其他功能。
  • 早期内核版本中尽管调试很麻烦,但是高手们还可以凭借个人超凡脱俗的能力去驾驭,但是到了2.4左右的版本时,难度已经非常大了。
  • 为了降低内核调试和学习的难度,内核开发者们在内核中添加了一些属性专门用于调试内核,proc文件系统就是一个尝试。

(2)proc文件系统的思路

  • 在内核中构建一个虚拟文件系统/proc;
  • 内核运行时,将内核中一些关键的数据结构,以文件的方式呈现在/proc目录中的一些特定文件中;
  • 将不可见的内核中的数据结构,以可视化的方式呈现给内核的开发者。

(3)proc文件系统提供了一种调试内核的方法

  • 通过实时观察/proc/xxx文件,获取内核中特定数据结构的值;
  • 对比添加新功能的前后,判断新功能产生的影响对与否。

(4)proc目录下的文件,不是真实文件,而只是一个接口

  • 文件大小都是0,因为这些文件并不存在于硬盘中;
  • 当读取这个文件时,内核并不是去硬盘上找这个文件,而是映射为内核内部的一个数据结构,把该数据结构读取出来,并且格式化成字符串,返回;
  • 尽管我们看到的还是一个文件内容字符串,和普通文件一样的,但是实际上我们知道这个内容是实时的从内核中数据结构来的,而不是硬盘中来的。
  • 这些文件都是只读的,不能更改。

3、常用proc中的文件介绍

(1)/proc/cmdline,命令行参数

(2)/proc/cpuinfo

(3)/proc/devices 调试驱动的时候会用到

(4)/proc/interrupts



二、proc文件系统的使用

1、cat以手工查看,如“cat   /proc/cmdline”;

2、程序中可以文件IO访问;

3、在shell程序中用cat命令结合正则表达式来获取并处理内核信息;

4、sys文件系统

(1)sys文件系统本质上和proc文件系统一样

  • 都是虚拟文件系统,都在根目录下有个目录(一个是/proc目录,另一个是/sys目录)
  • 因此都不是硬盘中的文件,都是内核中的数据结构的可视化接口。

(2)不同的是/proc中的文件只能读,但是/sys中的文件可以读写

  • 读/sys中的文件就是获取内核中数据结构的值,而写入/sys中的文件就是设置内核中的数据结构的元素的值。

(3)历史上刚开始先有/proc文件系统,人们希望通过这种技术来调试内核。

  • 实际做出来后确实很有用,所以很多内核开发者都去内核添加代码,向/proc目录中写文件。
  • 刚开始的时候内核管理者对proc目录的使用没有统一规划,后来的结果就是proc里面的东西又多又杂乱。

(4)后来proc中的内容缺乏统一规划,于是添加了sys目录

  • sys文件系统很好地进行规划和约定,于是使用sys目录时有了规矩。


原创粉丝点击