zl程序教程

您现在的位置是:首页 >  系统

当前栏目

探究linux系统之proc文件系统详解

Linux系统 详解 探究 文件系统 proc
2023-09-14 09:15:47 时间

前言

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云社区专家博主😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

一. proc文件系统介绍

Linux系统上的/proc目录是一种文件系统,即proc文件系统。

/与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),它不包含任何磁盘上的文件,而是由内核在运行时动态生成的文件和目录。

在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs、devfs、sysfs和procfs。而procfs就是其中应用最广泛的一种伪文件系统。

procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就可以简单直接的通过echo或cat这样的文件操作命令对系统信息进行查取和调整了。同时procfs也提供了一个接口,使得我们自己的内核模块或用户态程序可以通过procfs进行参数的传递。在当今的Linux系统中,大量的系统工具也通过procfs获取内核参数,例如ps、lspci等等,没有procfs它们将可能不能正常工作。

而在 /proc 目录中,每个文件和目录都代表着一个系统内核的运行时状态。

这些文件和目录可以用来查询和修改系统的各种参数和配置信息,如进程信息、内存使用情况、系统负载、网络状态等等。通过 /proc 文件系统,用户和程序可以直接访问和操作内核的运行时数据,而无需编写专门的内核模块或系统调用。

/proc 文件系统是一个只读文件系统,其中的大多数文件都是只读的,因为它们反映了内核的运行时状态。但是,有些文件可以被修改以改变内核的配置。例如,可以通过修改 /proc/sys/kernel/hostname 文件来更改系统的主机名。

总的来说,/proc 文件系统为系统管理员和开发人员提供了一种方便的方式来查询和调试系统的状态和性能。

proc文件系统有哪些特点呢?

  • 可读性:proc文件系统的信息是以文本格式呈现的,这使得它易于读取和解析。

  • 系统级别:proc文件系统提供了对内核和系统级别信息的访问,例如系统中正在运行的进程、内存使用情况、CPU信息、硬件配置等等。

  • 可以用于诊断和调试:proc文件系统提供了对系统状态和进程信息的实时访问,这使得它非常有用于诊断和调试系统问题。

proc文件系统提供了一种非常方便的方式来访问和监控系统的内部状态,它是Linux操作系统中非常重要的组成部分

另外:proc 放置的数据都是在内存当中,例如系统内核、进程、外部设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间。

在这里插入图片描述

个人主页:我是沐风晓月

本文首发于csdn, 直接在csdn搜【我是沐风晓月】

二. 进程目录中的常见文件介绍

/proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。

[root@mufeng ~]# ll /proc |head
总用量 0
dr-xr-xr-x.  9 root           root                         0 128 19:36 1
dr-xr-xr-x.  9 root           root                         0 36 22:26 10
dr-xr-xr-x.  9 root           root                         0 36 22:26 11
dr-xr-xr-x.  9 root           root                         0 36 22:26 12
dr-xr-xr-x.  9 root           root                         0 36 22:26 13
dr-xr-xr-x.  9 root           root                         0 36 22:26 14
dr-xr-xr-x.  9 root           root                         0 36 22:26 16
dr-xr-xr-x.  9 root           root                         0 128 19:39 16773
dr-xr-xr-x.  9 root           root                         0 128 19:39 16781
[root@mufeng ~]# 

我们来查看运行的一个PID为11713的进程:

[root@mufeng proc]# ll /proc/17713
总用量 0
dr-xr-xr-x.  2 root root 0 36 23:22 attr
-rw-r--r--.  1 root root 0 36 23:22 autogroup
-r--------.  1 root root 0 36 23:22 auxv
-r--r--r--.  1 root root 0 36 23:22 cgroup
--w-------.  1 root root 0 36 23:22 clear_refs
-r--r--r--.  1 root root 0 36 22:27 cmdline
-rw-r--r--.  1 root root 0 36 23:22 comm
-rw-r--r--.  1 root root 0 36 23:22 coredump_filter
-r--r--r--.  1 root root 0 36 23:22 cpuset
lrwxrwxrwx.  1 root root 0 36 23:22 cwd -> /root
-r--------.  1 root root 0 36 23:22 environ
lrwxrwxrwx.  1 root root 0 36 23:07 exe -> /usr/libexec/evolution-calendar-factory-subprocess
dr-x------.  2 root root 0 36 23:22 fd
dr-x------.  2 root root 0 36 23:22 fdinfo
-rw-r--r--.  1 root root 0 36 23:22 gid_map
-r--------.  1 root root 0 36 23:22 io
-r--r--r--.  1 root root 0 36 23:22 limits
-rw-r--r--.  1 root root 0 36 23:22 loginuid
dr-x------.  2 root root 0 36 23:22 map_files
-r--r--r--.  1 root root 0 36 23:22 maps
-rw-------.  1 root root 0 36 23:22 mem
-r--r--r--.  1 root root 0 36 23:22 mountinfo
-r--r--r--.  1 root root 0 36 23:22 mounts
-r--------.  1 root root 0 36 23:22 mountstats
dr-xr-xr-x.  6 root root 0 36 23:22 net
dr-x--x--x.  2 root root 0 36 23:22 ns
-r--r--r--.  1 root root 0 36 23:22 numa_maps
-rw-r--r--.  1 root root 0 36 23:22 oom_adj
-r--r--r--.  1 root root 0 36 23:22 oom_score
-rw-r--r--.  1 root root 0 36 23:22 oom_score_adj
-r--r--r--.  1 root root 0 36 23:22 pagemap
-r--------.  1 root root 0 36 23:22 patch_state
-r--r--r--.  1 root root 0 36 23:22 personality
-rw-r--r--.  1 root root 0 36 23:22 projid_map
lrwxrwxrwx.  1 root root 0 36 22:29 root -> /
-rw-r--r--.  1 root root 0 36 23:22 sched
-r--r--r--.  1 root root 0 36 23:22 schedstat
-r--r--r--.  1 root root 0 36 23:22 sessionid
-rw-r--r--.  1 root root 0 36 23:22 setgroups
-r--r--r--.  1 root root 0 36 23:22 smaps
-r--r--r--.  1 root root 0 36 23:22 stack
-r--r--r--.  1 root root 0 36 23:07 stat
-r--r--r--.  1 root root 0 36 23:22 statm
-r--r--r--.  1 root root 0 36 22:27 status
-r--r--r--.  1 root root 0 36 23:22 syscall
dr-xr-xr-x. 11 root root 0 36 22:29 task
-r--r--r--.  1 root root 0 36 23:22 timers
-rw-r--r--.  1 root root 0 36 23:22 uid_map
-r--r--r--.  1 root root 0 36 23:22 wchan
[root@mufeng proc]# 

  • cmdline 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息;
