linux /proc目录


1.什么是proc目录
proc是Linux系统下一个很重要的目录。 它跟/etc, /home等这些系统目录不同, 它不是一个真正的文件系统, 而是一个虚拟的文件系统。
它不存在于磁盘, 而是存在于系统内存中。 所以当你使用 ls -al /proc这条命令来查看proc目录时, 会看到其下面的所有文件的大小都为0字节。
proc以文件系统的方式为访问系统内核的操作提供接口。 很多系统的信息, 如内存使用情况, cpu使用情况,进程信息等等这些信息,都可以通过查看/proc下的对应文件来获得。
proc文件系统是动态从系统内核读出所需信息的。
2. 初识proc目录
proc目录下具体有哪些文件呢?
/proc 目录下的文件
/proc/cpuinifo CPU的信息(型号、家族、缓存大小等)
/proc/meminfo物理内存、交换空间
/proc/mounts 已加载的文件系统的列表
/proc/devices 可用设备的列表
/proc/filesystems 被支持的文件系统
/proc/modules 已加载的模块
/proc/virsion 内核版本
/proc/cmdline 系统启动时输入的内核命令行参数
/proc/XXX XXX是指以进程PID(数字编号)命名的目录,每一个目录表示一个进程(即线程组)。
/proc/swaps 要获知swap空间的使用情况
/proc/uptime 获取系统的正常运行时间
/proc/fs/nfsd/exports 列出由NFS共享的文件系统
/proc/kmsg 该文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用
/proc/self -- 到当前进程/proc目录的符号链接,通过这个目录可以获取当前运行进程的信息。
/proc/pci -- 挂接在PCI总线上的设备
/proc/tty/driver/serial --串口配置、统计信息
/proc/version -- 系统版本信息
/proc/sys/kernel/ostype
/proc/sys/kernel/osrelease
/proc/sys/kernel/version
/proc/sys/kernel/hostname -- 主机名
/proc/sys/kernel/domainname -- 域名
/proc/partitions -- 硬盘设备分区信息
/proc/sys/dev/cdrom/info -- CDROM信息
/proc/locks -- 当前系统中所有的文件锁
/proc/loadavg -- 系统负荷信息
/proc/uptime -- 系统启动后的运行时间
3. 从proc窥看系统详情
很多系统命令在读取系统信息的时候,其实是从proc目录下读取对应的文件来获得的。 所以如果我们不使用这些命令, 直接到proc目录下去查看对应文件,也是可以获得对应的信息的。
下面举几个例子:
操作 系统命令 proc对应目录
获取系统版本信息 uname -a 或者 lsb_release /proc/version或者/proc/sys/kernel/hostname[,domainname, osrelease, ostype,version]
获取系统负载信息 top 或者 w 或者 uptime /proc/loadavg
获取内存使用情况 free /proc/meminfo
获取CPU使用情况 top /proc/cpuinfo
获取进程运行情况 ps aux 或者 top /proc/N[N为对应的PID号]
对于查看进程信息一栏,做下补充:
/proc/N pid为N的进程信息
/proc/N/cmdline 进程启动命令
/proc/N/cwd 链接到进程当前工作目录
/proc/N/environ 进程环境变量列表
/proc/N/exe 链接到进程的执行命令文件
/proc/N/fd 包含进程相关的所有的文件描述符
/proc/N/maps 与进程相关的内存映射信息
/proc/N/mem 指代进程持有的内存,不可读
/proc/N/root 链接到进程的根目录
/proc/N/stat 进程的状态
/proc/N/statm 进程使用的内存的状态
/proc/N/status 进程状态信息,比stat/statm更具可读性
/proc/self 链接到当前正在运行的进程
更多的应用场景, 留给大家自己到/proc目录下探索吧。

六./proc目录的意义

回到顶部

