关于/proc文件系统的一些分享

Linux提供了一个特殊的文件系统procfs,它通常以/proc目录的形式呈现出来,这个目录包含了许多特殊文件用来对驱动程序和内核信息进行更高层的访问,只要权限,就能读取这些文件,就能获取信息和参数。

一下是在我的linux环境中显示的目录项目(大家获得的结果可能不一样):

1/     1442/  1935/  2193/  31/    699/       cgroups        mounts@
10/    1465/  1943/  2199/  32/    7/         cmdline        mtrr
1002/  149/   1945/  22/    3228/  703/       consoles       net@
1028/  15/    1952/  2208/  33/    74/        cpuinfo        pagetypeinfo
1047/  150/   1959/  2210/  34/    75/        crypto         partitions
1056/  1595/  1968/  2222/  35/    751/       devices        sched_debug
1076/  16/    1983/  2228/  36/    766/       diskstats      schedstat
11/    17/    1999/  2230/  37/    767/       dma            scsi/
1133/  1770/  2/     2292/  3715/  783/       driver/        self@
1144/  1772/  20/    2294/  38/    8/         execdomains    slabinfo
1147/  18/    2002/  23/    389/   802/       fb             softirqs
1150/  1827/  2003/  2302/  39/    805/       filesystems    stat
1151/  1835/  2005/  2314/  394/   842/       fs/            swaps
1152/  1843/  2007/  2319/  398/   847/       interrupts     sys/
1183/  1848/  2011/  2325/  40/    853/       iomem          sysrq-trigger
1184/  1858/  2012/  2338/  4033/  854/       ioports        sysvipc/
1185/  1866/  2017/  2341/  4054/  858/       ipmi/          timer_list
1192/  1873/  2024/  2360/  4060/  868/       irq/           timer_stats
12/    1878/  2041/  24/    4063/  9/         kallsyms       tty/
1205/  1879/  2080/  2472/  4070/  919/       kcore          uptime
122/   1880/  2087/  25/    4071/  926/       key-users      version
123/   1884/  2096/  2507/  4128/  928/       kmsg           version_signature
124/   1886/  21/    2599/  430/   943/       kpagecount     vmallocinfo
125/   1891/  2102/  27/    5/     954/       kpageflags     vmstat
1253/  1898/  2107/  273/   52/    980/       latency_stats  zoneinfo
127/   19/    2112/  279/   54/    992/       loadavg
129/   1901/  2123/  28/    564/   acpi/      locks
13/    1902/  2167/  2833/  579/   asound/    mdstat
134/   1907/  2173/  29/    619/   ati/       meminfo
1389/  1915/  2179/  3/     620/   buddyinfo  misc
14/    1919/  2189/  30/    667/   bus/       modules

在多数情况下,直接读取这些文件,就能获得相应的信息。

例如:在/proc/cpuinfo给出的就是CPU的详细信息:

cat /proc/cpuinfo

得到如下结果:

processor    : 0
vendor_id    : AuthenticAMD
cpu family    : 20
model        : 2
model name    : AMD E-450 APU with Radeon(tm) HD Graphics
stepping    : 0
microcode    : 0x500010d
cpu MHz        : 1650.000
cache size    : 512 KB
physical id    : 0
siblings    : 2
core id        : 0
cpu cores    : 2
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 6
wp        : yes

.......

就能很容易的获得相应的设备信息。

类似的:meninfo文件获得内存情况

cat /proc/meminfo

结果如下:

MemTotal:        3640808 kB
MemFree:         1281028 kB
Buffers:          142600 kB
Cached:           975236 kB
SwapCached:            0 kB
Active:          1226752 kB
Inactive:         757936 kB
Active(anon):     867924 kB
Inactive(anon):     6904 kB
Active(file):     358828 kB
Inactive(file):   751032 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194272 kB
.........

每次读取这些文件内容时,它所提供的信息都会更新。

你会在/proc目录下看到许多以 数字命名的文件夹,这些目录用于提供正在运行的程序的信息。而这些数字就是进程的PID,就像执行ps -a命令所看到的一样:

  PID TTY          TIME CMD
 4151 pts/1    00:00:00 ps
我们来看看进一步的信息:

以firefox为例子吧,先执行两条命令:

ps -x | grep "firefox"

该命令用于获得firfox进程的PID,结果如下

2341 ?        Sl    45:25 /usr/lib/firefox/firefox

ls -l /proc/2341/

通过PID查看/proc中对应的目录

dr-xr-xr-x  2 mybc724 mybc724 0  7月 17 10:54 attr
-rw-r--r--  1 mybc724 mybc724 0  7月 17 10:54 autogroup
-r--------  1 mybc724 mybc724 0  7月 17 10:54 auxv
-r--r--r--  1 mybc724 mybc724 0  7月 17 10:54 cgroup
--w-------  1 mybc724 mybc724 0  7月 17 10:54 clear_refs
-r--r--r--  1 mybc724 mybc724 0  7月 17 08:06 cmdline
-rw-r--r--  1 mybc724 mybc724 0  7月 17 10:54 comm
-rw-r--r--  1 mybc724 mybc724 0  7月 17 10:54 coredump_filter
-r--r--r--  1 mybc724 mybc724 0  7月 17 10:54 cpuset
lrwxrwxrwx  1 mybc724 mybc724 0  7月 17 08:07 cwd -> /home/mybc724
-r--------  1 mybc724 mybc724 0  7月 17 10:54 environ
lrwxrwxrwx  1 mybc724 mybc724 0  7月 17 08:06 exe -> /usr/lib/firefox/firefox
......

能看出里面列的信息非常详细,从上面的结果你可以看到/usr/lib/firefox/firefox程序正在运行,cwd -> /home/mybc724,则是它的当前工作目录,你还可以通过查看cmdline和environ,来获得它的启动命令和shell环境,更多信息大家可以自己挖掘。

下面是一些整理:

内核信息:

/proc/cmdline:在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递
/proc/cpuinfo:处理器的相关信息
/proc/crypto:系统上已安装的内核使用的密码算法及每个算法的详细信息列表
/proc/devices:系统已经加载的所有块设备和字符设备的信息
/proc/diskstats:每块磁盘设备的磁盘I/O统计信息列表
/proc/dma:每个正在使用且注册的ISA DMA通道的信息列表
/proc/filesystems:当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型
/proc/iomem:每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息
/proc/meminfo:系统中关于当前内存的利用状况等的信息,常由free命令使用
/proc/mounts:此文件的内容为系统当前挂载的所有文件系统
/proc/modules:当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看
/proc/partitions:块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目
/proc/slabinfo:对象相关slap的信息
/proc/uptime:系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒;
/proc/version:当前系统运行的内核版本号
用户进程信息:
cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
cwd — 指向当前进程运行目录的一个符号链接
exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝
fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接
limits — 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(2.6.24以后的内核版本支持此功能);
maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表;
mem — 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取;
root — 指向当前进程运行根目录的符号链接;
stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用;
statm — 当前进程占用内存的状态信息,通常以“页面”(page)表示;
status — 与stat所提供信息类似,但可读性较好
task — 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;


你可能感兴趣的:(linux,shell,proc)