1、概念
在Linux系统中,/proc
目录是一个特殊的文件系统,通常被称为"proc文件系统"或"procfs"。这个文件系统以文件系统的方式为内核与进程之间的通信提供了一个接口。/proc
目录中的文件大多数都提供了关于系统状态的信息,如运行的进程、内存使用、设备驱动等。
2、常用目录文件
2.1 /proc/cpuinfo
提供关于CPU的信息,如型号、缓存大小、频率等,可以直接通过cat命令查看:
- processor: 表示 CPU 的编号,从 0 开始计数。
- BogoMIPS: 这是一个用于粗略衡量 CPU 性能的指标,称为 "Bogomips"。它表示每秒百万条指令(MIPS),但是这个值与真实的性能并不直接对应,主要用于比较不同 CPU 的相对性能。
- Features: 表示 CPU 支持的功能,包括:
- fp: 浮点运算
- asimd: ARM SIMD 指令集
- aes: AES 加密指令集
- pmull: 乘法指令集
- sha1: SHA-1 哈希算法
- sha2: SHA-2 哈希算法
- crc32: CRC32 校验算法
- CPU implementer: 表示 CPU 的制造商,0x41 表示 ARM 公司。
- CPU architecture: 表示 CPU 的架构,8 表示 ARMv8 架构。
- CPU variant: 表示 CPU 的变种,0x0 表示标准 ARMv8 架构。
- CPU part: 表示 CPU 的型号,0xd03 表示 ARM Cortex-A53 处理器。
- CPU revision: 表示 CPU 的修订版本,4 表示特定的修订版本。
2.2 /proc/meminfo
提供关于系统内存使用情况的统计信息,可以直接通过cat命令查看:
- MemTotal: 系统的总物理内存,单位为 kB。
- MemFree: 系统当前空闲的物理内存,单位为 kB。
- MemAvailable: 系统当前可用的物理内存,单位为 kB。这个值比
MemFree
大,因为其还考虑了缓冲区和缓存的可用空间。 - Buffers: 用于存储磁盘块的缓冲区大小,单位为 kB。
- Cached: 缓存了磁盘数据的内存大小,单位为 kB。
- Active: 最近被访问过的内存页,单位为 kB。
- Inactive: 一段时间没有被访问的内存页,单位为 kB。
- Active(anon): 匿名内存页,即不映射到任何文件,如进程堆栈、堆内存等。
- Inactive(anon): 匿名内存页中长时间未被访问的页面。
- Active(file): 文件映射到内存的页,如文件的内容、库函数等。
- Inactive(file): 文件映射到内存中长时间未被访问的页面。
2.3 /proc/mounts
显示当前系统上已挂载的文件系统,可以直接通过cat命令查看:
其大致按以下格式:
<设备节点> <挂载点> <文件系统类型> <挂载选项> <挂载次数> <文件系统检查顺序>
- 设备节点 (Device node): 表示文件系统的设备节点或者分区的路径,比如
/dev/mmcblk0p1
。 - 挂载点 (Mount point): 文件系统被挂载到的目录路径,比如
/
表示根目录。 - 文件系统类型 (Filesystem type): 表示文件系统的类型,比如 ext4。
- 挂载选项 (Mount options): 表示文件系统被挂载时指定的选项,比如
rw
表示可读写,ro
表示只读。 - 挂载次数 (Mount count): 表示文件系统被挂载的次数。
- 文件系统检查顺序 (File system check order): 如果文件系统需要进行检查,该字段指示了文件系统检查的顺序。
2.4 /proc/partitions
列出所有已识别的磁盘分区,可以直接通过cat命令查看:
- major: 主设备号,用于标识设备类型,例如
1
表示 RAM 设备。 - minor: 次设备号,用于区分同类型设备的不同分区,例如
0
和1
表示 RAM 设备的两个不同分区。 - #blocks: 分区的大小,以块为单位。
- name: 分区的名称,例如
ram0
和ram1
。
2.5 /proc/version
显示当前运行的内核版本信息,可以直接通过cat命令查看:
- Linux version: 指明了当前运行的 Linux 内核版本号,这里是 4.9.170-sun50iw9。
- (root@Katarina): 表示内核是在名为 "Katarina" 的机器上编译的。
- (gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))): 说明了编译内核所使用的 GCC 编译器的版本信息,包括版本号、编译日期和目标平台信息。
- #34: 表示内核的补丁版本号,即在最初的版本基础上进行了 34 次修改。
- SMP: 表示内核支持对称多处理器(Symmetric Multi-Processing),即系统可以同时运行在多个 CPU 上。
- PREEMPT: 表示内核支持抢占式内核,即进程可以被其他更高优先级的进程抢占,提高系统响应速度。
2.6 /proc/net
包含网络相关的统计和配置信息
其中:
-
route: 这个文件显示了系统的路由表,包含了系统中各个网络的路由信息。可以通过查看这个文件来查看当前系统路由的配置情况。
-
tcp, udp: 这两个文件分别显示了系统当前的 TCP 和 UDP 连接情况,列出了系统中所有的 TCP 和 UDP 连接的详细信息。
2.7 /proc/sys
/proc/sys
目录下存储着 Linux 内核运行时的系统参数,通过读取和写入这些文件,可以控制和配置系统的许多功能。这些参数通常用于调整内核的行为,优化系统性能或修改网络设置等。
-
/proc/sys/kernel/
- hostname: 可以通过读取和写入这个文件来获取和更改系统的主机名。
- osrelease: 包含正在运行的内核版本信息。
- panic: 设置系统在遇到致命错误后自动关闭之前的延迟时间。
-
/proc/sys/net/
- ipv4/
- ip_forward: 控制系统是否允许 IP 转发功能。
- ipv4/tcp_keepalive_time: 设置 TCP 连接的保活时间。
- core/
- rmem_default, rmem_max: 指定 TCP 接收缓冲区的默认和最大大小。
- wmem_default, wmem_max: 指定 TCP 发送缓冲区的默认和最大大小。
- ipv4/
-
/proc/sys/vm/
- swappiness: 控制系统在内存不足时使用 swap 分区的程度。
- overcommit_memory: 控制内存过量分配的行为。
2.8 /proc/interrupts
这个文件显示了系统中各个硬件设备正在使用的中断请求(IRQ)的情况,可以帮助用户查看系统中断的分配情况,以及了解每个设备所占用的中断资源。
- 每行对应一个硬件设备,在每一行中列出了设备名称、中断请求号(IRQ)以及该设备触发的中断次数。
- 可以通过查看这个文件来检查系统中是否存在中断冲突(IRQ conflict),了解系统中硬件设备的使用情况,以及定位可能的硬件问题。
2.9 /proc/uptime
显示系统自上次启动以来的运行时间,以及空闲时间。
- 第一个值(25221.66)表示系统自上次启动以来运行的时间(单位为秒)。
- 第二个值(100623.29)表示系统空闲时间的总计(单位为秒)。
2.10 /proc/loadavg
显示系统的负载平均值
- 前三个数值(1.00 1.00 1.00)表示系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载。这些数字是指任务队列中平均活跃的进程数。
- 第四个值(1/167)表示正在运行/总进程数。
- 第五个值(3608)是最近运行的进程的进程 ID。
2.11 /proc/stat
提供关于CPU活动的统计信息
每一列的含义如下:
- 用户态时间 (user): CPU 花在用户进程上的时间(以节拍计)。
- 内核态时间 (nice): CPU 花在优先级较低的进程上的时间(以节拍计)。
- 系统调用时间 (system): CPU 花在系统调用上的时间(以节拍计)。
- 空闲时间 (idle): CPU 处于空闲状态的时间(以节拍计)。
- 等待 I/O 时间 (iowait): CPU 等待 I/O 操作完成的时间(以节拍计)。
- 硬件中断时间 (irq): CPU 处理硬件中断的时间(以节拍计)。
- 软中断时间 (softirq): CPU 处理软件中断的时间(以节拍计)。
- 窃取时间 (steal): CPU 被虚拟机窃取的时间(以节拍计)。
- 虚拟化时间 (guest): CPU 花在运行虚拟机上的时间(以节拍计)。
- 虚拟化时间 (guest_nice): CPU 花在运行虚拟机中优先级较低的进程上的时间(以节拍计)。
例如,第一行 cpu 7963 13 16873 9957357 409 0 460 0 0 0
代表了所有 CPU 核心的统计信息:
cpu
: 表示所有 CPU 核心的总统计信息。7963
: 所有 CPU 核心的用户态时间。13
: 所有 CPU 核心的内核态时间。16873
: 所有 CPU 核心的系统调用时间。9957357
: 所有 CPU 核心的空闲时间。409
: 所有 CPU 核心的等待 I/O 时间。0
: 所有 CPU 核心的硬件中断时间。460
: 所有 CPU 核心的软件中断时间。0
: 所有 CPU 核心的窃取时间。0
: 所有 CPU 核心的虚拟化时间。0
: 所有 CPU 核心的虚拟化时间(优先级较低)。
2.12 /proc/bus
包含有关系统总线和连接到这些总线的设备的信息
/proc/bus/pci/
目录包含有关 PCI 总线设备的信息,可以查看系统中的PCI设备列表。/proc/bus/usb/
目录包含有关 USB 设备的信息,可以查看 USB 设备的配置信息和状态。- 这些文件和目录可以帮助用户了解系统中连接的总线设备的情况,进行总线级别的故障排除和信息查询。
2.13 /proc/devices
列出当前内核所识别的设备驱动程序的主设备号:
2.14 /proc/fs
包含有关当前系统上支持的文件系统的信息。
/proc/fs/nfsd/exports
:显示 NFS 服务器的导出列表。/proc/fs/nfsd/version
:显示 NFS 服务器模块的版本信息。/proc/fs/nfs
:包含 NFS 客户端和服务器相关的信息。
2.15 /proc/[pid]
对于每个正在运行的进程,都有一个以其进程ID(PID)命名的目录。这些目录包含了关于该进程的详细信息,如命令行、环境变量、内存映射、打开的文件描述符等。
attr
:进程的访问控制列表(ACL)权限设置。cmdline
:进程启动时的命令行参数。cwd
:进程的当前工作目录。environ
:进程的环境变量列表。exe
:进程的可执行文件路径。fd
:进程打开的文件描述符列表。status
:包含有关进程当前状态的信息,如进程状态、内存使用情况等。sched
:显示进程的调度器相关信息。maps
:显示进程内存映射的详细信息。limits
:显示进程资源限制。stat
:显示进程状态信息。io
:显示进程的I/O统计信息。oom_score
:OOM(Out Of Memory)调度分数,决定进程在内存不足时被系统杀死的优先级。smaps
:显示进程的内存使用情况,包括详细的内存映射信息。task
:包含有关进程的线程信息。syscall
:显示进程的系统调用统计信息。