Linux虚拟文件系统

传统上,文件系统用于在块设备上持久存储数据。但也可以使用文件系统来组织、提供或交换并不存储在块设备上的信息,这些信息可以由内核动态生成。

proc文件系统(proc filesystem),它使得内核可以生成与系统的状态和配置有关的信息。

Sysfs是另一个特别重要的虚拟文件系统例子。Sysfs按照惯例总是装载在/sys目录,但这不是强制规定,装载到其他位置也是可以的。它设计为从内核向用户层导出非常结构化的信息。与procfs相比,它并不供人直接使用,因为信息是层次化、深度嵌套的。此外,文件包含的信息并不总是ASCII文本形式,也有可能使用不可读的二进制串。但对于想要收集系统中的硬件和设备间拓扑关联方面详细信息的工具而言,该文件系统是非常有用的。

用于专门目的的小文件系统,可以由内核提供的标准函数构建。在内核内部,libfs库提供了所需功能。此外,内核提供了易于实现顺序文件的方法。在调试文件系统debugfs中同时使用了这两种技术,该文件系统使得内核开发者能够快速地向用户空间导出值或从用户空间导入值,而无需创建定制的接口或专门的文件系统。

proc 文件系统

proc文件系统是一种虚拟文件系统,其信息不能从块设备读取。只有在读取文件内容时,才动态生成相应的信息。

使用proc文件系统,可以获得有关内核各子系统的信息(例如,内存利用率、附接的外设,等等),也可以在不重新编译内核源代码的情况下修改内核的行为,或重启系统。与该文件系统密切相关的是系统控制机制(system control mechanism,简称sysctl),前面各章已经频繁引用过该机制。proc文件

系统提供了一种接口,可用于该机制导出的所有选项,使得可以不费力气地修改参数。无需开发专门的通信程序,只需要一个shell和标准的cat、echo程序。通常,进程数据文件系统process data filesystemprocfs的全称)装载在/proc,它的缩写proc FS即由此得名。但有一点值得注意,该文件系统可以装载到目录树的任何位置,就像是其他任何文件系统一样,虽然这种做法并不常见。

/proc的内容

可以分为以下几大类:

  • 内存管理;
  • 系统进程的特征数据;
  • 文件系统;
  • 设备驱动程序;
  • 系统总线;
  • 电源管理;
  • 终端;
  • 系统控制参数

特定于进程的数据

每个系统进程,无论当前状态如何,都有一个对应的子目录(与其PID同名),包含了该进程的有关信息。

ls -l /proc/31561

进程详细信息:

