全面了解Linux下Proc文件系统.docx

上传人:b****7 文档编号:9067371 上传时间:2023-02-03 格式:DOCX 页数:14 大小:22.63KB
下载 相关 举报
全面了解Linux下Proc文件系统.docx_第1页
第1页 / 共14页
全面了解Linux下Proc文件系统.docx_第2页
第2页 / 共14页
全面了解Linux下Proc文件系统.docx_第3页
第3页 / 共14页
全面了解Linux下Proc文件系统.docx_第4页
第4页 / 共14页
全面了解Linux下Proc文件系统.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

全面了解Linux下Proc文件系统.docx

《全面了解Linux下Proc文件系统.docx》由会员分享,可在线阅读,更多相关《全面了解Linux下Proc文件系统.docx(14页珍藏版)》请在冰豆网上搜索。

全面了解Linux下Proc文件系统.docx

全面了解Linux下Proc文件系统

全面了解Linux下Proc文件系统

Proc是一个虚拟文件系统,在Linux系统中它被挂载于/proc目录之上。

Proc有多个功能,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有用的功能,也是Linux变得更加特别的功能就是以文本流的形式来访问进程信息。

很Linux命令(比如ps、toPpstree等)都需要使用这个文件系统的信息。

本文就是向用户介绍一些访问这些信息的方法。

需要说明的是,本文所述的内容并不一定适用所有内核版本,有部分操作只适用于2.6内核。

bus总线信息(只读)

    drivers驱动信息(只读)

    fs文件系统特别信息(只读)

    ideIDE接口信息(只读)

    irqIRQ信息(只读)

    net网络子系统信息(只读)

    scsiSCSI系统信息(只读)

    sysvipcIPC子系统信息(只读)

    ttytty子系统信息(只读)

    sys系统内核可调参数(可调)  

一、进程信息

在/proc文件系统中,每一个进程都有一个相应的文件。

下面是/proc目录下的一些重要文件:

/proc/pid/cmdline包含了用于开始进程的命令;

/proc/pid/cwd包含了当前进程工作目录的一个链接;

/proc/pid/environ包含了可用进程环境变量的列表;

/proc/pid/exe包含了正在进程中运行的程序链接;

/proc/pid/fd/这个目录包含了进程打开的每一个文件的链接;

/proc/pid/mem包含了进程在内存中的内容;

/proc/pid/stat包含了进程的状态信息;

/proc/pid/statm包含了进程的内存使用信息。

下面是一些获取进程信息的例子:

◆假设现在要查看是否所有的进程都会做存储器清除工作。

在/proc/pid/stat文件中的每一个进程标识(第8个属性)提供了有关进程的很多“个人”信息。

这个信息可以对每一个进程标识进行。

0x00000002Processbeingcreated

0x00000004Exiting

0x00000008Dead

0x00000040Processusing

superuserprivflage

0x00000200Processdumpingcore

0x00000400Prooessreceivedsomesignal

0x00000800Processallocatingmemory

0x00001000Killedduetoout-of--memorycondition

笔者从/usr/src/linux/include/linux/sched.h中提取了这些信息。

◆/proc/pid/fd/目录提供了有关打开文件的信息。

要查看被进程使用的输入文件,使用以下命令:

#ls–l/proc/pid/fd/0

◆查看被进程使用socket,使用以下命令:

#ls–l/proc/pid/fd|sed–n`/socket/{s/.*\[//;s/\]//p}`

有关这些socket的信息可以使用以下命令获取:

#netstat--ae

◆要将命令行参数传递给任意进程,使用以下命令:

~~cat/proc/pid/cmdline

◆要获取某一进程父进程的ID号,使用以下命令:

#grepPPid/proc/pid/status

二、普通的系统信息

Proc包含了很多系统信息,这其中包括CPU负载、文件系统和网络配置。

下面是一些通过Proc查看和更改系统的例子:

◆获取可用系统内存的空间:

#grepFree/proc/meminfo

