linux内核文件系统:proc、tmpfs、devfs、sysfs
proc:虚拟文件系统,在linux系统中被挂载与/proc目录下。里面的文件包含了很多系统信息,比如cpu负载、 内存、网络配置和文件系统等等。我们可以通过内部文本流来查看进程信息(正在运行的各个进程的PID号也以目录名形式存在/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 # 系统正常运行时间
tmpfs:虚拟内存文件系统,使用内存作为临时存储分区,掉电之后会丢失数据,创建时不需要使用mkfs等格式化
1.tmpfs挂载:
mount -t tmpfs -o size=20M tmpfs /tmp
df -h
使用/etc/fstab条目:tmpfs /tmp tmpfs default 0 0
2.tmpfs使用:
用来存储临时生成信息
正常使用挂载目录:创建文件,存储信息,删除文件等
3.tmpfs作用
因为内存的访问速度高于flash,所以可以提高存储效率,避免对flash频繁读写(flash寿命有限)
devfs:设备文件,提供类似于文件的方法来管理位于/dev目录下的设备
1.根目录/dev
设备文件创建
创建根文件系统时创建基本的,比如console,tty*等等
设备驱动加载时创建相应的设备文件
2.特殊设备文件
/dev/console
/dev/null /dev/zero :黑洞文件
3.缺点
不确定的设备映射,有时一个设备映射的设备文件可能不同,假如挂载的u盘可能对应sda也可能对应sdb
没有足够的主/辅设备号,当设备过多的时候,显然会成为一个问题
sysfs:虚拟内存文件系统,2.6内核之前没有规定sysfs的标准挂载目录,但是在2.6之后就规定了要挂载到/sys目录下(针对以前的 sysfs 挂载位置不固定或没有标准被挂载,有些程序从 /proc/mounts 中解析出 sysfs 是否被挂载以及具体的挂载点,这个步骤现在已经不需要了)。它的作用类似于proc,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs 导出内核数据的方式更为统一,并且组织的方式更好。
与proc的比较:
sysfs 与 proc 相比有很多优点,最重要的莫过于设计上的清晰。一个 proc 虚拟文件可能有内部格式,如 /proc/scsi/scsi
,它是可读可写的,(其文件权限被错误地标记为了 0444 !,这是内核的一个BUG),并且读写格式不一样,代表不同的操作,应用程序中读到了这个文件的内容一般还需要进行字符串解析,而在写入时需要先用字符串格式化按指定的格式写入字符串进行操作;相比而言, sysfs 的设计原则是一个属性文件只做一件事情, sysfs 属性文件一般只有一个值,直接读取或写入。整个 /proc/scsi
目录在2.6内核中已被标记为过时(LEGACY),它的功能已经被相应的 /sys 属性文件所完全取代。新设计的内核机制应该尽量使用 sysfs 机制,而将 proc 保留给纯净的“进程文件系统”。
挂载:
mkdir sys
mount -t sysfs /sysfs
很好的参考文章:https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/(使用 /sys 文件系统访问 Linux 内核)