文章目录
- 一、proc文件系统
-
- 1.1 /proc/[pid]
-
- 1.1.1 /proc/[pid]/arch_status
- 1.1.2 /proc/[pid]/attr
-
- 1.1.2.1 /proc/[pid]/attr/current
- 1.1.2.2 /proc/[pid]/attr/exec
- 1.1.2.3 /proc/[pid]/attr/fscreate
- 1.1.2.4 /proc/[pid]/attr/keycreate
- 1.1.2.5 /proc/[pid]/attr/prev
- 1.1.2.6 /proc/[pid]/attr/sockcreate
- 1.1.3 /proc/[pid]/autogroup
- 1.1.4 /proc/[pid]/auxv
- 1.1.5 /proc/[pid]/cgroup
- 1.1.6 /proc/[pid]/clear_refs
- 1.1.7 /proc/[pid]/cmdline
- 1.1.8 /proc/[pid]/comm
- 1.1.9 /proc/[pid]/coredump_filter
- 1.1.10 /proc/[pid]/cpu_resctrl_groups
- 1.1.11 /proc/[pid]/cpuset
- 1.1.12 /proc/[pid]/cwd -> /
- 1.1.13 /proc/[pid]/environ
- 1.1.14 /proc/[pid]/exe
- 1.1.15 /proc/[pid]/fd
- 1.1.16 /proc/[pid]/fdinfo
- 1.1.17 /proc/[pid]/gid_map
- 1.1.18 /proc/[pid]/io
- 1.1.19 /proc/[pid]/limits
- 1.1.20 /proc/[pid]/loginuid
- 1.1.21 /proc/[pid]/map_files
- 1.1.22 /proc/[pid]/maps
- 1.1.23 /proc/[pid]/mem
- 1.1.24 /proc/[pid]/mountinfo
- 1.1.25 /proc/[pid]/mounts
- 1.1.26 /proc/[pid]/mountstats
- 1.1.27 /proc/[pid]/net
- 1.1.28 /proc/[pid]/ns
- 1.1.29 /proc/[pid]/numa_maps
- 1.1.30 /proc/[pid]/oom_adj
- 1.1.31 /proc/[pid]/oom_score
- 1.1.32 /proc/[pid]/oom_score_adj
- 1.1.33 /proc/[pid]/pagemap
- 1.1.34 /proc/[pid]/patch_state
- 1.1.35 /proc/[pid]/personality
- 1.1.36 /proc/[pid]/projid_map
- 1.1.37 /proc/[pid]/root
- 1.1.38 /proc/[pid]/sched
- 1.1.39 /proc/[pid]/schedstat
- 1.1.40 /proc/[pid]/sessionid
- 1.1.41 /proc/[pid]/setgroups
- 1.1.42 /proc/[pid]/smaps
- 1.1.43 /proc/[pid]/smaps_rollup
- 1.1.44 /proc/[pid]/stack
- 1.1.45 /proc/[pid]/stat
- 1.1.46 /proc/[pid]/statm
- 1.1.47 /proc/[pid]/status
- 1.1.48 /proc/[pid]/syscall
- 1.1.49 /proc/[pid]/task
- 1.1.50 /proc/[pid]/timens_offsets
- 1.1.51 /proc/[pid]/timers
- 1.1.52 /proc/[pid]/timerslack_ns
- 1.1.53 /proc/[pid]/uid_map
- 1.1.54 /proc/[pid]/wchan
- 1.2 /proc/acpi/
- 1.3 /proc/asound/
-
- 1.3.1 /proc/asound/AudioPCI -> card0/
- 1.3.2 /proc/asound/cardX/
- 1.3.3 /proc/asound/cards
- 1.3.4 /proc/asound/devices
- 1.3.5 /proc/asound/modules
- 1.3.6 /proc/asound/oss/
- 1.3.7 /proc/asound/pcm
- 1.3.8 /proc/asound/seq/
- 1.3.9 /proc/asound/timers
- 1.3.10 /proc/asound/version
- 1.4 /proc/bootconfig
- 1.5 /proc/buddyinfo
- 1.6 /proc/bus/
-
- 1.6.1 /proc/bus/input
-
- 1.6.1.1 /proc/bus/input/devices
- 1.6.1.2 /proc/bus/input/handlers
- 1.6.2 /proc/bus/pci
-
- 1.6.2.1 /proc/bus/pci/devices
- 1.6.2.2 /proc/bus/pci/XX
- 1.7 /proc/cgroups
- 1.8 /proc/cmdline
- 1.9 /proc/consoles
- 1.10 /proc/cpuinfo
- 1.11 /proc/crypto
- 1.12 /proc/devices
- 1.13 /proc/diskstats
- 1.14 /proc/dma
- 1.15 /proc/driver/
- 1.16 /proc/dynamic_debug/
- 1.17 /proc/execdomains
- 1.18 /proc/fb
- 1.19 /proc/filesystems
- 1.20 /proc/fs/
- 1.21 /proc/interrupts
- 1.22 /proc/iomem
- 1.23 /proc/ioports
- 1.24 /proc/irq/
-
- 1.24 /proc/irq/default_smp_affinity
- 1.24 /proc/irq/X/
- 1.25 /proc/kallsyms
- 1.26 /proc/kcore
- 1.27 /proc/keys
- 1.28 /proc/key-users
- 1.29 /proc/kmsg
- 1.30 /proc/kpagecgroup
- 1.31 /proc/kpagecount
- 1.32 /proc/kpageflags
- 1.33 /proc/loadavg
- 1.34 /proc/locks
- 1.35 /proc/mdstat
- 1.36 /proc/meminfo
- 1.37 /proc/misc
- 1.38 /proc/modules
- 1.39 /proc/mounts
- 1.40 /proc/mpt/
- 1.41 /proc/mtrr
- 1.42 /proc/net -> self/net/
- 1.43 /proc/pagetypeinfo
- 1.44 /proc/partitions
- 1.45 /proc/pressure/
-
- 1.45.1 /proc/pressure/cpu
- 1.45.2 /proc/pressure/io
- 1.45.3 /proc/pressure/memory
- 1.46 /proc/schedstat
- 1.47 /proc/scsi/
-
- 1.47.1 /proc/scsi/device_info
- 1.47. /proc/scsi/mptspi
- 1.47. /proc/scsi/scsi
- 1.47. /proc/scsi/sg
- 1.48 /proc/self
- 1.49 /proc/slabinfo
- 1.50 /proc/softirqs
- 1.51 /proc/stat
- 1.52 /proc/swaps
- 1.53 /proc/sys/
-
- 1.53.1 /proc/sys/abi
- 1.53.2 /proc/sys/debug
- 1.53.3 /proc/sys/dev
- 1.53.4 /proc/sys/fs
- 1.53.5 /proc/sys/kernel
- 1.53.6 /proc/sys/net
- 1.53.7 /proc/sys/user
- 1.53.8 /proc/sys/vm
- 1.54 /proc/sysrq-trigger
- 1.55 /proc/sysvipc/
-
- 1.55.1 /proc/sysvipc/msg
- 1.55.2 /proc/sysvipc/sem
- 1.55.3 /proc/sysvipc/shm
- 1.56 /proc/thread-self
- 1.57 /proc/timer_list
- 1.58 /proc/tty/
- 1.59 /proc/uptime
- 1.60 /proc/version
- 1.61 /proc/version_signature
- 1.62 /proc/vmallocinfo
- 1.63 /proc/vmstat
- 1.64 /proc/zoneinfo
一、proc文件系统
proc全称是process information pseudo-filesystem,翻译过来就是进程信息伪文件系统。
proc文件系统是一个伪文件系统,它提供了一个到内核数据结构的接口,一般挂载在/proc。proc文件系统中的大多数文件都是只读的,但有些文件是可写的,允许修改内核变量。
在Ubuntu20.04,内核版本是5.15.0-56。我们可以看到proc文件系统下的文件和目录如下图所示:
我们首先看到的是很多的数字,这些数字就是我们系统的每一个进程的信息,数字目录下面的文件的含义是一样的。我们就把这些数字归类为pid。
每个/proc/[pid]目录中的文件通常属于进程的有效用户和有效组ID。但是,作为一种安全措施,如果进程的“dumpable”属性为,则所有权将设置为root:root
请设置为1以外的值。
1.1 /proc/[pid]
每个正在运行的进程都有一个数值子目录;子目录以进程ID命名。每个/proc/[pid]子目录都包含下面描述的伪文件和目录:
1.1.1 /proc/[pid]/arch_status
空文件
1.1.2 /proc/[pid]/attr
此目录中的文件为安全模块提供了API。这个目录的内容是可以被读取和写入的文件,以便设置与安全相关的属性。添加这个目录是为了支持SELinux,但目的是让API足够通用,以支持其他安全模块。只有在内核配置了CONFIG_SECURITY时,才会出现这个目录。
1.1.2.1 /proc/[pid]/attr/current
该文件的内容表示进程的当前安全属性。在SELinux中,这个文件用于获取进程的安全上下文。安全模块可以选择通过写入该节点来支持“设置”操作。
1.1.2.2 /proc/[pid]/attr/exec
该文件表示在执行execve时分配给进程的属性。
在SELinux中,这是支持角色/域转换所需要的,而execve是进行这种转换的首选点,因为它在新的安全标签中提供了对流程初始化和状态继承的更好控制。在SELinux中,这个属性在execve上被重置,以便新程序对它可能进行的任何execve调用都恢复到默认行为。在SELinux中,进程只能设置自己的/proc/[pid]/attr/exec属性。
1.1.2.3 /proc/[pid]/attr/fscreate
该文件表示要分配给后续调用open(2)、mkdir(2)、symlink(2)和mknod(2)所创建的文件的属性。
SELinux使用这个文件来支持在安全状态下创建文件(使用前面提到的系统调用),这样在创建和设置属性之间就不会有不适当访问的风险。在SELinux中,该属性在execve上被重置,以便新程序对它可能进行的任何文件创建调用恢复默认行为,但该属性将在程序内的多个文件创建调用中保持,除非显式重置。在SELinux中,进程只能设置自己的/proc/[pid]/attr/fscreate属性。
1.1.2.4 /proc/[pid]/attr/keycreate
如果进程将安全上下文写入该文件,则随后创建的所有密钥(add_key(2))都将使用该上下文进行标记。
1.1.2.5 /proc/[pid]/attr/prev
该文件包含最后一次执行(2)之前进程的安全上下文;即/proc/[pid]/attr/current的上一个值。
1.1.2.6 /proc/[pid]/attr/sockcreate
如果进程将安全上下文写入此文件,则随后创建的所有套接字都将使用此上下文进行标记。
1.1.3 /proc/[pid]/autogroup
root@ubuntu:/proc/1# cat /proc/1/autogroup
/autogroup-2 nice 0
内核提供了一种被称为autogrouping的特性来为多进程和CPU密集型负载(如Linux内核中的大量并行进程)提升交互式桌面性能。当通过setsid(2) (setsid会将一个进程脱离父进程)创建一个新的会话时会创建一个新的autogroup,这种情况可能发生在一个新的终端窗口启动时。使用fork(2)创建的进程会继承父辈的autogroup成员。因此,一个会话中的所有进程都属于同一个autogroup。当最后一个进程结束后,autogroup会被自动销毁。一个autogroup中的所有成员都属于同一个内核调度器"任务组"。CFS调度器使用了在任务组间均衡分配CPU时钟周期的算法。可以使用下面例子进行展示提升交互式桌面性能的好处。autogroup的nice值的意义与进程的nice值意义相同,区别是前者为将autogroup作为一个整体,并基于相对其他autogroups设置的nice值来分配CPU时钟周期。对于一个autogroup内的进程,其CPU时钟周期为autogroup(相对于其他autogroups)的nice值和进程的nice值(相对于其他进程)的产物(即首先根据autogroup的nice值计算该autogroup所占用的CPU,然后根据进程的nice值计算该进程所占用的(属于其autogroup的)CPU)。
这里可以查看进程所属的autogroup和该autogroup的nioce值。
1.1.4 /proc/[pid]/auxv
root@ubuntu:/proc/1# hexdump auxv
0000000 0021 0000 0000 0000 6000 efd4 7ffe 0000
0000010 0033 0000 0000 0000 06f0 0000 0000 0000
0000020 0010 0000 0000 0000 fbff 0f8b 0000 0000
0000030 0006 0000 0000 0000 1000 0000 0000 0000
0000040 0011 0000 0000 0000 0064 0000 0000 0000
0000050 0003 0000 0000 0000 8040 cd96 563b 0000
0000060 0004 0000 0000 0000 0038 0000 0000 0000
0000070 0005 0000 0000 0000 000d 0000 0000 0000
0000080 0007 0000 0000 0000 c000 fd72 7fe5 0000
0000090 0008 0000 0000 0000 0000 0000 0000 0000
00000a0 0009 0000 0000 0000 5a50 cd9a 563b 0000
00000b0 000b 0000 0000 0000 0000 0000 0000 0000
00000c0 000c 0000 0000 0000 0000 0000 0000 0000
00000d0 000d 0000 0000 0000 0000 0000 0000 0000
00000e0 000e 0000 0000 0000 0000 0000 0000 0000
00000f0 0017 0000 0000 0000 0000 0000 0000 0000
0000100 0019 0000 0000 0000 7859 efd0 7ffe 0000
0000110 001a 0000 0000 0000 0002 0000 0000 0000
0000120 001f 0000 0000 0000 7fed efd0 7ffe 0000
0000130 000f 0000 0000 0000 7869 efd0 7ffe 0000
0000140 0000 0000 0000 0000 0000 0000 0000 0000
0000150
这个文件包含了在进程执行时,传递给进程的ELF的解释器的信息。这个文件的格式是一个无符号的long类型的ID加上每个entry的一个无符号的long类型,这最后的一个entry包含了两个零。
1.1.5 /proc/[pid]/cgroup
root@ubuntu:/proc/1# cat cgroup
13:pids:/init.scope
12:rdma:/
11:net_cls,net_prio:/
10:memory:/init.scope
9:freezer:/
8:perf_event:/
7:misc:/
6:hugetlb:/
5:cpu,cpuacct:/
4:devices:/init.scope
3:blkio:/
2:cpuset:/
1:name=systemd:/init.scope
0::/init.scope
可以获取一个进程属于哪些控制组的信息。
1.1.6 /proc/[pid]/clear_refs
这是一个只能写的文件,只能由进程的所有者写。写入的值和含义如下表所示:
值 | 含义 |
---|---|
1 | 重置与进程相关的所有页的PG_Referenced和access /YOUNG位。 |
2 | 重置与进程关联的所有匿名页的PG_Referenced和access /YOUNG位。 |
3 | 重置与进程关联的所有文件映射页的PG_Referenced和accessible /YOUNG位。 |
4 | 清除与该进程关联的所有页面的软脏位。 |
5 | 将峰值驻留集大小(“高水位标记”)重置为进程当前驻留集大小值。 |
6 | 无效 |
1.1.7 /proc/[pid]/cmdline
root@ubuntu:/proc/1# cat cmdline
/sbin/initautonoprompt
root@ubuntu:/proc/1#
这个只读文件保存进程的完整命令行,除非进程是僵尸进程。在后一种情况下,这个文件中什么都没有,也就是说,对这个文件的读取将返回0个字符。命令行参数在这个文件中显示为一组由空字节(‘\0’)分隔的字符串,最后一个字符串后面还有一个空字节。
1.1.8 /proc/[pid]/comm
root@ubuntu:/proc/1# cat comm
systemd
该文件公开进程的comm值,即与进程关联的命令名。同一个进程中的不同线程可能有不同的comm值,可以通过/proc/[pid]/task/[tid]/comm访问。一个线程可以修改它的comm值,或者同一线程组中的任何其他线程的comm值,通过写入文件/proc/self/task/[tid]/comm。长度超过一定长度的字符的字符串将被静默截断。
1.1.9 /proc/[pid]/coredump_filter
root@ubuntu:/proc/1# cat coredump_filter
00000033
1.1.10 /proc/[pid]/cpu_resctrl_groups
root@ubuntu:/proc/1# cat cpu_resctrl_groups
res:
mon:
1.1.11 /proc/[pid]/cpuset
root@ubuntu:/proc/1# cat cpuset
/
1.1.12 /proc/[pid]/cwd -> /
这是到进程当前工作目录的符号链接,也就是执行命令的时候所在的目录。在多线程进程中,如果主线程已经终止(通常通过调用pthread_exit(3)),则此符号链接的内容将不可用。
1.1.13 /proc/[pid]/environ
root@ubuntu:/proc/1# cat environ | tr '\000' '\n'
find_preseed=/preseed.cfg
HOME=/
init=/sbin/init
NETWORK_SKIP_ENSLAVED=
locale=en_US
TERM=linux
BOOT_IMAGE=/boot/vmlinuz-5.15.0-56-generic
drop_caps=
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
rootmnt=/root
priority=critical
该文件包含当前正在执行的程序通过execve(2)启动时设置的初始环境。条目由空字节(‘\0’)分隔,并且在末尾可能有一个空字节。如果在执行execve(2)之后,进程修改了它的环境(例如,通过调用putenv(3)这样的函数或直接修改environ(7)变量),该文件将不会反映这些更改。
1.1.14 /proc/[pid]/exe
root@ubuntu:/proc/1# ll exe
lrwxrwxrwx 1 root root 0 Jan 14 05:17 exe -> /usr/lib/systemd/systemd*
该文件是一个符号链接,指向执行的程序文件,包含所执行命令的实际路径名。
1.1.15 /proc/[pid]/fd
root@ubuntu:/proc/1# ls fd
0 14 190 200 206 211 217 223 229 234 240 277 30 308 314 32 326 331 34 42 48 53 59 64 7 78
1 15 191 201 207 212 218 224 23 235 241 28 302 309 315 321 327 332 35 43 49 54 6 65 73 79
10 16 192 202 208 213 219 225 230 236 242 29 303 31 316 322 328 334 36 44 5 55 60 66 74 8
11 17 199 203 209 214 22 226 231 238 25 292 304 310 317 323 329 335 4 45 50 56 61 67 75 9
12 18 2 204 21 215 220 227 232 239 26 299 306 311 318 324 33 336 40 46 51 57 62 68 76
13 19 20 205 210 216 221 228 233 24 27 3 307 313 319 325 330 337 41 47 52 58 63 69 77
root@ubuntu:/proc/1#
这是一个子目录,包含进程打开的每个文件的一个条目,由其文件描述符命名,是到实际文件的符号链接。
root@ubuntu:/proc/1/fd# ll
total 0
dr-x------ 2 root root 0 Jan 14 05:17 ./
dr-xr-xr-x 9 root root 0 Jan 14 05:17 ../
lrwx------ 1 root root 64 Jan 14 05:17 0 -> /dev/null
lrwx------ 1 root root 64 Jan 14 05:17 1 -> /dev/null
lr-x------ 1 root root 64 Jan 14 05:19 10 -> /proc/1/mountinfo
lr-x------ 1 root root 64 Jan 14 05:19 11 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:17 12 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:19 13 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:19 14 -> /proc/swaps
lrwx------ 1 root root 64 Jan 14 05:19 15 -> 'socket:[25142]'
lr-x------ 1 root root 64 Jan 14 05:19 16 -> anon_inode:inotify
lr-x------ 1 root root 64 Jan 14 05:19 17 -> anon_inode:inotify
lrwx------ 1 root root 64 Jan 14 05:19 18 -> 'socket:[58239]'
lrwx------ 1 root root 64 Jan 14 05:19 19 -> 'socket:[25146]'
lrwx------ 1 root root 64 Jan 14 05:19 190 -> 'socket:[25143]'
lrwx------ 1 root root 64 Jan 14 05:19 191 -> 'socket:[25144]'
lrwx------ 1 root root 64 Jan 14 05:19 192 -> 'socket:[25145]'
lrwx------ 1 root root 64 Jan 14 05:19 199 -> 'socket:[42574]'
lrwx------ 1 root root 64 Jan 14 05:17 2 -> /dev/null
lrwx------ 1 root root 64 Jan 14 05:17 20 -> 'socket:[25148]'
lrwx------ 1 root root 64 Jan 14 05:19 200 -> 'socket:[42575]'
lrwx------ 1 root root 64 Jan 14 05:19 201 -> 'socket:[25173]'
lr-x------ 1 root root 64 Jan 14 05:19 202 -> 'pipe:[25155]'
lrwx------ 1 root root 64 Jan 14 05:19 203 -> 'socket:[34670]'
lrwx------ 1 root root 64 Jan 14 05:19 204 -> 'socket:[34662]'
lrwx------ 1 root root 64 Jan 14 05:19 205 -> 'socket:[34660]'
lrwx------ 1 root root 64 Jan 14 05:19 206 -> 'socket:[25169]'
lrwx------ 1 root root 64 Jan 14 05:19 207 -> 'socket:[25171]'
lrwx------ 1 root root 64 Jan 14 05:19 208 -> /run/initctl|
lrwx------ 1 root root 64 Jan 14 05:19 209 -> 'socket:[25167]'
lrwx------ 1 root root 64 Jan 14 05:19 21 -> 'socket:[50747]'
lrwx------ 1 root root 64 Jan 14 05:19 210 -> 'socket:[34666]'
lrwx------ 1 root root 64 Jan 14 05:19 211 -> 'socket:[34668]'
lrwx------ 1 root root 64 Jan 14 05:19 212 -> 'socket:[25159]'
lrwx------ 1 root root 64 Jan 14 05:19 213 -> 'socket:[34664]'
lrwx------ 1 root root 64 Jan 14 05:19 214 -> 'socket:[25166]'
lrwx------ 1 root root 64 Jan 14 05:19 215 -> 'socket:[52770]'
lrwx------ 1 root root 64 Jan 14 05:19 216 -> 'socket:[52769]'
lrwx------ 1 root root 64 Jan 14 05:19 217 -> 'socket:[52689]'
lrwx------ 1 root root 64 Jan 14 05:19 218 -> 'socket:[52578]'
lrwx------ 1 root root 64 Jan 14 05:19 219 -> 'socket:[52485]'
lrwx------ 1 root root 64 Jan 14 05:19 22 -> 'socket:[58263]'
lrwx------ 1 root root 64 Jan 14 05:19 220 -> 'socket:[52472]'
lrwx------ 1 root root 64 Jan 14 05:19 221 -> 'socket:[52451]'
lrwx------ 1 root root 64 Jan 14 05:19 223 -> 'socket:[51377]'
lrwx------ 1 root root 64 Jan 14 05:19 224 -> 'socket:[51376]'
lrwx------ 1 root root 64 Jan 14 05:19 225 -> 'socket:[51368]'
lrwx------ 1 root root 64 Jan 14 05:19 226 -> 'socket:[51367]'
lrwx------ 1 root root 64 Jan 14 05:19 227 -> 'socket:[51366]'
lrwx------ 1 root root 64 Jan 14 05:19 228 -> 'socket:[51365]'
lrwx------ 1 root root 64 Jan 14 05:19 229 -> 'socket:[51364]'
lrwx------ 1 root root 64 Jan 14 05:19 23 -> 'socket:[50752]'
lrwx------ 1 root root 64 Jan 14 05:19 230 -> 'socket:[51363]'
lrwx------ 1 root root 64 Jan 14 05:19 231 -> 'socket:[51362]'
lrwx------ 1 root root 64 Jan 14 05:19 232 -> 'socket:[51361]'
lrwx------ 1 root root 64 Jan 14 05:19 233 -> 'socket:[51360]'
lrwx------ 1 root root 64 Jan 14 05:19 234 -> 'socket:[51359]'
lrwx------ 1 root root 64 Jan 14 05:19 235 -> 'socket:[51358]'
lrwx------ 1 root root 64 Jan 14 05:19 236 -> 'socket:[51357]'
lrwx------ 1 root root 64 Jan 14 05:19 238 -> 'socket:[51355]'
lrwx------ 1 root root 64 Jan 14 05:19 239 -> 'socket:[47559]'
lrwx------ 1 root root 64 Jan 14 05:19 24 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 240 -> 'socket:[46764]'
lrwx------ 1 root root 64 Jan 14 05:19 241 -> 'socket:[46763]'
lrwx------ 1 root root 64 Jan 14 05:19 242 -> 'socket:[46688]'
lrwx------ 1 root root 64 Jan 14 05:19 25 -> anon_inode:bpf-prog
lr-x------ 1 root root 64 Jan 14 05:19 26 -> /dev/autofs
lrwx------ 1 root root 64 Jan 14 05:19 27 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 277 -> 'socket:[46107]'
lrwx------ 1 root root 64 Jan 14 05:19 28 -> 'anon_inode:[timerfd]'
lrwx------ 1 root root 64 Jan 14 05:19 29 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 292 -> 'socket:[41161]'
lrwx------ 1 root root 64 Jan 14 05:19 299 -> 'socket:[40535]'
l-wx------ 1 root root 64 Jan 14 05:17 3 -> /dev/kmsg
lrwx------ 1 root root 64 Jan 14 05:17 30 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 302 -> 'socket:[39802]'
lrwx------ 1 root root 64 Jan 14 05:19 303 -> 'socket:[39796]'
lrwx------ 1 root root 64 Jan 14 05:19 304 -> 'socket:[36460]'
lrwx------ 1 root root 64 Jan 14 05:19 306 -> 'socket:[36362]'
lrwx------ 1 root root 64 Jan 14 05:19 307 -> 'socket:[38990]'
lrwx------ 1 root root 64 Jan 14 05:19 308 -> 'socket:[37428]'
lrwx------ 1 root root 64 Jan 14 05:19 309 -> 'socket:[37427]'
lrwx------ 1 root root 64 Jan 14 05:17 31 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 310 -> 'socket:[37426]'
lrwx------ 1 root root 64 Jan 14 05:19 311 -> 'socket:[37259]'
lrwx------ 1 root root 64 Jan 14 05:19 313 -> 'socket:[35883]'
lrwx------ 1 root root 64 Jan 14 05:19 314 -> 'socket:[35868]'
lrwx------ 1 root root 64 Jan 14 05:19 315 -> 'socket:[34708]'
lrwx------ 1 root root 64 Jan 14 05:19 316 -> 'socket:[34707]'
lrwx------ 1 root root 64 Jan 14 05:19 317 -> 'socket:[34705]'
lrwx------ 1 root root 64 Jan 14 05:19 318 -> 'socket:[34704]'
lrwx------ 1 root root 64 Jan 14 05:19 319 -> 'socket:[34703]'
lrwx------ 1 root root 64 Jan 14 05:19 32 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 321 -> 'socket:[34700]'
lrwx------ 1 root root 64 Jan 14 05:19 322 -> 'socket:[34606]'
lrwx------ 1 root root 64 Jan 14 05:19 323 -> 'socket:[31292]'
lrwx------ 1 root root 64 Jan 14 05:19 324 -> 'socket:[31146]'
lrwx------ 1 root root 64 Jan 14 05:19 325 -> 'socket:[31145]'
lrwx------ 1 root root 64 Jan 14 05:19 326 -> 'socket:[29691]'
lrwx------ 1 root root 64 Jan 14 05:19 327 -> /dev/input/event2
lrwx------ 1 root root 64 Jan 14 05:19 328 -> /dev/input/event3
lrwx------ 1 root root 64 Jan 14 05:19 329 -> /dev/input/event1
lrwx------ 1 root root 64 Jan 14 05:19 33 -> anon_inode:bpf-prog
lrwx------ 1 root root 64 Jan 14 05:19 330 -> /dev/input/event4
lrwx------ 1 root root 64 Jan 14 05:19 331 -> /dev/input/event0
lrwx------ 1 root root 64 Jan 14 05:19 332 -> /dev/dri/card0
lrwx------ 1 root root 64 Jan 14 05:19 334 -> /dev/rfkill
lrwx------ 1 root root 64 Jan 14 05:19 335 -> 'socket:[34658]'
lrwx------ 1 root root 64 Jan 14 05:19 336 -> 'socket:[25175]'
lrwx------ 1 root root 64 Jan 14 05:19 337 -> 'socket:[25157]'
lrwx------ 1 root root 64 Jan 14 05:17 34 -> 'socket:[58264]'
lrwx------ 1 root root 64 Jan 14 05:17 35 -> 'socket:[72575]'
lrwx------ 1 root root 64 Jan 14 05:17 36 -> 'socket:[72576]'
lrwx------ 1 root root 64 Jan 14 05:19 4 -> 'anon_inode:[eventpoll]'
lrwx------ 1 root root 64 Jan 14 05:19 40 -> 'socket:[25202]'
lrwx------ 1 root root 64 Jan 14 05:19 41 -> 'socket:[28910]'
lrwx------ 1 root root 64 Jan 14 05:19 42 -> 'socket:[50715]'
lrwx------ 1 root root 64 Jan 14 05:19 43 -> 'socket:[50716]'
lrwx------ 1 root root 64 Jan 14 05:19 44 -> 'socket:[50717]'
lrwx------ 1 root root 64 Jan 14 05:19 45 -> 'socket:[50753]'
lrwx------ 1 root root 64 Jan 14 05:19 46 -> 'anon_inode:[timerfd]'
lrwx------ 1 root root 64 Jan 14 05:19 47 -> 'socket:[50761]'
lrwx------ 1 root root 64 Jan 14 05:19 48 -> 'socket:[50927]'
lrwx------ 1 root root 64 Jan 14 05:19 49 -> 'socket:[50778]'
lrwx------ 1 root root 64 Jan 14 05:19 5 -> 'anon_inode:[signalfd]'
lrwx------ 1 root root 64 Jan 14 05:19 50 -> 'socket:[50779]'
lrwx------ 1 root root 64 Jan 14 05:19 51 -> 'socket:[50867]'
lrwx------ 1 root root 64 Jan 14 05:19 52 -> 'socket:[50868]'
lrwx------ 1 root root 64 Jan 14 05:19 53 -> 'socket:[50869]'
lrwx------ 1 root root 64 Jan 14 05:17 54 -> 'socket:[50928]'
lrwx------ 1 root root 64 Jan 14 05:17 55 -> 'socket:[50929]'
lrwx------ 1 root root 64 Jan 14 05:17 56 -> 'socket:[50882]'
lrwx------ 1 root root 64 Jan 14 05:17 57 -> 'socket:[50932]'
lrwx------ 1 root root 64 Jan 14 05:17 58 -> 'socket:[50933]'
lrwx------ 1 root root 64 Jan 14 05:17 59 -> 'socket:[54623]'
lr-x------ 1 root root 64 Jan 14 05:19 6 -> anon_inode:inotify
lrwx------ 1 root root 64 Jan 14 05:17 60 -> 'socket:[34697]'
lrwx------ 1 root root 64 Jan 14 05:19 61 -> 'socket:[54624]'
lrwx------ 1 root root 64 Jan 14 05:19 62 -> 'socket:[54625]'
lrwx------ 1 root root 64 Jan 14 05:19 63 -> 'socket:[56790]'
lrwx------ 1 root root 64 Jan 14 05:19 64 -> 'socket:[51029]'
lrwx------ 1 root root 64 Jan 14 05:19 65 -> 'socket:[51030]'
lrwx------ 1 root root 64 Jan 14 05:19 66 -> 'socket:[51042]'
lrwx------ 1 root root 64 Jan 14 05:19 67 -> 'socket:[51043]'
lrwx------ 1 root root 64 Jan 14 05:19 68 -> 'socket:[51034]'
lrwx------ 1 root root 64 Jan 14 05:19 69 -> 'socket:[51035]'
lr-x------ 1 root root 64 Jan 14 05:19 7 -> /sys/fs/cgroup/unified/
lrwx------ 1 root root 64 Jan 14 05:19 73 -> 'socket:[53966]'
lrwx------ 1 root root 64 Jan 14 05:19 74 -> 'socket:[51101]'
lrwx------ 1 root root 64 Jan 14 05:19 75 -> 'socket:[51102]'
lrwx------ 1 root root 64 Jan 14 05:19 76 -> 'socket:[51160]'
lrwx------ 1 root root 64 Jan 14 05:19 77 -> 'socket:[51161]'
lrwx------ 1 root root 64 Jan 14 05:19 78 -> 'socket:[51176]'
lrwx------ 1 root root 64 Jan 14 05:19 79 -> 'socket:[51171]'
lrwx------ 1 root root 64 Jan 14 05:19 8 -> 'anon_inode:[timerfd]'
lrwx------ 1 root root 64 Jan 14 05:17 9 -> 'anon_inode:[eventpoll]'
root@ubuntu:/proc/1/fd#
0是标准输入,1是标准输出,2是标准误差,依此类推,其他数字就是打开的fd文件。打开的文件分为以下几种类型的文件描述符:
类型 | 格式 | 含义 |
---|---|---|
管道 | ‘pipe:[25155]’ | 表示这是一个管道文件,inode是50867 |
套接字 | ‘socket:[50867]’ | 表示这是一个套接字文件,inode是50867 |
没有inode的文件描述符 | anon_inode:[eventpoll] | 这里的文件类型是eventpoll,还有其他文件类型,比如timerfd和signalfd |
普通文件描述符 | /dev/input/event2 | 表示该文件是打开 /dev/input/event2返回的fd |
1.1.16 /proc/[pid]/fdinfo
root@ubuntu:/proc/1/fdinfo# ls
0 14 190 200 206 211 217 223 229 234 240 277 30 308 314 32 326 331 34 42 48 53 59 64 7 78
1 15 191 201 207 212 218 224 23 235 241 28 302 309 315 321 327 332 35 43 49 54 6 65 73 79
10 16 192 202 208 213 219 225 230 236 242 29 303 31 316 322 328 334 36 44 5 55 60 66 74 8
11 17 199 203 209 214 22 226 231 238 25 292 304 310 317 323 329 335 4 45 50 56 61 67 75 9
12 18 2 204 21 215 220 227 232 239 26 299 306 311 318 324 33 336 40 46 51 57 62 68 76
13 19 20 205 210 216 221 228 233 24 27 3 307 313 319 325 330 337 41 47 52 58 63 69 77
root@ubuntu:/proc/1/fdinfo# cat 0
pos: 0
flags: 0100002
mnt_id: 26
ino: 5
root@ubuntu:/proc/1/fdinfo# //poll文件描述符
root@ubuntu:/proc/1# cat fdinfo/9
pos: 0
flags: 02000002
mnt_id: 15
ino: 13577
tfd: 10 events: 80000019 data: 563bcf660010 pos:0 ino:6235 sdev:17
tfd: 13 events: 19 data: 563bcf660050 pos:0 ino:3509 sdev:e//时间描述符
root@ubuntu:/proc/1# cat fdinfo/28
pos: 0
flags: 02004002
mnt_id: 15
ino: 13577
clockid: 1
ticks: 0
settime flags: 01
it_value: (74, 678839584)
it_interval: (0, 0)
这是一个子目录,包含进程打开的每个文件的一个条目,由其文件描述符命名。此目录下的文件仅由进程的所有者可读。可以读取每个文件的内容以获得有关相应文件描述符的信息。内容取决于对应的文件描述符所引用的文件类型。对于常规文件和目录,我们会看到值,其含义是:
值 | 例子 | 含义 |
---|---|---|
pos | pos: 0 | 这是一个十进制数字,显示文件偏移量。 |
flags | flags: 02000002 | 这是一个八进制数,显示文件访问模式和文件状态标志(参见open(2))。如果设置了close-on-exec文件描述符标志,则标志还将包括值O_CLOEXEC。 |
mnt_id | mnt_id: 15 | 该字段是包含该文件的挂载点的ID,具体请参见/proc/[pid]/mountinfo的描述。 |
eventfd-count | eventfd-count: 40 | eventfd文件描述符特有,eventfd-count是eventfd计数器的当前值,以十六进制表示。 |
tfd | tfd: 10 events: 80000019 data: 563bcf660010 pos:0 ino:6235 sdev:17 | epoll文件描述符特有,以tfd开头的每一行都描述了通过epoll文件描述符监视的一个文件描述符(有关详细信息,请参阅epoll_ctl(2))。tfd字段是文件描述符的编号。events字段是此文件描述符正在监视的事件的十六进制掩码。data字段是与此文件描述符关联的数据值。 |
sigmask | sigmask: 0000000000000006 | signalfd文件描述符,Sigmask是通过signalfd文件描述符接受的信号的十六进制掩码。(在本例中,位2和位3被设置,分别对应信号SIGINT和SIGQUIT;看到信号(7))。 |
inotify wd | inotify wd:2 ino:7ef82a sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:2af87e00220ffd73 | wd表示描述符编号(十进制)。ino表示目标文件的inode号,16进制。sdev表示目标文件所在的设备ID(十六进制)。mask表示目标文件被监控事件的掩码(十六进制)。 |
ino | ino: 13577 | 目标文件的inode号(十六进制)。 |
clockid | clockid: 1 | 这是时钟ID的数值,用于标记计时器的进度。 |
ticks | ticks: 0 | 这是已经发生的计时器过期次数(即读取(2)后返回的值)。 |
settime flags | settime flags: 01 | 这个字段列出了timerfd最后一次设置的标志,以八进制为单位 |
it_value | it_value: (74, 678839584) | 此字段包含计时器下一次到期之前的时间量,以秒和纳秒表示。无论计时器是否使用TFD_TIMER_ABSTIME标志创建,它总是以相对值表示。 |
it_interval | it_interval: (0, 0) | 该字段包含计时器的间隔,以秒和纳秒为单位。(it_value和it_interval字段包含该文件描述符上timerfd_gettime(2)将返回的值。) |
1.1.17 /proc/[pid]/gid_map
root@ubuntu:/proc/1# cat gid_map 0 0 4294967295
该文件可以看到进程从用户命名空间映射的组ID的信息。这三个数字含义:
第一个数字:进程pid所在的用户命名空间中用户起始ID。
第二个数字:这里如何解释取决于打开uid_map的进程和进程pid是否在同一个用户命名空间中
- 如果这两个进程在不同的用户名称空间中,第二个数字是打开uid_map的进程的用户名称空间中用户id范围的开始。
- 如果两个进程属于同一个用户命名空间,第二个数字是进程pid的父用户命名空间中用户id范围的开始。这种情况允许uid_map的打开器(这里常见的情况是打开/proc/self/uid_map)查看用户id到创建该用户名称空间的进程的用户名称空间的映射。
第三个数字:映射在两个用户名称空间之间的用户id范围的长度。这里4294967295表示负一。
1.1.18 /proc/[pid]/io
root@ubuntu:/proc/1# cat io
rchar: 1737528570
wchar: 1510335625
syscr: 337293
syscw: 257345
read_bytes: 459443712
write_bytes: 703746048
cancelled_write_bytes: 92532736
该文件包含进程的I/O统计信息,文件中个字段含义如下:
字段 | 全称 | 含义 |
---|---|---|
rchar | characters read | 进程从存储器中读取的字节数。这只是该进程传递给read(2)和类似系统调用的字节之和。它包括像终端I/O这样的东西,并且不受是否需要实际的物理磁盘I/O的影响(读取可能已经从页面缓存中得到满足)。 |
wchar | characters written | 进程已经或将写入磁盘的字节数。这里的注意事项与rchar类似 |
syscr | read syscalls | 统计通过read和pread这样的系统调用尝试读I/O操作的数量 |
syscw | write syscalls | 统计通过write和pwrite这样的系统调用尝试读I/O操作的数量 |
read_bytes | bytes read | 计算该进程实际从存储层获取的字节数。这对于块支持的文件系统是准确的。 |
write_bytes | bytes written | 计算此进程实际发送到存储层的字节数。 |
cancelled_write_bytes | cancelled write bytes | 这个字段表示这个进程通过截断页缓存导致不发生的字节数。任务也可能导致“负”I/O。如果这个进程截断了某个脏页缓存,那么另一个进程(在它的write_bytes中)占用的某个I/O将不会发生。 |
1.1.19 /proc/[pid]/limits
root@ubuntu:/proc/1# cat limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 31362 31362 processes
Max open files 1048576 1048576 files
Max locked memory 67108864 67108864 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 31362 31362 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
该文件显示每个进程的资源限制的软限制、硬限制和度量单位(请参阅getrlimit(2))。
1.1.20 /proc/[pid]/loginuid
root@ubuntu:/proc/1# cat loginuid
4294967295
root@ubuntu:/proc/1# root@ubuntu:/proc/1# cat ../1909/loginuid
1000
root@ubuntu:/proc/1#
4294967295只是(无符号长整数)-1。-1表示未设置loginuid。这是任何登录过程未生成的进程的正常行为(例如,守护进程和内核进程)。loginuid默认为-1;pam_loginuid模块在您登录时(在tty / in DM / via ssh中)将其更改为您的用户ID,并且子进程会保留此值。
root@ubuntu:/proc/1# cat /etc/passwd |grep 1000
jian:x:1000:1000:jian,,,:/home/jian:/bin/bash
1000表示用户jian,登录过。
1.1.21 /proc/[pid]/map_files
root@ubuntu:/proc/1# ll map_files/
total 0
dr-x------ 2 root root 0 Jan 14 07:08 ./
dr-xr-xr-x 9 root root 0 Jan 14 05:17 ../
lr-------- 1 root root 64 Jan 14 22:10 563bcd968000-563bcd99a000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcd99a000-563bcda58000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcda58000-563bcdaae000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcdaae000-563bcdaf4000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 563bcdaf4000-563bcdaf5000 -> /usr/lib/systemd/systemd*
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc70c000-7fe5fc719000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc719000-7fe5fc7c0000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc7c0000-7fe5fc859000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc859000-7fe5fc85a000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
lr-------- 1 root root 64 Jan 14 22:10 7fe5fc85a000-7fe5fc85b000 -> /usr/lib/x86_64-linux-gnu/libm-2.31.so
...
lr-------- 1 root root 64 Jan 14 22:10 7fe5fd75a000-7fe5fd75b000 -> /usr/lib/x86_64-linux-gnu/ld-2.31.so*
这个子目录包含与内存映射文件对应的条目(参见mmap(2))。条目由内存区域的开始和结束地址对命名(用十六进制数表示),并且是到映射文件本身的符号链接。
1.1.22 /proc/[pid]/maps
root@ubuntu:/proc/1# cat maps
563bcd968000-563bcd99a000 r--p 00000000 08:05 32773659 /usr/lib/systemd/systemd
563bcd99a000-563bcda58000 r-xp 00032000 08:05 32773659 /usr/lib/systemd/systemd
563bcda58000-563bcdaae000 r--p 000f0000 08:05 32773659 /usr/lib/systemd/systemd
563bcdaae000-563bcdaf4000 r--p 00145000 08:05 32773659 /usr/lib/systemd/systemd
563bcdaf4000-563bcdaf5000 rw-p 0018b000 08:05 32773659 /usr/lib/systemd/systemd
563bcf65b000-563bcf8f1000 rw-p 00000000 00:00 0 [heap]7fe5fc70c000-7fe5fc719000 r--p 00000000 08:05 32774684 /usr/lib/x86_64-linux-gnu/libm-2.31.so
...
7fe5fd72c000-7fe5fd72d000 r--p 00000000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd72d000-7fe5fd750000 r-xp 00001000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd750000-7fe5fd758000 r--p 00024000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd759000-7fe5fd75a000 r--p 0002c000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd75a000-7fe5fd75b000 rw-p 0002d000 08:05 32773810 /usr/lib/x86_64-linux-gnu/ld-2.31.so
7fe5fd75b000-7fe5fd75c000 rw-p 00000000 00:00 0
7ffeefc06000-7ffeefd08000 rw-p 00000000 00:00 0 [stack]
7ffeefd42000-7ffeefd46000 r--p 00000000 00:00 0 [vvar]
7ffeefd46000-7ffeefd48000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
该文件包含当前映射的内存区域及其访问权限的文件。
1.1.23 /proc/[pid]/mem
该文件可用于通过open(2)、read(2)和lseek(2)访问进程内存中的页面。
1.1.24 /proc/[pid]/mountinfo
root@ubuntu:/proc/1# cat mountinfo
24 29 0:22 / /sys rw,nosuid,nodev,noexec,relatime shared:7 - sysfs sysfs rw
25 29 0:23 / /proc rw,nosuid,nodev,noexec,relatime shared:14 - proc proc rw
...
该文件包含有关进程的挂载命名空间中的挂载点的信息。它提供了各种信息(例如,传播状态,绑定挂载的挂载根,每个挂载及其父挂载的标识符)。每一部分的含义如下表格所示,这里以第一行输出结果来讲解:
24 29 0:22 / /sys rw,nosuid,nodev,noexec,relatime shared:7 – sysfs sysfs rw
项目 | 值 | 含义 |
---|---|---|
mount ID | 24 | 挂载的唯一ID ,umount后可以重复使用 |
parent ID | 29 | 父挂载的ID |
major:minor | 0:22 | 这个文件系统上文件的st_dev的值 |
root | / | 文件系统中构成这个挂载的根目录的路径名 |
mount point | /sys | 挂载点相对于进程根目录的路径名 |
mount options | rw,nosuid,nodev,noexec,relatime | 每次挂载选项 |
optional fields | shared:7 | 0个或多个“tag[:value]”形式的字段 |
separator | – | 可选字段的末尾用一个连字符标记,用作分隔符 |
filesystem type | sysfs | 格式为“type[.subtype]”的文件系统类型 |
mount source | sysfs | 文件系统特定的信息或“none” |
super options | rw | 每个超级块的选项 |
1.1.25 /proc/[pid]/mounts
root@ubuntu:/proc/1# cat mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,noexec,relatime,size=4014420k,nr_inodes=1003605,mode=755,inode64 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,noexec,relatime,size=810584k,mode=755,inode64 0 0
/dev/sda5 / ext4 rw,relatime,errors=remount-ro 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev,inode64 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k,inode64 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755,inode64 0 0
cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0
...
该文件列出当前挂载在进程的挂载名称空间中的所有文件系统。
1.1.26 /proc/[pid]/mountstats
root@ubuntu:/proc/1# cat mountstats
device sysfs mounted on /sys with fstype sysfs
device proc mounted on /proc with fstype proc
device udev mounted on /dev with fstype devtmpfs
device devpts mounted on /dev/pts with fstype devpts
device tmpfs mounted on /run with fstype tmpfs
device /dev/sda5 mounted on / with fstype ext4
device securityfs mounted on /sys/kernel/security with fstype securityfs
device tmpfs mounted on /dev/shm with fstype tmpfs
device tmpfs mounted on /run/lock with fstype tmpfs
device tmpfs mounted on /sys/fs/cgroup with fstype tmpfs
device cgroup2 mounted on /sys/fs/cgroup/unified with fstype cgroup2
device cgroup mounted on /sys/fs/cgroup/systemd with fstype cgroup
device pstore mounted on /sys/fs/pstore with fstype pstore
device bpf mounted on /sys/fs/bpf with fstype bpf
device cgroup mounted on /sys/fs/cgroup/cpuset with fstype cgroup
。。。
该文件导出进程的挂载名称空间中有关挂载点的信息(统计信息、配置信息)。该文件仅由进程的所有者可读。
1.1.27 /proc/[pid]/net
此目录包含各种文件和子目录,其中包含有关网络层的信息。更详细的请看后面的/proc]/net章节。
1.1.28 /proc/[pid]/ns
root@ubuntu:/proc/1# ls -l ns
total 0
lrwxrwxrwx 1 root root 0 Jan 15 03:48 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 mnt -> 'mnt:[4026531841]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 net -> 'net:[4026531840]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 time -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Jan 15 03:48 uts -> 'uts:[4026531838]'
该文件导出进程的命名名称空间中个空间的信息。
1.1.29 /proc/[pid]/numa_maps
root@ubuntu:/proc/1# cat numa_maps
563bcd968000 default file=/usr/lib/systemd/systemd mapped=50 mapmax=2 N0=50 kernelpagesize_kB=4
563bcd99a000 default file=/usr/lib/systemd/systemd mapped=189 mapmax=3 N0=189 kernelpagesize_kB=4
563bcda58000 default file=/usr/lib/systemd/systemd mapped=66 mapmax=3 N0=66 kernelpagesize_kB=4
563bcdaae000 default file=/usr/lib/systemd/systemd anon=63 dirty=63 mapmax=2 active=0 N0=63 kernelpagesize_kB=4
563bcdaf4000 default file=/usr/lib/systemd/systemd anon=1 dirty=1 active=0 N0=1 kernelpagesize_kB=4
563bcf65b000 default heap anon=602 dirty=602 mapmax=2 active=0 N0=602 kernelpagesize_kB=4
7fe5ec000000 default anon=3 dirty=3 active=0 N0=3 kernelpagesize_kB=4
7fe5ec021000 default
7fe5f4000000 default anon=3 dirty=3 active=0 N0=3 kernelpagesize_kB=4
7fe5f4021000 default
7fe5fb703000 default
7fe5fb704000 default anon=2 dirty=2 active=0 N0=2 kernelpagesize_kB=4
7fe5fbf04000 default
7fe5fbf05000 default anon=8 dirty=8 mapmax=2 active=0 N0=8 kernelpagesize_kB=4
7fe5fc70c000 default file=/usr/lib/x86_64-linux-gnu/libm-2.31.so mapped=12 mapmax=72 N0=12 kernelpagesize_kB=4
7fe5fc719000 default file=/usr/lib/x86_64-linux-gnu/libm-2.31.so mapped=62 mapmax=69 N0=62 kernelpagesize_kB=4
1.1.30 /proc/[pid]/oom_adj
root@ubuntu:/proc/1# cat oom_adj
0
该文件可用于调整用于选择在内存不足(OOM)情况下应该杀死哪个进程的分数。内核使用这个值对进程的oom_score值进行位移位操作:有效值在-16到+15之间,加上特殊值-17,这将完全禁用该进程的oom_score。一个大于0的分数增加了这个进程被oom杀手杀死的可能性;小于0的分数会降低这种可能性。这个文件的默认值是0,一个新的进程继承其父进程的oom_adj设置。但是,自Linux 2.6.36以来,这个文件的使用已弃用,取而代之的是/proc/[pid]/oom_score_adj。
1.1.31 /proc/[pid]/oom_score
root@ubuntu:/proc/1# cat oom_score
0
该文件显示内核为选择OOM-killer进程而提供给该进程的当前分数。得分越高,意味着该流程更有可能被oom杀手选中。该分数的基础是进程使用的内存量,增加(+)或减少(-)的因素包括:
- 这个过程是否使用fork创建了很多子进程(+)
- 进程是否运行了很长时间,或者占用了大量的CPU时间(-)
- 进程是否有一个低nice值,也就是> 0的nice值(+)
- 进程是否直接进行硬件访问(-)
1.1.32 /proc/[pid]/oom_score_adj
root@ubuntu:/proc/1# cat oom_score_adj
0
此文件可用于调整用于选择在内存不足条件下杀死哪个进程的。坏度启发式为每个候选任务分配一个值,范围从0(从不终止)到1000(总是终止),以确定哪个进程是目标进程。这些单元大致是进程可能分配的允许内存范围内的一个比例,基于对当前内存和交换使用的估计。例如,如果一个任务正在使用所有允许的内存,那么它的不良评分将是1000。如果它正在使用其允许内存的一半,它的分数将是500。在不良评分中还有一个额外的因素:根进程比其他任务多获得3%的内存。
1.1.33 /proc/[pid]/pagemap
该文件显示了进程的每个虚拟页到物理页帧或交换区域的映射。它为每个虚拟页面包含一个64位值,位的设置如下:
bit | 含义 |
---|---|
63 | 如果置一,表示该页存在于RAM中 |
62 | 如果置一,表示该页存在于交换空间中 |
61 | 表示该页面为文件映射页面或共享匿名页面。 |
57-60 | 零 |
56 | 如果置一,表示页面是独占映射的。 |
55 | 如果置一,表示PTE是脏的 |
0-54 | 如果页面在RAM中(位63),那么这些位提供页帧号,可以用来索引/proc/kpageflags和/proc/kpagecount。如果页面出现在交换中(第62位),那么第4-0位给出交换类型,第54-5位编码交换偏移量。 |
使用下面的代码编译成程序,可以通过这个虚拟地址对应的物理地址:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <errno.h>
#include <stdint.h>
#include <string.h>#define PAGEMAP_ENTRY 8
#define GET_BIT(X,Y) (X & ((uint64_t)1<<Y)) >> Y
#define GET_PFN(X) X & 0x7FFFFFFFFFFFFFconst int __endian_bit = 1;
#define is_bigendian() ( (*(char*)&__endian_bit) == 0 )int i, c, pid, status;
unsigned long virt_addr;
uint64_t read_val, file_offset, page_size;
char path_buf [0x100] = {};
FILE * f;
char *end;int read_pagemap(char * path_buf, unsigned long virt_addr);int main(int argc, char ** argv){if(argc!=3){printf("Argument number is not correct!\n pagemap PID VIRTUAL_ADDRESS\n");return -1;}if(!memcmp(argv[1],"self",sizeof("self"))){sprintf(path_buf, "/proc/self/pagemap");pid = -1;}else{pid = strtol(argv[1],&end, 10);if (end == argv[1] || *end != '\0' || pid<=0){printf("PID must be a positive number or 'self'\n");return -1;}}virt_addr = strtoll(argv[2], NULL, 16);if(pid!=-1)sprintf(path_buf, "/proc/%u/pagemap", pid);page_size = getpagesize();read_pagemap(path_buf, virt_addr);return 0;
}int read_pagemap(char * path_buf, unsigned long virt_addr){printf("Big endian? %d\n", is_bigendian());f = fopen(path_buf, "rb");if(!f){printf("Error! Cannot open %s\n", path_buf);return -1;}//Shifting by virt-addr-offset number of bytes//and multiplying by the size of an address (the size of an entry in pagemap file)file_offset = virt_addr / page_size * PAGEMAP_ENTRY;printf("Vaddr: 0x%lx, Page_size: %lld, Entry_size: %d\n", virt_addr, page_size, PAGEMAP_ENTRY);printf("Reading %s at 0x%llx\n", path_buf, (unsigned long long) file_offset);status = fseek(f, file_offset, SEEK_SET);if(status){perror("Failed to do fseek!");return -1;}errno = 0;read_val = 0;unsigned char c_buf[PAGEMAP_ENTRY];for(i=0; i < PAGEMAP_ENTRY; i++){c = getc(f);if(c==EOF){printf("\nReached end of the file\n");return 0;}if(is_bigendian())c_buf[i] = c;elsec_buf[PAGEMAP_ENTRY - i - 1] = c;printf("[%d]0x%x ", i, c);}for(i=0; i < PAGEMAP_ENTRY; i++){//printf("%d ",c_buf[i]);read_val = (read_val << 8) + c_buf[i];}printf("\n");printf("Result: 0x%llx\n", (unsigned long long) read_val);if(GET_BIT(read_val, 63)) {uint64_t pfn = GET_PFN(read_val);printf("PFN: 0x%llx (0x%llx)\n", pfn, pfn * page_size + virt_addr % page_size);} elseprintf("Page not present\n");if(GET_BIT(read_val, 62))printf("Page swapped\n");fclose(f);return 0;
}
通过gcc编译后,执行如下命令,aa就是程序的名字,1表示进程号,0x7fe5fd529000表示虚拟地址:
jian@ubuntu:~$ sudo ./aa 1 0x7fe5fd529000
[sudo] password for jian:
Big endian? 0
Vaddr: 0x7fe5fd529000, Page_size: 4096, Entry_size: 8
Reading /proc/1/pagemap at 0x3ff2fea948
[0]0xb2 [1]0x4c [2]0x23 [3]0x0 [4]0x0 [5]0x0 [6]0x80 [7]0xa0
Result: 0xa080000000234cb2
PFN: 0x234cb2 (0x234cb2000)
1.1.34 /proc/[pid]/patch_state
root@ubuntu:/proc/1# cat patch_state
-1
1.1.35 /proc/[pid]/personality
root@ubuntu:/proc/1# cat personality
00000000
这个只读文件公开了进程的执行域,十六进制显示。也就是说允许哪个cpu执行。00000000表示全部cpu可以执行,00000001表示cpu0不可以执行。
1.1.36 /proc/[pid]/projid_map
root@ubuntu:/proc/1# cat projid_map0 0 4294967295
1.1.37 /proc/[pid]/root
root@ubuntu:/proc/1# ll root
lrwxrwxrwx 1 root root 0 Jan 14 05:17 root -> //
Linux支持文件系统的每进程根,由chroot系统调用设置。该文件是一个指向进程根目录的符号链接,其行为与exe和fd/*相同。
1.1.38 /proc/[pid]/sched
root@ubuntu:/proc/1# cat sched
systemd (1, #threads: 1)
-------------------------------------------------------------------
se.exec_start : 94545997.349824
se.vruntime : 1579.667011
se.sum_exec_runtime : 3553.995528
se.nr_migrations : 533
nr_switches : 10311
nr_voluntary_switches : 8374
nr_involuntary_switches : 1937
se.load.weight : 1048576
se.avg.load_sum : 1109
se.avg.runnable_sum : 1136355
se.avg.util_sum : 1074578
se.avg.load_avg : 16
se.avg.runnable_avg : 16
se.avg.util_avg : 15
se.avg.last_update_time : 94545997348864
se.avg.util_est.ewma : 37
se.avg.util_est.enqueued : 15
uclamp.min : 0
uclamp.max : 1024
effective uclamp.min : 0
effective uclamp.max : 1024
policy : 0
prio : 120
clock-delta : 17
mm->numa_scan_seq : 0
numa_pages_migrated : 0
numa_preferred_nid : -1
total_numa_faults : 0
current_node=0, numa_group_id=0
numa_faults node=0 task_private=0 task_shared=0 group_private=0 group_shared=0
可以查看进程的调度实体相关的信息。
se.exec_start 是各个调度类维护的时间线信息,两者都频繁更新,cat sched文件中的这个字段没啥参考意义了。
se.vruntime是cfs调度的虚拟时间。
se.sum_exec_runtime表示任务运行的总时间。
se.nr_migrations 记录任务在不同CPU间迁移的次数。
sum_sleep_runtime 统计的是任务测试时间段内 sleep 和 block 两种休眠状态的的时长之和。
nr_switches 表示被切走的总次数 。
nr_voluntary_switches 表示非抢占任务被切走的次数。
nr_involuntary_switches 表示被抢占而导致的任务被切走的次数。
se.load.weight 表示CFS任务的权重,和其优先级挂钩,优先级变化了也会设置 。
policy 表示进程的调度策略。
prio 表示进程的优先级,RT: 0-99,CFS: 100-139,数值越小优先级越高。
clock-delta 是记录一次读取CPU时间需要的时长,涉及到读取硬件,测试发现和 CPU 频点高低无线性关系。
1.1.39 /proc/[pid]/schedstat
root@ubuntu:/proc/1# cat schedstat
3573454261 414543036 10366
1.1.40 /proc/[pid]/sessionid
root@ubuntu:/proc/1# cat sessionid
4294967295
1.1.41 /proc/[pid]/setgroups
root@ubuntu:/proc/1# cat setgroups
allow
该文件用于限制使用setgroups函数设置group的权限,默认是“allow”,此值只能被设置一次,后续设置将会返回错误。
1.1.42 /proc/[pid]/smaps
root@ubuntu:/proc/1# cat smaps
563bcd968000-563bcd99a000 r--p 00000000 08:05 32773659 /usr/lib/systemd/systemd
Size: 200 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 200 kB
Pss: 100 kB
Shared_Clean: 200 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 200 kB
Anonymous: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr mw me sd
563bcd99a000-563bcda58000 r-xp 00032000 08:05 32773659 /usr/lib/systemd/systemd
Size: 760 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 756 kB
Pss: 353 kB
Shared_Clean: 756 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 756 kB
Anonymous: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd ex mr mw me sd
...
该文件显示了每个进程映射的内存消耗详细情况。
第一行显示的信息与/proc/[pid]/maps中的映射显示的信息相同。下面几行显示了映射的大小、当前驻留在RAM中的映射数量(“Rss”)、进程在该映射中的比例份额(“Pss”)、映射中干净的共享页和不干净的共享页的数量,以及映射中干净的私有页和不干净的私有页的数量。“Referenced”表示当前标记为引用或访问的内存量。“Anonymous”显示不属于任何文件的内存量。“Swap”显示了有多少匿名内存也被使用了,但是在交换时被释放了。“KernelPageSize”行是内核用于备份虚拟内存区域的页大小。“MMUPageSize”行报告MMU使用的页面大小。“Locked”表示映射是否锁定在内存中。“ProtectionKey”行包含与虚拟内存区域相关的内存保护键。“VmFlags”行表示与虚拟内存区域相关的内核标志。
1.1.43 /proc/[pid]/smaps_rollup
root@ubuntu:/proc/1# cat smaps_rollup
563bcd968000-7ffeefd48000 ---p 00000000 00:00 0 [rollup]
Rss: 12784 kB
Pss: 5236 kB
Pss_Anon: 3982 kB
Pss_File: 1254 kB
Pss_Shmem: 0 kB
Shared_Clean: 8308 kB
Shared_Dirty: 924 kB
Private_Clean: 32 kB
Private_Dirty: 3520 kB
Referenced: 12784 kB
Anonymous: 4444 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
该文件可以提高用户程序的性能,这些用户程序决定一个进程的聚合内存统计数据(例如,总PSS)。
1.1.44 /proc/[pid]/stack
root@ubuntu:/proc/1# cat stack
[<0>] ep_poll+0x55b/0x6a0
[<0>] do_epoll_wait+0xba/0xe0
[<0>] __x64_sys_epoll_wait+0x59/0x90
[<0>] do_syscall_64+0x59/0xc0
[<0>] entry_SYSCALL_64_after_hwframe+0x61/0xcb
该文件提供了该进程内核堆栈中函数调用的符号跟踪。
1.1.45 /proc/[pid]/stat
root@ubuntu:/proc/1# cat stat
1 (systemd) S 0 1 1 0 -1 4194560 65530 9078825 158 7113 57 302 12565 8530 20 0 1 0 70 173490176 3196 18446744073709551615 94814852456448 94814853234277 140732921837168 0 0 0 671173123 4096 1260 1 0 0 17 1 0 0 0 0 0 94814853587856 94814853873704 94814882607104 140732921839318 140732921839343 140732921839343 140732921839597 0
该文件记录进程的状态信息。每一个数字都有自己的含义。
1.1.46 /proc/[pid]/statm
root@ubuntu:/proc/1# cat statm
42356 3196 2085 190 0 5182 0
提供有关内存使用情况的信息(以页为单位)。
第一个数字表示程序总大小。
第二个数字表示常驻集大小
第三个数字表示常驻共享页的数量。
第四个数字表示代码段大小。
第五个数字表示库大小,不过现在没有使用了,一直是0。
第六个数字表示数据段和栈的总和
第七个数字表示脏页数量,不过现在没有使用了,一直是0。
1.1.47 /proc/[pid]/status
root@ubuntu:/proc/1# cat status
Name: systemd //该进程执行的命令
Umask: 0000 //进程Umask标志,以八进制形式表示,前导为零;
State: S (sleeping) //进程的当前状态。“R(运行)”、“S(休眠)”、“D(磁盘休眠)”、“T(停止)”、“T(跟踪停止)”、“Z(僵尸)”或“X(死亡)”之一。
Tgid: 1 //线程组ID(即进程ID)。
Ngid: 0 //NUMA组ID
Pid: 1 //线程ID
PPid: 0 //父进程PID。
TracerPid: 0 //跟踪该进程的PID(如果没有跟踪则为0)。
Uid: 0 0 0 0 //真实的,有效的,保存的集合,和文件系统Uid (Gid)。
Gid: 0 0 0 0 //
FDSize: 512 //当前分配的文件描述符插槽数。
Groups: //补充分组列表
NStgid: 1 //
NSpid: 1 //
NSpgid: 1 //
NSsid: 1 //
VmPeak: 233384 kB //峰值虚拟内存大小
VmSize: 169424 kB //虚拟内存大小
VmLck: 0 kB //锁定内存大小
VmPin: 0 kB //固定内存大小这些页面不能移动,因为需要直接访问物理内存。
VmHWM: 12784 kB //峰值常驻集大小(“高水位标志”)
VmRSS: 12784 kB //常驻集大小。注意,这里的值是RssAnon、RssFile和RssShmem的和
RssAnon: 4444 kB //常驻匿名内存的大小
RssFile: 8340 kB //常驻文件映射的大小
RssShmem: 0 kB //常驻共享内存的大小
VmData: 19696 kB //数据段的大小
VmStk: 1032 kB //堆栈的大小
VmExe: 760 kB //文本段的大小
VmLib: 9552 kB //共享库代码大小
VmPTE: 88 kB //页表项大小
VmSwap: 0 kB //通过匿名私有页面交换出虚拟内存大小
HugetlbPages: 0 kB // hugetlb内存部分的大小(
CoreDumping: 0 //如果进程当前正在转储内核,则值为1
THP_enabled: 1 //
Threads: 1 //包含该线程的进程中的线程数
SigQ: 0/31362 //该字段包含两个以斜杠分隔的数字,。第一个是该真实用户ID当前排队的信号数量,第二个是该进程排队信号数量的资源限制
SigPnd: 0000000000000000 //线程待定信号的掩码
ShdPnd: 0000000000000000 //进程待定信号的掩码
SigBlk: 7be3c0fe28014a03 //表示信号被阻塞的掩码
SigIgn: 0000000000001000 //表示信号被忽略的掩码
SigCgt: 00000001800004ec //表示信号捕获的掩码
CapInh: 0000000000000000 //在可继承集中启用的能力的掩码
CapPrm: 000001ffffffffff //在允许集中启用的能力的掩码
CapEff: 000001ffffffffff //在有效集中启用的能力的掩码
CapBnd: 000001ffffffffff //能力边界集,以十六进制表示
CapAmb: 0000000000000000 //环境能力集,以十六进制表示
NoNewPrivs: 0 //no_new_privs位的值
Seccomp: 0 //进程的Seccomp模式;0表示SECCOMP_MODE_DISABLED;1表示SECCOMP_MODE_STRICT;2表示SECCOMP_MODE_FILTER。
Seccomp_filters: 0 //
Speculation_Store_Bypass: thread vulnerable //推测缺陷缓解状态
SpeculationIndirectBranch: conditional enabled //
Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff //该进程可能运行的cpu的十六进制掩码
Cpus_allowed_list: 0-127 //和前面一样,但是是“列表格式”
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: 8489 //自愿上下文切换的数量
nonvoluntary_ctxt_switches: 1946 //非自愿上下文切换的数量
root@ubuntu:/proc/1#
1.1.48 /proc/[pid]/syscall
root@ubuntu:/proc/1# cat syscall
232 0x4 0x563bcf846950 0x90 0xffffffff 0x0 0x3a10 0x7ffeefd070f0 0x7fe5fd64846e
该文件显示系统调用号码和当前进程正在执行的系统调用的参数寄存器,以及堆栈指针和程序计数器寄存器的值。
1.1.49 /proc/[pid]/task
这个目录为进程中的每个线程包含一个子目录。每个子目录的名称是线程的数字线程ID 。在每个子目录中,都有一组与/proc/[pid]目录下具有相同名称和内容的文件。对于所有线程共享的属性,task/[tid]子目录下的每个文件的内容将与父/proc/[pid]目录下的相应文件中的内容相同。对于每个线程都不同的属性,task/[tid]下的相应文件可能有不同的值,或者它们可能根本不存在于/proc/[pid]中。
1.1.50 /proc/[pid]/timens_offsets
root@ubuntu:/proc/1# cat timens_offsets
monotonic 0 0
boottime 0 0
1.1.51 /proc/[pid]/timers
1.1.52 /proc/[pid]/timerslack_ns
root@ubuntu:/proc/1# cat timerslack_ns
50000
1.1.53 /proc/[pid]/uid_map
root@ubuntu:/proc/1# cat uid_map0 0 4294967295
1.1.54 /proc/[pid]/wchan
root@ubuntu:/proc/1# cat wchan
ep_poll
root@ubuntu:/proc/1#
进程在内核中休眠的位置对应的符号名。
1.2 /proc/acpi/
高级电源管理(APM)版本信息及电池相关状态信息。
1.3 /proc/asound/
jian@ubuntu:/proc/asound$ ll
total 0
dr-xr-xr-x 12 root root 0 Jan 12 19:05 ./
dr-xr-xr-x 411 root root 0 Jan 12 19:05 ../
lrwxrwxrwx 1 root root 5 Jan 15 18:35 AudioPCI -> card0/
dr-xr-xr-x 9 root root 0 Jan 15 18:35 card0/
-r--r--r-- 1 root root 0 Jan 15 18:35 cards
-r--r--r-- 1 root root 0 Jan 15 18:35 devices
-r--r--r-- 1 root root 0 Jan 15 18:35 modules
dr-xr-xr-x 4 root root 0 Jan 15 18:35 oss/
-r--r--r-- 1 root root 0 Jan 15 18:35 pcm
dr-xr-xr-x 6 root root 0 Jan 15 18:35 seq/
-r--r--r-- 1 root root 0 Jan 15 18:35 timers
-r--r--r-- 1 root root 0 Jan 15 18:35 version
ALSA使用/proc/asound目录下的文件保存设备信息并且实现一些控制目的。
1.3.1 /proc/asound/AudioPCI -> card0/
1.3.2 /proc/asound/cardX/
这里X是声卡的编号,对于系统中已经识别的每个声卡都存在对应的cardX目录,每个目录都是差不多的,可以看下下面:
jian@ubuntu:/proc/asound/card0$ ll
total 0
dr-xr-xr-x 9 root root 0 Jan 15 18:35 ./
dr-xr-xr-x 12 root root 0 Jan 12 19:05 ../
-r--r--r-- 1 root root 0 Jan 15 18:42 audiopci
dr-xr-xr-x 4 root root 0 Jan 15 18:42 codec97#0/
-r--r--r-- 1 root root 0 Jan 15 18:42 id
-r--r--r-- 1 root root 0 Jan 15 18:42 midi0
dr-xr-xr-x 4 root root 0 Jan 15 18:42 pcm0c/
dr-xr-xr-x 4 root root 0 Jan 15 18:42 pcm0p/
dr-xr-xr-x 4 root root 0 Jan 15 18:42 pcm1p/
1.3.3 /proc/asound/cards
jian@ubuntu:/proc/asound$ cat cards 0 [AudioPCI ]: ENS1371 - Ensoniq AudioPCIEnsoniq AudioPCI ENS1371 at 0x2040, irq 16
该文件显示已注册的声卡的列表,还有声卡的一些大概信息。
1.3.4 /proc/asound/devices
1: : sequencer2: [ 0- 0]: digital audio playback3: [ 0- 0]: digital audio capture4: [ 0- 1]: digital audio playback5: [ 0- 0]: raw midi6: [ 0] : control33: : timer
该文件显示已注册的ALSA设备的列表
1.3.5 /proc/asound/modules
jian@ubuntu:/proc/asound$ cat /proc/asound/modules 0 snd_ens1371
该文件显示已注册声卡驱动的列表,并不是所有为ALSA所加载的内核模块,而是硬件驱动的列表。
1.3.6 /proc/asound/oss/
jian@ubuntu:/proc/asound$ ll oss/
total 0
dr-xr-xr-x 4 root root 0 Jan 15 18:35 ./
dr-xr-xr-x 12 root root 0 Jan 12 19:05 ../
-r--r--r-- 1 root root 0 Jan 15 18:50 devices
-r--r--r-- 1 root root 0 Jan 15 18:50 sndstat
jian@ubuntu:/proc/asound$ cat oss/devices 2: [0- 0]: raw midi9: [0- 0]: raw midi
jian@ubuntu:/proc/asound$ ll oss/sndstat
-r--r--r-- 1 root root 0 Jan 15 18:50 oss/sndstat
该目录包含关于OSS模拟的信息的目录。
1.3.7 /proc/asound/pcm
jian@ubuntu:/proc/asound$ cat pcm
00-00: ES1371/1 : ES1371 DAC2/ADC : playback 1 : capture 1
00-01: ES1371/2 : ES1371 DAC1 : playback 1
该文件显示已分配的pcm流的列表。
1.3.8 /proc/asound/seq/
jian@ubuntu:/proc/asound$ cat seq/clients
Client infocur clients : 2peak clients : 2max clients : 192Client 0 : "System" [Kernel]Port 0 : "Timer" (Rwe-)Port 1 : "Announce" (R-e-)
Client 14 : "Midi Through" [Kernel]Port 0 : "Midi Through Port-0" (RWe-)
Client 16 : "Ensoniq AudioPCI" [Kernel]Port 0 : "ES1371" (RWeX)
jian@ubuntu:/proc/asound$ cat seq/drivers
snd-seq-midi,loaded,1
jian@ubuntu:/proc/asound$ cat seq/queues
jian@ubuntu:/proc/asound$ cat seq/timer
1.3.9 /proc/asound/timers
jian@ubuntu:/proc/asound$ cat timers
G0: system timer : 4000.000us (10000000 ticks)
P0-0-0: PCM playback 0-0-0 : SLAVE
P0-0-1: PCM capture 0-0-1 : SLAVE
P0-1-0: PCM playback 0-1-0 : SLAVE
该文件记录了ALSA已知的计时器的列表,并且描述了当前哪个是实际正在实际使用。
1.3.10 /proc/asound/version
jian@ubuntu:/proc/asound$ cat version
Advanced Linux Sound Architecture Driver Version k5.15.0-57-generic.
只读文件, 记录了ALSA子系统模块(或内核)构建的版本和日期。
1.4 /proc/bootconfig
1.5 /proc/buddyinfo
jian@ubuntu:/proc$ cat buddyinfo
Node 0, zone DMA 0 0 0 0 0 0 0 1 0 1 3
Node 0, zone DMA32 2665 1251 573 899 279 53 9 9 6 2 0
Node 0, zone Normal 1056 471 144 156 55 3 0 0 0 0 0
此文件包含用于诊断内存碎片问题的信息。每行以节点的标识和区域的名称开始,它们一起标识一个内存区域。然后,按照一定顺序划分这些区域的可用块的计数。这里本机有一个内存节点,这个节点有三个区域,分别是DMA、DMA32和Normal。每个区域后面的数字表示从0阶到11阶,每一阶的内存数量。
关于这些区域的更多信息可以在/proc/zoneinfo中找到。
1.6 /proc/bus/
jian@ubuntu:/proc$ ls bus
input pci
这是一个目录,包含已安装总线的子目录。
1.6.1 /proc/bus/input
jian@ubuntu:/proc/bus/input$ ls
devices handlers
该目录包含input总线的信息。
1.6.1.1 /proc/bus/input/devices
jian@ubuntu:/proc/bus/input$ cat devices
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
...
devices文件记录着输入子系统的各个设备信息,每个设备信息的内容都有 I、N、P、S、U、H、B 几个字段,下面对每个字段解释:
- I:设备ID
- N:设备名称
- P:系统层次结构中设备的物理路径
- S:系统文件路径
- U:设备的唯一识别码,可以为空
- H:与设备关联的输入句柄列表
- B:位掩码,以十六进制表示
- PROP:设备属性
- EV :设备支持的事件类型
- KEY :设备拥有的键盘、按键
- MSC :设备支持的杂项事件
- LED :设备上的LED
1.6.1.2 /proc/bus/input/handlers
jian@ubuntu:/proc/bus/input$ cat handlers
N: Number=0 Name=rfkill
N: Number=1 Name=kbd
N: Number=2 Name=sysrq (filter)
N: Number=3 Name=mousedev Minor=32
N: Number=4 Name=evdev Minor=64
N: Number=5 Name=leds
N: Number=6 Name=joydev Minor=0
该文件记录了各个输入子系统的handlers 信息。
1.6.2 /proc/bus/pci
jian@ubuntu:/proc/bus/pci$ ls
devices 00 02
该目录包含各种总线子目录和伪文件,其中包含有关PCI总线、已安装设备和设备驱动程序的信息。
1.6.2.1 /proc/bus/pci/devices
jian@ubuntu:/proc/bus/pci$ cat devices
0000 80867190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 agpgart-intel
这个文件记录有关PCI设备的信息,每一个pci设备都是17或者18个字段组成,每一个字段的含义是:
第1个字段是,总线设备功能,总线是前8位,后8位是设备(前5位)和功能(后3位)。
第2个字段是,vendor(前16位)和device(后16位)。
第3个字段是,中断号
第4-10个字段是bar0-bar6以及flag信息。
第11-17个字段是bar0-bar6的长度。
第18个字段是设备名称,也可以是空的。
1.6.2.2 /proc/bus/pci/XX
XX表示pci的域,pci有几个域,这里就会有几个目录。我们pci下有00和02两个目录,说明我们 的pci总线有两个pci域。每个XX目录下面都是aa.b格式的文件:
jian@ubuntu:/proc/bus/pci$ ls 00
00.0 07.0 07.3 0f.0 11.0 15.1 15.3 15.5 15.7 16.1 16.3 16.5 16.7 17.1 17.3 17.5 17.7 18.1 18.3 18.5 18.7
01.0 07.1 07.7 10.0 15.0 15.2 15.4 15.6 16.0 16.2 16.4 16.6 17.0 17.2 17.4 17.6 18.0 18.2 18.4 1
所以,对于每一个文件,aa表示总线,b表示卡槽,文件则记录着pci设备的功能信息。
1.7 /proc/cgroups
1.8 /proc/cmdline
jian@ubuntu:/proc$ cat cmdline
BOOT_IMAGE=/boot/vmlinuz-5.15.0-58-generic root=UUID=23b3b5ca-aa0c-4135-923e-11c3fa34bc68 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
该文件记录了在引导时传递给Linux内核的参数。
1.9 /proc/consoles
1.10 /proc/cpuinfo
jian@ubuntu:/proc$ cat cpuinfo
processor : 7
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i9-9900 CPU @ 3.10GHz
stepping : 13
microcode : 0xffffffff
cpu MHz : 3096.008
cache size : 16384 KB
physical id : 14
siblings : 1
core id : 0
cpu cores : 1
apicid : 14
initial apicid : 14
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat flush_l1d arch_capabilities
bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs itlb_multihit srbds mmio_stale_data retbleed
bogomips : 6192.01
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
这是一个CPU和系统架构相关项的集合,对于每个支持的架构都有不同的列表。两个常见的条目是processor,它给出CPU编号和bogomips;在内核初始化期间计算的系统常数。SMP机器有每个CPU的信息。lscpu命令就是从这个文件中收集它的信息。
1.11 /proc/crypto
jian@ubuntu:/proc$ cat crypto
...
name : stdrng
driver : drbg_nopr_ctr_aes128
module : kernel
priority : 211
refcnt : 1
selftest : passed
internal : no
type : rng
seedsize : 0
...
该文件记录了系统上已安装的内核使用的密码算法及每个算法的详细信息列表;
1.12 /proc/devices
ian@ubuntu:/proc$ cat /proc/devices
Character devices:1 mem4 /dev/vc/04 tty4 ttyS5 /dev/tty5 /dev/console5 /dev/ptmx5 ttyprintk6 lp7 vcs10 misc13 input14 sound/midi14 sound/dmmidi21 sg29 fb89 i2c99 ppdev
108 ppp
116 alsa
128 ptm
136 pts
180 usb
189 usb_device
202 cpu/msr
204 ttyMAX
216 rfcomm
226 drm
236 aux
237 cec
238 lirc
239 ipmidev
240 hidraw
241 vfio
242 wwan_port
243 bsg
244 watchdog
245 remoteproc
246 ptp
247 pps
248 rtc
249 dma_heap
250 dax
251 dimmctl
252 ndctl
253 tpm
254 gpiochipBlock devices:7 loop8 sd9 md11 sr65 sd66 sd67 sd68 sd69 sd70 sd71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp
259 blkext
这个文件记录主设备号和设备组的文本列表。MAKEDEV脚本可以使用它来与内核保持一致。
1.13 /proc/diskstats
jian@ubuntu:/proc$ cat diskstats7 0 loop0 14 0 34 3 0 0 0 0 0 16 3 0 0 0 0 0 07 1 loop1 45 0 698 1536 0 0 0 0 0 1552 1536 0 0 0 0 0 07 2 loop2 50 0 720 941 0 0 0 0 0 952 941 0 0 0 0 0 07 3 loop3 56 0 2142 2241 0 0 0 0 0 2008 2241 0 0 0 0 0 07 4 loop4 59 0 2170 3228 0 0 0 0 0 2780 3228 0 0 0 0 0 07 5 loop5 59 0 2186 2278 0 0 0 0 0 1628 2278 0 0 0 0 0 07 6 loop6 43 0 700 932 0 0 0 0 0 948 932 0 0 0 0 0 07 7 loop7 48 0 724 1352 0 0 0 0 0 1356 1352 0 0 0 0 0 011 0 sr0 11 0 5 2 0 0 0 0 0 24 2 0 0 0 0 0 08 0 sda 27150 20645 1567164 284433 8253 5162 135930 3278 0 61372 287711 0 0 0 0 0 08 1 sda1 172 21 13366 121 2 0 2 0 0 124 121 0 0 0 0 0 08 2 sda2 2 0 4 0 0 0 0 0 0 8 0 0 0 0 0 0 08 5 sda5 26866 20624 1549290 284269 8251 5162 135928 3277 0 61304 287547 0 0 0 0 0 07 8 loop8 43 0 696 2523 0 0 0 0 0 2308 2523 0 0 0 0 0 07 9 loop9 543 0 36282 3176 0 0 0 0 0 4468 3176 0 0 0 0 0 07 10 loop10 11 0 28 4 0 0 0 0 0 8 4 0 0 0 0 0 0
该文件包含每个磁盘设备的磁盘I/O统计信息。
1.14 /proc/dma
jian@ubuntu:/proc$ cat dma4: cascade
这个文件记录了每个正在使用且注册的ISA DMA通道的信息列表。
1.15 /proc/driver/
jian@ubuntu:/proc/driver$ ls
rtc
jian@ubuntu:/proc/driver$ cat rtc
rtc_time : 06:02:28
rtc_date : 2023-01-16
alrm_time : 00:00:00
alrm_date : 2023-01-17
alarm_IRQ : no
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 1024
max user IRQ frequency : 64
24hr : yes
periodic_IRQ : no
update_IRQ : no
HPET_emulated : yes
BCD : yes
DST_enable : no
periodic_freq : 1024
batt_status : okay
1.16 /proc/dynamic_debug/
该目录下只有一个文件,就是control。/proc/dynamic_debug/control这个文件可以代替/sys/kernel/debug/dynamic_debug/control。使用凡是也是一样的:
echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control
1.17 /proc/execdomains
jian@ubuntu:/proc$ cat execdomains
0-0 Linux [kernel]
1.18 /proc/fb
jian@ubuntu:/proc$ cat fb
0 svgadrmfb
1.19 /proc/filesystems
jian@ubuntu:/proc$ cat filesystems
nodev sysfs
nodev tmpfs
nodev bdev
nodev proc
nodev cgroup
nodev cgroup2
nodev cpuset
nodev devtmpfs
nodev configfs
nodev debugfs
nodev tracefs
nodev securityfs
nodev sockfs
nodev bpf
nodev pipefs
nodev ramfs
nodev hugetlbfs
nodev devptsext3ext2ext4squashfsvfat
nodev ecryptfsfuseblk
nodev fuse
nodev fusectl
nodev mqueue
nodev pstorebtrfs
nodev autofs
nodev binfmt_misc
该文件记录了当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型。
1.20 /proc/fs/
jian@ubuntu:/proc$ ls fs/
ext4 jbd2 nfsd
该目录包含系统挂载了的文件系统类型的子目录,目前现在本机已经挂载了ext4 jbd2 nfsd这三种类型的文件系统。在这些目录下则记录着该文件系统类型已经挂载的设备。在已经挂载的设备名字的目录下的各个文件则记录着设备的具体信息。
jian@ubuntu:/proc/fs$ tree
.
├── ext4
│ └── sda5
│ ├── es_shrinker_info
│ ├── fc_info
│ ├── mb_groups
│ ├── mb_stats
│ ├── mb_structs_summary
│ └── options
├── jbd2
│ └── sda5-8
│ └── info
└── nfsd
1.21 /proc/interrupts
jian@ubuntu:/proc$ cat interrupts CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 0: 5 0 0 0 0 0 0 0 IO-APIC 2-edge timer1: 0 0 0 2867 0 0 0 10 IO-APIC 1-edge i80428: 1 0 0 0 0 0 0 0 IO-APIC 8-edge rtc09: 0 0 0 0 0 0 0 0 IO-APIC 9-fasteoi acpi12: 0 0 0 0 0 0 16 45563 IO-APIC 12-edge i804214: 0 0 0 0 0 0 0 0 IO-APIC 14-edge ata_piixNMI: 0 0 0 0 0 0 0 0 Non-maskable interruptsLOC: 50273 101090 61152 60845 72323 58620 57121 137583 Local timer interruptsSPU: 0 0 0 0 0 0 0 0 Spurious interruptsPMI: 0 0 0 0 0 0 0 0 Performance monitoring interruptsIWI: 0 0 0 0 0 0 0 0 IRQ work interruptsRTR: 0 0 0 0 0 0 0 0 APIC ICR read retriesRES: 303 416 426 314 311 277 355 284 Rescheduling interruptsCAL: 28934 40829 36283 33901 24768 30956 33783 30881 Function call interruptsTLB: 223 214 210 301 238 232 153 195 TLB shootdownsTRM: 0 0 0 0 0 0 0 0 Thermal event interruptsTHR: 0 0 0 0 0 0 0 0 Threshold APIC interruptsDFR: 0 0 0 0 0 0 0 0 Deferred Error APIC interruptsMCE: 0 0 0 0 0 0 0 0 Machine check exceptionsMCP: 27 27 27 27 27 27 27 27 Machine check pollsERR: 0MIS: 0PIN: 0 0 0 0 0 0 0 0 Posted-interrupt notification eventNPI: 0 0 0 0 0 0 0 0 Nested posted-interrupt eventPIW: 0 0 0 0 0 0 0 0 Posted-interrupt wakeup event
该文件记录每个IO设备的每个CPU的中断数。包括了系统内部的中断,例如NMI(不可屏蔽中断),LOC(本地定时器中断),以及对于SMP系统,TLB (TLB刷新中断),RES(重调度中断),CAL(远程函数调用中断),以及其他可能的中断。
1.22 /proc/iomem
root@kylin:~#
root@kylin:~# cat /proc/iomem
00000000-0ffffffe : 28008000.spi
28000000-28000fff : 28000000.mmc
28001000-28001fff : 28001000.mmc
28005000-28005fff : 28009000.i2s
28008000-28008fff : 28008000.spi
28009000-28009fff : 28009000.i2s
2800a000-2800afff : 2800a000.can
...
28034000-28034fff : 28034000.gpio
28035000-28035fff : 28035000.gpio
28036000-28036fff : 28036000.gpio
28037000-28037fff : 28037000.gpio
28038000-28038fff : 28038000.gpio
28039000-28039fff : 28039000.gpio
...
80000000-b00fffff : System RAM80000000-8000ffff : reserved80080000-8128ffff : Kernel code81290000-8137ffff : reserved81380000-81801fff : Kernel dataac100000-b00fffff : reserved
c9a00000-fbffffff : System RAMca400000-fa3fffff : reservedfa42c000-fa432fff : reserved
1000000000-1fffffffff : pcie@400000001000000000-10000fffff : 0000:00:02.01000100000-10002fffff : PCI Bus 0000:01
2000000000-207fffffff : System RAM
...
该文件记录了cpu的物理地址映射用途和使用情况。比如“80000000-b00fffff : System RAM”表示这段地址用作内存的,下面的“ 80080000-8128ffff : Kernel code”表示这段地址存放内核代码。“28034000-28034fff : 28034000.gpio”表示这段空间是设备内存。操作这段内存可以控制gpio。
1.23 /proc/ioports
这是当前注册的正在使用的输入输出端口区域的列表。
1.24 /proc/irq/
jian@ubuntu:/proc/irq$ ls
0 10 12 14 16 18 2 25 27 29 30 32 34 36 38 4 41 43 45 47 49 50 52 54 56 58 7 9
1 11 13 15 17 19 24 26 28 3 31 33 35 37 39 40 42 44 46 48 5 51 53 55 57 6 8 default_smp_affinity
1.24 /proc/irq/default_smp_affinity
jian@ubuntu:/proc/irq$ cat default_smp_affinity
ffffffff,ffffffff,ffffffff,ffffffff
文件表示默认的smp架构中,每一个cpu是否允许触发中断,1表示允许,0表示不允许。default_smp_affinity 的每一位代表着一个cpu。
1.24 /proc/irq/X/
jian@ubuntu:/proc/irq/1$ ls
affinity_hint effective_affinity effective_affinity_list i8042 node smp_affinity smp_affinity_list spurious
X代表的中断号,有些中断没有使用,从/proc/interrupts文件可以看到使用的中断,但是这个目录下没有使用的中断也会有一个目录。这些目录下的文件都是大同小异的,如上面所示,其中i8042 是中断号的名字,这是一个目录,但是目录里面什么也没有。
jian@ubuntu:/proc/irq/1$ cat affinity_hint
00000000,00000000,00000000,00000000
jian@ubuntu:/proc/irq/1$ cat effective_affinity
00000000,00000000,00000000,00000008
jian@ubuntu:/proc/irq/1$ cat effective_affinity_list
3
jian@ubuntu:/proc/irq/1$ cat node
0
jian@ubuntu:/proc/irq/1$ cat smp_affinity
00000000,00000000,00000000,00000008
jian@ubuntu:/proc/irq/1$ cat smp_affinity_list
3
jian@ubuntu:/proc/irq/1$ cat spurious
count 0
unhandled 0
last_unhandled 0 ms
1.25 /proc/kallsyms
它保存了模块(X)工具用来动态链接和绑定可加载模块的内核导出符号定义。
1.26 /proc/kcore
该文件表示系统的物理内存,以ELF核心文件格式存储。通过这个伪文件和一个未剥离的内核(/usr/src/linux/vmlinux)二进制文件,可以使用GDB检查任何内核数据结构的当前状态。
1.27 /proc/keys
jian@ubuntu:/proc$ cat keys
1d189757 I--Q--- 18 perm 3f030000 1000 1000 keyring _ses: 1
2275e5ca I--Q--- 3 perm 1f3f0000 1000 65534 keyring _uid.1000: empty
37bddbb8 I--Q--- 1 perm 1f3f0000 1000 65534 keyring _uid_ses.1000: 1
1.28 /proc/key-users
jian@ubuntu:/proc$ cat key-users0: 110 109/109 94/1000000 1927/25000000101: 1 1/1 1/200 9/20000102: 1 1/1 1/200 9/20000116: 2 2/2 2/200 18/20000121: 1 1/1 1/200 9/200001000: 3 3/3 3/200 37/20000
1.29 /proc/kmsg
这个文件可以用来代替syslog(2)系统调用来读取内核消息。一个进程必须有超级用户权限才能读取这个文件,并且只有一个进程可以读取这个文件。如果正在运行使用syslog(2)系统调用功能记录内核消息的syslog进程,则不应该读取此文件。
1.30 /proc/kpagecgroup
这个文件包含一个64位的内存索引节点号,该索引节点号是每个页面所占用的内存cgroup的索引节点号,按页帧号索引。
1.31 /proc/kpagecount
该文件包含每个物理页帧映射次数的64位计数,按页帧号索引
1.32 /proc/kpageflags
该文件包含64位掩码,对应于每个物理页帧;它是按页帧数索引。
1.33 /proc/loadavg
jian@ubuntu:/proc$ cat loadavg
0.00 0.02 0.00 1/590 2483
该文件中的前三个字段是负载平均数字,给出运行队列(状态R)或等待磁盘I/O(状态D)在1分钟、5分钟和15分钟内的平均作业数。它们与正常运行时间和其他程序给出的负载平均值相同。第四个字段由两个用斜杠(/)分隔的数字组成。第一个是当前可运行的内核调度实体(进程、线程)的数量。斜杠后面的值是系统上当前存在的内核调度实体的数量。第五个字段是最近在系统上创建的进程的PID。
1.34 /proc/locks
jian@ubuntu:/proc$ cat locks
1: POSIX ADVISORY READ 1269 00:19:1438 4 4
2: POSIX ADVISORY READ 1269 00:19:1417 4 4
3: POSIX ADVISORY READ 1269 00:19:1416 4 4
4: POSIX ADVISORY READ 1269 00:19:1413 4 4
5: POSIX ADVISORY READ 1269 00:19:1412 4 4
6: POSIX ADVISORY READ 1269 00:19:1411 4 4
7: POSIX ADVISORY READ 1269 00:19:1410 4 4
8: POSIX ADVISORY READ 1269 00:19:1409 4 4
9: POSIX ADVISORY READ 1269 00:19:1408 4 4
10: POSIX ADVISORY READ 1269 00:19:1407 4 4
11: FLOCK ADVISORY WRITE 1024 00:1b:8 0 EOF
12: POSIX ADVISORY WRITE 1269 00:19:1406 0 EOF
13: POSIX ADVISORY WRITE 1269 00:19:1405 0 EOF
14: POSIX ADVISORY READ 1269 00:19:1396 4 4
15: POSIX ADVISORY READ 1862 08:05:19398682 128 128
16: POSIX ADVISORY READ 1862 08:05:19398678 1073741826 1073742335
17: POSIX ADVISORY READ 1142 08:05:19398682 128 128
18: POSIX ADVISORY READ 1142 08:05:19398678 1073741826 1073742335
19: POSIX ADVISORY WRITE 1272 00:19:1414 0 EOF
20: FLOCK ADVISORY WRITE 858 08:05:31727842 0 EOF
21: POSIX ADVISORY READ 1273 00:19:1556 4 4
22: POSIX ADVISORY WRITE 1273 00:19:1415 0 EOF
23: POSIX ADVISORY READ 1269 00:19:1556 4 4
24: FLOCK ADVISORY WRITE 1766 00:37:88 0 EOF
25: POSIX ADVISORY WRITE 1290 00:19:1443 0 EOF
26: POSIX ADVISORY WRITE 1023 00:19:1398 0 EOF
27: POSIX ADVISORY WRITE 1023 00:19:1397 0 EOF
28: POSIX ADVISORY READ 1023 00:19:1396 4 4
29: FLOCK ADVISORY WRITE 840 00:19:1213 0 EOF
该文件显示了锁的信息,每一行可以分为8个部分:
(1)锁在列表中的序号位置。
(2)锁类型。此处可能出现的值包括:
- FLOCK :这是一个使用FLOCK(2)创建的BSD文件锁。
- OFDLCK :这是使用fcntl(2)创建的OFD (open file description)锁。
- POSIX :这是一个使用fcntl(2)创建的POSIX字节范围锁。
(3)锁的类型,在这里可以出现的字符串有: - ADVISORY:这是一个建议锁。
- MANDATORY:这是一个强制锁。
(4)锁的类型。可以出现在这里的值有: - READ:读锁。
- WRITE :写锁。
(5)拥有锁的进程的PID。
(6)三个用冒号分隔的子字段,标识包含被锁定文件所在的文件系统的设备的主要和次要设备ID,后面跟着被锁定文件的inode号。
(7)锁的第一个字节的字节偏移量。对于BSD锁,这个值总是0。
(8)锁最后一个字节的字节偏移量。该字段中的EOF表示锁扩展到文件的末尾。对于BSD锁,显示的值总是0。
1.35 /proc/mdstat
1.36 /proc/meminfo
jian@ubuntu:/proc$ cat meminfo
MemTotal: 3983208 kB
MemFree: 1877212 kB
MemAvailable: 2617428 kB
Buffers: 118312 kB
Cached: 779368 kB
SwapCached: 0 kB
Active: 420352 kB
Inactive: 1058188 kB
Active(anon): 2852 kB
Inactive(anon): 578440 kB
Active(file): 417500 kB
Inactive(file): 479748 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 580924 kB
Mapped: 303088 kB
Shmem: 5568 kB
KReclaimable: 94492 kB
Slab: 192460 kB
SReclaimable: 94492 kB
SUnreclaim: 97968 kB
KernelStack: 11440 kB
PageTables: 14612 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4088752 kB
Committed_AS: 3544920 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 63064 kB
VmallocChunk: 0 kB
Percpu: 92672 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 257856 kB
DirectMap2M: 3936256 kB
DirectMap1G: 2097152 kB
该文件报告有关系统内存使用情况的统计信息。free命令使用它来报告系统上的空闲内存和已使用内存(物理内存和交换内存)数量,以及内核使用的共享内存和缓冲区数量。文件的每一行都包含一个参数名,后面跟着一个冒号,参数值和一个可选的测量单位(例如,“kB”)。下面的列表描述了读取字段值所需的参数名称和格式说明符:
(1)MemTotal :总可用内存(即物理RAM减去一些保留位和内核二进制代码)。
(2)MemFree :表示系统尚未使用的内存,MemUsed=MemTotal-MemFree就是已被用掉的内存。
(3)MemAvailable :可用内存数。MemAvailable≈MemFree+Buffers+Cached
(4)Buffers :原始磁盘块的相对临时存储。
(5)Cached :从磁盘读取文件的内存缓存(页缓存)。
(6)SwapCached :曾经被换出的内存被换回,但仍然在交换文件中。
(7)Active :最近使用过的内存,等于Active(anon) + Active(file)的和
(8)Inactive :最近使用较少的内存。等于Inactive(anon) + Inactive(file)的和
(9)Active(anon) :最近使用过的匿名页内存
(10)Inactive(anon) :最近使用较少的匿名页内存
(11)Active(file) :最近使用过的文件页内存
(12)Inactive(file) :最近使用较少的文件页内存
(13)Unevictable :有些内存页是不能被释放的,这些内存页不能放在LRU表中,而是记录到Unevictable标中
(14)Mlocked :
(15)SwapTotal :交换空间的总大小
(16)SwapFree :交换空间的剩余容量
(17)Dirty :脏数据,等待写回磁盘的内存。
(18)Writeback :正在被主动写回磁盘的内存。
(19)AnonPages :映射到用户空间页表的非文件备份页。
(20)Mapped :已映射到内存中的文件,例如库。
(21)Shmem :tmpfs所使用的内存。
(22)KReclaimable :可回收内存,内核将在内存压力下尝试回收的内核分配。
(23)Slab :由"Slab分配器"分配的总量。
(24)SReclaimable :不存在活跃对象,可以回收的Slab容量
(25)SUnreclaim :对象处于活跃状态,不能被回收的Slab容量
(26)KernelStack :内核代码使用的堆栈区域。
(27)PageTables :页表,用于存储各个用户进程的逻辑地址和物理地址的变换关系,它本身也是一个内存区域。
(28)NFS_Unstable :发送到服务器的NFS页,但尚未提交到稳定存储。
(29)Bounce :用于块设备“反弹缓冲区”的内存。
(30)WritebackTmp :FUSE用于临时回写缓冲区的内存。
(31)CommitLimit :这是当前系统上可分配的内存总量,以千字节表示
(32)Committed_AS :系统上当前分配的内存量。提交的内存是进程分配的所有内存的总和,即使这些内存还没有被它们“使用”。
(33)VmallocTotal :vmalloc内存区域的总大小。
(34)VmallocUsed :已经使用的vmalloc内存区域。
(35)VmallocChunk :vmalloc区域中空闲的最大的连续块,
(36)Percpu :
(37)HardwareCorrupted :
(38)AnonHugePages :映射到用户空间页表的非文件支持的大页面。
(39)ShmemHugePages :共享内存和分配大页面的tmpfs所使用的内存
(40)ShmemPmdMapped :共享内存映射到具有大页面的用户空间。
(41)FileHugePages :
(42)FilePmdMapped :
(43)HugePages_Total :巨大页面池的大小。
(44)HugePages_Free :空闲巨大页面池的大小。
(45)HugePages_Rsvd :这是承诺从池中进行分配,但尚未进行分配的巨大页面的数量。
(46)HugePages_Surp :这是在/proc/sys/vm/nr_hugepages值之上的池中的大页数。
(47)Hugepagesize :大页的总大小。
(48)Hugetlb :大页的页表大小
(49)DirectMap4k :由内核线性映射为4kB页的RAM字节数。
(50)DirectMap2M :由内核线性映射为2MB页的RAM字节数。
(51)DirectMap1G :由内核线性映射为1GB页的RAM字节数。
1.37 /proc/misc
jian@ubuntu:/proc$ cat misc
122 vsock
123 vmci
235 autofs
234 btrfs-control
124 cpu_dma_latency
227 mcelog
236 device-mapper
223 uinput1 psaux
196 vfio
200 tun
125 udmabuf
237 loop-control
183 hw_random
228 hpet
229 fuse
126 ecryptfs
231 snapshot
242 rfkill
127 vga_arbiter
该文件显示了字符设备的次设备号被使用情况。
1.38 /proc/modules
jian@ubuntu:/proc$ cat modules
md5 4033 1 - Live 0x10a7f000
l2cap 29505 10 hidp,rfcomm, Live 0xe0aaa000
该文件记录了系统已经加载的模块的文本列表,每一行的含义:
第一列表示模块名
第二列表示此模块占用内存空间大小,
第三列表示此模块有多少实例被装入,
第四列表示此模块依赖于其它哪些模块,
第五列表示此模块的装载状态(Live:已经装入;Loading:正在装入;Unloading:正在卸载),
第六列表示此模块在内核内存中的偏移量;
1.39 /proc/mounts
jian@ubuntu:/proc$ ll mounts
lrwxrwxrwx 1 root root 11 Jan 15 20:17 mounts -> self/mounts
该文件是个软连接,软连接到self/mounts。
1.40 /proc/mpt/
1.41 /proc/mtrr
jian@ubuntu:/proc$ sudo cat mtrr
[sudo] password for jian:
reg00: base=0x000000000 ( 0MB), size= 2048MB, count=1: write-back
reg01: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
reg02: base=0x100000000 ( 4096MB), size= 4096MB, count=1: write-back
reg03: base=0x200000000 ( 8192MB), size= 8192MB, count=1: write-back
reg04: base=0x400000000 (16384MB), size=16384MB, count=1: write-back
reg05: base=0x800000000 (32768MB), size=32768MB, count=1: write-back
reg06: base=0x1000000000 (65536MB), size=65536MB, count=1: write-back
内存类型范围寄存器。
1.42 /proc/net -> self/net/
jian@ubuntu:/proc$ ll net
lrwxrwxrwx 1 root root 8 Jan 15 20:17 net -> self/net/
该文件是个软连接,软连接到self/net。
1.43 /proc/pagetypeinfo
jian@ubuntu:~/share/note/phytium-linux-kernel-5$ sudo cat /proc/pagetypeinfo
[sudo] password for jian:
Page block order: 9
Pages per block: 512Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10
Node 0, zone DMA, type Unmovable 0 0 0 0 0 0 0 1 0 0 0
Node 0, zone DMA, type Movable 0 0 0 0 0 0 0 0 0 1 3
Node 0, zone DMA, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone DMA, type HighAtomic 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone DMA, type Isolate 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone DMA32, type Unmovable 162 189 71 27 13 2 0 0 0 5 0
Node 0, zone DMA32, type Movable 38 4 1 1 1 1 0 0 0 0 202
Node 0, zone DMA32, type Reclaimable 76 29 6 10 6 4 1 0 1 0 0
Node 0, zone DMA32, type HighAtomic 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone DMA32, type Isolate 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone Normal, type Unmovable 14 12 21 26 14 7 1 0 0 1 3
Node 0, zone Normal, type Movable 1 1 3 2 0 1 0 1 0 0 0
Node 0, zone Normal, type Reclaimable 8 5 4 8 1 0 1 0 1 0 0
Node 0, zone Normal, type HighAtomic 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone Normal, type Isolate 0 0 0 0 0 0 0 0 0 0 0 Number of blocks type Unmovable Movable Reclaimable HighAtomic Isolate
Node 0, zone DMA 1 7 0 0 0
Node 0, zone DMA32 160 1340 28 0 0
Node 0, zone Normal 142 340 30 0 0
该文件可以查看各种迁移类型的页的分布情况。
1.44 /proc/partitions
jian@ubuntu:/proc$ cat partitions
major minor #blocks name7 0 4 loop07 1 64748 loop17 2 64792 loop27 3 354608 loop37 4 354640 loop47 5 93888 loop57 6 47028 loop67 7 47032 loop711 0 1048575 sr08 0 524288000 sda8 1 524288 sda18 2 1 sda28 5 523760640 sda57 8 50812 loop87 9 51024 loop9
该文件包含每个分区的主、次编号,以及1024字节块的数量和分区名称。
1.45 /proc/pressure/
jian@ubuntu:/proc/pressure$ ls
cpu io memory
该目录主要记录系统的压力情况,目录下的文件分贝记录文件名的压力情况。
1.45.1 /proc/pressure/cpu
jian@ubuntu:/proc/pressure$ cat cpu
some avg10=0.00 avg60=0.01 avg300=0.00 total=11844771
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
1.45.2 /proc/pressure/io
jian@ubuntu:/proc/pressure$ cat io
some avg10=0.00 avg60=0.00 avg300=0.00 total=36823298
full avg10=0.00 avg60=0.00 avg300=0.00 total=35522928
1.45.3 /proc/pressure/memory
jian@ubuntu:/proc/pressure$ cat memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
1.46 /proc/schedstat
jian@ubuntu:/proc$ cat schedstat
version 15
timestamp 4298743620
cpu0 0 0 0 0 0 0 17563200615 3709278645 134999
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cpu1 0 0 0 0 0 0 30377733293 3533538054 272256
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cpu2 0 0 0 0 0 0 20096233475 2609785136 167669
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cpu3 0 0 0 0 0 0 19088595158 2653695803 166969
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cpu4 0 0 0 0 0 0 14244834435 1821370720 140077
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cpu5 0 0 0 0 0 0 15504434559 2094926784 152708
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cpu6 0 0 0 0 0 0 18916583704 2303312637 180464
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cpu7 0 0 0 0 0 0 24065078042 3513143266 252430
domain0 00000000,00000000,00000000,000000ff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1.47 /proc/scsi/
jian@ubuntu:/proc/scsi$ ls
device_info mptspi scsi sg
一个包含scsi中层伪文件的目录和各种scsi底层驱动程序目录,这些目录包含这个系统中每个scsi主机的一个文件,所有这些目录都给出scsi IO子系统的某些部分的状态。这些文件包含ASCII结构,因此可以用cat(1)读取。还可以写入一些文件来重新配置子系统或打开或关闭某些特性。
1.47.1 /proc/scsi/device_info
jian@ubuntu:/proc/scsi$ cat device_info
'Aashima' 'IMAGERY 2400SP' 0x1
'CHINON' 'CD-ROM CDS-431' 0x1
'CHINON' 'CD-ROM CDS-535' 0x1
'DENON' 'DRD-25X' 0x1
'HITACHI' 'DK312C' 0x1
'HITACHI' 'DK314C' 0x1
1.47. /proc/scsi/mptspi
1.47. /proc/scsi/scsi
jian@ubuntu:/proc/scsi$ cat scsi
Attached devices:
Host: scsi3 Channel: 00 Id: 00 Lun: 00Vendor: NECVMWar Model: VMware SATA CD01 Rev: 1.00Type: CD-ROM ANSI SCSI revision: 05
Host: scsi32 Channel: 00 Id: 00 Lun: 00Vendor: VMware, Model: VMware Virtual S Rev: 1.0 Type: Direct-Access ANSI SCSI revision: 02
这是内核已知的所有SCSI设备的列表。该清单与引导期间看到的清单类似。SCSI目前只支持add-single-device命令,该命令允许root用户将热插拔设备添加到已知设备列表中。
1.47. /proc/scsi/sg
1.48 /proc/self
jian@ubuntu:/proc$ ll self
lrwxrwxrwx 1 root root 0 Jan 15 20:17 self -> 2766/
该文件是个软连接,连接到/proc/[pid],也就是该文件指访问/proc文件系统的进程,与以进程ID命名的/proc目录相同。
1.49 /proc/slabinfo
jian@ubuntu:/proc$ sudo cat slabinfo
[sudo] password for jian:
slabinfo - version: 2.1
# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
AF_VSOCK 75 75 1280 25 8 : tunables 0 0 0 : slabdata 3 3 0
ext4_groupinfo_4k 4011 4011 192 21 1 : tunables 0 0 0 : slabdata 191 191 0
btrfs_delayed_node 0 0 312 26 2 : tunables 0 0 0 : slabdata 0 0 0
btrfs_ordered_extent 0 0 424 38 4 : tunables 0 0 0 : slabdata 0 0 0
btrfs_extent_map 0 0 144 28 1 : tunables 0 0 0 : slabdata 0 0 0
btrfs_trans_handle 0 0 112 36 1 : tunables 0 0 0 : slabdata 0 0 0
btrfs_inode 0 0 1208 27 8 : tunables 0 0 0 : slabdata 0 0 0
fsverity_info 0 0 256 32 2 : tunables 0 0 0 : slabdata 0 0 0
fscrypt_info 0 0 136 30 1 : tunables 0 0 0 : slabdata 0 0 0
...
在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息。
1.50 /proc/softirqs
1.51 /proc/stat
jian@ubuntu:/proc$ cat stat
cpu 4551 189 2562 13709891 15707 0 339 0 0 0
cpu0 392 0 657 1714527 1713 0 40 0 0 0
cpu1 916 66 339 1711903 2415 0 35 0 0 0
cpu2 623 107 277 1713987 1921 0 50 0 0 0
cpu3 637 2 225 1714326 1689 0 20 0 0 0
cpu4 433 0 203 1714859 1561 0 16 0 0 0
cpu5 440 2 211 1714612 1753 0 24 0 0 0
cpu6 537 1 313 1713234 2732 0 111 0 0 0
cpu7 570 7 334 1712438 1920 0 42 0 0 0
intr 1719044 5 5159 0 0 0 0 0 0 1 0 0 0 74382 ...
ctxt 2817543
btime 1673842634
processes 2914
procs_running 1
procs_blocked 0
softirq 1171512 1 370100 3408 18092 41148 0 6465 431915 0 300383
内核/系统统计数据。常见条目包括:
cpu :系统(“cpu”行)或特定的cpu(“cpuN”行)在各种状态下所花费的时间量,这10个时间值分别是:user、nice、system、idle、irq、softirq、steal、guest、guest_nice。
intr :这一行显示了自启动时间以来为每个可能的系统中断服务的中断计数。第一列是服务的所有中断的总数,包括未编号的特定于体系结构的中断;随后的每一列都是该特定编号中断的总数。未编号的中断不显示,只显示总数。
ctxt :表示系统经历的上下文切换次数。
btime :系统开机的时间点,单位为秒,是1970-01-01到现在的秒数。
processes:系统启动后fork的数量
procs_running:处于可运行状态的进程数。
procs_blocked :等待I/O完成而阻塞的进程数。
softirq :这一行显示了所有cpu的softirq数量。第一列是所有softirq的总和,随后的每一列是特定softirq的总和。
1.52 /proc/swaps
jian@ubuntu:/proc$ cat swaps
Filename Type Size Used Priority
/swapfile file 2097148 0 -2
这个文件记录了swap正在使用的情况。
1.53 /proc/sys/
jian@ubuntu:/proc/sys$ ls
abi debug dev fs kernel net user vm
这个目录包含许多对应于内核变量的文件和子目录。每个目录记录着对应系统的变量。
1.53.1 /proc/sys/abi
此目录可能包含具有应用程序二进制信息的文件。
1.53.2 /proc/sys/debug
此目录包含具有debug信息的文件。
1.53.3 /proc/sys/dev
此目录包含具有设备信息的文件。
1.53.4 /proc/sys/fs
此目录包含具有文件系统信息的文件。
1.53.5 /proc/sys/kernel
此目录包含具有内核信息的文件。
1.53.6 /proc/sys/net
此目录包含具有网络信息的文件。
1.53.7 /proc/sys/user
此目录包含具有用户信息的文件。
1.53.8 /proc/sys/vm
此目录包含具有虚拟内存信息的文件。
1.54 /proc/sysrq-trigger
该文件是控制sysrq的接口文件,只能输入不能输出。
使用方法如下:
# 立即重新启动计算机
echo "b" > /proc/sysrq-trigger# 立即关闭计算机
echo "o" > /proc/sysrq-trigger# 导出内存分配的信息 (可以用/var/log/message 查看)
echo "m" > /proc/sysrq-trigger# 导出当前CPU寄存器信息和标志位的信息
echo "p" > /proc/sysrq-trigger# 导出线程状态信息
echo "t" > /proc/sysrq-trigger# 故意让系统崩溃
echo "c" > /proc/sysrq-trigger# 立即重新挂载所有的文件系统
echo "s" > /proc/sysrq-trigger# 立即重新挂载所有的文件系统为只读
echo "u" > /proc/sysrq-trigger
1.55 /proc/sysvipc/
jian@ubuntu:/proc/sysvipc$ ls
msg sem shm
该目录中的文件会列出所有 IPC 对象,这个目录中三个只读文件提供的信息与通过 ipcs 获取的信息是一样的。
1.55.1 /proc/sysvipc/msg
jian@ubuntu:/proc/sysvipc$ cat msg key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime
该文件列出所有消息队列及其特性。
1.55.2 /proc/sysvipc/sem
jian@ubuntu:/proc/sysvipc$ cat sem key semid perms nsems uid gid cuid cgid otime ctime
该文件列出所有信号量集及其特性。
1.55.3 /proc/sysvipc/shm
jian@ubuntu:/proc/sysvipc$ cat shm key shmid perms size cpid lpid nattch uid gid cuid cgid atime dtime ctime rss swap0 4 1600 524288 1862 1970 2 1000 1000 1000 1000 1673843791 1673843791 1673842814 401408 00 6 1600 524288 1862 1970 2 1000 1000 1000 1000 1673843791 1673843791 1673842819 401408 00 9 1600 524288 1881 2441 2 1000 1000 1000 1000 1673852224 1673852224 1673842825 102400 00 12 1600 524288 1862 1171 2 1000 1000 1000 1000 1673843792 0 1673843792 401408 00 17 1600 524288 2097 1171 2 1000 1000 1000 1000 1673845796 0 1673845796 32768 00 20 1600 4194304 2097 1171 2 1000 1000 1000 1000 1673845848 0 1673845848 524288 0
该文件列出所有共享内存段及其特性。
1.56 /proc/thread-self
jian@ubuntu:/proc$ ll thread-self
lrwxrwxrwx 1 root root 0 Jan 15 20:17 thread-self -> 4890/task/4890/
这是一个 软链接, 链接到进程的 /proc/self/task/tid 目录。
1.57 /proc/timer_list
1.58 /proc/tty/
1.59 /proc/uptime
jian@ubuntu:/proc$ cat uptime
82070.07 655742.62
第一个参数num1是代表从系统启动到现在的时间(以秒为单位)。第二个参数num2是代表系统空闲的时间(以秒为单位)。
1.60 /proc/version
jian@ubuntu:/proc$ cat version
Linux version 5.15.0-58-generic (buildd@lcy02-amd64-033) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #64~20.04.1-Ubuntu SMP Fri Jan 6 16:42:31 UTC 2023
该文件可以查看内核版本相关信息。
1.61 /proc/version_signature
jian@ubuntu:/proc$ cat version_signature
Ubuntu 5.15.0-58.64~20.04.1-generic 5.15.74
1.62 /proc/vmallocinfo
jian@ubuntu:/proc$ sudo cat vmallocinfo
[sudo] password for jian:
0xffffa00ac0000000-0xffffa00ac0005000 20480 irq_init_percpu_irqstack+0xec/0x180 vmap
0xffffa00ac0005000-0xffffa00ac0007000 8192 acpi_os_map_iomem+0x1da/0x210 phys=0x00000000bfefe000 ioremap
0xffffa00ac0007000-0xffffa00ac0009000 8192 acpi_os_map_iomem+0x1da/0x210 phys=0x00000000bfeff000 ioremap
0xffffa00ac0009000-0xffffa00ac000b000 8192 acpi_os_map_iomem+0x1da/0x210 phys=0x00000000bfedc000 ioremap
0xffffa00ac000b000-0xffffa00ac000d000 8192 hpet_enable+0x114/0x4e6 phys=0x00000000fed00000 ioremap
0xffffa00ac000d000-0xffffa00ac000f000 8192 gen_pool_add_owner+0x4b/0xd0 pages=1 vmalloc N0=1
...
0xffffa00ac0081000-0xffffa00ac0083000 8192 bpf_prog_alloc_no_stats+0x36/0x170 pages=1 vmalloc N0=1
0xffffa00ac0084000-0xffffa00ac0089000 20480 copy_process+0x1e6/0x18e0 pages=4 vmalloc N0=4
0xffffa00ac0089000-0xffffa00ac008b000 8192 bpf_prog_alloc_no_stats+0x36/0x170 pages=1 vmalloc N0=1
0xffffa00ac008c000-0xffffa00ac0091000 20480 copy_process+0x1e6/0x18e0 pages=4 vmalloc N0=4
0xffffa00ac0091000-0xffffa00ac0093000 8192 bpf_prog_alloc_no_stats+0x36/0x170 pages=1 vmalloc N0=1
0xffffa00ac0094000-0xffffa00ac0099000 20480 copy_process+0x1e6/0x18e0 pages=4 vmalloc N0=4
...
该文件记录了系统虚拟地址空间的详细且具体的使用情况。
1.63 /proc/vmstat
jian@ubuntu:/proc$ cat vmstat
nr_free_pages 362431
nr_zone_inactive_anon 148142
nr_zone_active_anon 744
nr_zone_inactive_file 146833
nr_zone_active_file 167219
nr_zone_unevictable 0
nr_zone_write_pending 0
nr_mlock 0
nr_bounce 0
nr_zspages 0
nr_free_cma 0
numa_hit 2304723
numa_miss 0
numa_foreign 0
numa_interleave 4447
numa_local 2304723
numa_other 0
nr_inactive_anon 148142
nr_active_anon 744
nr_inactive_file 146833
nr_active_file 167219
nr_unevictable 0
nr_slab_reclaimable 30994
nr_slab_unreclaimable 25450
nr_isolated_anon 0
nr_isolated_file 0
workingset_nodes 0
workingset_refault_anon 0
workingset_refault_file 0
workingset_activate_anon 0
workingset_activate_file 0
workingset_restore_anon 0
workingset_restore_file 0
workingset_nodereclaim 0
nr_anon_pages 150073
nr_mapped 77068
nr_file_pages 312865
nr_dirty 0
nr_writeback 0
nr_writeback_temp 0
nr_shmem 1417
nr_shmem_hugepages 0
nr_shmem_pmdmapped 0
nr_file_hugepages 0
nr_file_pmdmapped 0
nr_anon_transparent_hugepages 1
nr_vmscan_write 0
nr_vmscan_immediate_reclaim 0
nr_dirtied 136107
nr_written 120898
nr_kernel_misc_reclaimable 0
nr_foll_pin_acquired 0
nr_foll_pin_released 0
nr_kernel_stack 11472
nr_page_table_pages 3734
nr_swapcached 0
nr_dirty_threshold 129274
nr_dirty_background_threshold 64558
pgpgin 1089152
pgpgout 569421
pswpin 0
pswpout 0
pgalloc_dma 128
pgalloc_dma32 1970162
pgalloc_normal 453961
pgalloc_movable 0
allocstall_dma 0
allocstall_dma32 0
allocstall_normal 0
allocstall_movable 0
pgskip_dma 0
pgskip_dma32 0
pgskip_normal 0
pgskip_movable 0
pgfree 2843966
pgactivate 159853
pgdeactivate 0
pglazyfree 3076
pgfault 2078070
pgmajfault 3658
pglazyfreed 0
pgrefill 0
pgreuse 432489
pgsteal_kswapd 0
pgsteal_direct 0
pgdemote_kswapd 0
pgdemote_direct 0
pgscan_kswapd 0
pgscan_direct 0
pgscan_direct_throttle 0
pgscan_anon 0
pgscan_file 0
pgsteal_anon 0
pgsteal_file 0
zone_reclaim_failed 0
pginodesteal 0
slabs_scanned 0
kswapd_inodesteal 0
kswapd_low_wmark_hit_quickly 0
kswapd_high_wmark_hit_quickly 0
pageoutrun 0
pgrotated 0
drop_pagecache 0
drop_slab 0
oom_kill 0
numa_pte_updates 0
numa_huge_pte_updates 0
numa_hint_faults 0
numa_hint_faults_local 0
numa_pages_migrated 0
pgmigrate_success 0
pgmigrate_fail 0
thp_migration_success 0
thp_migration_fail 0
thp_migration_split 0
compact_migrate_scanned 0
compact_free_scanned 0
compact_isolated 0
compact_stall 0
compact_fail 0
compact_success 0
compact_daemon_wake 0
compact_daemon_migrate_scanned 0
compact_daemon_free_scanned 0
htlb_buddy_alloc_success 0
htlb_buddy_alloc_fail 0
unevictable_pgs_culled 52819
unevictable_pgs_scanned 0
unevictable_pgs_rescued 36
unevictable_pgs_mlocked 36
unevictable_pgs_munlocked 36
unevictable_pgs_cleared 0
unevictable_pgs_stranded 0
thp_fault_alloc 0
thp_fault_fallback 0
thp_fault_fallback_charge 0
thp_collapse_alloc 1
thp_collapse_alloc_failed 0
thp_file_alloc 0
thp_file_fallback 0
thp_file_fallback_charge 0
thp_file_mapped 0
thp_split_page 0
thp_split_page_failed 0
thp_deferred_split_page 0
thp_split_pmd 0
thp_split_pud 0
thp_zero_page_alloc 0
thp_zero_page_alloc_failed 0
thp_swpout 0
thp_swpout_fallback 0
balloon_inflate 0
balloon_deflate 0
balloon_migrate 0
swap_ra 0
swap_ra_hit 0
direct_map_level2_splits 131
direct_map_level3_splits 1
nr_unstable 0
该文件统计系统虚拟地址的使用情况。
1.64 /proc/zoneinfo
ian@ubuntu:/proc$ cat zoneinfo
Node 0, zone DMAper-node statsnr_inactive_anon 147577nr_active_anon 743nr_inactive_file 146783nr_active_file 166554nr_unevictable 0nr_slab_reclaimable 30964nr_slab_unreclaimable 25384nr_isolated_anon 0nr_isolated_file 0workingset_nodes 0workingset_refault_anon 0workingset_refault_file 0workingset_activate_anon 0workingset_activate_file 0workingset_restore_anon 0workingset_restore_file 0workingset_nodereclaim 0nr_anon_pages 149526nr_mapped 76950nr_file_pages 312143nr_dirty 0nr_writeback 0nr_writeback_temp 0nr_shmem 1410nr_shmem_hugepages 0nr_shmem_pmdmapped 0nr_file_hugepages 0nr_file_pmdmapped 0nr_anon_transparent_hugepages 1nr_vmscan_write 0nr_vmscan_immediate_reclaim 0nr_dirtied 132244nr_written 117044nr_kernel_misc_reclaimable 0nr_foll_pin_acquired 0nr_foll_pin_released 0nr_kernel_stack 11472nr_page_table_pages 3725nr_swapcached 0pages free 3712min 66low 82high 98spanned 4095present 3997managed 3840cma 0protection: (0, 2919, 3794, 3794, 3794)nr_free_pages 3712nr_zone_inactive_anon 0nr_zone_active_anon 0nr_zone_inactive_file 0nr_zone_active_file 0nr_zone_unevictable 0nr_zone_write_pending 0nr_mlock 0nr_bounce 0nr_zspages 0nr_free_cma 0numa_hit 1numa_miss 0numa_foreign 0numa_interleave 1numa_local 1numa_other 0pagesetscpu: 0count: 0high: 10batch: 1vm stats threshold: 8cpu: 1count: 0high: 10batch: 1vm stats threshold: 8cpu: 2count: 0high: 10batch: 1vm stats threshold: 8cpu: 3count: 0high: 10batch: 1vm stats threshold: 8cpu: 4count: 0high: 10batch: 1vm stats threshold: 8cpu: 5count: 0high: 10batch: 1vm stats threshold: 8cpu: 6count: 0high: 10batch: 1vm stats threshold: 8cpu: 7count: 0high: 10batch: 1vm stats threshold: 8node_unreclaimable: 0start_pfn: 1
Node 0, zone DMA32pages free 356327min 12950low 16187high 19424spanned 1044480present 782288managed 765904cma 0protection: (0, 0, 874, 874, 874)nr_free_pages 356327nr_zone_inactive_anon 117213nr_zone_active_anon 348nr_zone_inactive_file 70666nr_zone_active_file 123718nr_zone_unevictable 0nr_zone_write_pending 0nr_mlock 0nr_bounce 0nr_zspages 0nr_free_cma 0numa_hit 1713731numa_miss 0numa_foreign 0numa_interleave 2numa_local 1713731numa_other 0pagesetscpu: 0count: 937high: 2023batch: 63vm stats threshold: 48cpu: 1count: 1825high: 2023batch: 63vm stats threshold: 48cpu: 2count: 1401high: 2023batch: 63vm stats threshold: 48cpu: 3count: 1352high: 2023batch: 63vm stats threshold: 48cpu: 4count: 823high: 2023batch: 63vm stats threshold: 48cpu: 5count: 1067high: 2023batch: 63vm stats threshold: 48cpu: 6count: 1468high: 2023batch: 63vm stats threshold: 48cpu: 7count: 1962high: 2023batch: 63vm stats threshold: 48node_unreclaimable: 0start_pfn: 4096
Node 0, zone Normalpages free 4790min 3878low 4847high 5816spanned 262144present 262144managed 226058cma 0protection: (0, 0, 0, 0, 0)nr_free_pages 4790nr_zone_inactive_anon 30364nr_zone_active_anon 395nr_zone_inactive_file 76117nr_zone_active_file 42836nr_zone_unevictable 0nr_zone_write_pending 0nr_mlock 0nr_bounce 0nr_zspages 0nr_free_cma 0numa_hit 442060numa_miss 0numa_foreign 0numa_interleave 4444numa_local 442060numa_other 0pagesetscpu: 0count: 523high: 605batch: 63vm stats threshold: 32cpu: 1count: 181high: 605batch: 63vm stats threshold: 32cpu: 2count: 528high: 605batch: 63vm stats threshold: 32cpu: 3count: 365high: 605batch: 63vm stats threshold: 32cpu: 4count: 416high: 605batch: 63vm stats threshold: 32cpu: 5count: 514high: 605batch: 63vm stats threshold: 32cpu: 6count: 325high: 605batch: 63vm stats threshold: 32cpu: 7count: 382high: 605batch: 63vm stats threshold: 32node_unreclaimable: 0start_pfn: 1048576
Node 0, zone Movablepages free 0min 0low 0high 0spanned 0present 0managed 0cma 0protection: (0, 0, 0, 0, 0)
Node 0, zone Devicepages free 0min 0low 0high 0spanned 0present 0managed 0cma 0protection: (0, 0, 0, 0, 0)
该文件显示有关内存区域的信息。这对于分析虚拟内存行为很有用。