标签:min debug 初始 avg ack clu ifconfig gdb lease
/proc 是一个伪文件系统, 被用作内核数据结构的接口, 而不仅仅是解释说明 /dev/kmem. /proc里的大多数文件都是只读的, 但也可以通过写一些文件来改变内核变量.
下面对整个 /proc 目录作一个大略的介绍.
cd /proc/20/cwd; /bin/pwd
请注意 pwd 命令通常是 shell 内置的, 在这样的情况下可能工作得不是很好.
(cat /proc/1/environ; echo) | tr ";\000"; ";\n";
(至于为什么想要这么做, 请参阅 lilo(8).)
在 Linux 2.0 或者更早的版本下, 对 exe 特殊文件的 readlink(2) 返回一个如下格式的字符串:
[设备号]:节点号
举个例子, [0301]:1502 就是某设备的 1502 节点, 该设备的主设备号为 03 (如 IDE, MFM 等驱动器), 从设备号为 01 (第一个驱动器的第一分区).
而在 Linux 2.2 下, readlink(2) 则给出命令的实际路径名.
另外, 该符号连接也可以正常析引用(试图打开 exe 文件实际上将打开一个可执行文件). 你甚至可以键入 /proc/[number]/exe 来运行 [number] 进程的副本.
带 -inum 选项的 find(1) 命令可以定位该文件.
程序有时可能想要读取一个文件却不想要标准输入,或者想写到一个文件却不想将输出送到标准输出去,那么就可以很有效地用如下的办法骗过(假定 -i 是输入文件的标志, 而 -o 是输出文件的标志):
foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
在 UNIX 类的系统下, /proc/self/fd/N 基本上就与 /dev/fd/N 相同. 实际上, 大多数的 Linux MAKEDEV 脚本都将 /dev/fd 符号连接到 [..]/proc/self/fd 上.
格式如下:
address perms offset dev inode 00000000-0002f000 r-x-- 00000400 03:03 1401 0002f000-00032000 rwx-p 0002f400 03:03 1401 00032000-0005b000 rwx-p 00000000 00:00 0 60000000-60098000 rwx-p 00000400 03:03 215 60098000-600c7000 rwx-p 00000000 00:00 0 bfffa000-c0000000 rwx-p 00000000 00:00 0
address 是进程所占据的地址空间, perms 是权限集:
r = read w = write x = execute s = shared p = private (copy on write)
offset 是文件或者别的什么的偏移量, dev 是设备号(主设备号:从设备号), 而 inode 则是设备的节点号. 0 表明没有节点与内存相对应, 就象 bss 的情形.
在 Linux 2.2 下还增加了一个域给可用的路径名.
";0"; 通常指 libc.so.4.
在 linux 内核 1.1.40 里, /proc/*/mmap 被取消了. (现在是 真的 废弃不用了!)
现将该文件里各域, 以及他们的 scanf(3) 格式说明符, 按顺序分述如下:
该文件的总长度是物理内存 (RAM) 的大小再加上 4KB.
该文件的内容可以用 dmesg(8) 来察看.
该文件与 free(1) 格式相同, 但是以字节为单位而不是 KB.
IP address HW type Flags HW address 10.11.100.129 0x1 0x6 00:20:8A:00:0C:5A 10.11.100.5 0x1 0x2 00:C0:EA:00:00:4E 44.131.10.6 0x3 0x2 GW4PTS
其中 ‘IP address‘ 是机器的 IPv4 地址; ‘HW type‘ 是地址的硬件类型, 遵循 RFC 826; flags 是 ARP 结构的内部标志, 在 /usr/include/linux/if_arp.h 中定义; ‘HW address‘ 是该 IP 地址的物理层映射(如果知道的话).
Inter-| Receive | Transmit face |packets errs drop fifo frame|packets errs drop fifo colls carrier lo: 0 0 0 0 0 2353 0 0 0 0 0 eth0: 644324 1 0 0 1 563770 0 0 0 581 0
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid 1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0 1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0 1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
Num RefCount Protocol Flags Type St Path 0: 00000002 00000000 00000000 0001 03 1: 00000001 00000000 00010000 0001 01 /dev/printer
当前总是 0; ‘Flags‘ 是内核标志, 指出了套接字的状态; ‘Type‘ 当前总是 1(在内核中尚未支持 unix 域数据报套接字); ‘St‘ 是套接字内部状态; ‘Path‘ 套接字绑捆的路径(如果有的话).
你也可以通过写其中某些文件来重新配置该子系统, 开关一些功能.
命令 echo ‘scsi singledevice 1 0 5 0‘ > /proc/scsi/scsi 令 host scsi1 扫描 SCSI 通道 0, 看在 ID 5 LUN 0 是否存在设备, 如果在该地址存在设备, 或者该地址无效, 则返回一个错误.
这些文件给出了驱动程序以及设备的配置, 统计数据等.
可以通过写这些文件实现不同的 host 上做不同的工作. 例如, root 可以用 latency 和 nolatency 命令打开或者关闭 eata_dma 驱动器上测量延时的代码, 也可以用 lockup 和 unlock 命令控制 scsi_debug 驱动器所模拟的总线锁操作.
只读文件 file-nr 给出当前打开的文件数.
文件 file-max 给出系统所容许的最大可打开文件数. 如果 1024 不够大的话, 可以
echo 4096 > /proc/sys/kernel/file-max
类似地, 文件 inode-nr 以及文件 inode-max 指出了当前 inode 数和最大 inode 数.
文件 ostype;, ;osrelease;, ;version 实际上是 /proc/version 的子字串.
文件 panic 可以对内核变量 panic_timeout 进行读/写访问.如果该值为零, 内核在 panic 时进入(死)循环; 如果非零, 该值指出内核将自动重起的时间, 以秒为单位.
文件 securelevel 目前似乎没什么意义 - root 无所不能.
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
标签:min debug 初始 avg ack clu ifconfig gdb lease
原文地址:https://www.cnblogs.com/fanweisheng/p/11097607.html