total 0
dr-xr-xr-x.   2 admin admin 0 Jul 12 14:05 attr
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 autogroup
-r--------.   1 admin admin 0 Jul 12 14:05 auxv
-r--r--r--.   1 admin admin 0 Jul 12 14:05 cgroup
--w-------.   1 admin admin 0 Jul 12 14:05 clear_refs
-r--r--r--.   1 admin admin 0 Jul 12 14:04 cmdline   
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 comm
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 coredump_filter
-r--r--r--.   1 admin admin 0 Jul 12 14:05 cpuset
lrwxrwxrwx.   1 admin admin 0 Jul 12 14:05 cwd -> /cloud
-r--------.   1 admin admin 0 Jul 12 14:05 environ 
lrwxrwxrwx.   1 admin admin 0 Jul 12 14:05 exe -> /usr/lib/jvm/java-1.8-openjdk/jre/bin/java
dr-x------.   2 admin admin 0 Jul 12 14:05 fd
dr-x------.   2 admin admin 0 Jul 12 14:05 fdinfo
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 gid_map
-r--------.   1 admin admin 0 Jul 12 14:05 io
-r--r--r--.   1 admin admin 0 Jul 12 14:05 limits
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 loginuid
dr-x------.   2 admin admin 0 Jul 12 14:05 map_files
-r--r--r--.   1 admin admin 0 Jul 12 14:05 maps
-rw-------.   1 admin admin 0 Jul 12 14:05 mem
-r--r--r--.   1 admin admin 0 Jul 12 14:05 mountinfo
-r--r--r--.   1 admin admin 0 Jul 12 14:05 mounts
-r--------.   1 admin admin 0 Jul 12 14:05 mountstats
dr-xr-xr-x.   5 admin admin 0 Jul 12 14:05 net
dr-x--x--x.   2 admin admin 0 Jul 12 14:05 ns
-r--r--r--.   1 admin admin 0 Jul 12 14:05 numa_maps
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 oom_adj
-r--r--r--.   1 admin admin 0 Jul 12 14:05 oom_score
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 oom_score_adj
-r--r--r--.   1 admin admin 0 Jul 12 14:05 pagemap
-r--------.   1 admin admin 0 Jul 12 14:05 patch_state
-r--r--r--.   1 admin admin 0 Jul 12 14:05 personality
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 projid_map
lrwxrwxrwx.   1 admin admin 0 Jul 12 14:05 root -> /
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 sched
-r--r--r--.   1 admin admin 0 Jul 12 14:05 schedstat
-r--r--r--.   1 admin admin 0 Jul 12 14:05 sessionid
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 setgroups
-r--r--r--.   1 admin admin 0 Jul 12 14:05 smaps
-r--r--r--.   1 admin admin 0 Jul 12 14:05 stack
-r--r--r--.   1 admin admin 0 Jul 12 14:04 stat
-r--r--r--.   1 admin admin 0 Jul 12 14:05 statm
-r--r--r--.   1 admin admin 0 Jul 12 14:04 status
-r--r--r--.   1 admin admin 0 Jul 12 14:05 syscall
dr-xr-xr-x. 519 admin admin 0 Jul 12 14:05 task
-r--r--r--.   1 admin admin 0 Jul 12 14:05 timers
-rw-r--r--.   1 admin admin 0 Jul 12 14:05 uid_map
-r--r--r--.   1 admin admin 0 Jul 12 14:05 wchan
cmdline

cmdline是用于起点进程的命令行,即一个字符串,包含了程序名和所有参数:

cat cmdline
java-Djava.security.egd=file:/dev/./urandom-javaagent:/opt/agent/skywalking-agent.jar-jar-Xms1024m-Xmx2048m-XX:SurvivorRatio=8-XX:+UseConcMarkSweepGC/cloud/app.jar

数据各项不是以空格作为分隔,而是以\0作为分隔,可以使用 od -t a 查看字节。

environ

表示为该程序设置的所有环境变量,其仍然使用了0字节作为分隔符。

maps

以文本形式,列出了进程使用的所有库(和进程本身的二进制文件)的内存映射。

7f6c5e9e6000-7f6c5e9ea000 r--p 00000000 fd:00 143113780                  /usr/lib/libfreebl3.so.41
7f6c5e9ea000-7f6c5ea4b000 r-xp 00004000 fd:00 143113780                  /usr/lib/libfreebl3.so.41
7f6c5ea4b000-7f6c5ea6d000 r--p 00065000 fd:00 143113780                  /usr/lib/libfreebl3.so.41
status

包含了有关进程状态的一般信息(文本格式)。不仅提供了有关UID/GID及进程其他数值的信息,还包括内存分配、进程能力、各个信号掩码的状态(待决、阻塞,等等)。

# cat status
Name:	java
Umask:	0022
State:	S (sleeping)
Tgid:	31561
Ngid:	0
Pid:	31561                                               #进程id
PPid:	31541                                               #父进程id
TracerPid:	0
Uid:	1000	1000	1000	1000
Gid:	1000	1000	1000	1000
FDSize:	512
Groups:	1000 
VmPeak:	 4611472 kB
VmSize:	 4600164 kB
VmLck:	       0 kB
VmPin:	       0 kB
VmHWM:	 1371028 kB
VmRSS:	 1339168 kB
RssAnon:	 1338532 kB
RssFile:	     636 kB
RssShmem:	       0 kB
VmData:	 4578520 kB
VmStk:	     132 kB
VmExe:	       8 kB
VmLib:	    9776 kB
VmPTE:	    4064 kB
VmSwap:	   66056 kB
Threads:	517
SigQ:	0/192296
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	0000000200001000
SigCgt:	2000000001004ccf
CapInh:	00000000a80425fb
CapPrm:	0000000000000000
CapEff:	0000000000000000
CapBnd:	00000000a80425fb
CapAmb:	0000000000000000
NoNewPrivs:	0
Seccomp:	2
Speculation_Store_Bypass:	vulnerable
Cpus_allowed:	ffffffff
Cpus_allowed_list:	0-31
Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	5
nonvoluntary_ctxt_switches:	2
stat,statm