[root@mufeng proc]# more 17942/cmdline
/usr/libexec/fwupd/fwupd
  • cwd 指向当前进程运行目录的一个符号链接;

  • environ 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示;

[root@mufeng proc]# more 17942/environ
LANG=zh_CN.UTF-8

  • exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝;

  • fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接;

ot@mufeng proc]# ll /proc/76501/fd
总用量 0
lrwx------. 1 root root 64 36 23:29 0 -> /dev/pts/0
lrwx------. 1 root root 64 36 23:29 1 -> /dev/pts/0
lrwx------. 1 root root 64 36 23:28 2 -> /dev/pts/0
lrwx------. 1 root root 64 36 23:29 3 -> /var/tmp/a.txt.swp

  • limits 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取

  • maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表;

[root@mufeng proc]# ll /proc/76501/maps
-r--r--r--. 1 root root 0 36 23:30 /proc/76501/maps
[root@mufeng proc]# 

  • mem — 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取;

  • root — 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录;

  • stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用;

  • statm — 当前进程占用内存的状态信息,通常以“页面”(page)表示;

  • status — 与stat所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;

[root@mufeng proc]# more /proc/76501/status
Name:	vim
Umask:	0022
State:	S (sleeping)
Tgid:	76501
Ngid:	0
Pid:	76501
PPid:	75155
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	256
Groups:	0 
VmPeak:	  151768 kB
VmSize:	  151544 kB
VmLck:	       0 kB
VmPin:	       0 kB
  • task 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;

三. /proc目录下其他常见的文件介绍

3.1 常见的文件

  • /proc/cpuinfo: 这个文件包含了有关 CPU 的详细信息,包括厂商、型号、频率、缓存等信息。

  • /proc/meminfo: 这个文件包含了有关内存的详细信息,包括可用内存、缓存大小、交换分区等信息。

  • /proc/loadavg: 这个文件包含了系统的负载平均值,它表示系统正在运行的进程数和等待 CPU 的进程数的平均值。

  • /proc/version: 这个文件包含了系统的版本信息,包括内核版本、GCC 版本等信息。

  • /proc/net/tcp: 这个文件包含了有关 TCP 连接的信息,包括本地地址、远程地址、状态等信息。

  • /proc/net/udp: 这个文件包含了有关 UDP 连接的信息,包括本地地址、远程地址、状态等信息。

  • /proc/sys/kernel/hostname: 这个文件包含了系统的主机名。

  • /proc/sys/kernel/pid_max: 这个文件包含了系统允许的最大进程 ID

  • /proc/sys/fs/file-nr: 这个文件包含了有关打开文件的统计信息,包括当前打开的文件数、已分配的文件句柄数和最大文件句柄

3.2 /proc/sys目录详解

/proc/sys 目录下包含了许多系统内核运行时的配置文件,可以通过修改这些文件来改变系统的行为。

文件介绍
/proc/sys/kernel/hostname用于设置或获取系统的主机名。
/proc/sys/kernel/pid_max用于设置或获取系统支持的最大进程ID号。
/proc/sys/kernel/sem用于设置或获取系统的信号量限制。
/proc/sys/kernel/shmmax用于设置或获取系统共享内存段的最大大小。
/proc/sys/kernel/shmall用于设置或获取系统共享内存的最大页数。
/proc/sys/net/ipv4/tcp_keepalive_time用于设置或获取TCP Keepalive的时间间隔。
/proc/sys/net/ipv4/ip_forward用于控制IP包的转发。
/proc/sys/net/ipv4/tcp_syncookies用于控制系统是否启用TCP Syncookie保护。
/proc/sys/vm/swappiness用于设置内核在不足内存时候的换页策略。
/proc/sys/fs/file-max用于设置或获取系统可以同时打开的文件数的最大值

需要注意的是,这些文件都是在内核运行时动态生成的,实际上并不是磁盘上的文件。因此,修改这些文件并不会直接修改磁盘上的文件,而是会直接影响内核的运行。如果想要在系统启动时自动修改这些文件,可以在 /etc/sysctl.conf 中设置。

总结

我是沐风晓月,本文首发于csdn,在csdn搜索 【我是沐风晓月】获取更多内容。
💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~