linux / proc
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、概述
Linux 内核提供了一种通过 /proc 文件系统在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统它只存在内存当中而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
用户和应用程序可以通过 proc 得到系统的信息并可以改变内核的某些参数。由于系统的信息如进程是动态改变的所以用户或应用程序读取 proc 文件时proc 文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹并不是都是在你的系统中存在这取决于你的内核配置和装载的模块。另外在 /proc 下还有三个很重要的目录netscsi 和 sys。 Sys目录是可写的可以通过它来访问或修改内核的参数而 net 和 scsi 则依赖于内核配置。例如如果系统不支持 scsi则 scsi 目录不存在。
除了以上介绍的这些还有的是一些以数字命名的目录它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在 /proc 下以进程的 PID 号为目录名它们是读取进程信息的接口。而 self 目录则是读取进程本身的信息接口是一个 link。
二、功能说明
下面对整个 /proc 目录作一个大略的介绍。
1、[number]
在 /proc 目录里, 每个正在运行的进程都有一个以该进程 ID 命名的子目录其下包括如下的目录和伪文件
1[number] / cmdline
该文件保存了进程的完整命令行。如果该进程已经被交换出内存或者该进程已经僵死那么就没有任何东西在该文件里这时候对该文件的读操作将返回零个字符。该文件以空字符 null 而不是换行符作为结束标志。
2[number] / cwd
一个符号连接指向进程当前的工作目录。例如要找出进程 20 的 cwd你可以:
cd /proc/20/cwd
/bin/pwd
请注意 pwd 命令通常是 shell 内置的在这样的情况下可能工作得不是很好casper 注 pwd 只能显示 /proc/20/cwd 要是想知道它的工作目录直接 ls -al /proc/20 不就好了。
2[number] / environ
该文件保存进程的环境变量各项之间以空字符分隔结尾也可能是一个空字符。因此如果要输出进程 1 的环境变量你应该
(cat /proc/1/environ; echo) | tr "\000" "\n"
至于为什么想要这么做请参阅 lilo(8).
3[number] / exe
也是一个符号连接指向被执行的二进制代码。在 Linux 2.0 或者更早的版本下对 exe 特殊文件的 readlink(2) 返回一个如下格式的字符串[设备号] : 节点号
举个例子[0301] : 1502 就是某设备的 1502 节点该设备的主设备号为 0 如 IDEMFM 等驱动器)从设备号为 01第一个驱动器的第一分区。 而在 Linux 2.2 下readlink(2) 则给出命令的实际路径名。另外该符号连接也可以正常析引用试图打开 exe 文件实际上将打开一个可执行文件。你甚至可以键入 /proc/[number]/exe 来运行 [number] 进程的副本带 -inum 选项的 find(1) 命令可以定位该文件。
4[number] / fd
进程所打开的每个文件都有一个符号连接在该子目录里以文件描述符命名这个名字实际上是指向真正的文件的符号连接和 exe 记录一样。例如0 是标准输入1 是标准输出2 是标准错误等等。程序有时可能想要读取一个文件却不想要标准输入或者想写到一个文件却不想将输出送到标准输出去那么就可以很有效地用如下的办法骗过假定 -i 是输入文件的标志而 -o 是输出文件的标志
foobar -i /proc/self/fd/0 -o /proc/self/fd/1
这样就是一个能运转的过滤器。请注意该方法不能用来在文件里搜索这是因为 fd 目录里的文件是不可搜索的。在 UNIX 类的系统下/proc/self/fd/N 基本上就与 /dev/fd/N 相同。实际上大多数的 Linux MAKEDEV 脚本都将 /dev/fd 符号连接到 [..]/proc/self/fd 上。
5[number] / attr
进程的属性。
6[number] / limits
该文件存储了进程的软限制硬限制等信息。 可以查看该进程允许打开的最大描述字个数。
7[number] / maps
列名称如下
address perms offset dev inode pathname
栗子
4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so
- address进程占用的地址空间。
- perms权限集r = readw = writex = executes = sharedp = private (copy on write)
- offset文件偏移量。
- dev:为设备major:minor
- inode设备上的inode。0为没有inode关联互内存区域通常为BSSuninitialized data
8[number] / root
指向进程更目录的软连接。
9[number] / smaps
SAWGame Over