statstatm以一连串数字的形式,提供了进程及其内存消耗的更多状态信息。

fd

fd子目录包含了一些文件,文件名都是数字。这些文件名表示进程的各个文件描述符。这里的每个文件都是一个符号链接,指向文件名对应的文件描述符在文件系统中的位置,当然得假定该描述符确实是文件。其他的文件类型,如果也能够通过文件描述符访问(如管道),那么将给出一个链接目标,如pipe:[1434]。

lrwx------. 1 admin admin 64 Jul 12 14:21 0 -> /dev/null
l-wx------. 1 admin admin 64 Jul 12 14:21 1 -> pipe:[67223432]
l-wx------. 1 admin admin 64 Jul 12 14:21 2 -> pipe:[67223433]
lr-x------. 1 admin admin 64 Jul 12 14:21 3 -> /usr/lib/jvm/java-1.8-openjdk/jre/lib/rt.jar
lr-x------. 1 admin admin 64 Jul 12 14:21 9 -> /opt/agent/plugins/apm-avro-plugin-7.0.0.jar
lr-x------. 1 admin admin 64 Jul 12 14:21 90 -> /dev/random
lr-x------. 1 admin admin 64 Jul 12 14:21 91 -> /dev/random
lr-x------. 1 admin admin 64 Jul 12 14:21 92 -> /dev/urandom
lr-x------. 1 admin admin 64 Jul 12 14:21 93 -> /dev/urandom
cwd

指向进程当前工作目录。如果用户有适当的权限,则可以使用cd cwd切换到该目录,而无需知道cwd到底指向哪个目录。

lrwxrwxrwx.   1 admin admin 0 Jul 12 14:05 cwd -> /cloud
exe

指向包含了应用程序代码的二进制文件。

lrwxrwxrwx.   1 admin admin 0 Jul 12 14:05 exe -> /usr/lib/jvm/java-1.8-openjdk/jre/bin/java
root

指向进程的根目录。这不见得是全局的根目录(参见chroot机制)。

一般性系统信息

不仅/proc的子目录包含了信息,/proc本身也包含了一些信息。与特定的内核子系统无关(或由几个子系统共享)的一般性信息,一般存放在/proc下的文件中。

iomemioports提供了用来与设备通信的内存地址和端口的有关信息。

buddyinfoslabinfo提供了伙伴系统和slab分配器当前的使用情况,而meminfo给出了一般性的内存使用情况,分为高端内存、低端内存、空闲内存、已分配区域、共享区域、交换和回写内存。

Vmstat给出了内存管理的其他特征信息,包括当前在内存管理的各个子系统中内存页的数目。

kallsymskcore项用于支持内核代码调试。前者是一个符号表,给出了所有全局内核变量和函数在内存中的地址。

kcore是一个动态的内核文件,“包含”了运行中的内核的所有数据,即主内存的全部内容。

interrupts保存了当前操作期间引发的中断的说明。

loadavguptime。前者给出了过去60秒、5分钟、15分钟的平均系统负荷(即,运行队列的长度),后者给出了系统的运行时间,即从系统启动以来经过的时间。

网络信息

/proc/net子目录提供了内核的各种网络选项的有关数据。其中保存了各种协议和设备数据,包括以下几个有趣的数据项。

udptcp提供了IPv4UDP和TCP套接字的统计数据。IPv6的对应数据保存在udp6tcp6中。UNIX套接字的统计数据记录在unix

用于反向地址解析的ARP表,可以在arp文件中查看。

dev保存了通过系统的网络接口传输的数据量的统计数据(包括环回接口)。该信息可用于检查网络的传输质量,因为其中也包括了传输不正确的数据包、被丢弃的数据包和冲突相关的数据。

有些网络驱动程序(如,流行的英特尔PRO/100芯片组的驱动程序)在/proc/net创建了额外的子目录,提供了更详细的特定于硬件的信息。

