《linux程序设计学习笔记》之一---/proc文件系统

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

/proc目录中的文件会随系统的不同而不同,当linux版本中有更多的驱动程序和设施支持procfs文件系统时,该目录中就会包含更多的文件。在这里,我们只探讨一些常用的文件。

1./proc/cpuinfo给出的是cpu的详细信息,列举出一部分:

[aaa@localhost ~]$ cat /proc/cpuinfo 
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz
stepping : 9
microcode : 18
cpu MHz : 1696.170


2./proc/meminfo和/proc/version分别给出的是内存使用情况和内核版本信息:

[aaa@localhost ~]$ cat /proc/meminfo 
MemTotal:        1004136 kB
MemFree:           70376 kB
Buffers:           21992 kB
Cached:           104436 kB
SwapCached:        16036 kB
Active:           384936 kB
Inactive:         411480 kB
Active(anon):     331584 kB
Inactive(anon):   354476 kB
Active(file):      53352 kB
Inactive(file):    57004 kB
Unevictable:           0 kB


[aaa@localhost ~]$ cat /proc/version 
Linux version 2.6.32-642.el6.x86_64 (mockbuild@worker1.bsys.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Tue May 10 17:27:01 UTC 2016


3.我们还可以通过/proc/net/sockstat文件获得网络套接字的使用统计:

[aaa@localhost ~]$ cat /proc/net/sockstat
sockets: used 891
TCP: inuse 4 orphan 0 tw 0 alloc 8 mem 0
UDP: inuse 2 mem 1
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0


除此之外,/proc目录中的有些条目不仅可以被读取,而且可以被修改。例如系统中所有运行的程序同时能打开的文件总数是linux内核的一个参数。它的当前值可以通过/proc/sys/fs/file-max文件得到:

[aaa@localhost ~]$ cat /proc/sys/fs/file-max 
96280


对/proc文件进行写操作需要root用户的权限,在修改数据时需要特别小心,写入不适当的值可能会引发严重的问题,造成系统崩溃,或者数据丢失。

切换到root用户:

[root@localhost luo]# echo 90000 > /proc/sys/fs/file-max 
[root@localhost luo]# cat /proc/sys/fs/file-max 
90000


/proc中以数字命名的子目录用于提供正在运行的程序的信息    例如数字1代表init进程:

[root@localhost proc]# cd 1
[root@localhost 1]# ls
[root@localhost 1]# ls -l
total 0
dr-xr-xr-x 2 root root 0 Jun 15 18:20 attr
-rw-r--r-- 1 root root 0 Jun 15 18:20 autogroup
-r-------- 1 root root 0 Jun 15 18:20 auxv
-r--r--r-- 1 root root 0 Jun 15 18:20 cgroup
--w------- 1 root root 0 Jun 15 18:20 clear_refs
-r--r--r-- 1 root root 0 Jun 15 18:20 cmdline
-rw-r--r-- 1 root root 0 Jun 15 18:20 comm
-rw-r--r-- 1 root root 0 Jun 15 18:20 coredump_filter
-r--r--r-- 1 root root 0 Jun 15 18:20 cpuset
lrwxrwxrwx 1 root root 0 Jun 15 18:20 cwd -> /
-r-------- 1 root root 0 Jun 15 18:20 environ
lrwxrwxrwx 1 root root 0 Jun 15 18:20 exe -> /sbin/init
dr-x------ 2 root root 0 Jun 15 18:20 fd
dr-x------ 2 root root 0 Jun 15 18:20 fdinfo
-r-------- 1 root root 0 Jun 15 18:20 io
-rw------- 1 root root 0 Jun 15 18:20 limits
-rw-r--r-- 1 root root 0 Jun 15 18:20 loginuid
-r--r--r-- 1 root root 0 Jun 15 18:20 maps
-rw------- 1 root root 0 Jun 15 18:20 mem
-r--r--r-- 1 root root 0 Jun 15 18:20 mountinfo
-r--r--r-- 1 root root 0 Jun 15 18:20 mounts
-r-------- 1 root root 0 Jun 15 18:20 mountstats
dr-xr-xr-x 6 root root 0 Jun 15 18:20 net
dr-x--x--x 2 root root 0 Jun 15 18:20 ns
-r--r--r-- 1 root root 0 Jun 15 18:20 numa_maps
-rw-r--r-- 1 root root 0 Jun 15 18:20 oom_adj
-r--r--r-- 1 root root 0 Jun 15 18:20 oom_score
-rw-r--r-- 1 root root 0 Jun 15 18:20 oom_score_adj
-r--r--r-- 1 root root 0 Jun 15 18:20 pagemap
-r--r--r-- 1 root root 0 Jun 15 18:20 personality
lrwxrwxrwx 1 root root 0 Jun 15 18:20 root -> /
-rw-r--r-- 1 root root 0 Jun 15 18:20 sched
-r--r--r-- 1 root root 0 Jun 15 18:20 schedstat
-r--r--r-- 1 root root 0 Jun 15 18:20 sessionid
-r--r--r-- 1 root root 0 Jun 15 18:20 smaps
-r--r--r-- 1 root root 0 Jun 15 18:20 stack
-r--r--r-- 1 root root 0 Jun 15 18:20 stat
-r--r--r-- 1 root root 0 Jun 15 18:20 statm
-r--r--r-- 1 root root 0 Jun 15 18:20 status
-r--r--r-- 1 root root 0 Jun 15 18:20 syscall
dr-xr-xr-x 3 root root 0 Jun 15 18:20 task
-r--r--r-- 1 root root 0 Jun 15 18:20 wchan

每个进程的proc目录内容都几乎由这些组成,来看一看其中的一些相关信息:

[root@localhost 1]# od -c cmdline 
0000000   /   s   b   i   n   /   i   n   i   t  \0
0000013

由此,我们可以知道该进程从/sbin/init 程序启动;

[root@localhost 1]# cat environ 
HOME=/TERM=linuxPATH=/sbin:/bin:/usr/sbin:/usr/bin

environ告诉我们该程序的运行环境

[root@localhost 1]# ls fd
0  1  2  3  4  5  6  7  8  9

fd目录下是该进程正在使用的打开的文件描述的信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值