Linux 系统中proc 目录
# \*\*\`/proc\` 文件系统概述\*\* \`/proc\` 是 Linux 内核提供的一个虚拟文件系统,它并不占用磁盘空间,而是由内核在内存中动态生成。这个文件系统提供了一种机制,允许用户空间程序访问内核空间的数据结构,从而获取系统和进程的运行状态信息。 \*\*\`/proc\`文件系统中的文件和目录提供了以下功能:\*\* 1. \*\*进程信息\*\*:每个进程都有一个对应的目录,例如\`/proc/\[pid\]\`,其中包含了该进程的详细信息,如状态、内存使用、打开的文件等。 2. \*\*系统信息\*\*:\`/proc\`中有一些特殊的文件,如\`/proc/cpuinfo\`、\`/proc/meminfo\`和\`/proc/version\`,它们提供了关于CPU、内存和内核版本的信息。 3. \*\*内核参数\*\*:一些内核参数可以通过\`/proc\`文件系统进行读取和修改,例如\`/proc/sys\`目录下的文件。 4. \*\*设备文件\*\*:\`/proc/bus\`目录下包含了系统中设备的相关信息,如PCI总线设备。 5. \*\*挂载信息\*\*:\`/proc/mounts\`文件包含了当前系统上所有挂载的文件系统列表。 6. \*\*网络信息\*\*:\`/proc/net\`目录包含了网络相关的统计信息和配置。 # \*\*详细介绍:\*\* 1、\*\*进程目录\*\*: - \`cwd\`:当前工作目录的符号链接。 - \`fd\`:打开文件的符号链接。 - \`exe\`:指向启动该进程的可执行文件的符号链接。 - \`stat\`:进程的状态信息。 - \`status\`:更易读的进程状态信息。 - \`cmdline\`:启动该进程的命令行参数。 - 每个进程都有一个以进程ID命名的目录,例如 \`/proc/1234\`,其中 \`1234\` 是进程ID。 - 这些目录下包含了该进程的详细信息,如: \`\`\`shell 每个运行中的进程都有一个以其 PID 命名的子目录,例如 /proc/1234。 这些子目录包含大量关于该进程的信息: /proc/\[PID\]/cmdline:进程的启动命令行参数。 /proc/\[PID\]/cwd:指向进程当前工作目录的符号链接。 /proc/\[PID\]/environ:进程的环境变量。 /proc/\[PID\]/exe:指向进程的可执行文件的符号链接。 /proc/\[PID\]/fd/:文件描述符的目录,每个文件描述符都有一个条目。 /proc/\[PID\]/maps:进程的内存映射。 /proc/\[PID\]/status:进程状态信息。 /proc/\[PID\]/stat:进程的状态信息,格式化为单行数据。 \`\`\` 在 Linux 系统中,\`/proc/\[PID\]/ns/\` 是一个指向特定进程的命名空间(namespace)的符号链接。每个进程都有自己的命名空间,这些命名空间决定了进程如何看到系统资源,如网络、文件系统、用户组等。 \`\`\`shell /proc/\[PID\]/ns/ 目录下通常包含以下命名空间: mnt:挂载命名空间,决定了进程看到的文件系统视图。 net:网络命名空间,决定了进程看到的网络接口和协议栈。 pid:进程 ID 命名空间,允许进程拥有独立的进程编号。 user:用户命名空间,允许进程拥有独立的用户和组 ID。 ipc:进程间通信(IPC)命名空间,决定了进程如何看到 IPC 资源。 uts:UNIX 时间共享系统(UTS)命名空间,决定了进程看到的主机名和网络名称。 \`\`\` 2、\*\*系统信息文件\*\*:这些文件提供了系统级别的硬件和内核信息: \`\`\`shell /proc/cpuinfo:包含有关 CPU(中央处理器)的详细信息,包括型号、速度和缓存大小等。 /proc/meminfo:提供了关于系统内存使用情况的详细信息,包括总内存、可用内存、缓存和交换空间等。 /proc/uptime:显示系统启动以来的时间和系统的空闲时间。 /proc/loadavg:显示系统负载平均值(1、5、15 分钟)。 /proc/version:显示当前运行的内核版本和编译信息。 /proc/filesystems:显示当前内核支持的文件系统类型。 /proc/partitions:列出系统中的磁盘分区信息。 /proc/version:显示内核版本信息。 /proc/uptime:显示系统启动以来的时间。 /proc/loadavg:显示系统负载平均值。 \`\`\` 3、\*\*系统配置参数\*\*: \`/proc/sys\`:包含系统配置参数,可以用于调整系统行为,如网络设置、文件系统参数等。可以通过 \`sysctl\` 命令来查看和修改这些参数 \`\`\` /proc/sys/net/ipv4/ip_forward:用于控制 IP 转发功能。如果设置为 1,则启用 IP 转发。 /proc/sys/kernel/hostname:存储系统主机名。 /proc/sys/vm/swappiness:控制内核的交换行为。 sysctl -a # 查看所有可调参数 sysctl net.ipv4.ip_forward # 查看IP转发状态 sudo sysctl -w net.ipv4.ip_forward=1 # 启用IP转发 \`\`\` 4、\*\*内存管理信息\*\*: - \`/proc/meminfo\`:提供内存使用情况的统计信息。 - \`/proc/buddyinfo\`:显示内存分配的伙伴系统状态。(用于诊断内存碎片问题的相关信息文件) 5、\*\*CPU 信息\*\*: - \`/proc/cpuinfo\`:列出CPU的详细信息,如型号、速度等。 6、\*\*中断和I/O请求信息\*\*: - \`/proc/interrupts\`:显示中断和I/O请求的统计信息。 7、\*\*网络信息\*\*: - \`/proc/net\`:包含网络子系统的各种统计信息,如路由表、套接字等。 8、\*\*设备驱动信息\*\*: \`\`\`shell /proc/bus:包含系统中设备的总线信息。 /proc/devices:显示系统中字符设备和块设备的列表。 /proc/interrupts:显示各个 CPU 的中断统计信息。 /proc/dma:显示已使用的 DMA 通道信息。 /proc/ioports:显示已使用的 I/O 端口信息。 \`\`\`