系统控制参数

用于动态地检查修改内核行为的系统控制参数,在proc文件系统的数据项中,属于最多的一部分。但这并不是修改相关数据的唯一方法,还可以使用sysctl系统调用。后者需要的工作量更多,因为首先必须写一个程序,来支持通过系统调用接口与内核通信。结果,在内核版本2.5开发期间,sysctl机制标记为废弃(每次调用sysctl时,内核将输出一个警告信息),计划在未来的某个时候去掉。但是,删除系统调用引起了争论,直至内核版本2.6.25,该调用仍然存在于内核中,而警告信息也仍然会出现。

sysctl系统调用实际上是不必要的,因为通过/proc接口对内核数据的操作已经简单到了极点sysctl参数由一个独立的子目录/proc/sys管理,它进一步划分为各种子目录,对应于内核的各个子系统。

dr-xr-xr-x. 1 root root 0 Jul 12 14:38 abi
dr-xr-xr-x. 1 root root 0 Jul 12 14:04 crypto
dr-xr-xr-x. 1 root root 0 Jul 12 14:38 debug
dr-xr-xr-x. 1 root root 0 Jul 12 14:38 dev
dr-xr-xr-x. 1 root root 0 Jul  3 08:15 fs
dr-xr-xr-x. 1 root root 0 Jul  3 08:15 kernel
dr-xr-xr-x. 1 root root 0 Jul 12 14:04 net
dr-xr-xr-x. 1 root root 0 Jul 12 14:38 user
dr-xr-xr-x. 1 root root 0 Jul 12 14:38 vm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【12.30】转行小白历险记-刷算法06