其实,我们之前提到的所谓的进程都是在内存当中嘛!而内存当中的数据又都是写入到 /proc/* 这个 目录下的,所以啰,我们当然可以直接观察 /proc 这个目录当中的文件啊! 如果你观察过 /proc 这 个目录的话,应该会发现他有点像这样:

            [root@initroot ~]# ls -al /proc/
            total 4
            dr-xr-xr-x 196 root            root                          0 Jan 19 09:18 .
            drwxr-xr-x  23 root            root                       4096 Jan  7 10:26 ..
            dr-xr-xr-x   9 root            root                          0 Jan 19 09:18 1
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 10
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 1044
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 1055
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 11
            dr-xr-xr-x   9 peter           peter                         0 Jan 19 09:20 1174
            ...(省略)...
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 920
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 937
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 949
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 964
            dr-xr-xr-x   9 root            root                          0 Jan 19 15:01 966
            dr-xr-xr-x   2 root            root                          0 Jan 19 09:18 acpi
            dr-xr-xr-x   5 root            root                          0 Jan 19 09:18 asound
            -r--r--r--   1 root            root                          0 Jan 19 15:14 buddyinfo
            dr-xr-xr-x   4 root            root                          0 Jan 19 09:18 bus
            -r--r--r--   1 root            root                          0 Jan 19 15:14 cgroups
            -r--r--r--   1 root            root                          0 Jan 19 15:14 cmdline
            -r--r--r--   1 root            root                          0 Jan 19 15:14 consoles
            -r--r--r--   1 root            root                          0 Jan 19 15:14 cpuinfo
            -r--r--r--   1 root            root                          0 Jan 19 15:14 crypto
            -r--r--r--   1 root            root                          0 Jan 19 15:14 devices
            -r--r--r--   1 root            root                          0 Jan 19 15:14 diskstats
            -r--r--r--   1 root            root                          0 Jan 19 15:14 dma
            dr-xr-xr-x   2 root            root                          0 Jan 19 15:14 driver
            -r--r--r--   1 root            root                          0 Jan 19 15:14 execdomains
            -r--r--r--   1 root            root                          0 Jan 19 15:14 fb
            -r--r--r--   1 root            root                          0 Jan 19 15:01 filesystems
            dr-xr-xr-x   5 root            root                          0 Jan 19 09:18 fs
            -r--r--r--   1 root            root                          0 Jan 19 15:14 interrupts
            -r--r--r--   1 root            root                          0 Jan 19 15:14 iomem
            -r--r--r--   1 root            root                          0 Jan 19 15:14 ioports
            dr-xr-xr-x  23 root            root                          0 Jan 19 09:18 irq
            -r--r--r--   1 root            root                          0 Jan 19 15:14 kallsyms
            -r--------   1 root            root            140737477885952 Jan 19 15:14 kcore
            -r--r--r--   1 root            root                          0 Jan 19 15:14 keys
            -r--r--r--   1 root            root                          0 Jan 19 15:14 key-users
            -r--------   1 root            root                          0 Jan 19 09:18 kmsg
            -r--------   1 root            root                          0 Jan 19 15:14 kpagecgroup
            -r--------   1 root            root                          0 Jan 19 15:14 kpagecount
            -r--------   1 root            root                          0 Jan 19 15:14 kpageflags
            -r--r--r--   1 root            root                          0 Jan 19 15:14 loadavg
            -r--r--r--   1 root            root                          0 Jan 19 15:01 locks
            -r--r--r--   1 root            root                          0 Jan 19 15:14 mdstat
            -r--r--r--   1 root            root                          0 Jan 19 14:58 meminfo
            -r--r--r--   1 root            root                          0 Jan 19 15:14 misc
            -r--r--r--   1 root            root                          0 Jan 19 15:14 modules
            lrwxrwxrwx   1 root            root                         11 Jan 19 15:01 mounts -> self/mounts
            -rw-r--r--   1 root            root                          0 Jan 19 09:18 mtrr
            lrwxrwxrwx   1 root            root                          8 Jan 19 15:01 net -> self/net
            -r--r--r--   1 root            root                          0 Jan 19 15:14 pagetypeinfo
            -r--r--r--   1 root            root                          0 Jan 19 15:14 partitions
            dr-xr-xr-x   2 root            root                          0 Jan 19 15:14 pressure
            -r--r--r--   1 root            root                          0 Jan 19 15:14 sched_debug
            -r--r--r--   1 root            root                          0 Jan 19 15:14 schedstat
            dr-xr-xr-x   3 root            root                          0 Jan 19 15:14 scsi
            lrwxrwxrwx   1 root            root                          0 Jan 19 09:18 self -> 8849
            -r--------   1 root            root                          0 Jan 19 15:14 slabinfo
            -r--r--r--   1 root            root                          0 Jan 19 15:14 softirqs
            -r--r--r--   1 root            root                          0 Jan 19 15:14 stat
            -r--r--r--   1 root            root                          0 Jan 19 09:18 swaps
            dr-xr-xr-x   1 root            root                          0 Jan 19 09:18 sys
            --w-------   1 root            root                          0 Jan 19 09:18 sysrq-trigger
            dr-xr-xr-x   2 root            root                          0 Jan 19 15:14 sysvipc
            lrwxrwxrwx   1 root            root                          0 Jan 19 09:18 thread-self -> 8849/task/8849
            -r--------   1 root            root                          0 Jan 19 15:14 timer_list
            dr-xr-xr-x   4 root            root                          0 Jan 19 15:14 tty
            -r--r--r--   1 root            root                          0 Jan 19 15:14 uptime
            -r--r--r--   1 root            root                          0 Jan 19 15:14 version
            -r--r--r--   1 root            root                          0 Jan 19 15:14 version_signature
            -r--------   1 root            root                          0 Jan 19 15:14 vmallocinfo
            -r--r--r--   1 root            root                          0 Jan 19 14:58 vmstat
            -r--r--r--   1 root            root                          0 Jan 19 15:14 zoneinfo
          
基本上,目前主机上面的各个进程的 PID 都是以目录的型态存在于 /proc 当中。 举例来说,我们开机所执行的第一支程序 systemd 他的 PID 是 1 , 这个 PID 的所有相关信息都写入在 /proc/1/*当中! 若我们直接观察 PID 为 1 的数据好了,他有点像这样:
            [root@initroot ~]# ls -al /proc/1
            total 0
            dr-xr-xr-x   9 root root 0 Jan 19 09:18 .
            dr-xr-xr-x 195 root root 0 Jan 19 09:18 ..
            dr-xr-xr-x   2 root root 0 Jan 19 15:02 attr
            -rw-r--r--   1 root root 0 Jan 19 15:16 autogroup
            -r--------   1 root root 0 Jan 19 15:16 auxv
            -r--r--r--   1 root root 0 Jan 19 15:02 cgroup
            --w-------   1 root root 0 Jan 19 15:16 clear_refs
            -r--r--r--   1 root root 0 Jan 19 15:02 cmdline
            -rw-r--r--   1 root root 0 Jan 19 15:02 comm
            -rw-r--r--   1 root root 0 Jan 19 15:16 coredump_filter
            -r--r--r--   1 root root 0 Jan 19 15:16 cpuset
            lrwxrwxrwx   1 root root 0 Jan 19 15:01 cwd -> /
            -r--------   1 root root 0 Jan 19 15:16 environ
            lrwxrwxrwx   1 root root 0 Jan 19 15:01 exe -> /lib/systemd/systemd
            dr-x------   2 root root 0 Jan 19 15:01 fd
            dr-x------   2 root root 0 Jan 19 15:01 fdinfo
            -rw-r--r--   1 root root 0 Jan 19 15:16 gid_map
            -r--------   1 root root 0 Jan 19 15:16 io
            -r--r--r--   1 root root 0 Jan 19 15:16 limits
            -rw-r--r--   1 root root 0 Jan 19 15:02 loginuid
            dr-x------   2 root root 0 Jan 19 15:16 map_files
            -r--r--r--   1 root root 0 Jan 19 15:01 maps
            -rw-------   1 root root 0 Jan 19 15:16 mem
            -r--r--r--   1 root root 0 Jan 19 09:18 mountinfo
            -r--r--r--   1 root root 0 Jan 19 15:16 mounts
            -r--------   1 root root 0 Jan 19 15:16 mountstats
            dr-xr-xr-x   5 root root 0 Jan 19 15:16 net
            dr-x--x--x   2 root root 0 Jan 19 15:16 ns
            -r--r--r--   1 root root 0 Jan 19 15:16 numa_maps
            -rw-r--r--   1 root root 0 Jan 19 15:16 oom_adj
            -r--r--r--   1 root root 0 Jan 19 15:16 oom_score
            -rw-r--r--   1 root root 0 Jan 19 15:16 oom_score_adj
            -r--------   1 root root 0 Jan 19 15:16 pagemap
            -r--------   1 root root 0 Jan 19 15:16 patch_state
            -r--------   1 root root 0 Jan 19 15:16 personality
            -rw-r--r--   1 root root 0 Jan 19 15:16 projid_map
            lrwxrwxrwx   1 root root 0 Jan 19 15:01 root -> /
            -rw-r--r--   1 root root 0 Jan 19 15:16 sched
            -r--r--r--   1 root root 0 Jan 19 15:16 schedstat
            -r--r--r--   1 root root 0 Jan 19 15:02 sessionid
            -rw-r--r--   1 root root 0 Jan 19 15:16 setgroups
            -r--r--r--   1 root root 0 Jan 19 15:16 smaps
            -r--r--r--   1 root root 0 Jan 19 15:16 smaps_rollup
            -r--------   1 root root 0 Jan 19 15:16 stack
            -r--r--r--   1 root root 0 Jan 19 15:01 stat
            -r--r--r--   1 root root 0 Jan 19 15:16 statm
            -r--r--r--   1 root root 0 Jan 19 15:02 status
            -r--------   1 root root 0 Jan 19 15:16 syscall
            dr-xr-xr-x   3 root root 0 Jan 19 15:16 task
            -r--r--r--   1 root root 0 Jan 19 15:16 timers
            -rw-rw-rw-   1 root root 0 Jan 19 15:16 timerslack_ns
            -rw-r--r--   1 root root 0 Jan 19 15:16 uid_map
            -r--r--r--   1 root root 0 Jan 19 15:16 wchan
          
里面的数据还挺多的,不过,比较有趣的其实是两个文件,分别是:cmdline:这个进程被启动的指令串;environ:这个进程的环境变量内容。
很有趣吧!如果你查阅一下cmdline的话,就会发现:
            [root@initroot ~]# cat /proc/1/cmdline
            /usr/lib/systemd/systemd--switched-root--system--deserialize22
          
就是这个指令、选项与参数启动 systemd进程 的啦!这还是跟某个特定的 PID 有关的内容呢,如果是针对整个 Linux 系统相关的参数呢? 那就是在 /proc 目录底下的文件啦!相关的文件与对应的内容是这样的: (注 3)
檔名
文件内容
/proc目录
linux文件类型
文件名 文件内容
/proc/cmdline 加载 kernel 时所下达的相关指令与参数!查阅此文件,可了解指令是如何启动的!
/proc/cpuinfo 本机的 CPU 的相关信息,包含频率、类型与运算功能等
/proc/devices 这个文件记录了系统各个主要装置的主要装置代号,与 mknod 有关呢!
/proc/filesystems 目前系统已经加载的文件系统啰!
/proc/interrupts 目前系统上面的 IRQ 分配状态。
/proc/ioports 目前系统上面各个装置所配置的 I/O 地址。
/proc/kcore 这个就是内存的大小啦!好大对吧!但是不要读他啦!
/proc/loadavg 还记得 top 以及 uptime 吧?没错!上头的三个平均数值就是记录在此!
/proc/meminfo 使用 free 列出的内存信息,嘿嘿!在这里也能够查阅到!
/proc/modules 目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序啦!
/proc/mounts 系统已经挂载的数据,就是用 mount 这个指令呼叫出来的数据啦!
/proc/swaps 到底系统挂加载的内存在哪里?呵呵!使用掉的 partition 就记录在此啦!
/proc/partitions 使用 fdisk -l 会出现目前所有的 partition 吧?在这个文件当中也有纪录喔!
/proc/uptime 就是用 uptime 的时候,会出现的信息啦!
/proc/version 核心的版本,就是用 uname -a 显示的内容啦!
/proc/bus/* 一些总线的装置,还有 USB 的装置也记录在此喔!
其实,上面这些文件在此建议您可以使用 cat 去查阅看看,不必深入了解, 不过,观看过文件
内容后,毕竟会比较有感觉啦!如果未来您想要自行撰写某些工具软件, 那么这个目录底下的相关
文件可能会对您有点帮助的喔!

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读