◆自从系统最后一次启动后的系统统计可以从/proc/stat文件中获取:

#grepprocesses/proc/stat

◆获知第1、5和15分钟系统负载的平均值:

#awk`{print“1min:

\t”$1“\n5min:

\t”$2“\n15min:

\t”$3}`/proc/loadavg

◆/proc/partitions可用于获取系统的分区信息。

◆/proc/net和/proc/sys/net可用于查看和更改重要的网络信息。

比如,禁用ping命令,可以以root身份运行以下命令:

#echo1>/proc/sys/net/ipv4/icmp_echo_ignore_all

如果要启用IP转发/IP伪装,使用以下命令:

#echo1>/proc/sys/net/ipv4/ip_forward

◆已经挂载的文件系统信息可以从/proc/mounts中检索。

◆要改变正在使用的主机名,使用以下命令:

#echowww.abc.corn>/proc/sys/kernel/hostname

◆要获取CPU信息,使用以下命令:

#cat/proc/cpuinfo

◆要获知swap空间的使用情况,使用以下命令:

#cat/proc/swaps

◆获取系统的正常运行时间:

#cat/proc/uptime

◆列出由NFS共享的文件系统:

#cat/proc/fs/nfsd/exports

三、相关内核的信息

这是一个非常宽泛的主题,这里只介绍其中一小部分内容:

◆从正在运行的内核中获知内核的版本:

#cat/proc/version

◆/proc/kmsg文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用。

◆/proc/kcore文件提供了以内核文件格式形式访问系统物理内存,并且可以被gdb用于检查任意内核数据结构的当前状态。

如果装了源码,那么可以通过查看/usr/src/linux/Documentation/filesystems/proc.txt文件来获取更多的信息。

从中可以看出来,Proc是一个非常不错的获取系统信息渠道。

如果利用得好,则它对Linux系统的维护和管理能提供非常大的帮助

 

四、/proc目录

proc/scsi

/proc/scsi/scsi

作为系统管理员,需要了解的最有用内容是,在有热交换驱动器情况下,如何不重启系统就可以添加更多磁盘空间。

假使不使用/proc,您可以插入驱动器,但为了使系统识别新磁盘,必须随即重新引导系统。

这里,可以用以下命令来使系统识别新的驱动器:

echo"scsiadd-single-devicewxyz">/proc/scsi/scsi

为使该命令正常运行,必须指定正确的参数值w、x、y和z,如下所示:

w是主机适配器标识,第一个适配器为零(0)

x是主机适配器上的SCSI通道,第一个通道为零(0)

y是设备的SCSI标识

z是LUN号,第一个LUN为零(0)

一旦将磁盘添加到系统中之后,可以挂装任何先前已格式化的文件系统,也可以开始对它进行格式化等。

例如,如果不确定磁盘是什么设备,或者想检查任何先前已有的分区,则可以用如fdisk-l这样的命令来向您报告这方面的信息。

相反的,在不重新引导系统的情况下将设备从系统中除去的命令是:

echo"scsiremove-single-devicewxyz">/proc/scsi/scsi

在输入这条命令并将热交换SCSI磁盘从系统中除去之前,请确保首先卸下已从该磁盘安装的任何文件系统。

/proc/sys/fs/

/proc/sys/fs/file-max

该文件指定了可以分配的文件句柄的最大数目。

如果用户得到的错误消息声明由于打开文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。

可将这个值设置成有任意多个文件,并且能通过将一个新数字值写入该文件来更改该值。

缺省设置:

4096

/proc/sys/fs/file-nr

该文件与file-max相关,它有三个值:

已分配文件句柄的数目

已使用文件句柄的数目

文件句柄的最大数目

该文件是只读的,仅用于显示信息。

/proc/sys/fs/inode-*

任何以名称“inode”开头的文件所执行的操作与上面那些以名称“file”开头的文件所执行的操作一样,但所执行的操作与索引节点有关,而与文件句柄无关。

/proc/sys/fs/overflowuid和/proc/sys/fs/overflowgid

这两个文件分别保存那些支持16位用户标识和组标识的任何文件系统的用户标识(UID)和组标识(GID)。

可以更改这些值,但如果您确实觉得需要这样做,那么您可能会发现更改组和密码文件项更容易些。

缺省设置:

65534

/proc/sys/fs/super-max

该文件指定超级块处理程序的最大数目。

挂装的任何文件系统需要使用超级块,所以如果挂装了大量文件系统,则可能会用尽超级块处理程序。

缺省设置:

256

/proc/sys/fs/super-nr

该文件显示当前已分配超级块的数目。

该文件是只读的,仅用于显示信息。

/proc/sys/kernel

/proc/sys/kernel/acct

该文件有三个可配置值,根据包含日志的文件系统上可用空间的数量(以百分比表示),这些值控制何时开始进行进程记帐:

如果可用空间低于这个百分比值,则停止进程记帐

如果可用空间高于这个百分比值,则开始进程记帐

检查上面两个值的频率(以秒为单位)

要更改这个文件的某个值,应该回送用空格分隔开的一串数字。

缺省设置:

2430

如果包含日志的文件系统上只有少于2%的可用空间,则这些值会使记帐停止,如果有4%或更多可用空间,则再次启动记帐。

每30秒做一次检查。

/proc/sys/kernel/ctrl-alt-del

该文件有一个二进制值,该值控制系统在接收到ctrl+alt+delete按键组合时如何反应。

这两个值表示:

零(0)值表示捕获ctrl+alt+delete,并将其送至init程序。

这将允许系统可以完美地关闭和重启,就好象您输入shutdown命令一样。

(1)值表示不捕获ctrl+alt+delete,将执行非干净的关闭,就好象直接关闭电源一样。

缺省设置:

0

/proc/sys/kernel/domainname

该文件允许您配置网络域名。

它没有缺省值,也许已经设置了域名,也许没有设置。

/proc/sys/kernel/hostname

该文件允许您配置网络主机名。

它没有缺省值,也许已经设置了主机名,也许没有设置。

/proc/sys/kernel/msgmax

该文件指定了从一个进程发送到另一个进程的消息的最大长度。

进程间的消息传递是在内核的内存中进行,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。

缺省设置:

8192

/proc/sys/kernel/msgmnb

该文件指定在一个消息队列中最大的字节数。

缺省设置:

16384

/proc/sys/kernel/msgmni

该文件指定消息队列标识的最大数目。

缺省设置:

16

/proc/sys/kernel/panic

该文件表示如果发生“内核严重错误(kernelpanic)”,则内核在重新引导之前等待的时间(以秒为单位)。

零(0)秒设置在发生内核严重错误时将禁止重新引导。

缺省设置:

0

/proc/sys/kernel/printk

该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。

关于不同日志级别的更多信息,请阅读syslog

(2)联机帮助页。

该文件的四个值为:

控制台日志级别:

优先级高于该值的消息将被打印至控制台

缺省的消息日志级别:

将用该优先级来打印没有优先级的消息

最低的控制台日志级别:

控制台日志级别可被设置的最小值(最高优先级)

缺省的控制台日志级别:

控制台日志级别的缺省值

缺省设置:

6417

/proc/sys/kernel/shmall

该文件是在任何给定时刻系统上可以使用的共享内存的总量(以字节为单位)。

缺省设置:

2097152

/proc/sys/kernel/shmax

该文件指定内核所允许的最大共享内存段的大小(以字节为单位)。

缺省设置:

33554432

/proc/sys/kernel/shmmni

该文件表示用于整个系统共享内存段的最大数目。

缺省设置:

4096

/proc/sys/kernel/sysrq

如果该文件指定的值为非零,则激活SystemRequestKey。

缺省设置:

0

/proc/sys/kernel/threads-max

该文件指定内核所能使用的线程的最大数目。

缺省设置:

2048

/proc/sys/net

/proc/sys/net/core/message_burst

写新的警告消息所需的时间(以1/10秒为单位);在这个时间内所接收到的其它警告消息会被丢弃。

这用于防止某些企图用消息“淹没”您系统的人所使用的拒绝服务(DenialofService)攻击。

缺省设置:

50(5秒)

/proc/sys/net/core/message_cost

该文件存有与每个警告消息相关的成本值。

该值越大,越有可能忽略警告消息。

缺省设置:

5

/proc/sys/net/core/netdev_max_backlog

该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

缺省设置:

300

/proc/sys/net/core/optmem_max

该文件指定了每个套接字所允许的最大缓冲区的大小。

/proc/sys/net/core/rmem_default

该文件指定了接收套接字缓冲区大小的缺省值(以字节为单位)。

/proc/sys/net/core/rmem_max

该文件指定了接收套接字缓冲区大小的最大值(以字节为单位)。

/proc/sys/net/core/wmem_default

该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。

/proc/sys/net/core/wmem_max

该文件指定了发送套接字缓冲区大小的最大值(以字节为单位)。

/proc/sys/net/ipv4

所有IPv4和IPv6的参数都被记录在内核源代码文档中。

请参阅文件/usr/src/linux/Documentation/networking/ip-sysctl.txt。

/proc/sys/net/ipv6

同IPv4。

/proc/sys/vm

/proc/sys/vm/buffermem

该文件控制用于缓冲区内存的整个系统内存的数量(以百分比表示)。

它有三个值,通过把用空格相隔的一串数字写入该文件来设置这三个值。

用于缓冲区的内存的最低百分比

如果发生所剩系统内存不多,而且系统内存正在减少这种情况,系统将试图维护缓冲区内存的数量。

用于缓冲区的内存的最高百分比

缺省设置:

21060

/proc/sys/vm/freepages

该文件控制系统如何应对各种级别的可用内存。

它有三个值,通过把用空格相隔的一串数字写入该文件来设置这三个值。

如果系统中可用页面的数目达到了最低限制,则只允许内核分配一些内存。

如果系统中可用页面的数目低于这一限制,则内核将以较积极的方式启动交换,以释放内存,从而维持系统性能。

内核将试图保持这个数量的系统内存可用。

低于这个值将启动内核交换。

缺省设置:

5127681024

/proc/sys/vm/kswapd

该文件控制允许内核如何交换内存。

它有三个值,通过把用空格相隔的一串数字写入该文件来设置这三个值:

内核试图一次释放的最大页面数目。

如果想增加内存交换过程中的带宽,则需要增加该值。

内核在每次交换中试图释放页面的最少次数。

内核在一次交换中所写页面的数目。

这对系统性能影响最大。

这个值越大,交换的数据越多,花在磁盘寻道上的时间越少。

然而,这个值太大会因“淹没”请求队列而反过来影响系统性能。

缺省设置:

512328

/proc/sys/vm/pagecache

该文件与/proc/sys/vm/buffermem的工作内容一样,但它是针对文件的内存映射和一般高速缓存。

使内核设置具有持久性

这里提供了一个方便的实用程序,用于更改/proc/sys目录下的任何内核参数。

它使您可以更改运行中的内核(类似于上面用到的echo和重定向方法),但它还有一个在系统引导时执行的配置文件。

这使您可以更改运行中的内核,并将这些更改添加到配置文件,以便于在系统重新引导之后,这些更改仍然生效。

该实用程序称为sysctl,在sysctl(8)的联机帮助页中,对这个实用程序进行了完整的文档说明。

sysctl的配置文件是/etc/sysctl.conf,可以编辑该文件,并在sysctl.conf(8)下记录了该文件。

sysctl将/proc/sys下的文件视为可以更改的单个变量。

所以,以/proc/sys下的文件/proc/sys/fs/file-max为例,它表示系统中所允许的文件句柄的最大数目,这个文件被表示成fs.file-max。

这个示例揭示了sysctl表示法中的一些奇妙事情。

由于sysctl只能更改/proc/sys目录下的变量,并且人们始终认为变量是在这个目录下,因此省略了变量名的那一部分(/proc/sys)。

另一个要说明的更改是,将目录分隔符(正斜杠/)换成了英文中的句号(点.)。

将/proc/sys中的文件转换成sysctl中的变量有两个简单的规则:

去掉前面部分/proc/sys。

将文件名中的正斜杠变为点。

这两条规则使您能将/proc/sys中的任一文件名转换成sysctl中的任一变量名。

一般文件到变量的转换为:

/proc/sys/dir/file-->dir.file

dir1.dir2.file-->/proc/sys/dir1/dir2/file

可以使用命令sysctl-a查看所有可以更改的变量和其当前设置。

用sysctl还可以更改变量,它所做的工作与上面所用的echo方法完全一样。

其表示法为:

sysctl-wdir.file="value"

还是用file-max作为示例,使用下面两种方法中的一种将该值更改为16384:

sysctl-wfs.file-max="16384"

或者:

echo"16384">/proc/sys/fs/file-max

不要忘记sysctl不会将所做的更改添加到配置文件中;这要您用手工来完成。

如果您希望在重新引导之后,前面所做的更改仍然有效,则必须维护这个配置文件。

注:

不是所有的分发版都提供sysctl支持。

如果您的特定系统属于这种情况,则可以用上面所描述的echo和重定向方法,将这些命令添加到启动脚本中,这样系统每次引导时,都会执行它们。

用于设置系统的命令

在系统运行的同时更改其它非内核系统参数,而且在不重新引导系统的情况下使这些设置生效,这种做法是可能的。

在/etc/init.d目录中列出了包含这些参数的文件,它们主要按服务、守护程序和服务器来分类。

由于越来越多各方面的脚本可以罗列在这个目录下,所以这里不可能讨论所有各种配置。

不过,下面列举了一些示例,这些示例讨论了如何在不同的Linux分发版上操作/etc/init.d下的脚本。

这里的示例可能很有用,其中讨论了更改守护程序,然后在不重新引导系统的情形下重新装入配置:

更改Web服务器配置,然后重新装入Apache

除去不需要的inetd登录服务

操作网络设置

通过NFS导出新的文件系统

启动/停止防火墙

首先,常见的方法是,直接通过/etc/init.d中的脚本来操作系统服务。

这些脚本用参数来操作它们所控制的服务;可以通过输入脚本名但不带任何参数这种方法来查看有哪些有效的选项。

常见的参数有:

start:

启动已停止的服务

stop:

停止正在运行的服务

restart:

停止正在运行的服务,然后再重启该服务;它将启动已停止的服务

reload:

在不中断任何连接的情况下,重新装入服务配置

status:

报告服务处于运行状态,还是停止状态

例如,下面这条命令将在不终止任何已连接的用户会话的情形下,重新装入xinetd配置(如果您更改了/etc/xinetd.conf,那么这条命令很有用):

/etc/init.d/xinetdreload

RedHat提供了service这条命令,它可以为您操作服务。

service命令提供的功能与输入脚本名本身的功能一样。

它的语法如下所示:

servicescript-name[parameter]

例如:

servicexinetdreload

SuSE也提供名为rc的命令。

该命令类似于上面的service命令,但该命令与脚本名之间没有空格。

它的语法如下所示:

rc{script-name}parameter

例如:

rcapachestart

与更改内核参数类似,一旦重新引导系统,则对这些服务的更改将会丢失。

现在越来越多的分发版开始采用chkconfig命令,它管理在各种运行级别下(包括引导时)启动的服务。

在撰写本文时,chkconfig命令的语法会因Linux版本的不同而略有差异,不过如果输入不带任何参数的命令chkconfig,则会显示一个如何使用该命令的列表。

也可以通过chkconfig(8)的联机帮助页找到更多有关chkconfig的信息

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1