01补充一下:哈希表的基础知识 1. 创建哈希表 在 JavaScript 中,您可以使用对象或 Map 来创建一个哈希表。 使用对象: let hashTable {};使用 Map 对象: let hashMap new Map();2. 插入键值对(Add / Set&#xf…

虚拟化技术和云计算的关系

1、云计算底层就是虚拟化技术。 (1)常见的虚拟化技术:VMware(闭源的,需要收费)、XEN、KVM (2)大部分公司用的虚拟化方案:XEN、KVM 2、虚拟化的历史 (1&am…

redhat 8 安装openstack

redhat 8 安装openstack 1、安装文档2、redhat 8 安装openstack3、使用openstack 1、安装文档 openstack官方安装文档 https://docs.openstack.org/install-guide/ 2、redhat 8 安装openstack 3、使用openstack

数据结构-怀化学院期末题(59)

题目描述: 迷宫求最短路径。 只能走上、下,左、右四个方向。 输入: 输入只有一个用例。 第一行为迷宫大小,n,m,即n行m列, 第二行为起点位置, 第三行为终点位置, 接下来的为迷宫图,1表…

华为hcia之ipv6实验手册

R3: dhcp enable ipv6 dhcpv6 pool test address prefix 2000:23::/64 excluded-address 2000:23::2 dns-server 2000:23::2 interface GigabitEthernet0/0/0 ipv6 enable ipv6 address 2000:12::2/64 ipv6 address auto link-local undo ipv6 nd ra halt //无状态配置 inter…

思维训练-怎样设计一个MQ

架构师需要做各种设计,要不断地提高自己的设计能力。这有没有方法可以训练呢?有的,就是看到什么、想到什么,就假设对面坐着产品经理,一起讨论怎么把它设计出来。比如怎样设计一个MQ 我:首先我确认一下需求。…

基于Python的电商手机数据可视化分析和推荐系统

1. 项目简介 本项目旨在通过Python技术栈对京东平台上的手机数据进行抓取、分析并构建一个简单的手机推荐系统。主要功能包括: 网络爬虫:从京东获取手机数据;数据分析:统计各厂商手机销售分布、市场占有率、价格区间和好评率&am…

SQL Server 存储过程 触发器 事务处理

CSDN 成就一亿技术人! 难度指数:* * CSDN 成就一亿技术人! 目录 1. 存储过程的作用 创建存储过程 2. 触发器 触发器的种类 insert触发器 update触发器 delete触发器 测试 3. 事务 开始事务 提交事务 回滚事务 举个实例 在 SQ…

java设计模式实战【策略模式+观察者模式+命令模式+组合模式,混合模式在支付系统中的应用】

引言 在代码开发的世界里,理论知识的重要性毋庸置疑,但实战经验往往才是知识的真正试金石。正所谓,“读万卷书不如行万里路”,理论的学习需要通过实践来验证和深化。设计模式作为软件开发中的重要理论,其真正的价值在…

VMvare虚拟机中文件夹共享防火墙设置

目录 一、虚拟机jdk及tomcat配置 1.1 JDK配置 1.2 tomcat配置 二、文件夹共享 2.1 为什么需要配置文件夹共享功能 2.2 高级共享和普通共享 三、防火墙设置 入站规则和出站规则 四、思维导图 一、虚拟机jdk及tomcat配置 1.1 JDK配置 (1) 双击jdk (2&#xf…

WPF 消息日志打印帮助类:HandyControl+NLog+彩色控制台打印+全局异常捕捉

文章目录 前言相关文章Nlog配置HandyControl配置简单使用显示效果文本内容 全局异常捕捉异常代码运行结果 前言 我将简单的HandyControl的消息打印系统和Nlog搭配使用,简化我们的代码书写 相关文章 .NET 控制台NLog 使用 WPF-UI HandyControl 控件简单实战 C#更改…

1、gdb基本功能

文章目录 1、gdb1.1、运行1.1.1、程序入参 1.2、断点及观察点1.2.1、设置断点1.2.2、禁用、删除断点1.2.3、观察点 1.3、打印1.3.1、设定打印参数1.3.2、打印数据1.3.3、自动打印1.3.4、按照地址打印 linux下我现在接触到的常用调试工具如下. gbdgdbguicmake-tools gdb是最为通…

python+vue高校体育器材管理信息系统5us4g

优秀的高校体育馆场地预订系统能够更有效管理体育馆场地预订业务规范,帮助管理者更加有效管理场地的使用,有效提高场地使用效率,可以帮助提高克服人工管理带来的错误等不利因素,所以一个优秀的高校体育馆场地预订系统能够带来很大…

霹雳吧啦Wz《pytorch图像分类》-p2AlexNet网络

《pytorch图像分类》p2AlexNet网络基础及代码 一、零碎知识点1.过拟合2.使用dropout后的正向传播3.正则化regularization4.代码中所用的知识点 二、总体架构分析1.ReLU激活函数2.手算3.模型代码 三、训练花分类课程代码1.model.py2.train.py3.predict.py 一、零碎知识点 1.过拟…

【C++ 单例模式】

正确的析构 静态实例和回收类 SingletonMode.cpp #include <iostream>class Singleton {private:Singleton(){std::cout << "构造" << std::endl;};~Singleton(){std::cout << "析构" << std::endl;}public:static Singlet…

Java多线程<三>常见的多线程设计模式

多线程的设计模式 两阶段线程终止 park方法 interrupted() 会让他失效。 使用volatile关键字进行改写 单例模式 双锁检测 保护性暂停 实现1&#xff1a; package threadBase.model;/*** author: Zekun Fu* date: 2022/5/29 19:01* Description:* 保护性暂停&#xff0c;* …

打砖块,Android休闲小游戏开发

A. 项目描述 《打砖块》是一款经典的休闲小游戏 &#xff0c;结合了经典的图形和音效&#xff0c;给玩家带来了轻松愉快的游戏体验。 该游戏操作简单易上手。玩家只需通过触摸屏幕控制底部的“拍子”左右移动&#xff0c;以反弹“小球” 击碎 顶部的砖块。玩家可以根据球的角度…

基于JAVA+SSM+VUE的前后端分离的大学竞赛管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着互联网技术的快速…

青龙面板的安装

一、安装docker 首先&#xff0c;需要在服务器上安装docker。 没有服务器的可以使用虚拟机&#xff0c;或申请一台三丰云的免费云服务器体验一下&#xff0c;独立IP地址&#xff0c;送免备案服务&#xff0c;可以满足基本的使用&#xff0c;三丰云上还有免费虚拟主机等其他免费…

ES6之解构赋值详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…