首页 > 技术文章 > /proc 文件系统

li-daphne 2016-06-15 14:35 原文

linux提供了一种特殊的文件系统procfs,通常以/proc目录的形式呈现。该目录中包含了许多特殊文件用来对驱动程序和内核信息进行更高层的访问。只要应用程序有正确的访问全息,就可以通过读写这些文件获得信息或设置参数。

例如/proc/cpuinfo给出的是cpu的详细信息:

我的笔记本是4核机器

processor    : 3
vendor_id    : GenuineIntel
cpu family    : 6
model        : 58
model name    : Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
stepping    : 9
microcode    : 0x1c
cpu MHz        : 1227.289
cache size    : 4096 KB
physical id    : 0
siblings    : 4
core id        : 1
cpu cores    : 2
apicid        : 3
initial apicid    : 3
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht 
          tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf
          eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt
           tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept
          vpid fsgsbase smep erms xsaveopt bugs : bogomips :
5787.00 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:

类似地,cat /proc/meminfo 和cat /proc/version分别废除是内存使用情况和内核版本信息。

[root@dhcp-128-93 proc]# cat /proc/version 
Linux version 4.4.6-300.fc23.x86_64 (mockbuild@bkernel02.phx2.fedoraproject.org) 
(gcc version 5.3.1 20151207 (Red Hat 5.3.1-2) (GCC) ) #1 SMP Wed Mar 16 22:10:37 UTC 2016

每次读者写文件的内容时,他们所提供的信息都会及时更新。

---------------------

你可以通过心和函数获得更过的信息,位于/proc目录的子目录中,

例如,可以通过/proc/net/sockstat文件获得网络套接字的使用统计:

[root@dhcp-128-93 proc]# cat /proc/net/sockstat
sockets: used 818
TCP: inuse 17 orphan 0 tw 1 alloc 29 mem 0
UDP: inuse 7 mem 1
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

 

另外,/proc中的有些条目不仅可以被读取,而且还可以被修改。

例如系统中所有运行的程序同时能打开的文件总数是linux内核的一个参数,它的当前值可以通过读取/proc/sys/fs/file-max文件得到

[root@dhcp-128-93 proc]# cat /proc/sys/fs/file-max 
370753

你可以对通过修改此文件,来修改linux的这个参数。

======================

/proc目录中一数字命名的子目录用于提供正在运行的程序的信息。

利用pe -ef | grep firefox查看firefox的进程号

可以在/proc/firefox进程号 文件中查看进程的执行情况

[root@dhcp-128-93 proc]# ls -l /proc/6669
total 0
dr-xr-xr-x.  2 lizhen lizhen 0 Jun 15 14:33 attr
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 autogroup
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 auxv
-r--r--r--.  1 lizhen lizhen 0 Jun 14 21:47 cgroup
--w-------.  1 lizhen lizhen 0 Jun 15 14:33 clear_refs
-r--r--r--.  1 lizhen lizhen 0 Jun 14 21:47 cmdline
-rw-r--r--.  1 lizhen lizhen 0 Jun 14 21:47 comm
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 coredump_filter
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 cpuset
lrwxrwxrwx.  1 lizhen lizhen 0 Jun 15 14:33 cwd -> /home/lizhen
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 environ
lrwxrwxrwx.  1 lizhen lizhen 0 Jun 14 21:47 exe -> /usr/lib64/firefox/firefox
dr-x------.  2 lizhen lizhen 0 Jun 14 21:47 fd
dr-x------.  2 lizhen lizhen 0 Jun 15 14:33 fdinfo
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 gid_map
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 io
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 latency
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 limits
-rw-r--r--.  1 lizhen lizhen 0 Jun 14 21:47 loginuid
dr-x------.  2 lizhen lizhen 0 Jun 15 14:33 map_files
-r--r--r--.  1 lizhen lizhen 0 Jun 14 21:47 maps
-rw-------.  1 lizhen lizhen 0 Jun 15 14:33 mem
-r--r--r--.  1 lizhen lizhen 0 Jun 14 21:47 mountinfo
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 mounts
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 mountstats
dr-xr-xr-x.  6 lizhen lizhen 0 Jun 15 14:33 net
dr-x--x--x.  2 lizhen lizhen 0 Jun 14 21:47 ns
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 numa_maps
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 oom_adj
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 oom_score
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 oom_score_adj
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 pagemap
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 personality
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 projid_map
lrwxrwxrwx.  1 lizhen lizhen 0 Jun 15 14:33 root -> /
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 sched
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 schedstat
-r--r--r--.  1 lizhen lizhen 0 Jun 14 21:47 sessionid
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 setgroups
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 smaps
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 stack
-r--r--r--.  1 lizhen lizhen 0 Jun 14 21:47 stat
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 statm
-r--r--r--.  1 lizhen lizhen 0 Jun 14 21:47 status
-r--------.  1 lizhen lizhen 0 Jun 15 14:33 syscall
dr-xr-xr-x. 58 lizhen lizhen 0 Jun 14 21:47 task
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 timers
-rw-r--r--.  1 lizhen lizhen 0 Jun 15 14:33 uid_map
-r--r--r--.  1 lizhen lizhen 0 Jun 15 14:33 wchan
[root@dhcp-128-93 proc]# 

 

推荐阅读