proc_processing - CSDN
精华内容
参与话题
  • linux 中/proc 详解

    万次阅读 2012-11-13 15:15:46
    Linux-proc   proc 文件系统   在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统。最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的...
    Linux-proc
        

    proc 文件系统
     
    在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统。最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告的内核使用,例如/proc/modules 有模块的列表/proc/meminfo 有内存使用的统计表。
     
      使用proc 文件系统的方法和使用设备驱动程序非常相似--创建一个/proc 文件需要的所有信息的结构,包括任何处理函数的指针(在我们的例子中只有一个,当某人试图从/proc 文件读时调用的那一个)。然后,init_module 在内核中登记该结构而cleanup_module 注销它。
     
      我们使用proc_register_dynamic(这是在2.0 版中的情况,在2.2 版中如果我们将节点设置为0系统将自动为我们做到) 的原因是我们不想预先决定我们的文件的节点数字,而是为防止冲突而由内核决定它。通常的文件系统存在于磁盘上而不是内存中(/proc 在内存中),在这中情况下,节点数是是指向文件的索引节点所在的磁盘位置的指针。节点包含文件的信息(例如文件的存取权限)和指向磁盘位置或文件数据可以被找到的几个位置的指针。
     
      因为当文件被打开或关闭的时候不能得到调用,所以在这个模块中没有地方放置MOD_INC_USE_COUNT 和MOD_DEC_USE_COUNT,并且,如果文件被打开随后模块被移除,我们没有办法避免后果。在下一章我们会看到一个艰难的但更灵活的可以处理/proc文件的实现方式,它也可以让我们防止那个问题。
     
    http://www.2cto.com/os/201202/119552.html
     
    Linux 内核提供了一种通过/proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的Linux 系统的/proc 文件系统的基本概念都是相同的,但本文只讨论基于intel x86 架构的Linux /proc 文件系统。
     
    _________________ _________________ _________________
     
    /proc --- 一个虚拟文件系统
     
    /proc 文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制(所以叫做/proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中(on the fly) 改变设置(通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件/proc/mounts (和mount 命令一样列出所有已经加载的文件系统),你会看到其中 一行是这样的:
     
    grep proc /proc/mounts
    /proc /proc proc rw 0 0
     
    /proc 由内核控制,没有承载/proc 的设备。因为/proc 主要存放由内核控制的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对/proc 进行一次'ls -l' 可以看到大部分文件都是0 字节大的;不过察看这些文件的时候,确实可以看到一些信息。这怎么可能?这是因为/proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层(VFS) 了。然而,直到当VFS 调用它,请求文件、目录的i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录。
     
    加载proc 文件系统
     
    如果系统中还没有加载proc 文件系统,可以通过如下命令加载proc 文件系统:
     
    mount -t proc proc /proc
    上述命令将成功加载你的proc 文件系统。更多细节请阅读mount 命令的man page。
     
    察看/proc 的文件
     
    /proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。大部分/proc 中的文件和目录提供系统物理环境最新的信息。尽管/proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more', 'less'或'cat'这样的程序来查看。当编辑程序试图打开一个虚拟文件时,这个文件就通过内核中的信息被凭空地(on the fly) 创建了。这是一些我从我的系统中得到的一些有趣结果:
     
    $ ls -l /proc/cpuinfo
    -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo
     
    $ file /proc/cpuinfo
    /proc/cpuinfo: empty
     
    $ cat /proc/cpuinfo
     
    processor : 0
    vendor_id : GenuineIntel
    cpu family : 6
    model : 8
    model name : Pentium III (Coppermine)
    stepping : 6
    cpu MHz : 1000.119
    cache size : 256 KB
    fdiv_bug : no
    hlt_bug : no
    sep_bug : no
    f00f_bug : no
    coma_bug : no
    fpu : yes
    fpu_exception : yes
    cpuid level : 2
    wp : yes
    flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    cmov pat pse36 mmx fxsr xmm
    bogomips : 1998.85
     
    processor : 3
    vendor_id : GenuineIntel
    cpu family : 6
    model : 8
    model name : Pentium III (Coppermine)
    stepping : 6
    cpu MHz : 1000.119
    cache size : 256 KB
    fdiv_bug : no
    hlt_bug : no
    sep_bug : no
    f00f_bug : no
    coma_bug : no
    fpu : yes
    fpu_exception : yes
    cpuid level : 2
    wp : yes
    flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    cmov pat pse36 mmx fxsr xmm
    bogomips : 1992.29
     
    这是一个从双CPU 的系统中得到的结果,上述大部分的信息十分清楚地给出了这个系统的有用的硬件信息。有些/proc 的文件是经过编码的,不同的工具可以被用来解释这些编码过的信息并输出成可读的形式。这样的工具包括:'top', 'ps', 'apm' 等。
     
    得到有用的系统/内核信息
     
    proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:
     
    * /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)
    * /proc/meminfo - 物理内存、交换空间等的信息
    * /proc/mounts - 已加载的文件系统的列表
    * /proc/devices - 可用设备的列表
    * /proc/filesystems - 被支持的文件系统
    * /proc/modules - 已加载的模块
    * /proc/version - 内核版本
    * /proc/cmdline - 系统启动时输入的内核命令行参数
     
    proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对/proc 的每一个文件都'more'一下或读参考文献[1]获取更多的有关/proc 目录中的文件的信息。我建议使用'more'而不是'cat',除非你知道这个文件很小,因为有些文件(比如kcore) 可能会非常长。
     
    有关运行中的进程的信息
     
    /proc 文件系统可以用于获取运行中的进程的信息。在/proc 中有一些编号的子目录。每个编号的目录对应一个进程id (PID)。这样,每一个运行中的进程/proc 中都有一个用它的PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。让我们试着查找一个运行中的进程。
     
    $ ps -aef | grep mozilla
    root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla
     
    上述命令显示有一个正在运行的mozilla 进程的PID 是32558。相对应的,/proc 中应该有一个名叫32558 的目录
     
    $ ls -l /proc/32558
    total 0
    -r--r--r-- 1 root root 0 Dec 25 22:59 cmdline
    -r--r--r-- 1 root root 0 Dec 25 22:59 cpu
    lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/
    -r-------- 1 root root 0 Dec 25 22:59 environ
    lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*
    dr-x------ 2 root root 0 Dec 25 22:59 fd/
    -r--r--r-- 1 root root 0 Dec 25 22:59 maps
    -rw------- 1 root root 0 Dec 25 22:59 mem
    -r--r--r-- 1 root root 0 Dec 25 22:59 mounts
    lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> //
    -r--r--r-- 1 root root 0 Dec 25 22:59 stat
    -r--r--r-- 1 root root 0 Dec 25 22:59 statm
    -r--r--r-- 1 root root 0 Dec 25 22:59 status
     
    文件"cmdline" 包含启动进程时调用的命令行。"envir" 进程的环境变两。"status" 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"。每个进程的目录都有几个符号链接,"cwd"是指向进程当前工作目录的符号链接,"exe"指向运行的进程的可执行程序,"root"指向被这个进程看作是根目录的目录(通常是"/")。目录"fd"包含指向进程使用的文件描述符的链接。"cpu"仅在运行SMP 内核时出现,里面是按CPU 划分的进程时间。
     
    /proc/self 是一个有趣的子目录,它使得程序可以方便地使用/proc 查找本进程地信息。/proc/self 是一个链接到/proc 中访问/proc 的进程所对应的PID 的目录的符号链接。
     
    通过/proc 与内核交互
     
    上面讨论的大部分/proc 的文件是只读的。而实际上/proc 文件系统通过/proc 中可读写的文件提供了对内核的交互机制。写这些文件可以改变内核的状态,因而要慎重改动这些文件。/proc/sys 目录存放所有可读写的文件的目录,可以被用于改变内核行为。
     
    /proc/sys/kernel - 这个目录包含反通用内核行为的信息。/proc/sys/kernel/{domainname, hostname} 存放着机器/网络的域名和主机名。这些文件可以用于修改这些名字。
     
    $ hostname
    machinename.domainname.com
     
    $ cat /proc/sys/kernel/domainname
    domainname.com
     
    $ cat /proc/sys/kernel/hostname
    machinename
     
    $ echo "new-machinename" > /proc/sys/kernel/hostname
     
    $ hostname
    new-machinename.domainname.com
     
    这样,通过修改/proc 文件系统中的文件,我们可以修改主机名。很多其他可配置的文件存在于/proc/sys/kernel/。这里不可能列出所有这些文件,读者可以自己去这个目录查看以得到更多细节信息。
    另一个可配置的目录是/proc/sys/net。这个目录中的文件可以用于修改机器/网络的网络属性。比如,简单修改一个文件,你可以在网络上瘾藏匿的计算机。
     
    $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
     
    这将在网络上瘾藏你的机器,因为它不响应icmp_echo。主机将不会响应其他主机发出的ping 查询。
     
    $ ping machinename.domainname.com
    no answer from machinename.domainname.com
     
    要改回缺省设置,只要
     
    $ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
     
    /proc/sys 下还有许多其它可以用于改变内核属性。读者可以通过参考文献[1], [2] 获取更多信息。
     
    结论
     
    /proc 文件系统提供了一个基于文件的Linux 内部接口。它可以用于确定系统的各种不同设备和进程的状态。对他们进行配置。因而,理解和应用有关这个文件系统的知识是理解你的Linux 系统的关键。
     
    原文:http://www.sudu.cn/info/html/edu/20070101/292381.html
     
    什么是proc文件系统
    proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。它的目录结构如下:
    目录名称 目录内容
    apm 高级电源管理信息
    cmdline 内核命令行
    Cpuinfo 关于Cpu信息
    Devices 可以用到的设备(块设备/字符设备)
    Dma 使用的DMA通道
    Filesystems 支持的文件系统
    Interrupts 中断的使用
    Ioports I/O端口的使用
    Kcore 内核核心印象
    Kmsg 内核消息
    Ksyms 内核符号表
    Loadavg 负载均衡
    Locks 内核锁
    Meminfo 内存信息
    Misc 杂项
    Modules 加载模块列表
    Mounts 加载的文件系统
    Partitions 系统识别的分区表
    Rtc 实时时钟
    Slabinfo Slab池信息
    Stat 全面统计状态表
    Swaps 对换空间的利用情况
    Version 内核版本
    Uptime 系统正常运行时间
    并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数(见下一部分),而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
    除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。Proc文件系统的名字就是由之而起。进程目录的结构如下:
    目录名称 目录内容
    Cmdline 命令行参数
    Environ 环境变量值
    Fd 一个包含所有文件描述符的目录
    Mem 进程的内存被利用情况
    Stat 进程状态
    Status 进程当前状态,以可读的方式显示出来
    Cwd 当前工作目录的链接
    Exe 指向该进程的执行命令文件
    Maps 内存映象
    Statm 进程内存状态信息
    Root 链接此进程的root目录
    用户如果要查看系统信息,可以用cat命令。例如:
    # cat /proc/interrupts
    CPU0
    0: 8728810 XT-PIC timer
    1: 8Array5 XT-PIC keyboard
    2: 0 XT-PIC cascade
    3: 5316Array5 XT-PIC aha152x
    4: 2014133 XT-PIC serial
    5: 44401 XT-PIC pcnet_cs
    8: 2 XT-PIC rtc
    11: 8 XT-PIC i82365
    12: 182Array18 XT-PIC Mouse
    13: 1 XT-PIC fpu PS/2
    14: 1232265 XT-PIC ide0
    15: 7 XT-PIC ide1
    NMI: 0
    用户还可以实现修改内核参数。在/proc文件系统中有一个有趣的目录:/proc/sys。它不仅提供了内核信息,而且可以通过它修改内核参数,来优化你的系统。但是你必须很小心,因为可能会造成系统崩溃。最好是先找一台无关紧要的机子,调试成功后再应用到你的系统上。
    要改变内核的参数,只要用vi编辑或echo参数重定向到文件中即可。下面有一个例子:
    # cat /proc/sys/fs/file-max
    40Array6
    # echo 81Array2 > /proc/sys/fs/file-max
    # cat /proc/sys/fs/file-max
    81Array2
    如果你优化了参数,则可以把它们写成添加到文件rc.local中,使它在系统启动时自动完成修改。
    /proc文件系统中网络参数
    /proc/sys/kernel
    内核共享内存限制,默认最小为4M.两个参数可以改成一样.加大.
    /proc/sys/kernel/shmall 40Array6
    /proc/sys/kernel/shmmax 33554432
     
    /proc/sys/net/ipv4/
    该目录包含的是和tcp/ip协议相关的各种参数,下面我们就对这些网络参数加以详细的说明。
    ip_forward 参数类型:BOOLEAN
    0 - 关闭(默认值)
    not 0 - 打开ip转发
    在网络本地接口之间转发数据报。该参数非常特殊,对该参数的修改将导致其它所有相关配置参数恢复其默认值(对于主机参阅RFC1122,对于路由器参见RFC1812)
    /proc/sys/net/ipv4/ip_conntrack_max 65440 (默认)
    ip_default_ttl 参数类型:INTEGER
    默认值为64 。表示IP数据报的Time To Live值。
    ip_no_pmtu_disc 参数类型:BOOLEAN
    关闭路径MTU探测,默认值为FALSE
    ipfrag_high_thresh 参数类型:整型
    用来组装分段的IP包的最大内存量。当ipfrag_high_thresh数量的内存被分配来用来组装IP包,则IP分片处理器将丢弃数据报直到ipfrag_low_thresh数量的内存被用来组装IP包。
    ipfrag_low_thresh 参数类型:整型
    参见ipfrag_high_thresh。
    ipfrag_time 参数类型:整型
    保存一个IP分片在内存中的时间。
    inet_peer_threshold 参数类型:整型
    INET对端存储器某个合适值,当超过该阀值条目将被丢弃。该阀值同样决定生存时间以及废物收集通过的时间间隔。条目越多?存活期越低?GC 间隔越短
    inet_peer_minttl 参数类型:整型
    条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低存活期必须保证缓冲池容积是否少于inet_peer_threshold。该值以jiffies为单位测量。
    inet_peer_maxttl 参数类型:整型
    条目的最大存活期。在此期限到达之后?如果缓冲池没有耗尽压力的话(例如?缓冲池中的条目数目非常少)?不使用的条目将会超时。该值以jiffies为单位测量。
    inet_peer_gc_mintime 参数类型:整型
    废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。 该值以jiffies为单位测量。
    inet_peer_gc_maxtime 参数类型:整型
    废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。 该值以jiffies为单位测量。
    tcp_syn_retries 参数类型:整型
    对于一个新建连接,内核要发送多少个SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右。
    tcp_synack_retries 参数类型:整型
    对于远端的连接请求SYN,内核会发送SYN +ACK数据报,以确认收到上一个SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的SYN+ACK 数目。
    tcp_keepalive_time 参数类型:整型
    当keepalive打开的情况下,TCP发送keepalive消息的频率,默认值是2个小时。
    tcp_keepalive_probes 参数类型:整型
    TCP发送keepalive探测以确定该连接已经断开的次数,默认值是Array。
    tcp_keepalive_interval 参数类型:整型
    探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。
    tcp_retries1 参数类型:整型
    当出现可疑情况而必须向网络层报告这个可疑状况之前?需要进行多少次重试。最低的RFC 数值是3 ?这也是默认值?根据RTO的值大约在3秒- 8分钟之间。
    tcp_retries2 参数类型:整型
    在丢弃激活的TCP连接之前?需要进行多少次重试。RFC1122规定,该值必须大于100秒。默认值为15,根据RTO的值来决定,相当于13-30分钟,
    tcp_orphan_retries 参数类型:整型
    在近端丢弃TCP连接之前?要进行多少次重试。默认值是7 个?相当于50秒- 16分钟?视RTO 而定。如果您的系统是负载很大的web服务器?那么也许需要降低该值?这类sockets 可能会耗费大量的资源。另外参的考tcp_max_orphans 。
    tcp_fin_timeout 参数类型:整型
    对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为60 秒。过去在2.2版本的内核中是180 秒。您可以设置该值?但需要注意?如果您的机器为负载很重的web服务器?您可能要冒内存被大量无效数据报填满的风险?FIN-WAIT-2 sockets 的危险性低于FIN-WAIT-1 ?因为它们最多只吃1.5K 的内存?但是它们存在时间更长。另外参考tcp_max_orphans。
    tcp_max_tw_buckets 参数类型:整型
    系统在同时所处理的最大timewait sockets 数目。如果超过此数的话?time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制?纯粹为了抵御那些简单的DoS 攻击?千万不要人为的降低这个限制?不过?如果网络条件需要比默认值更多?则可以提高它(或许还要增加内存)。
    tcp_tw_recycle 参数类型:布尔
    打开快速TIME-WAIT sockets 回收。默认值是1。除非得到技术专家的建议或要求?请不要随意修改这个值。
    tcp_max_orphans 参数类型:整型
    系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量?那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制?纯粹为了抵御那些简单的DoS 攻击?千万不要依赖这个或是人为的降低这个限制
    tcp_abort_on_overflow 参数类型:布尔
    当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。
    tcp_syncookies 参数类型:整型
    只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击。默认值是false。
    注意:该选项千万不能用于那些没有收到攻击的高负载服务器,如果在日志中出现synflood消息,但是调查发现没有收到synflood攻击,而是合法用户的连接负载过高的原因,你应该调整其它参数来提高服务器性能。参考: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
    syncookie严重的违背TCP协议,不允许使用TCP扩展,可能对某些服务导致严重的性能影响(如SMTP转发)。
    tcp_stdurg 参数类型:整型
    使用TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的BSD解释,因此如果您在Linux 打开它?或会导致不能和它们正确沟通。默认值为为?FALSE
    tcp_max_syn_backlog 参数类型:整型
    对于那些依然还未获得客户端确认的连接请求?需要保存在队列中最大数目。对于超过128Mb 内存的系统?默认值是1024 ?低于128Mb 的则为128。如果服务器经常出现过载?可以尝试增加这个数字。警告?假如您将此值设为大于1024?最好修改include/net/tcp.h 里面的TCP_SYNQ_HSIZE ?以保持TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale  128Mb 32768-61000
    0)则系统将忽略所有发送给自己的ICMP ECHO请求或那些广播地址的请求。
    icmp_destunreach_rate - 整数
    icmp_paramprob_rate - 整数
    icmp_timeexceed_rate - 整数
    icmp_echoreply_rate - 整数(not enabled per default)
    限制发向特定目标的ICMP数据报的最大速率。0表示没有任何限制,否则表示jiffies数据单位中允许发送的个数。
    icmp_ignore_bogus_error_responses - 布尔类型
    某些路由器违背RFC1122标准,其对广播帧发送伪造的响应来应答。这种违背行为通常会被以告警的方式记录在系统日志中。如果该选项设置为True,内核不会记录这种警告信息。默认值为False。
    (1) Jiffie: 内核使用的内部时间单位,在i386系统上大小为1/100s,在Alpha中为1/1024S。在/usr/include/asm/param.h中的HZ定义有特定系统的值。
    conf/interface/*:
    conf/all/*是特定的,用来修改所有接口的设置,is special and changes the settings for all interfaces.
    Change special settings per interface.
    log_martians - 布尔类型
    记录带有不允许的地址的数据报到内核日志中。
    accept_redirects - 布尔类型
    收发接收ICMP重定向消息。对于主机来说默认为True,对于用作路由器时默认值为False。
    forwarding - 布尔类型
    在该接口打开转发功能
    mc_forwarding - 布尔类型
    是否进行多播路由。只有内核编译有CONFIG_MROUTE并且有路由服务程序在运行该参数才有效。
    proxy_arp - 布尔类型
    打开proxy arp功能。
    shared_media - 布尔类型
    发送(路由器)或接收(主机) RFC1620 共享媒体重定向。覆盖ip_secure_redirects的值。默认为True。
    secure_redirects - 布尔类型
    仅仅接收发给默认网关列表中网关的ICMP重定向消息,默认值是TRUE。
    send_redirects - 布尔类型
    如果是router,发送重定向消息,默认值是TRUE
    bootp_relay - 布尔类型
    接收源地址为0.b.c.d,目的地址不是本机的数据报。用来支持BOOTP转发服务进程,该进程将捕获并转发该包。默认为False,目前还没有实现。
    accept_source_route - 布尔类型
    接收带有SRR选项的数据报。对于主机来说默认为False,对于用作路由器时默认值为True。
    rp_filter 参数类型
    1 - 通过反向路径回溯进行源地址验证(在RFC1812中定义)。对于单穴主机和stub网络路由器推荐使用该选项。
    0 - 不通过反向路径回溯进行源地址验证。
    默认值为0。某些发布在启动时自动将其打开。
    /proc/sys/net/ipv4/netfilter
    ip_conntrack_buckets
    ip_conntrack_count
    ip_conntrack_generic_timeout
    ip_conntrack_icmp_timeout
    ip_conntrack_log_invalid
    ip_conntrack_max 65536(默认)
    ip_conntrack_tcp_be_liberal
    ip_conntrack_tcp_loose
    ip_conntrack_tcp_max_retrans
    ip_conntrack_tcp_timeout_close
    ip_conntrack_tcp_timeout_close_wait
    ip_conntrack_tcp_timeout_established 432000(单位为秒,5天)
    ip_conntrack_tcp_timeout_fin_wait
    ip_conntrack_tcp_timeout_last_ack
    ip_conntrack_tcp_timeout_max_retrans
    ip_conntrack_tcp_timeout_syn_recv
    ip_conntrack_tcp_timeout_syn_sent
    ip_conntrack_tcp_timeout_time_wait
    ip_conntrack_udp_timeout
    ip_conntrack_udp_timeout_stream
     
    #
     
    #
    #
     
     
    Linux Linux Linux Linux 中/proc /proc /proc /proc 目录下文件详解
    声明:可以自由转载本文, 但请务必保留本文的完整性。
    作者:张子坚
    email:zhangzijian@163.com
    说明:本文所涉及示例均在fedora core3 下得到。
    --------------------------------------------------------------------------------
    /proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的, 而是能够在整个系统范围的上下文
    中使用。可以使用的文件随系统配置的变化而变化。命令procinfo 能够显示基于其中某些文件的多种系统
    信息。
    以下详细描述/proc 下的文件:
    --------------------------------------------------------------------------------
    /proc/cmdline 文件
    这个文件给出了内核启动的命令行。它和用于进程的cmdline 项非常相似。
    示例:
    [root@localhost proc]# cat cmdline
    ro root=LABEL=/ rhgb quiet
    --------------------------------------------------------------------------------
    /proc/cpuinfo 文件
    这个文件提供了有关系统CPU 的多种信息。这些信息是从内核里对CPU 的测试代码中得到的。文件列出
    了CPU 的普通型号 (386,486,586,686 等 ), 以及能得到的更多特定信息 ( 制造商, 型号和版本 ) 。 文件还包含
    了以bogomips 表示的处理器速度, 而且如果检测到CPU 的多种特性或者bug, 文件还会包含相应的标志。这
    个文件的格式为:文件由多行构成, 每行包括一个域名称, 一个冒号和一个值。
    示例:
    [root@localhost proc]# cat cpuinfo
    processor : 0
    vendor_id : AuthenticAMD
    cpu family : 6
    model : 8
    model name : AMD Athlon(tm) XP 1800+
    stepping : 1
    cpu MHz : 1530.165
    cache size : 256 KB
    fdiv_bug : no
    hlt_bug : no
    f00f_bug : nocoma_bug : no
    fpu : yes
    fpu_exception : yes
    cpuid level : 1
    wp : yes
    flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext
    3dnowext 3dnow
    bogomips : 2998.27
    --------------------------------------------------------------------------------
    /proc/devices 文件
    这个文件列出字符和块设备的主设备号, 以及分配到这些设备号的设备名称。
    示例:
    [root@localhost /]# cat /proc/devices
    Character devices:
    1 mem
    4 /dev/vc/0
    4 tty
    4 ttyS
    5 /dev/tty
    5 /dev/console
    5 /dev/ptmx
    6 lp
    7 vcs
    10 misc
    13 input
    14 sound
    29 fb
    36 netlink
    116 alsa
    128 ptm
    136 pts
    180 usb
    Block devices:
    1 ramdisk
    2 fd
    3 ide0
    9 md
    22 ide1
    253 device-mapper
    254 mdp
    --------------------------------------------------------------------------------/proc/dma 文件
    这个文件列出由驱动程序保留的DMA 通道和保留它们的驱动程序名称 。casade 项供用于把次DMA 控制器
    从主控制器分出的DMA 行所使用; 这一行不能用于其它用途。
    示例:
    [root@localhost ~]# cat /proc/dma
    4: cascade
    --------------------------------------------------------------------------------
    /proc/filesystems 文件
    这个文件列出可供使用的文件系统类型, 一种类型一行 。 虽然它们通常是编入内核的文件系统类型, 但该文件
    还可以包含可加载的内核模块加入的其它文件系统类型。
    示例:
    [root@localhost proc]# cat /proc/filesystems
    nodev sysfs
    nodev rootfs
    nodev bdev
    nodev proc
    nodev sockfs
    nodev binfmt_misc
    nodev usbfs
    nodev usbdevfs
    nodev futexfs
    nodev tmpfs
    nodev pipefs
    nodev eventpollfs
    nodev devpts
    ext2
    nodev ramfs
    nodev hugetlbfs
    iso9660
    nodev mqueue
    nodev selinuxfs
    ext3
    nodev rpc_pipefs
    nodev autofs
    --------------------------------------------------------------------------------
    /proc/interrupts 文件
    这个文件的每一行都有一个保留的中断 。 每行中的域有 : 中断号, 本行中断的发生次数, 可能带有一个加号的
    域(SA_INTERRUPT 标志设置), 以及登记这个中断的驱动程序的名字。可以在安装新硬件前, 像查看
    /proc/dma 和/proc/ioports 一样用cat 命令手工查看手头的这个文件 。 这几个文件列出了当前投入使用的资源
    (但是不包括那些没有加载驱动程序的硬件所使用的资源 ) 。
    示例:
    [root@localhost SPECS]# cat /proc/interruptsCPU0
    0: 7039406 XT-PIC timer
    1: 6533 XT-PIC i8042
    2: 0 XT-PIC cascade
    3: 0 XT-PIC uhci_hcd
    5: 108 XT-PIC VIA8233, uhci_hcd
    8: 1 XT-PIC rtc
    9: 0 XT-PIC acpi
    10: 0 XT-PIC ehci_hcd
    11: 17412 XT-PIC uhci_hcd, eth0
    12: 140314 XT-PIC i8042
    14: 37897 XT-PIC ide0
    15: 60813 XT-PIC ide1
    NMI: 0
    ERR: 1
    --------------------------------------------------------------------------------
    /proc/ioports 文件
    这个文件列出了诸如磁盘驱动器, 以太网卡和声卡设备等多种设备驱动程序登记的许多I/O 端口范围。
    示例:
    [root@localhost SPECS]# cat /proc/ioports
    0000-001f : dma1
    0020-0021 : pic1
    0040-0043 : timer0
    0050-0053 : timer1
    0060-006f : keyboard
    0070-0077 : rtc
    0080-008f : dma page reg
    00a0-00a1 : pic2
    00c0-00df : dma2
    00f0-00ff : fpu
    0170-0177 : ide1
    01f0-01f7 : ide0
    0376-0376 : ide1
    0378-037a : parport0
    037b-037f : parport0
    03c0-03df : vga+
    03f6-03f6 : ide0
    03f8-03ff : serial
    0800-0803 : PM1a_EVT_BLK
    0804-0805 : PM1a_CNT_BLK
    0808-080b : PM_TMR
    0810-0815 : ACPI CPU throttle
    0820-0823 : GPE0_BLK0cf8-0cff : PCI conf1
    dc00-dcff : 0000:00:12.0
    dc00-dcff : via-rhine
    e000-e0ff : 0000:00:11.5
    e000-e0ff : VIA8233
    e400-e41f : 0000:00:10.0
    e400-e41f : uhci_hcd
    e800-e81f : 0000:00:10.1
    e800-e81f : uhci_hcd
    ec00-ec1f : 0000:00:10.2
    ec00-ec1f : uhci_hcd
    fc00-fc0f : 0000:00:11.1
    fc00-fc07 : ide0
    fc08-fc0f : ide1
    --------------------------------------------------------------------------------
    /proc/kcore 文件
    这个文件是系统的物理内存以core 文件格式保存的文件。例如,GDB 能用它考察内核的数据结构。它不是
    纯文本, 而是/proc 目录下为数不多的几个二进制格式的项之一。
    示例:
    暂无
    --------------------------------------------------------------------------------
    /proc/kmsg 文件
    这个文件用于检索用printk 生成的内核消息。任何时刻只能有一个具有超级用户权限的进程可以读取这个
    文件。也可以用系统调用syslog 检索这些消息。通常使用工具dmesg 或守护进程klogd 检索这些消息。
    示例:
    暂无
    --------------------------------------------------------------------------------
    /proc/ksyms 文件
    这个文件列出了已经登记的内核符号; 这些符号给出了变量或函数的地址 。 每行给出一个符号的地址, 符号名
    称以及登记这个符号的模块。程序ksyms,insmod 和kmod 使用这个文件。它还列出了正在运行的任务数,
    总任务数和最后分配的PID 。
    示例:
    暂无
    --------------------------------------------------------------------------------
    /proc/loadavg 文件
    这个文件给出以几个不同的时间间隔计算的系统平均负载, 这就如同uptime 命令显示的结果那样 。 前三个数
    字是平均负载 。 这是通过计算过去1 分钟,5 分钟,15 分钟里运行队列中的平均任务数得到的 。 随后是正在运行
    的任务数和总任务数。最后是上次使用的进程号。
    示例:[root@localhost ~]# cat /proc/loadavg
    0.11 0.16 0.14 3/126 3912
    --------------------------------------------------------------------------------
    /proc/locks 文件
    这个文件包含在打开的文件上的加锁信息。文件中的每一行描述了特定文件和文档上的加锁信息以及对文
    件施加的锁的类型。内核也可以需要时对文件施加强制性锁。
    示例:
    [root@localhost redhat]# cat /proc/locks
    1: POSIX ADVISORY READ 3822 03:0a:1067117 0 EOF
    2: POSIX ADVISORY READ 3822 03:0a:1067138 0 EOF
    3: POSIX ADVISORY WRITE 3326 03:0a:2326540 0 EOF
    4: POSIX ADVISORY WRITE 2639 03:0a:2966595 0 EOF
    5: FLOCK ADVISORY WRITE 2591 03:0a:2966586 0 EOF
    6: POSIX ADVISORY WRITE 2540 03:0a:2966578 0 EOF
    7: POSIX ADVISORY WRITE 2530 03:0a:2966579 0 EOF
    8: POSIX ADVISORY WRITE 2402 03:0a:2966563 0 EOF
    9: POSIX ADVISORY WRITE 2371 03:0a:2966561 0 EOF
    --------------------------------------------------------------------------------
    /proc/mdstat 文件
    这个文件包含了由md 设备驱动程序控制的RAID 设备信息。
    示例:
    [root@localhost ~]# cat /proc/mdstat
    Personalities :
    unused devices: <none>
    --------------------------------------------------------------------------------
    /proc/meminfo 文件
    这个文件给出了内存状态的信息 。 它显示出系统中空闲内存, 已用物理内存和交换内存的总量 。 它还显示出
    内核使用的共享内存和缓冲区总量。这些信息的格式和free 命令显示的结果类似。
    示例:
    [root@localhost ~]# cat /proc/meminfo
    MemTotal: 223812 kB
    MemFree: 3764 kB
    Buffers: 9148 kB
    Cached: 92112 kB
    SwapCached: 364 kB
    Active: 183640 kB
    Inactive: 17196 kB
    HighTotal: 0 kB
    HighFree: 0 kB
    LowTotal: 223812 kB
    LowFree: 3764 kBSwapTotal: 626524 kB
    SwapFree: 620328 kB
    Dirty: 12 kB
    Writeback: 0 kB
    Mapped: 142880 kB
    Slab: 12668 kB
    Committed_AS: 376732 kB
    PageTables: 2336 kB
    VmallocTotal: 3907576 kB
    VmallocUsed: 2968 kB
    VmallocChunk: 3904224 kB
    HugePages_Total: 0
    HugePages_Free: 0
    Hugepagesize: 4096 kB
    --------------------------------------------------------------------------------
    /proc/misc 文件
    这个文件报告用内核函数misc_register 登记的设备驱动程序。
    示例:
    [root@localhost ~]# cat /proc/misc
    63 device-mapper
    175 agpgart
    135 rtc
    --------------------------------------------------------------------------------
    /proc/modules 文件
    这个文件给出可加载内核模块的信息 。lsmod 程序用这些信息显示有关模块的名称, 大小, 使用数目方面的信
    息。
    示例:
    [root@localhost /]# cat /proc/modules
    md5 4033 1 - Live 0x10a7f000
    ipv6 232577 8 - Live 0x10b0c000
    parport_pc 24705 1 - Live 0x10a8b000
    lp 11565 0 - Live 0x10a7b000
    parport 41737 2 parport_pc,lp, Live 0x10a55000
    autofs4 24005 0 - Live 0x10a74000
    i2c_dev 10433 0 - Live 0x109d2000
    i2c_core 22081 1 i2c_dev, Live 0x10a6d000
    sunrpc 160421 1 - Live 0x10a9d000
    ipt_REJECT 6465 1 - Live 0x109da000
    ipt_state 1857 5 - Live 0x109eb000
    ip_conntrack 40693 1 ipt_state, Live 0x10a62000
    iptable_filter 2753 1 - Live 0x10896000
    ip_tables 16193 3 ipt_REJECT,ipt_state,iptable_filter, Live 0x109ed000dm_mod 54741 0 - Live 0x109f8000
    button 6481 0 - Live 0x10905000
    battery 8517 0 - Live 0x109d6000
    ac 4805 0 - Live 0x10908000
    uhci_hcd 31449 0 - Live 0x109dd000
    ehci_hcd 31557 0 - Live 0x10949000
    snd_via82xx 27237 2 - Live 0x10953000
    snd_ac97_codec 64401 1 snd_via82xx, Live 0x10912000
    snd_pcm_oss 47609 0 - Live 0x1093c000
    snd_mixer_oss 17217 2 snd_pcm_oss, Live 0x1090c000
    snd_pcm 97993 2 snd_via82xx,snd_pcm_oss, Live 0x10923000
    snd_timer 29765 1 snd_pcm, Live 0x108ec000
    snd_page_alloc 9673 2 snd_via82xx,snd_pcm, Live 0x108bd000
    gameport 4801 1 snd_via82xx, Live 0x108a6000
    snd_mpu401_uart 8769 1 snd_via82xx, Live 0x108b9000
    snd_rawmidi 26725 1 snd_mpu401_uart, Live 0x108e4000
    snd_seq_device 8137 1 snd_rawmidi, Live 0x1083b000
    snd 54053 11
    snd_via82xx,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,sn
    d_seq_device, Live 0x108f6000
    soundcore 9889 2 snd, Live 0x1089b000
    via_rhine 23497 0 - Live 0x1089f000
    mii 4673 1 via_rhine, Live 0x10893000
    floppy 58609 0 - Live 0x108a9000
    ext3 116809 1 - Live 0x10875000
    jbd 74969 1 ext3, Live 0x10861000
    lsmod 命令显示结果如下:
    [root@localhost /]# lsmod
    Module Size Used by
    md5 4033 1
    ipv6 232577 8
    parport_pc 24705 1
    lp 11565 0
    parport 41737 2 parport_pc,lp
    autofs4 24005 0
    i2c_dev 10433 0
    i2c_core 22081 1 i2c_dev
    sunrpc 160421 1
    ipt_REJECT 6465 1
    ipt_state 1857 5
    ip_conntrack 40693 1 ipt_state
    iptable_filter 2753 1ip_tables 16193 3 ipt_REJECT,ipt_state,iptable_filter
    dm_mod 54741 0
    button 6481 0
    battery 8517 0
    ac 4805 0
    uhci_hcd 31449 0
    ehci_hcd 31557 0
    snd_via82xx 27237 2
    snd_ac97_codec 64401 1 snd_via82xx
    snd_pcm_oss 47609 0
    snd_mixer_oss 17217 2 snd_pcm_oss
    snd_pcm 97993 2 snd_via82xx,snd_pcm_oss
    snd_timer 29765 1 snd_pcm
    snd_page_alloc 9673 2 snd_via82xx,snd_pcm
    gameport 4801 1 snd_via82xx
    snd_mpu401_uart 8769 1 snd_via82xx
    snd_rawmidi 26725 1 snd_mpu401_uart
    snd_seq_device 8137 1 snd_rawmidi
    snd 54053 11
    snd_via82xx,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,sn
    d_seq_device
    soundcore 9889 2 snd
    via_rhine 23497 0
    mii 4673 1 via_rhine
    floppy 58609 0
    ext3 116809 1
    jbd 74969 1 ext3
    --------------------------------------------------------------------------------
    /proc/mounts 文件
    这个文件以/etc/mtab 文件的格式给出当前系统所安装的文件系统信息。这个文件也能反映出任何手工安装
    从而在/etc/mtab 文件中没有包含的文件系统。
    示例:
    [root@localhost /]# cat /proc/mounts
    rootfs / rootfs rw 0 0
    /proc /proc proc rw,nodiratime 0 0
    none /dev tmpfs rw 0 0
    /dev/root / ext3 rw 0 0
    none /dev tmpfs rw 0 0
    none /selinux selinuxfs rw 0 0
    /proc /proc proc rw,nodiratime 0 0
    /proc/bus/usb /proc/bus/usb usbfs rw 0 0
    /sys /sys sysfs rw 0 0none /dev/pts devpts rw 0 0
    none /dev/shm tmpfs rw 0 0
    none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
    sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
    --------------------------------------------------------------------------------
    /proc/pci 文件
    这个文件给出PCI 设备的信息。用它可以方便地诊断PCI 问题。你可以从这个文件中检索到的信息包括诸
    如IDE 接口或USB 控制器这样的设备, 总线, 设备和功能编号, 设备延迟以及IRQ 编号。
    示例:
    [root@localhost /]# cat /proc/pci
    PCI devices found:
    Bus 0, device 0, function 0:
    Class 0600: PCI device 1106:3116 (rev 0).
    Master Capable. Latency=8.
    Prefetchable 32 bit memory at 0xe0000000 [0xe7ffffff].
    Bus 0, device 1, function 0:
    Class 0604: PCI device 1106:b091 (rev 0).
    Master Capable. No bursts. Min Gnt=12.
    Bus 0, device 16, function 2:
    Class 0c03: PCI device 1106:3038 (rev 12.
    IRQ 5.
    Master Capable. Latency=32.
    I/O at 0xec00 [0xec1f].
    Bus 0, device 16, function 1:
    Class 0c03: PCI device 1106:3038 (rev 12.
    IRQ 3.
    Master Capable. Latency=32.
    I/O at 0xe800 [0xe81f].
    Bus 0, device 16, function 0:
    Class 0c03: PCI device 1106:3038 (rev 12.
    IRQ 11.
    Master Capable. Latency=32.
    I/O at 0xe400 [0xe41f].
    Bus 0, device 16, function 3:
    Class 0c03: PCI device 1106:3104 (rev 130).
    IRQ 10.
    Master Capable. Latency=32.
    Non-prefetchable 32 bit memory at 0xdfffff00 [0xdfffffff].
    Bus 0, device 17, function 0:
    Class 0601: PCI device 1106:3177 (rev 0).
    Bus 0, device 17, function 1:Class 0101: PCI device 1106:0571 (rev 6).
    IRQ 255.
    Master Capable. Latency=32.
    I/O at 0xfc00 [0xfc0f].
    Bus 0, device 17, function 5:
    Class 0401: PCI device 1106:3059 (rev 80).
    IRQ 5.
    I/O at 0xe000 [0xe0ff].
    Bus 0, device 18, function 0:
    Class 0200: PCI device 1106:3065 (rev 116).
    IRQ 11.
    Master Capable. Latency=32. Min Gnt=3.Max Lat=8.
    I/O at 0xdc00 [0xdcff].
    Non-prefetchable 32 bit memory at 0xdffffe00 [0xdffffeff].
    Bus 1, device 0, function 0:
    Class 0300: PCI device 5333:8d04 (rev 0).
    IRQ 11.
    Master Capable. Latency=32. Min Gnt=4.Max Lat=255.
    Non-prefetchable 32 bit memory at 0xdfe80000 [0xdfefffff].
    Prefetchable 32 bit memory at 0xd0000000 [0xd7ffffff].
    --------------------------------------------------------------------------------
    /proc/stat 文件
    这个文件包含的信息有CPU 利用率, 磁盘, 内存页, 内存对换, 全部中断, 接触开关以及赏赐自举时间(自1970
    年1 月1 日起的秒数 ) 。
    示例:
    [root@localhost /]# cat /proc/stat
    cpu 31994 3898 7161 381600 15254 451 0
    cpu0 31994 3898 7161 381600 15254 451 0
    intr 4615930 4404290 3364 0 0 12 0 7 0 2 0 0 12618 112114 0 44142 39381
    ctxt 1310498
    btime 1148891913
    processes 4249
    procs_running 4
    procs_blocked 0
    --------------------------------------------------------------------------------
    /proc/uptime 文件
    这个文件给出自从上次系统自举以来的秒数, 以及其中有多少秒处于空闲 。 这主要供uptime 程序使用 。 比较
    这两个数字能够告诉你长期来看CPU 周期浪费的比例。
    示例:
    [root@localhost /]# cat /proc/uptime
    4477.04 4021.10--------------------------------------------------------------------------------
    /proc/version 文件
    这个文件只有一行内容, 说明正在运行的内核版本。可以用标准的编程方法进行分析获得所需的系统信息 。
    示例:
    [root@localhost /]# cat /proc/version
    Linux version 2.6.9-1.667 ( bhcompile@tweety.build.redhat.com ) (gcc version 3.4.2 20041017 (Red Hat
    3.4.2-6.fc3)) #1 Tue Nov 2 14:41:25 EST 2004
    --------------------------------------------------------------------------------
    /proc/net 子目录
    此目录下的文件描述或修改了联网代码的行为。可以通过使用 arp,netstat,route 和ipfwadm 命令设置或查询
    这些特殊文件中的许多文件。
    示例:
    [root@localhost /]# ls /proc/net
    anycast6 ip_conntrack mcfilter6 rt6_stats tcp
    arp ip_conntrack_expect netlink rt_acct tcp6
    dev ip_mr_cache netstat rt_cache udp
    dev_mcast ip_mr_vif packet snmp udp6
    dev_snmp6 ip_tables_matches psched snmp6 unix
    if_inet6 ip_tables_names raw sockstat wireless
    igmp ip_tables_targets raw6 sockstat6
    igmp6 ipv6_route route softnet_stat
    ip6_flowlabel mcfilter rpc stat
    --------------------------------------------------------------------------------
    以下摘要介绍此目录下文件的功能:
    arp
    转储每个网络接口的arp 表中dev 包的统计
    dev
    来自网络设备的统计
    dev_mcast
    列出二层(数据链路层)多播组
    igmp
    加入的IGMP 多播组
    netlink
    netlink 套接口的信息
    netstat
    网络流量的多种统计。第一行是信息头, 带有每个变量的名称。接下来的一行保存相应变量的值
    raw
    原始套接口的套接口表
    route
    静态路由表
    rpc
    包含RPC 信息的目录rt_cache
    路由缓冲
    snmp
    snmp agent 的ip/icmp/tcp/udp 协议统计; 各行交替给出字段名和值
    sockstat
    列出使用的tcp/udp/raw/pac/syc_cookies 的数量
    tcp
    TCP 连接的套接口
    udp
    UDP 连接的套接口表
    unix
    UNIX 域套接口的套接口表
    --------------------------------------------------------------------------------
    示例:[root@localhost /]# cat /proc/net/route
    Iface Destination Gateway Flags RefCnt Use Metric Mask MTU
    Window IRTT
    eth0 0035C2DA 00000000 0001 0 0 0 80FFFFF0
    eth0 0000FEA9 00000000 0001 0 0 0 0000FFF0
    eth0 00000000 0135C2DA 0003 0 0 0 00000000
    --------------------------------------------------------------------------------
    [root@localhost /]# cat /proc/net/tcp
    sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
    0: 00000000:8000 00000000:0000 0A 00000000:00000000 00:00000000 00000000 29 0 9525 1
    0dde7500 3000 0 0 2 -1
    1: 00000000:006F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 9484 1
    0dde79e0 3000 0 0 2 -1
    2: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 10049 1
    0a8e3a00 3000 0 0 2 -1
    3: 0100007F:14D7 00000000:0000 0A 00000000:00000000 00:00000000 00000000 99 0 9847 1
    0dde7020 3000 0 0 2 -1
    4: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 10286 1
    0a8e3520 3000 0 0 2 -1
    --------------------------------------------------------------------------------
    [root@localhost /]# cat /proc/net/arp
    IP address HW type Flags HW address Mask Device
    218.194.53.1 0x1 0x2 00:0D:BC:78:07:3F * eth0
    --------------------------------------------------------------------------------
    [root@localhost /]# cat /proc/net/udp
    sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
    0: 00000000:8000 00000000:0000 07 00000000:00000000 00:00000000 00000000 29 0 9520 2
    0b4ef7c0
    105: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 99 0 10284 20b4ef040
    111: 00000000:006F 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 9483 2
    0b4efcc0
    116: 00000000:02F4 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 9511 2
    0b4efa40
    119: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 10050 2
    0b4ef2c0
    --------------------------------------------------------------------------------
    /proc/scsi 子目录
    此目录下包含一个列出了所有检测到的SCSI 设备的文件, 并且为每种控制器驱动程序提供一个目录, 在这个
    目录下又为已安装的此种控制器的每个实例提供一个子目录。
    示例:
    由于本人的机器没有SCSI 设备, 顾暂时无法提供示例。
    --------------------------------------------------------------------------------
    /proc/sys 子目录
    在此目录下有许多子目录 。 此目录中的许多项都可以用来调整系统的性能 。 这个目录包含信息太多, 无法介
    绍全部。只在示例中展示目录下的一些文件。
    示例:[root@localhost /]# ls /proc/sys
    debug dev fs kernel net proc sunrpc vm
    --------------------------------------------------------------------------------
    [root@localhost ~]# ls /proc/sys/fs
    aio-max-nr dentry-state file-nr lease-break-time overflowgid
    aio-nr dir-notify-enable inode-nr leases-enable overflowuid
    binfmt_misc file-max inode-state mqueue quota
    --------------------------------------------------------------------------------
    [root@localhost ~]# ls /proc/sys/kernel
    acct hotplug panic sem
    cad_pid modprobe panic_on_oops shmall
    cap-bound msgmax pid_max shmmax
    core_pattern msgmnb print-fatal-signals shmmni
    core_uses_pid msgmni printk sysrq
    ctrl-alt-del ngroups_max printk_ratelimit tainted
    domainname osrelease printk_ratelimit_burst threads-max
    exec-shield ostype pty vdso
    exec-shield-randomize overflowgid random version
    hostname overflowuid real-root-dev
    --------------------------------------------------------------------------------
    [root@localhost ~]# ls /proc/sys/net
    core ethernet ipv4 ipv6 unix
    --------------------------------------------------------------------------------
    [root@localhost sys]# ls /proc/sys/vmblock_dump laptop_mode nr_pdflush_threads
    dirty_background_ratio legacy_va_layout overcommit_memory
    dirty_expire_centisecs lower_zone_protection overcommit_ratio
    dirty_ratio max_map_count page-cluster
    dirty_writeback_centisecs min_free_kbytes swappiness
    hugetlb_shm_group nr_hugepages vfs_cache_pressure
    --------------------------------------------------------------------------------
    [root@localhost sys]# ls /proc/sys/net/ipv4
    conf tcp_fack
    icmp_echo_ignore_all tcp_fin_timeout
    icmp_echo_ignore_broadcasts tcp_frto
    icmp_ignore_bogus_error_responses tcp_keepalive_intvl
    icmp_ratelimit tcp_keepalive_probes
    icmp_ratemask tcp_keepalive_time
    igmp_max_memberships tcp_low_latency
    igmp_max_msf tcp_max_orphans
    inet_peer_gc_maxtime tcp_max_syn_backlog
    inet_peer_gc_mintime tcp_max_tw_buckets
    inet_peer_maxttl tcp_mem
    inet_peer_minttl tcp_moderate_rcvbuf
    inet_peer_threshold tcp_no_metrics_save
    ip_autoconfig tcp_orphan_retries
    ip_conntrack_max tcp_reordering
    ip_default_ttl tcp_retrans_collapse
    ip_dynaddr tcp_retries1
    ip_forward tcp_retries2
    ipfrag_high_thresh tcp_rfc1337
    ipfrag_low_thresh tcp_rmem
    ipfrag_secret_interval tcp_sack
    ipfrag_time tcp_stdurg
    ip_local_port_range tcp_synack_retries
    ip_nonlocal_bind tcp_syncookies
    ip_no_pmtu_disc tcp_syn_retries
    neigh tcp_timestamps
    netfilter tcp_tso_win_divisor
    route tcp_tw_recycle
    tcp_abort_on_overflow tcp_tw_reuse
    tcp_adv_win_scale tcp_vegas_alpha
    tcp_app_win tcp_vegas_beta
    tcp_bic tcp_vegas_cong_avoid
    tcp_bic_fast_convergence tcp_vegas_gamma
    tcp_bic_low_window tcp_westwood
    tcp_dsack tcp_window_scalingtcp_ecn tcp_wmem
    --------------------------------------------------------------------------------
    [root@localhost sys]# cat /proc/sys/kernel/shmall
    2097152
    --------------------------------------------------------------------------------
    [root@localhost sys]# cat /proc/sys/kernel/osrelease
    2.6.9-1.667
    --------------------------------------------------------------------------------
    总结 :/proc 文件系统包含了大量的有关当前系统状态的信息 。proc 的手册页中也有对这些文件的解释文档 。
    把文件和分析这些文件的工具产生的输出进行比较能够更加清晰地了解这些文件

    展开全文
  • linux proc目录详解

    千次阅读 2019-03-19 08:58:29
    linux proc目录详解 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以...

    linux proc目录详解

    Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。 

    基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。 

    为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。 

    大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。 

    一、进程目录中的常见文件介绍 

    /proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。 

    [root@rhel5 ~]# ll /proc 
    total 0 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:08 1 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:08 10 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:08 11 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:08 1156 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:08 139 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:08 140 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:08 141 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:09 1417 
    dr-xr-xr-x  5 root      root              0 Feb  8 17:09 1418 

    上面列出的是/proc目录中一些进程相关的目录,每个目录中是当程本身相关信息的文件。下面是作者系统(RHEL5.3)上运行的一个PID为2674的进程saslauthd的相关文件,其中有些文件是每个进程都会具有的,后文会对这些常见文件做出说明。 

    [root@rhel5 ~]# ll /proc/2674 
    total 0 
    dr-xr-xr-x 2 root root 0 Feb  8 17:15 attr 
    -r-------- 1 root root 0 Feb  8 17:14 auxv 
    -r--r--r-- 1 root root 0 Feb  8 17:09 cmdline 
    -rw-r--r-- 1 root root 0 Feb  8 17:14 coredump_filter 
    -r--r--r-- 1 root root 0 Feb  8 17:14 cpuset 
    lrwxrwxrwx 1 root root 0 Feb  8 17:14 cwd -> /var/run/saslauthd 
    -r-------- 1 root root 0 Feb  8 17:14 environ 
    lrwxrwxrwx 1 root root 0 Feb  8 17:09 exe -> /usr/sbin/saslauthd 
    dr-x------ 2 root root 0 Feb  8 17:15 fd 
    -r-------- 1 root root 0 Feb  8 17:14 limits 
    -rw-r--r-- 1 root root 0 Feb  8 17:14 loginuid 
    -r--r--r-- 1 root root 0 Feb  8 17:14 maps 
    -rw------- 1 root root 0 Feb  8 17:14 mem 
    -r--r--r-- 1 root root 0 Feb  8 17:14 mounts 
    -r-------- 1 root root 0 Feb  8 17:14 mountstats 
    -rw-r--r-- 1 root root 0 Feb  8 17:14 oom_adj 
    -r--r--r-- 1 root root 0 Feb  8 17:14 oom_score 
    lrwxrwxrwx 1 root root 0 Feb  8 17:14 root -> / 
    -r--r--r-- 1 root root 0 Feb  8 17:14 schedstat 
    -r-------- 1 root root 0 Feb  8 17:14 smaps 
    -r--r--r-- 1 root root 0 Feb  8 17:09 stat 
    -r--r--r-- 1 root root 0 Feb  8 17:14 statm 
    -r--r--r-- 1 root root 0 Feb  8 17:10 status 
    dr-xr-xr-x 3 root root 0 Feb  8 17:15 task 
    -r--r--r-- 1 root root 0 Feb  8 17:14 wchan 

    1.1、cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息; 

    [root@rhel5 ~]# more /proc/2674/cmdline 
    /usr/sbin/saslauthd 

    1.2、cwd — 指向当前进程运行目录的一个符号链接; 

    1.3、environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示; 

    [root@rhel5 ~]# more /proc/2674/environ 
    TERM=linuxauthd 

    1.4、exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝; 

    1.5、fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接; 

    [root@rhel5 ~]# ll /proc/2674/fd 
    total 0 
    lrwx------ 1 root root 64 Feb  8 17:17 0 -> /dev/null 
    lrwx------ 1 root root 64 Feb  8 17:17 1 -> /dev/null 
    lrwx------ 1 root root 64 Feb  8 17:17 2 -> /dev/null 
    lrwx------ 1 root root 64 Feb  8 17:17 3 -> socket:[7990] 
    lrwx------ 1 root root 64 Feb  8 17:17 4 -> /var/run/saslauthd/saslauthd.pid 
    lrwx------ 1 root root 64 Feb  8 17:17 5 -> socket:[7991] 
    lrwx------ 1 root root 64 Feb  8 17:17 6 -> /var/run/saslauthd/mux.accept 

    1.6、limits — 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(2.6.24以后的内核版本支持此功能); 

    1.7、maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表; 

    [root@rhel5 ~]# cat /proc/2674/maps 
    00110000-00239000 r-xp 00000000 08:02 130647     /lib/libcrypto.so.0.9.8e 
    00239000-0024c000 rwxp 00129000 08:02 130647     /lib/libcrypto.so.0.9.8e 
    0024c000-00250000 rwxp 0024c000 00:00 0 
    00250000-00252000 r-xp 00000000 08:02 130462     /lib/libdl-2.5.so 
    00252000-00253000 r-xp 00001000 08:02 130462     /lib/libdl-2.5.so 

    1.8、mem — 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取; 

    1.9、root — 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录; 

    1.10、stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用; 

    1.11、statm — 当前进程占用内存的状态信息,通常以“页面”(page)表示; 

    1.12、status — 与stat所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;其详细介绍请参见 proc的man手册页; 

    [root@rhel5 ~]# more /proc/2674/status 
    Name:   saslauthd 
    State:  S (sleeping) 
    SleepAVG:       0% 
    Tgid:   2674 
    Pid:    2674 
    PPid:   1 
    TracerPid:      0 
    Uid:    0       0       0       0 
    Gid:    0       0       0       0 
    FDSize: 32 
    Groups: 
    VmPeak:     5576 kB 
    VmSize:     5572 kB 
    VmLck:         0 kB 
    VmHWM:       696 kB 
    VmRSS:       696 kB 
    ………… 

    1.13、task — 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核2.6版本以后支持此功能) 

    二、/proc目录下常见的文件介绍 

    2.1、/proc/apm 
    高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用; 

    2.2、/proc/buddyinfo 
    用于诊断内存碎片问题的相关信息文件; 

    2.3、/proc/cmdline 
    在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递; 

    [root@rhel5 ~]# more /proc/cmdline 
    ro root=/dev/VolGroup00/LogVol00 rhgb quiet 

    2.4、/proc/cpuinfo 
    处理器的相关信息的文件; 

    2.5、/proc/crypto 
    系统上已安装的内核使用的密码算法及每个算法的详细信息列表; 

    [root@rhel5 ~]# more /proc/crypto 
    name         : crc32c 
    driver       : crc32c-generic 
    module       : kernel 
    priority     : 0 
    type         : digest 
    blocksize    : 32 
    digestsize   : 4 
    …………

    2.6、/proc/devices 
    系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名; 

    [root@rhel5 ~]# more /proc/devices 
    Character devices: 
      1 mem 
      4 /dev/vc/0 
      4 tty 
      4 ttyS 
      ………… 

    Block devices: 
      1 ramdisk 
      2 fd 
      8 sd 
      …………

    2.7、/proc/diskstats 
    每块磁盘设备的磁盘I/O统计信息列表;(内核2.5.69以后的版本支持此功能) 

    2.8、/proc/dma 
    每个正在使用且注册的ISA DMA通道的信息列表; 

    [root@rhel5 ~]# more /proc/dma 
    2: floppy 
    4: cascade 

    2.9、/proc/execdomains 
    内核当前支持的执行域(每种操作系统独特“个性”)信息列表; 

    [root@rhel5 ~]# more /proc/execdomains 
    0-0     Linux                   [kernel] 

    2.10、/proc/fb 
    帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息; 

    2.11、/proc/filesystems 
    当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型; 

    [root@rhel5 ~]# more /proc/filesystems 
    nodev   sysfs 
    nodev   rootfs 
    nodev   proc 
            iso9660 
            ext3 
    ………… 
    ………… 

    2.12、/proc/interrupts 
    X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号; 

    [root@rhel5 ~]# more /proc/interrupts 
               CPU0       
      0:    1305421    IO-APIC-edge  timer 
      1:         61    IO-APIC-edge  i8042 
    185:       1068   IO-APIC-level  eth0 
    ………… 

    2.13、/proc/iomem 
    每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息; 

    [root@rhel5 ~]# more /proc/iomem 
    00000000-0009f7ff : System RAM 
    0009f800-0009ffff : reserved 
    000a0000-000bffff : Video RAM area 
    000c0000-000c7fff : Video ROM 
      ………… 

    3.2.12. /proc/iomem

    http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-iomem.html

    This file shows you the current map of the system's memory for each physical device:

    00000000-0009fbff : System RAM
    0009fc00-0009ffff : reserved 
    000a0000-000bffff : Video RAM area
    000c0000-000c7fff : Video ROM 
    000f0000-000fffff : System ROM
    00100000-07ffffff : System RAM   
    00100000-00291ba8 : Kernel code
    00291ba9-002e09cb : Kernel data 
    e0000000-e3ffffff : VIA Technologies, Inc. VT82C597 [Apollo VP3] e4000000-e7ffffff : PCI Bus #01   
    e4000000-e4003fff : Matrox Graphics, Inc. MGA G200 AGP   
    e5000000-e57fffff : Matrox Graphics, Inc. MGA G200 AGP 
    e8000000-e8ffffff : PCI Bus #01   
    e8000000-e8ffffff : Matrox Graphics, Inc. MGA G200 AGP 
    ea000000-ea00007f : Digital Equipment Corporation DECchip 21140 [FasterNet]
    ea000000-ea00007f : tulip ffff0000-ffffffff : reserved

    The first column displays the memory registers used by each of the different types of memory. The second column lists the kind of memory located within those registers and displays which memory registers are used by the kernel within the system RAM or, if the network interface card has multiple Ethernet ports, the memory registers assigned for each port.

    /opt/qtmarvell/mvqt # cat /proc/iomem 
    00000000-0fffffff : System RAM 
      0002b000-00554fff : Kernel text 
      00556000-005a22f3 : Kernel data 
    10000000-1fffffff : System RAM 
    e0000000-e7ffffff : PEX0 Memory 
      e0000000-e0003fff : 0000:00:01.0 
      e0004000-e0004fff : 0000:00:01.0 
    e8000000-efffffff : PEX1 Memory 
    f1012100-f10121ff : serial8250.0 
      f1012100-f101211f : serial 
    f1090000-f10903ff : mvsdio 
      f1090000-f10903ff : mvsdio 
    f10a0000-f10a3fff : mv88fx_snd.0 
      f10a0000-f10a3fff : mv88fx_snd 
    f10c0000-f10d0000 : dovefb.0  寄存器地址映射到这个 
      f10c0000-f10d0000 : dovefb_ovly.0

    /opt/qtmarvell/mvqt # ./framebuffer 
    The framebuffer device was opened successfully.

    Fixed screen info: 
            id:          GFX Layer 0 
            smem_start:  0x12000000 
            smem_len:    33554432 
            type:        0 
            type_aux:    0 
            visual:      2 
            xpanstep:    1 
            ypanstep:    1 
            ywrapstep:   0 
            line_length: 2560 
            mmio_start:  0xf10c0000 
            mmio_len:    65537

    2.14、/proc/ioports 
    当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备; 

    [root@rhel5 ~]# less /proc/ioports 
    0000-001f : dma1 
    0020-0021 : pic1 
    0040-0043 : timer0 
    0050-0053 : timer1 
    0060-006f : keyboard 
    ………… 

    2.15、/proc/kallsyms 
    模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;(内核2.5.71以后的版本支持此功能);通常这个文件中的信息量相当大; 

    [root@rhel5 ~]# more /proc/kallsyms 
    c04011f0 T _stext 
    c04011f0 t run_init_process 
    c04011f0 T stext 
      ………… 

    2.16、/proc/kcore 
    系统使用的物理内存,以ELF核心文件(core file)格式存储,其文件大小为已使用的物理内存(RAM)加上4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由GBD通常调试工具使用,但不能使用文件查看命令打开此文件; 

    2.17、/proc/kmsg 
    此文件用来保存由内核输出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要试图使用查看命令打开此文件; 

    2.18、/proc/loadavg 
    保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID; 

    [root@rhel5 ~]# more /proc/loadavg 
    0.45 0.12 0.04 4/125 5549 

    [root@rhel5 ~]# uptime 
    06:00:54 up  1:06,  3 users,  load average: 0.45, 0.12, 0.04 

    2.19、/proc/locks 
    保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户任何形式的访问; 

    [root@rhel5 ~]# more /proc/locks 
    1: POSIX  ADVISORY  WRITE 4904 fd:00:4325393 0 EOF 
    2: POSIX  ADVISORY  WRITE 4550 fd:00:2066539 0 EOF 
    3: FLOCK  ADVISORY  WRITE 4497 fd:00:2066533 0 EOF 

    2.20、/proc/mdstat 
    保存RAID相关的多块磁盘的当前状态信息,在没有使用RAID机器上,其显示为如下状态: 

    [root@rhel5 ~]# less /proc/mdstat 
    Personalities : 
    unused devices: <none> 

    2.21、/proc/meminfo 
    系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值; 

    [root@rhel5 ~]# less /proc/meminfo 
    MemTotal:       515492 kB 
    MemFree:          8452 kB 
    Buffers:         19724 kB 
    Cached:         376400 kB 
    SwapCached:          4 kB 
    …………

    2.22、/proc/mounts 
    在内核2.4.29版本以前,此文件的内容为系统当前挂载的所有文件系统,在2.4.19以后的内核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向/proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接;/proc/self是一个独特的目录,后文中会对此目录进行介绍; 

    [root@rhel5 ~]# ll /proc |grep mounts 
    lrwxrwxrwx  1 root      root             11 Feb  8 06:43 mounts -> self/mounts 

    如下所示,其中第一列表示挂载的设备,第二列表示在当前目录树中的挂载点,第三点表示当前文件系统的类型,第四列表示挂载属性(ro或者rw),第五列和第六列用来匹配/etc/mtab文件中的转储(dump)属性; 


    [root@rhel5 ~]# more /proc/mounts 
    rootfs / rootfs rw 0 0 
    /dev/root / ext3 rw,data=ordered 0 0 
    /dev /dev tmpfs rw 0 0 
    /proc /proc proc rw 0 0 
    /sys /sys sysfs rw 0 0 
    /proc/bus/usb /proc/bus/usb usbfs rw 0 0 
    …………

    2.23、/proc/modules 
    当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;如下所示,其中第一列表示模块名,第二列表示此模块占用内存空间大小,第三列表示此模块有多少实例被装入,第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:已经装入;Loading:正在装入;Unloading:正在卸载),第六列表示此模块在内核内存(kernel memory)中的偏移量; 

    [root@rhel5 ~]# more /proc/modules 
    autofs4 24517 2 - Live 0xe09f7000 
    hidp 23105 2 - Live 0xe0a06000 
    rfcomm 42457 0 - Live 0xe0ab3000 
    l2cap 29505 10 hidp,rfcomm, Live 0xe0aaa000 
    …………

    2.24、/proc/partitions 
    块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目(如下面输出中第三列所示); 

    [root@rhel5 ~]# more /proc/partitions 
    major minor  #blocks  name 

       8     0   20971520 sda 
       8     1     104391 sda1 
       8     2    6907950 sda2 
       8     3    5630782 sda3 
       8     4          1 sda4 
       8     5    3582463 sda5 

    2.25、/proc/pci 
    内核初始化时发现的所有PCI设备及其配置信息列表,其配置信息多为某PCI设备相关IRQ信息,可读性不高,可以用“/sbin/lspci –vb”命令获得较易理解的相关信息;在2.6内核以后,此文件已为/proc/bus/pci目录及其下的文件代替; 

    2.26、/proc/slabinfo 
    在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息;详情可以参见内核文档中slapinfo的手册页; 

    [root@rhel5 ~]# more /proc/slabinfo 
    slabinfo - version: 2.1 
    # name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <ac 
    tive_slabs> <num_slabs> <sharedavail> 
    rpc_buffers            8      8   2048    2    1 : tunables   24   12    8 : slabdata      4      4      0 
    rpc_tasks              8     20    192   20    1 : tunables  120   60    8 : slabdata      1      1      0 
    rpc_inode_cache        6      9    448    9    1 : tunables   54   27    8 : slabdata      1      1      0 
    ………… 
    ………… 
    …………

    2.27、/proc/stat 
    实时追踪自系统上次启动以来的多种统计信息;如下所示,其中, 
    “cpu”行后的八个值分别表示以1/100(jiffies)秒为单位的统计值(包括系统运行于用户模式、低优先级用户模式,运系统模式、空闲模式、I/O等待模式的时间等); 
    “intr”行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数; 
    “ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。 
    “btime”给出了从系统启动到现在为止的时间,单位为秒; 
    “processes (total_forks) 自系统启动以来所创建的任务的个数目; 
    “procs_running”:当前运行队列的任务的数目; 
    “procs_blocked”:当前被阻塞的任务的数目; 

    [root@rhel5 ~]# more /proc/stat 
    cpu  2751 26 5771 266413 2555 99 411 0 
    cpu0 2751 26 5771 266413 2555 99 411 0 
    intr 2810179 2780489 67 0 3 3 0 5 0 1 0 0 0 1707 0 0 9620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5504 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12781 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    ctxt 427300 
    btime 1234084100 
    processes 3491 
    procs_running 1 
    procs_blocked 0 

    2.28、/proc/swaps 
    当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别存储于/proc/swap目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大;下面是作者系统中只有一个交换分区时的输出信息; 

    [root@rhel5 ~]# more /proc/swaps 
    Filename                                Type            Size    Used    Priority 
    /dev/sda8                               partition       642560  0       -1 

    2.29、/proc/uptime 
    系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒; 

    [root@rhel5 ~]# more /proc/uptime 
    3809.86 3714.13 

    2.30、/proc/version 
    当前系统运行的内核版本号,在作者的RHEL5.3上还会显示系统安装的gcc版本,如下所示; 

    [root@rhel5 ~]# more /proc/version 
    Linux version 2.6.18-128.el5 (mockbuild@hs20-bc1-5.build.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Wed Dec 17 11:42:39 EST 2008 

    2.31、/proc/vmstat 
    当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好;下面为作者机器上输出信息的一个片段;(2.6以后的内核支持此文件) 

    [root@rhel5 ~]# more /proc/vmstat 
    nr_anon_pages 22270 
    nr_mapped 8542 
    nr_file_pages 47706 
    nr_slab 4720 
    nr_page_table_pages 897 
    nr_dirty 21 
    nr_writeback 0 
    ………… 

    2.32、/proc/zoneinfo 
    内存区域(zone)的详细信息列表,信息量较大,下面列出的是一个输出片段: 

    [root@rhel5 ~]# more /proc/zoneinfo 
    Node 0, zone      DMA 
      pages free     1208 
            min      28 
            low      35 
            high     42 
            active   439 
            inactive 1139 
            scanned  0 (a: 7 i: 30) 
            spanned  4096 
            present  4096 
        nr_anon_pages 192 
        nr_mapped    141 
        nr_file_pages 1385 
        nr_slab      253 
        nr_page_table_pages 2 
        nr_dirty     523 
        nr_writeback 0 
        nr_unstable  0 
        nr_bounce    0 
            protection: (0, 0, 296, 296) 
      pagesets 
      all_unreclaimable: 0 
      prev_priority:     12 
      start_pfn:         0 
    …………

    三、/proc/sys目录详解 

    与 /proc下其它文件的“只读”属性不同的是,管理员可对/proc/sys子目录中的许多文件内容进行修改以更改内核的运行特性,事先可以使用“ls -l”命令查看某文件是否“可写入”。写入操作通常使用类似于“echo  DATA > /path/to/your/filename”的格式进行。需要注意的是,即使文件可写,其一般也不可以使用编辑器进行编辑。 

    3.1、/proc/sys/debug 子目录 
    此目录通常是一空目录; 

    3.2、/proc/sys/dev 子目录 
    为系统上特殊设备提供参数信息文件的目录,其不同设备的信息文件分别存储于不同的子目录中,如大多数系统上都会具有的/proc/sys/dev /cdrom和/proc/sys/dev/raid(如果内核编译时开启了支持raid的功能) 目录,其内存储的通常是系统上cdrom和raid的相关参数信息文件。

    转自:https://www.cnblogs.com/lidabo/p/5628020.html

    展开全文
  • proc文件系统

    千次阅读 2018-07-03 09:58:13
    一、进程目录中的常见文件介绍1.1、cat proc/meminfo 常用参数– MemTotal:总内存– MemFree:空闲内存– Cached:缓存– Active:活跃内存– Inactive:非活跃内存1.2、cat /proc/cpuinfo常用参数– cpu id:cpu...

    一、进程目录中的常见文件介绍

    1.1、cat proc/meminfo

           

    常用参数

    – MemTotal:总内存
    – MemFree:空闲内存
    – Cached:缓存
    – Active:活跃内存

    – Inactive:非活跃内存

    1.2、cat /proc/cpuinfo


    常用参数
    – cpu id:cpu代号

    – Processor:处理器

    1.3、cat /proc/interrupts


    常用参数。里面是一些中断相关的参数

    注册的中断都会在这里显示

    1.4、/proc 目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,

    里面包含对应进程相关的多个信息文件。


    上面列出的是/proc 目录中一些进程相关的目录,每个目录中是当程本身相关信息的文件。

    1.5、下面是上运行的一个 PID 为 510 的进程的相关文件,其中有些文件是每个进程都会具有的。

    1.6、cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息;
    # more /proc/2674/cmdline
    /usr/sbin/saslauthd
    1.7、cwd — 指向当前进程运行目录的一个符号链接;
    1.8、environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字
    母表示,其值用小写字母表示;
    # more /proc/2674/environ
    TERM=linuxauthd
    1.9、exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe 可
    以启动当前进程的一个拷贝;
    1.11、fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),
    这些文件描述符是指向实际文件的一个符号链接;
    # ll /proc/2674/fd
    total 0
    lrwx------ 1 root root 64 Feb 8 17:17 0 -> /dev/null
    lrwx------ 1 root root 64 Feb 8 17:17 1 -> /dev/null
    lrwx------ 1 root root 64 Feb 8 17:17 2 -> /dev/null
    lrwx------ 1 root root 64 Feb 8 17:17 3 -> socket:[7990]
    lrwx------ 1 root root 64 Feb 8 17:17 4 -> /var/run/saslauthd/saslauthd.pid
    lrwx------ 1 root root 64 Feb 8 17:17 5 -> socket:[7991]
    lrwx------ 1 root root 64 Feb 8 17:17 6 -> /var/run/saslauthd/mux.accept
    1.12、limits — 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅
    可由实际启动当前进程的 UID 用户读取;(2.6.24 以后的内核版本支持此功能);
    1.13、maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权
    限所组成的列表;
    # cat /proc/2674/maps
    00110000-00239000 r-xp 00000000 08:02 130647 /lib/libcrypto.so.0.9.8e
    00239000-0024c000 rwxp 00129000 08:02 130647 /lib/libcrypto.so.0.9.8e
    0024c000-00250000 rwxp 0024c000 00:00 0
    00250000-00252000 r-xp 00000000 08:02 130462 /lib/libdl-2.5.so
    00252000-00253000 r-xp 00001000 08:02 130462 /lib/libdl-2.5.so
    1.14、mem — 当前进程所占用的内存空间,由 open、read 和 lseek 等系统调用使用,不能被
    用户读取;

    1.15、root — 指向当前进程运行根目录的符号链接;在 Unix 和 Linux 系统上,通常采用 chroot

    命令使每个进程运行于独立的根目录;
    1.16、stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由 ps
    命令使用;
    1.17、statm — 当前进程占用内存的状态信息,通常以“页面”(page)表示;
    1.18、status — 与 stat 所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;
    其详细介绍请参见 proc 的 man 手册页;
    # more /proc/2674/status
    Name: saslauthd
    State: S (sleeping)
    SleepAVG: 0%
    Tgid: 2674
    Pid: 2674
    PPid: 1
    TracerPid: 0
    Uid: 0 0 0 0
    Gid: 0 0 0 0
    FDSize: 32
    Groups:
    VmPeak: 5576 kB
    VmSize: 5572 kB
    VmLck: 0 kB
    VmHWM: 696 kB
    VmRSS: 696 kB
    1.19、task — 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相
    关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程
    目录中的内容;(内核 2.6 版本以后支持此功能)

    二、/proc 目录下常见的文件介绍

    2.1、/proc/apm
    高级电源管理(APM)版本信息及电池相关状态信息,通常由 apm 命令使用;
    2.2、/proc/buddyinfo
    用于诊断内存碎片问题的相关信息文件;
    2.3、/proc/cmdline
    在启动时传递至内核的相关参数信息,这些信息通常由 lilo 或 grub 等启动管理工具进行传
    递;
    # more /proc/cmdline
    ro root=/dev/VolGroup00/LogVol00 rhgb quiet
    2.4、/proc/cpuinfo
    处理器的相关信息的文件;
    2.5、/proc/crypto
    系统上已安装的内核使用的密码算法及每个算法的详细信息列表;
    # more /proc/crypto
    name : crc32c
    driver : crc32c-generic
    module : kernel
    priority : 0
    type : digest
    blocksize : 32
    digestsize : 4
    …………
    2.6、/proc/devices
    系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的
    设备类型)名;
    # more /proc/devices
    Character devices:
    1 mem
    4 /dev/vc/0
    4 tty
    4 ttyS
    …………
    Block devices:
    1 ramdisk
    2 fd
    8 sd
    …………
    2.7、/proc/diskstats
    每块磁盘设备的磁盘 I/O 统计信息列表;(内核 2.5.69 以后的版本支持此功能)
    2.8、/proc/dma
    每个正在使用且注册的 ISA DMA 通道的信息列表;
    # more /proc/dma
    2: floppy
    4: cascade
    2.9、/proc/execdomains
    内核当前支持的执行域(每种操作系统独特“个性”)信息列表;
    # more /proc/execdomains
    0-0 Linux [kernel]
    2.10、/proc/fb
    帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息;
    2.11、/proc/filesystems
    当前被内核支持的文件系统类型列表文件,被标示为 nodev 的文件系统表示不需要块设备的
    支持;通常 mount 一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文
    件系统的类型;
    # more /proc/filesystems
    nodev sysfs
    nodev rootfs
    nodev proc
    iso9660
    ext3
    …………
    …………
    2.12、/proc/interrupts
    X86 或 X86_64 体系架构系统上每个 IRQ 相关的中断号列表;多路处理器平台上每个 CPU
    对于每个 I/O 设备均有自己的中断号;
    # more /proc/interrupts
    CPU0
    0: 1305421 IO-APIC-edge timer
    1: 61 IO-APIC-edge i8042
    185: 1068 IO-APIC-level eth0
    …………
    2.13、/proc/iomem
    每个物理设备上的记忆体(RAM 或者 ROM)在系统内存中的映射信息;
    [root@rhel5 ~]# more /proc/iomem
    00000000-0009f7ff : System RAM
    0009f800-0009ffff : reserved
    000a0000-000bffff : Video RAM area
    000c0000-000c7fff : Video ROM
    …………
    2.14、/proc/ioports
    当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面
    所示,第一列表示注册的 I/O 端口范围,其后表示相关的设备;
    [root@rhel5 ~]# less /proc/ioports
    0000-001f : dma1
    0020-0021 : pic1
    0040-0043 : timer0
    0050-0053 : timer1
    0060-006f : keyboard
    …………
    2.15、/proc/kallsyms
    模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;(内核 2.5.71 以后
    的版本支持此功能);通常这个文件中的信息量相当大;
    # more /proc/kallsyms
    c04011f0 T _stext
    c04011f0 t run_init_process
    c04011f0 T stext
    …………
    2.16、/proc/kcore
    系统使用的物理内存,以 ELF 核心文件(core file)格式存储,其文件大小为已使用的物理
    内存(RAM)加上 4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由 GBD
    通常调试工具使用,但不能使用文件查看命令打开此文件;
    2.17、/proc/kmsg
    此文件用来保存由内核输出的信息,通常由/sbin/klogd 或/bin/dmsg 等程序使用,不要试图使
    用查看命令打开此文件;
    2.18、/proc/loadavg
    保存关于 CPU 和磁盘 I/O 的负载平均值,其前三列分别表示每 1 秒钟、每 5 秒钟及每 15 秒
    的负载平均值,类似于 uptime 命令输出的相关信息;第四列是由斜线隔开的两个数值,前
    者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度
    实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的 PID;
    # more /proc/loadavg
    0.45 0.12 0.04 4/125 5549
    # uptime
    06:00:54 up 1:06, 3 users, load average: 0.45, 0.12, 0.04
    2.19、/proc/locks
    保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且
    具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX
    表示目前较新类型的文件锁,由 lockf 系统调用产生,FLOCK 是传统的 UNIX 文件锁,由
    flock 系统调用产生;第三列也通常由两种类型,ADVISORY 表示不允许其他用户锁定此文
    件,但允许读取,MANDATORY 表示此文件锁定期间不允许其他用户任何形式的访问;
    # more /proc/locks
    1: POSIX ADVISORY WRITE 4904 fd:00:4325393 0 EOF
    2: POSIX ADVISORY WRITE 4550 fd:00:2066539 0 EOF
    3: FLOCK ADVISORY WRITE 4497 fd:00:2066533 0 EOF
    2.20、/proc/mdstat
    保存 RAID 相关的多块磁盘的当前状态信息,在没有使用 RAID 机器上,其显示为如下状态:
    # less /proc/mdstat
    Personalities :
    unused devices: <none>
    2.21、/proc/meminfo
    系统中关于当前内存的利用状况等的信息,常由 free 命令使用;可以使用文件查看命令直接
    读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;
    # less /proc/meminfo
    MemTotal: 515492 kB
    MemFree: 8452 kB
    Buffers: 19724 kB
    Cached: 376400 kB
    SwapCached: 4 kB
    …………
    2.22、/proc/mounts
    在内核 2.4.29 版本以前,此文件的内容为系统当前挂载的所有文件系统,在 2.4.19 以后的内
    核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向
    /proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接;
    /proc/self 是一个独特的目录,后文中会对此目录进行介绍;
    # ll /proc |grep mounts
    lrwxrwxrwx 1 root root 11 Feb 8 06:43 mounts -> self/mounts
    如下所示,其中第一列表示挂载的设备,第二列表示在当前目录树中的挂载点,第三点表示
    当前文件系统的类型,第四列表示挂载属性(ro 或者 rw),第五列和第六列用来匹配/etc/mtab
    文件中的转储(dump)属性;
    # more /proc/mounts
    rootfs / rootfs rw 0 0
    /dev/root / ext3 rw,data=ordered 0 0
    /dev /dev tmpfs rw 0 0
    /proc /proc proc rw 0 0
    /sys /sys sysfs rw 0 0
    /proc/bus/usb /proc/bus/usb usbfs rw 0 0
    …………
    2.23、/proc/modules
    当前装入内核的所有模块名称列表,可以由 lsmod 命令使用,也可以直接查看;如下所示,
    其中第一列表示模块名,第二列表示此模块占用内存空间大小,第三列表示此模块有多少实
    例被装入,第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:
    已经装入;Loading:正在装入;Unloading:正在卸载),第六列表示此模块在内核内存(kernel
    memory)中的偏移量;
    # more /proc/modules
    autofs4 24517 2 - Live 0xe09f7000
    hidp 23105 2 - Live 0xe0a06000
    rfcomm 42457 0 - Live 0xe0ab3000
    l2cap 29505 10 hidp,rfcomm, Live 0xe0aaa000
    …………
    2.24、/proc/partitions
    块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包
    含的块(block)数目(如下面输出中第三列所示);
    # more /proc/partitions
    major minor #blocks name
    8 0 20971520 sda
    8 1 104391 sda1
    8 2 6907950 sda2
    8 3 5630782 sda3
    8 4 1 sda4
    8 5 3582463 sda5
    2.25、/proc/pci
    内核初始化时发现的所有 PCI 设备及其配置信息列表,其配置信息多为某 PCI 设备相关 IRQ
    信息,可读性不高,可以用“/sbin/lspci –vb”命令获得较易理解的相关信息;在 2.6 内核
    以后,此文件已为/proc/bus/pci 目录及其下的文件代替;
    2.26、/proc/slabinfo
    在内核中频繁使用的对象(如 inode、dentry 等)都有自己的 cache,即 slab pool,而/proc/slabinfo
    文件列出了这些对象相关 slap 的信息;详情可以参见内核文档中 slapinfo 的手册页;
    # more /proc/slabinfo
    slabinfo - version: 2.1
    # name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> :
    tunables <limit> <batchcount> <sharedfactor> : slabdata <ac
    tive_slabs> <num_slabs> <sharedavail>
    rpc_buffers 8 8 2048 2 1 : tunables 24 12 8 : slabdata
    4 4 0
    rpc_tasks 8 20 192 20 1 : tunables 120 60 8 : slabdata
    1 1 0
    rpc_inode_cache 6 9 448 9 1 : tunables 54 27 8 : slabdata
    1 1 0
    …………
    …………
    …………
    2.27、/proc/stat
    实时追踪自系统上次启动以来的多种统计信息;如下所示,其中,
    “cpu”行后的八个值分别表示以 1/100(jiffies)秒为单位的统计值(包括系统运行于用户
    模式、低优先级用户模式,运系统模式、空闲模式、I/O 等待模式的时间等);
    “intr”行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每
    个数对应一个特定的中断自系统启动以来所发生的次数;
    “ctxt”给出了自系统启动以来 CPU 发生的上下文交换的次数。
    “btime”给出了从系统启动到现在为止的时间,单位为秒;
    “processes (total_forks) 自系统启动以来所创建的任务的个数目;
    “procs_running”:当前运行队列的任务的数目;
    “procs_blocked”:当前被阻塞的任务的数目;
    # more /proc/stat
    cpu 2751 26 5771 266413 2555 99 411 0
    cpu0 2751 26 5771 266413 2555 99 411 0
    intr 2810179 2780489 67 0 3 3 0 5 0 1 0 0 0 1707 0 0 9620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5504 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 12781 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    ctxt 427300
    btime 1234084100
    processes 3491
    procs_running 1
    procs_blocked 0
    2.28、/proc/swaps
    当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的
    信息分别存储于/proc/swap 目录中的单独文件中,而其优先级数字越低,被使用到的可能性
    越大;下面是作者系统中只有一个交换分区时的输出信息;
    # more /proc/swaps
    Filename Type Size Used Priority
    /dev/sda8 partition 642560 0 -1
    2.29、/proc/uptime
    系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表
    示系统空闲时间,单位是秒;
    # more /proc/uptime
    3809.86 3714.13
    2.30、/proc/version
    当前系统运行的内核版本号,在作者的 RHEL5.3 上还会显示系统安装的 gcc 版本,如下所
    示;
    # more /proc/version
    Linux version 2.6.18-128.el5 (mockbuild@hs20-bc1-5.build.redhat.com) (gcc version 4.1.2
    20080704 (Red Hat 4.1.2-44)) #1 SMP Wed Dec 17 11:42:39 EST 2008
    2.31、/proc/vmstat
    当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较
    好;下面为作者机器上输出信息的一个片段;(2.6 以后的内核支持此文件)
    # more /proc/vmstat
    nr_anon_pages 22270
    nr_mapped 8542
    nr_file_pages 47706
    nr_slab 4720
    nr_page_table_pages 897
    nr_dirty 21
    nr_writeback 0
    …………
    2.32、/proc/zoneinfo
    内存区域(zone)的详细信息列表,信息量较大,下面列出的是一个输出片段:
    # more /proc/zoneinfo
    Node 0, zone DMA
    pages free 1208
    min 28
    low 35
    high 42
    active 439
    inactive 1139
    scanned 0 (a: 7 i: 30)
    spanned 4096
    present 4096
    nr_anon_pages 192
    nr_mapped 141
    nr_file_pages 1385
    nr_slab 253
    nr_page_table_pages 2
    nr_dirty 523
    nr_writeback 0
    nr_unstable 0
    nr_bounce 0
    protection: (0, 0, 296, 296)
    pagesets
    all_unreclaimable: 0
    prev_priority: 12
    start_pfn: 0
    …………

    三、/proc/sys 目录详解

    与/proc 下其它文件的“只读”属性不同的是,管理员可对/proc/sys 子目录中的许多文件内
    容进行修改以更改内核的运行特性,事先可以使用“ls -l”命令查看某文件是否“可写入”。
    写入操作通常使用类似于“echo DATA> /path/to/your/filename”的格式进行。需要注意的
    是,即使文件可写,其一般也不可以使用编辑器进行编辑。
    3.1、/proc/sys/debug 子目录
    此目录通常是一空目录;
    3.2、/proc/sys/dev 子目录
    为系统上特殊设备提供参数信息文件的目录,其不同设备的信息文件分别存储于不同的子目
    录中,如大多数系统上都会具有的/proc/sys/dev/cdrom 和/proc/sys/dev/raid(如果内核编译时
    开启了支持 raid 的功能) 目录,其内存储的通常是系统上 cdrom 和 raid 的相关参数信息文
    件。
    展开全文
  • Linux proc文件系统说明

    千次阅读 2018-05-04 14:13:01
    在Linux上,proc是一个伪文件系统,提供了访问内核数据的方法,一般挂载在“/proc”目录,其中的大部分内容是只读的,挂载(mount)信息可能为:proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)proc文件...

    在Linux上,proc是一个伪文件系统,提供了访问内核数据的方法,一般挂载在“/proc”目录,其中的大部分内容是只读的,挂载(mount)信息可能为:

    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

    proc文件系统支持如下挂载选项:

    hidepid=_n
    gid=_gid

    _n设置访问“/proc/[pid]”目录的权限,可以取值为0、1、2,0为默认值,表示任何人可以访问“/proc/[pid]”的所有目录,1表示只能访问访问者本身所属进程对应目录的内容,其它进程的目录的内容一概不能访问,这隐藏了敏感文件的信息如“/proc/[pid]/cmdline”、“/proc/[pid]/status”等,2类似于1,但是“/proc/[pid]”目录对于其它用户来说是不见的,也就是说不能直观地看到pid值,但PID确实是存在的,可以通过其它方法如kill -0 $PID获取,虽然隐藏了UID、GID,但是仍然可以通过命令stat获取,这增加了攻击者获取进程信息的难度。 
    _gid设置组ID,授权其成员可以获取进程信息(man sudoers)。

    下面列举“/proc”文件系统下的文件和目录。

    1、pid目录

    “/proc/[pid]”,目录,pid为进程的数字ID,是个数值,每个运行着的进程都有这么一个目录。 
    “/proc/[pid]/attr”,目录,提供了安全相关的属性,可读可写,以支持安全模块如SELinux等,需配置CONFIG_SECURITY。 
    “/proc/[pid]/attr/current”,文件,当前的安全相关的属性。 
    “/proc/[pid]/attr/exec”,文件,执行命令execve时设置的安全相关的属性。 
    “/proc/[pid]/attr/fscreate”,文件,执行命令openmkdirsymlinkmknod时设置的安全相关的属性。 
    “/proc/[pid]/attr/keycreate”,文件,执行命令add_key时设置的安全相关的属性。 
    “/proc/[pid]/attr/prev”,文件,最后一次执行命令execve时的安全相关的属性,即前一个“/proc/[pid]/attr/current”。 
    “/proc/[pid]/attr/sockcreate”,文件,创建socket时设置的安全相关的属性。 
    “/proc/[pid]/auxv”,文件,ELF解释器信息,格式为一个unsigned long类型的ID加一个unsigned long类型的值,最后为两个0(man getauxval)。 
    “/proc/[pid]/cgroup”,文件,进程所属的控制组,格式为冒号分隔的三个字段,分别是结构ID、子系统、控制组,需配置CONFIG_CGROUPS。 
    “/proc/[pid]/clear_refs”,文件,只写,只用于进程的拥有者,清除用于估算内存使用量的PG_Referenced和ACCESSED/YOUNG,有1、2、3、4四种策略,1表示清除相关的所有页,2表示清除相关的匿名页,3表示清除相关的映射文件的页,4表示清除相关的soft-dirty的页,需配置CONFIG_PROC_PAGE_MONITOR。 
    “/proc/[pid]/cmdline”,文件,只读,保存启动进程的完整的命令行字符串,如果是僵尸进程,这个文件为空。 
    “/proc/[pid]/comm”,文件,进程的命令名,不同的线程(man clone prctl pthread_setname_np)可能有不同的线程名,位置在“task/[tid]/comm”,名字长度超过TASK_COMM_LEN时会被截断。 
    “/proc/[pid]/coredump_filter”,文件,coredump过滤器,如00000033(man core),不同的二进制位表示过滤不同的信息。 
    “/proc/[pid]/cpuset”,文件,控制CPU和内存的节点(man cpuset)。 
    “/proc/[pid]/cwd”,目录,符号链接到当前工作目录。 
    “/proc/[pid]/environ”,文件,环境变量。 
    “/proc/[pid]/exe”,文件,符号链接到启动进程的完整命令。 
    “/proc/[pid]/fd/”,目录,包含当前的fd,这些fd符号链接到真正打开的文件。 
    “/proc/[pid]/fdinfo/”,目录,包含当前fd的信息,不同类型的fd信息不同。 
    “/proc/[pid]/io”,文件,IO信息。 
    “/proc/[pid]/gid_map”,文件,从用户命名空间映射的组ID的信息(man user_namespaces)。 
    “/proc/[pid]/limits”,文件,资源软、硬限制(man getrlimit)。 
    “/proc/[pid]/map_files/”,目录,包括一些内存映射文件(man mmap),文件名格式为BeginAddress-EndAddress,符号链接到映射的文件,需要配置CONFIG_CHECKPOINT_RESTORE。 
    “/proc/[pid]/maps”,文件,内存映射信息,下面“proc-pid-maps”详细介绍。 
    “/proc/[pid]/mem”,文件,用于通过open、read、lseek访问进程的内存页。 
    “/proc/[pid]/mountinfo”,文件,挂载信息,格式为36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue,以空格作为分隔符,从左到右各字段的意思分别是唯一挂载ID、父挂载ID、文件系统的设备主从号码、文件系统中挂载的根节点、相对于进程根节点的挂载点、挂载权限等挂载配置、可选配置、短横线表示前面可选配置的结束、文件系统类型、文件系统特有的挂载源或者为none、额外配置。 
    /proc/[pid]/mounts,文件,挂载在当前进程的文件系统列表,格式参照(man fstab)。 
    /proc/[pid]/mountstats,文件,挂载信息,格式形如device /dev/sda7 mounted on /home with fstype ext3 [statistics]。 
    /proc/[pid]/ns/,目录,保存了每个名字空间的入口,详见(man namespaces)。 
    /proc/[pid]/numa_maps,文件,numa即Non Uniform Memory Access,详见(man numa)。 
    /proc/[pid]/oom_adj,文件,调整OOM分数,OOM即Out Of Memory,发生OOM时OOM Killer根据OOM分数杀掉分数高的进程,默认值为0,会继承自父进程的设置。 
    /proc/[pid]/oom_score,文件,OOM分数。 
    /proc/[pid]/oom_score_adj,文件,OOM分值介于-1000到1000之间。 
    /proc/[pid]/pagemap,文件,当前进程的虚拟内存页映射信息,需要配置CONFIG_PROC_PAGE_MONITOR。 
    /proc/[pid]/personality,文件,进行执行域。 
    /proc/[pid]/root,目录,链接到了当前进程的根目录。 
    /proc/[pid]/seccomp,文件,seccomp模式下允许的系统调用只有read、write、_exit、sigreturn,Linux 2.6.23已弃用这个文件,由prctl替代。 
    /proc/[pid]/setgroups,文件,详见(man user_namespaces)。 
    “/proc/[pid]/smaps”,文件,内存映射信息,类似于pmap命令,需要配置CONFIG_PROC_PAGE_MONITOR,下面“proc-pid-smaps”详细介绍。 
    /proc/[pid]/stack,文件,内核空间的函数调用堆栈,需要配置CONFIG_STACKTRACE。 
    /proc/[pid]/stat,文件,进程状态信息,用于ps命令。 
    /proc/[pid]/statm,文件,进程内存使用信息,以空格分隔的7个数字,从左到右分别表示程序总大小、常驻内存大小、共享内存页大小、text code、library、data + stack、dirty pages。 
    /proc/[pid]/status,文件,可读性好的进程相关信息,下面“proc-pid-status”详细介绍。 
    /proc/[pid]/syscall,文件,系统调用相关信息,需要配置CONFIG_HAVE_ARCH_TRACEHOOK。 
    /proc/[pid]/task,目录,每个线程一个子目录,目录名为线程ID。 
    /proc/[pid]/timers,文件,POSIT定时器列表,包括定时器ID、信号等信息。 
    /proc/[pid]/uid_map,文件,用户ID映射信息,详见(man user_namespaces)。 
    /proc/[pid]/gid_map,文件,组ID映射信息,详见(man user_namespaces)。 
    /proc/[pid]/wchan,文件,进程休眠时内核中相应位置的符号表示,如do_wait。

    2、proc-pid-maps

    maps文件内容的格式如下:

           address                      perms offset    dev    inode        pathname
           00400000-00452000 r-xp 00000000 08:02 173521      /usr/bin/dbus-daemon
           00651000-00652000 r--p 00051000 08:02 173521      /usr/bin/dbus-daemon
           00652000-00655000 rw-p 00052000 08:02 173521      /usr/bin/dbus-daemon
           00e03000-00e24000 rw-p 00000000 00:00 0           [heap]
           00e24000-011f7000 rw-p 00000000 00:00 0           [heap]
           ...
           35b1800000-35b1820000 r-xp 00000000 08:02 135522  /usr/lib64/ld-2.15.so
           35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522  /usr/lib64/ld-2.15.so
           35b1a20000-35b1a21000 rw-p 00020000 08:02 135522  /usr/lib64/ld-2.15.so
           35b1a21000-35b1a22000 rw-p 00000000 00:00 0
           35b1c00000-35b1dac000 r-xp 00000000 08:02 135870  /usr/lib64/libc-2.15.so
           35b1dac000-35b1fac000 ---p 001ac000 08:02 135870  /usr/lib64/libc-2.15.so
           35b1fac000-35b1fb0000 r--p 001ac000 08:02 135870  /usr/lib64/libc-2.15.so
           35b1fb0000-35b1fb2000 rw-p 001b0000 08:02 135870  /usr/lib64/libc-2.15.so
           ...
           f2c6ff8c000-7f2c7078c000 rw-p 00000000 00:00 0    [stack:986]
           ...
           7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0   [stack]
           7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0   [vdso]

    address字段表示进程中内存映射占据的地址空间,格式为十六进制的BeginAddress-EndAddress。 
    perms字段表示权限,共四个字符,依次为rwxs或rwxp,其中r为read,w为write,x为execute,s为shared,p为private,对应位置没有权限时用一个短横线代替。 
    offset字段表示内存映射地址在文件中的字节偏移量。 
    dev字段表示device,格式为major:minor。 
    inode字段表示对应device的inode,0表示内存映射区域没有关联的inode,如未初始化的BSS数据段就是这种情况。 
    pathname字段用于内存映射的文件,对于ELF格式的文件来说,可以通过命令readelf -l查看ELF程序头部的Offset字段,与maps文件的offset字段作对比。pathname可能为空,表示匿名映射,这种情况下难以调试进程,如gdb、strace等命令。除了正常的文件路径之外,pathname还可能是下面的值:

    [stack]    初始进程(主线程)的stack
    [stack:<tid>]    线程IDtidstack
    [vdso]    Virtual Dynamically linked Shared Object
    [heap]    进程的heap

    3、proc-pid-smaps

    smaps文件内容的格式如下:

                          00400000-0048a000 r-xp 00000000 fd:03 960637       /bin/bash
                          Size:                552 kB
                          Rss:                 460 kB
                          Pss:                 100 kB
                          Shared_Clean:        452 kB
                          Shared_Dirty:          0 kB
                          Private_Clean:         8 kB
                          Private_Dirty:         0 kB
                          Referenced:          460 kB
                          Anonymous:             0 kB
                          AnonHugePages:         0 kB
                          Swap:                  0 kB
                          KernelPageSize:        4 kB
                          MMUPageSize:           4 kB
                          Locked:                0 kB

    第一行内容同maps文件,剩下的是各种类型的内存映射大小,其中Rss表示当前常驻在RAM中的内存,Pss表示进程按比例共享的内存。

    4、proc-pid-status

    status文件内容的格式如下(查看当前shell命令所在进程的信息):

                      $ cat /proc/$$/status
                      Name:   bash
                      State:  S (sleeping)
                      Tgid:   3515
                      Pid:    3515
                      PPid:   3452
                      TracerPid:      0
                      Uid:    1000    1000    1000    1000
                      Gid:    100     100     100     100
                      FDSize: 256
                      Groups: 16 33 100
                      VmPeak:     9136 kB
                      VmSize:     7896 kB
                      VmLck:         0 kB
                      VmPin:         0 kB
                      VmHWM:      7572 kB
                      VmRSS:      6316 kB
                      VmData:     5224 kB
                      VmStk:        88 kB
                      VmExe:       572 kB
                      VmLib:      1708 kB
                      VmPMD:         4 kB
                      VmPTE:        20 kB
                      VmSwap:        0 kB
                      Threads:        1
                      SigQ:   0/3067
                      SigPnd: 0000000000000000
                      ShdPnd: 0000000000000000
                      SigBlk: 0000000000010000
                      SigIgn: 0000000000384004
                      SigCgt: 000000004b813efb
                      CapInh: 0000000000000000
                      CapPrm: 0000000000000000
                      CapEff: 0000000000000000
                      CapBnd: ffffffffffffffff
                      CapAmb:   0000000000000000
                      Seccomp:        0
                      Cpus_allowed:   00000001
                      Cpus_allowed_list:      0
                      Mems_allowed:   1
                      Mems_allowed_list:      0
                      voluntary_ctxt_switches:        150
                      nonvoluntary_ctxt_switches:     545

    5、bus目录

    /proc/bus,目录,已安装的总线。 
    /proc/bus/pccard 
    /proc/bus/pccard/drivers 
    /proc/bus/pci 
    /proc/bus/pci/devices

    6、net目录

    /proc/net,目录,网络伪文件系统相关。 
    /proc/net/arp 
    /proc/net/dev 
    /proc/net/dev_mcast 
    /proc/net/igmp 
    /proc/net/rarp 
    /proc/net/raw 
    /proc/net/snmp 
    /proc/net/tcp 
    /proc/net/udp 
    /proc/net/unix 
    /proc/net/netfilter/nfnetlink_queue

    7、sys目录

    /proc/sys,目录,系统变量相关信息,详细如下。 
    /proc/sys/abi 
    /proc/sys/debug 
    /proc/sys/dev 
    /proc/sys/fs 
    /proc/sys/fs/binfmt_misc 
    /proc/sys/fs/dentry-state 
    /proc/sys/fs/dir-notify-enable 
    /proc/sys/fs/dquot-max 
    /proc/sys/fs/dquot-nr 
    /proc/sys/fs/epoll 
    /proc/sys/fs/file-max 
    /proc/sys/fs/file-nr 
    /proc/sys/fs/inode-max 
    /proc/sys/fs/inode-nr 
    /proc/sys/fs/inode-state 
    /proc/sys/fs/inotify 
    /proc/sys/fs/lease-break-time 
    /proc/sys/fs/leases-enable 
    /proc/sys/fs/mqueue 
    /proc/sys/fs/nr_open 
    /proc/sys/fs/overflowgid 
    /proc/sys/fs/overflowuid 
    /proc/sys/fs/pipe-max-size 
    /proc/sys/fs/protected_hardlinks 
    /proc/sys/fs/protected_symlinks 
    /proc/sys/fs/suid_dumpable 
    /proc/sys/fs/super-max 
    /proc/sys/fs/super-nr 
    /proc/sys/kernel 
    /proc/sys/kernel/acct 
    /proc/sys/kernel/auto_msgmni 
    /proc/sys/kernel/cap_last_cap 
    /proc/sys/kernel/cap-bound 
    /proc/sys/kernel/core_pattern 
    /proc/sys/kernel/core_uses_pid 
    /proc/sys/kernel/ctrl-alt-del 
    /proc/sys/kernel/dmesg_restrict 
    /proc/sys/kernel/domainname 
    /proc/sys/kernel/hostname 
    /proc/sys/kernel/hotplug 
    /proc/sys/kernel/htab-reclaim 
    /proc/sys/kernel/kptr_restrict 
    /proc/sys/kernel/l2cr 
    /proc/sys/kernel/modprobe 
    /proc/sys/kernel/modules_disabled 
    /proc/sys/kernel/msgmax 
    /proc/sys/kernel/msgmni 
    /proc/sys/kernel/msgmnb 
    /proc/sys/kernel/ngroups_max 
    /proc/sys/kernel/ostype 
    /proc/sys/kernel/osrelease 
    /proc/sys/kernel/overflowgid 
    /proc/sys/kernel/overflowuid 
    /proc/sys/kernel/panic 
    /proc/sys/kernel/panic_on_oops 
    /proc/sys/kernel/pid_max 
    /proc/sys/kernel/powersave-nap 
    /proc/sys/kernel/printk 
    /proc/sys/kernel/pty 
    /proc/sys/kernel/pty/max 
    /proc/sys/kernel/pty/nr 
    /proc/sys/kernel/random 
    /proc/sys/kernel/random/uuid 
    /proc/sys/kernel/randomize_va_space 
    /proc/sys/kernel/real-root-dev 
    /proc/sys/kernel/reboot-cmd 
    /proc/sys/kernel/rtsig-max 
    /proc/sys/kernel/rtsig-nr 
    /proc/sys/kernel/sched_rr_timeslice_ms 
    /proc/sys/kernel/sched_rt_period_us 
    /proc/sys/kernel/sched_rt_period_us 
    /proc/sys/kernel/sem 
    /proc/sys/kernel/sg-big-buff 
    /proc/sys/kernel/shm_rmid_forced 
    /proc/sys/kernel/shmall 
    /proc/sys/kernel/shmmax 
    /proc/sys/kernel/shmmni 
    /proc/sys/kernel/sysctl_writes_strict 
    /proc/sys/kernel/sysrq 
    /proc/sys/kernel/version 
    /proc/sys/kernel/threads-max 
    /proc/sys/kernel/yama/ptrace_scope 
    /proc/sys/kernel/zero-paged 
    /proc/sys/net 
    /proc/sys/net/core/bpf_jit_enable 
    /proc/sys/net/core/somaxconn 
    /proc/sys/proc 
    /proc/sys/sunrpc 
    /proc/sys/vm 
    /proc/sys/vm/compact_memory 
    /proc/sys/vm/drop_caches 
    /proc/sys/vm/legacy_va_layout 
    /proc/sys/vm/memory_failure_early_kill 
    /proc/sys/vm/memory_failure_recovery 
    /proc/sys/vm/oom_dump_tasks 
    /proc/sys/vm/oom_kill_allocating_task 
    /proc/sys/vm/overcommit_kbytes 
    /proc/sys/vm/overcommit_memory 
    /proc/sys/vm/overcommit_ratio 
    /proc/sys/vm/panic_on_oom 
    /proc/sys/vm/swappiness

    N、其它

    /proc/apm,文件,apm即Advanced Power Management,需要配置CONFIG_APM。 
    /proc/buddyinfo,文件,用于诊断内存碎片问题。 
    /proc/cmdline,文件,系统启动时传递给Linux内核的参数,如lilo、grub等boot管理模块。 
    /proc/config.gz,文件,内核编译配置选项,需要配置CONFIG_IKCONFIG_PROC。 
    /proc/crypto,文件,内核加密API提供的加密列表。 
    /proc/cpuinfo,文件,CPU和系统架构信息,lscpu命令使用这个文件。 
    /proc/devices,文件,设备相关信息。 
    /proc/diskstats,文件,磁盘状态。 
    /proc/dma,文件,dma即Direct Memory Access。 
    /proc/driver/rtc,文件,系统运行时配置。 
    /proc/execdomains,文件,执行域列表。 
    /proc/fb,文件,Frame Buffer信息,需要配置CONFIG_FB。 
    /proc/filesystems,文件,内核支持的文件系统类型(man filesystems)。 
    /proc/fs,目录,挂载的文件系统信息。 
    /proc/ide,目录,用于IDE接口。 
    /proc/interrupts,文件,每个CPU每个IO的中断信息。 
    /proc/iomem,文件,IO内存映射信息。 
    /proc/ioports,文件,IO端口信息。 
    /proc/kallsyms,文件,用于动态链接和和模块绑定的符号定义。 
    /proc/kcore,文件,系统中ELF格式的物理内存。 
    /proc/kmsg,文件,内核信息,dmsg命令使用这个文件。 
    /proc/kpagecount,文件,每个物理页帧映射的次数,需要配置CONFIG_PROC_PAGE_MONITOR。 
    /proc/kpageflags,文件,每个物理页帧的掩码,需要配置CONFIG_PROC_PAGE_MONITOR。 
    /proc/ksyms,文件,同kallsyms。 
    /proc/loadavg,文件,工作负荷。 
    /proc/locks,文件,当前文件锁的状态。 
    /proc/malloc,文件,需要配置CONFIG_DEBUG_MALLOC。 
    /proc/meminfo,文件,系统内存使用统计,free命令使用了这个文件。 
    /proc/modules,文件,系统加载的模块信息,相关命令为lsmod。 
    /proc/mounts,文件,链接到了/self/mounts。 
    /proc/mtrr,文件,Memory Type Range Registers。 
    /proc/partitions,文件,分区信息。 
    /proc/pci,文件,PCI接口设备。 
    /proc/profile,文件,用于readprofile命令作性能分析。 
    /proc/scsi,目录,SCSI接口设备。 
    /proc/scsi/scsi 
    /proc/scsi/[drivername] 
    /proc/self,目录,链接到了当前进程所在的目录。 
    /proc/slabinfo,文件,内核缓存信息,需要配置CONFIG_SLAB。 
    /proc/stat,文件,系统信息统计。 
    /proc/swaps,文件,使用的交换空间。 
    /proc/sysrq-trigger,文件,可写,触发系统调用。 
    /proc/sysvipc,目录,包括msg、sem、shm三个文件,为System V IPC对象。 
    /proc/thread-self,文件,链接到了当前进程下的task目录中的线程文件。 
    /proc/timer_list,文件,还在运行着的定时器列表。 
    /proc/timer_stats,文件,定时器状态。 
    /proc/tty,目录,tty设备相关。 
    /proc/uptime,文件,系统更新时间和进程空闲时间。 
    /proc/version,文件,内核版本信息。 
    /proc/vmstat,文件,内存统计信息,以键值对形式显示。 

    /proc/zoneinfo,文件,内存区块信息,用于分析虚拟内存的行为。

    使用 /proc 文件系统来访问 Linux 内核的内容,这个虚拟文件系统,在内核空间和用户空间之间打开了一个通信窗口:

    /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信

    在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。本文对 /proc 虚拟文件系统进行了介绍,并展示了它的用法。

    最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。

    清单 1 是对 /proc 中部分元素进行一次交互查询的结果。它显示的是 /proc 文件系统的根目录中的内容。注意,在左边是一系列数字编号的文件。每个实际上都是一个目录,表示系统中的一个进程。由于在 GNU/Linux 中创建的第一个进程是 init 进程,因此它的 process-id 为 1。然后对这个目录执行一个 ls 命令,这会显示很多文件。每个文件都提供了有关这个特殊进程的详细信息。/proc 中另外一些有趣的文件有:cpuinfo,它标识了处理器的类型和速度;pci,显示在 PCI 总线上找到的设备;modules,标识了当前加载到内核中的模块。

    另外,我们还可以使用 sysctl 来配置这些内核条目。/proc 文件系统并不是 GNU/Linux 系统中的惟一一个虚拟文件系统。在这种系统上,sysfs 是一个与 /proc 类似的文件系统,但是它的组织更好(从 /proc 中学习了很多教训)。不过 /proc 已经确立了自己的地位,因此即使 sysfs 与 /proc 相比有一些优点,/proc 也依然会存在。还有一个 debugfs 文件系统,不过(顾名思义)它提供的更多是调试接口。debugfs 的一个优点是它将一个值导出给用户空间非常简单(实际上这不过是一个调用而已)。

    这些文件的解释和意义如下:

    cmdline:系统启动时输入给内核命令行参数 
    cpuinfo:CPU的硬件信息 (型号, 家族, 缓存大小等)  
    devices:主设备号及设备组的列表,当前加载的各种设备(块设备/字符设备) 
    dma:使用的DMA通道 
    filesystems:当前内核支持的文件系统,当没有给 mount(1) 指明哪个文件系统的时候, mount(1) 就依靠该文件遍历不同的文件系统
    interrupts :中断的使用及触发次数,调试中断时很有用 
    ioports I/O:当前在用的已注册 I/O 端口范围 
    kcore:该伪文件以 core 文件格式给出了系统的物理内存映象(比较有用),可以用 GDB 查探当前内核的任意数据结构。该文件的总长度是物理内存 (RAM) 的大小再加上 4KB
    kmsg:可以用该文件取代系统调用 syslog(2) 来记录内核日志信息,对应dmesg命令
    kallsym:内核符号表,该文件保存了内核输出的符号定义, modules(X)使用该文件动态地连接和捆绑可装载的模块
    loadavg:负载均衡,平均负载数给出了在过去的 1、 5,、15 分钟里在运行队列里的任务数、总作业数以及正在运行的作业总数。
    locks:内核锁 。
    meminfo物理内存、交换空间等的信息,系统内存占用情况,对应df命令。
    misc:杂项 。
    modules:已经加载的模块列表,对应lsmod命令 。
    mounts:已加载的文件系统的列表,对应mount命令,无参数。
    partitions:系统识别的分区表 。
    slabinfo:sla池信息。
    stat:全面统计状态表,CPU内存的利用率等都是从这里提取数据。对应ps命令。
    swaps:对换空间的利用情况。 
    version:指明了当前正在运行的内核版本。


    可加载内核模块(LKM)是用来展示 /proc 文件系统的一种简单方法,这是因为这是一种用来动态地向 Linux 内核添加或删除代码的新方法。LKM 也是 Linux 内核中为设备驱动程序和文件系统使用的一种流行机制。如果你曾经重新编译过 Linux 内核,就可能会发现在内核的配置过程中,有很多设备驱动程序和其他内核元素都被编译成了模块。如果一个驱动程序被直接编译到了内核中,那么即使这个驱动程序没有运行,它的代码和静态数据也会占据一部分空间。但是如果这个驱动程序被编译成一个模块,就只有在需要内存并将其加载到内核时才会真正占用内存空间。


    集成到 /proc 文件系统中

    内核程序员可以使用的标准 API,LKM 程序员也可以使用。

    方法一:(create_proc_entry创建proc文件)

    1.1 .创建目录:

    1. struct proc_dir_entry *proc_mkdir(const char *name,  
    2.                 struct proc_dir_entry *parent);  

    1.2 .创建proc文件:

    1. struct proc_dir_entry *create_proc_entry( const char *name,  mode_t mode,  
    2.                 struct proc_dir_entry *parent );  

    create_proc_entry函数用于创建一个一般的proc文件,其中name是文件名,比如“hello”,mode是文件模式,parent是要创建的proc文件的父目录(若parent = NULL则创建在/proc目录下)。create_proc_entry 的返回值是一个 proc_dir_entry 指针(或者为 NULL,说明在 create 时发生了错误)。然后就可以使用这个返回的指针来配置这个虚拟文件的其他参数,例如在对该文件执行读操作时应该调用的函数。

    [html] view plain copy
    1. struct proc_dir_entry {  
    2.     ......  
    3.     const struct file_operations *proc_fops;    <==文件操作结构体  
    4.     struct proc_dir_entry *next, *parent, *subdir;  
    5.     void *data;  
    6.     read_proc_t *read_proc;                    <==读回调  
    7.     write_proc_t *write_proc;                  <==写回调  
    8.     ......  
    9. }; 

    1.3 .删除proc文件/目录:

    1. void remove_dir_entry(const char *name, struct proc_dir_entry *parent);  

    要从 /proc 中删除一个文件,可以使用 remove_proc_entry 函数。要使用这个函数,我们需要提供文件名字符串,以及这个文件在 /proc 文件系统中的位置(parent)


    3、proc文件读回调函数

    static int (*proc_read)(char *page, char **start,  off_t off, int count,  int *eof, void *data);


    4、proc文件写回调函数

    static int proc_write_foobar(struct file *file,  const char *buffer, unsigned long count,  void *data);

    proc文件实际上是一个叫做proc_dir_entry的struct(定义在proc_fs.h),该struct中有int read_proc和int write_proc两个元素,要实现proc的文件的读写就要给这两个元素赋值。但这里不是简单地将一个整数赋值过去就行了,需要实现两个回调函数。在用户或应用程序访问该proc文件时,就会调用这个函数,实现这个函数时只需将想要让用户看到的内容放入page即可在用户或应用程序试图写入该proc文件时,就会调用这个函数,实现这个函数时需要接收用户写入的数据(buff参数)。

    写回调函数

    我们可以使用 write_proc 函数向 /proc 中写入一项。这个函数的原型如下:

    int mod_write( struct file *filp, const char __user *buff,
                   unsigned long len, void *data );

    filp 参数实际上是一个打开文件结构(我们可以忽略这个参数)。buff 参数是传递给您的字符串数据。缓冲区地址实际上是一个用户空间的缓冲区,因此我们不能直接读取它。len 参数定义了在 buff 中有多少数据要被写入。data 参数是一个指向私有数据的指针。在这个模块中,我们声明了一个这种类型的函数来处理到达的数据。

    Linux 提供了一组 API 来在用户空间和内核空间之间移动数据。对于 write_proc 的情况来说,我们使用了 copy_from_user 函数来维护用户空间的数据。

    读回调函数

    我们可以使用 read_proc 函数从一个 /proc 项中读取数据(从内核空间到用户空间)。这个函数的原型如下:

    int mod_read( char *page, char **start, off_t off,
                  int count, int *eof, void *data );

    page 参数是这些数据写入到的位置,其中 count 定义了可以写入的最大字符数。在返回多页数据(通常一页是 4KB)时,我们需要使用 start和 off 参数。当所有数据全部写入之后,就需要设置 eof(文件结束参数)。与 write 类似,data 表示的也是私有数据。此处提供的 page 缓冲区在内核空间中。因此,我们可以直接写入,而不用调用 copy_to_user


    实例代码:

    1. #include <linux/module.h>    
    2. #include <linux/kernel.h>    
    3. #include <linux/init.h>    
    4. #include <linux/proc_fs.h>    
    5. #include <linux/jiffies.h>    
    6. #include <asm/uaccess.h>    
    7.     
    8.     
    9. #define MODULE_VERS "1.0"    
    10. #define MODULE_NAME "procfs_example"    
    11.     
    12. #define FOOBAR_LEN 8    
    13.     
    14. struct fb_data_t {    
    15.     char name[FOOBAR_LEN + 1];    
    16.     char value[FOOBAR_LEN + 1];    
    17. };    
    18.     
    19.     
    20. static struct proc_dir_entry *example_dir, *foo_file;      
    21.     
    22. struct fb_data_t foo_data;    
    23.       
    24. static int proc_read_foobar(char *page, char **start,    
    25.                 off_t off, int count,     
    26.                 int *eof, void *data)    
    27. {    
    28.     int len;    
    29.     struct fb_data_t *fb_data = (struct fb_data_t *)data;    
    30.     
    31.     /* DON'T DO THAT - buffer overruns are bad */    
    32.     len = sprintf(page, "%s = '%s'\n",     
    33.               fb_data->name, fb_data->value);    
    34.     
    35.     return len;    
    36. }    
    37.     
    38.     
    39. static int proc_write_foobar(struct file *file,    
    40.                  const char *buffer,    
    41.                  unsigned long count,     
    42.                  void *data)    
    43. {    
    44.     int len;    
    45.     struct fb_data_t *fb_data = (struct fb_data_t *)data;    
    46.     
    47.     if(count > FOOBAR_LEN)    
    48.         len = FOOBAR_LEN;    
    49.     else    
    50.         len = count;    
    51.     
    52.     if(copy_from_user(fb_data->name, buffer, len))    
    53.         return -EFAULT;    
    54.     
    55.     fb_data->value[len] = '\0';    
    56.     
    57.     return len;    
    58. }    
    59.     
    60.     
    61. static int __init init_procfs_example(void)    
    62. {    
    63.     int rv = 0;    
    64.     
    65.     /* create directory */    
    66.     example_dir = proc_mkdir(MODULE_NAME, NULL);    
    67.     if(example_dir == NULL) {    
    68.         rv = -ENOMEM;    
    69.         goto out;    
    70.     }    
    71.     
    72.     /* create foo and bar files using same callback   
    73.      * functions    
    74.      */    
    75.     foo_file = create_proc_entry("foo", 0644, example_dir);    
    76.     if(foo_file == NULL) {    
    77.         rv = -ENOMEM;    
    78.         goto no_foo;    
    79.     }    
    80.     
    81.     strcpy(foo_data.name, "foo");    
    82.     strcpy(foo_data.value, "foo");    
    83.     foo_file->data = &foo_data;    
    84.     foo_file->read_proc = proc_read_foobar;    
    85.     foo_file->write_proc = proc_write_foobar;    
    86.            
    87.     /* everything OK */    
    88.     printk(KERN_INFO "%s %s initialised\n",    
    89.            MODULE_NAME, MODULE_VERS);    
    90.     return 0;    
    91.     
    92.    
    93. no_foo:    
    94.     remove_proc_entry("jiffies", example_dir);    
    95.    
    96. out:    
    97.     return rv;    
    98. }    
    99.     
    100.     
    101. static void __exit cleanup_procfs_example(void)    
    102. {    
    103.     
    104.     remove_proc_entry("foo", example_dir);      
    105.     remove_proc_entry(MODULE_NAME, NULL);    
    106.     
    107.     printk(KERN_INFO "%s %s removed\n",    
    108.            MODULE_NAME, MODULE_VERS);    
    109. }    
    110.     
    111.     
    112. module_init(init_procfs_example);    
    113. module_exit(cleanup_procfs_example);    
    114.     
    115. MODULE_AUTHOR("Erik Mouw");    
    116. MODULE_DESCRIPTION("procfs examples");    
    117. MODULE_LICENSE("GPL");    


    linux设备驱动学习笔记--内核调试方法之proc:http://blog.csdn.net/itsenlin/article/details/43374921

    添加一个新的自定义的系统调用:http://blog.csdn.net/daydring/article/details/23913525

    展开全文
  • proc*c/c++简介

    千次阅读 2018-11-29 15:44:43
    一、概述 1. 概念 通过在过程化编程语言C/C++中嵌入SQL语句而开发出的应用程序。在通用编程语言中使用的SQL称为嵌入式SQL。 在SQL标准中定义了多种语言的嵌入式SQL ,各个厂商对嵌入式SQL的具体实现不同。...
  • /proc

    千次阅读 2019-09-10 16:19:40
    /proc包含很多目录,其中以进程ID命名的目录代表就是那个进程。这些目录下众多文件包含了进程的信息和统计信息,由内核数据映射而来。 limits:实际的资源限制 maps:映射的内存区域 sched:CPU调度的各种统计 ...
  • http://blog.chinaunix.net/uid-10449864-id-2956854.html原来对linux系统中的/proc目录不是很了解,只知道可以查看cpu...转载如下:Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统信息不是...
  • Linux系统中存在以下几类伪文件系统: 1.procfs:proc提供内核和用户交互的平台,由于其文件格式是ASCII,所以用户可以使用cat,vim,echo等命令查看或修改文件,当然必须在root用户下才有相应权限。...
  • linux proc接口

    千次阅读 2010-12-15 00:39:00
    linux proc接口的建立与使用 /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux® 内核空间和用户空间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行...
  • linux下proc文件夹详解

    千次阅读 2018-05-25 10:29:52
    Linux-proc proc 文件系统 在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统。最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告的内核...
  • proc datasets

    千次阅读 2011-04-10 21:55:00
    摘录:《PROC DATASETS;The Swiss Army Knife of SAS® Procedures》_Michael A. Raithel, Westat, Rockville, MD   There are many ways that one could go about organizing the functions ...
  • 深入理解proc文件系统

    千次阅读 2012-12-03 08:47:26
    原文转自:... 另外,可以参考这个http://www.centos.org/docs/5/html/5.1/Deployment_Guide/ch-proc.html    Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是
  • /proc详解

    万次阅读 2016-07-20 14:08:30
    内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统。 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储...
  • proc文件系统介绍

    千次阅读 2016-11-17 14:48:30
    ------------------------------------------------------------------------------ T H E /proc F I L E S Y S T E M ---------------------------------------------------------------
  •  本文主要分析/proc/kmsg文件的形成过程以及使用cat /proc/kmsg查看log_buf中的信息时所要经历的代码。并结合上面的分析写自己的 /proc/mymsg和myprintk 。    Linux内核:linux-2.6.22.6  所用开发板:JZ...
  • proc源码解析(三)--proc初始化

    千次阅读 2009-12-07 18:18:00
    在使用proc之前,我们必须首先初始化并挂载proc,并在内核内存中创建数据结构来描述文件系统。但是,不同的体系结构拥有不同的proc内容,所以,在初始化阶段并不完全创建子目录的内容,有些文件要等到系统运行时动态...
  • 理解 Proc 文件系统

    2018-09-16 15:44:39
    理解 Proc 文件系统 作者:王旭(翻译) 2004-10-05 18:25:55 来自:linuxfocus 转自:http://linux.chinaunix.net/doc/2004-10-05/16.shtml     1、/proc --- 一个虚拟文件系统  /proc 文件系统是一种内核...
  • proc文件系统读取

    千次阅读 2017-06-23 18:12:39
    Proc文件系统读取在以前的版本:(copy 学长的)在...struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent)struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
  • 继上篇文章Linux内核源代码情景分析-特殊文件系统/proc,我们对/proc/loadavg访问后,这篇文章是对/proc/self/cwd的访问。int __user_walk(const char *name, unsigned flags, struct nameidata *nd) { char *tmp; ...
  • 驱动调试之proc文件系统

    千次阅读 2016-10-27 19:45:55
     我们知道在/proc目录下存在一些文件,我们可以使用cat、echo命令来查询和设置一些系统的信息(比如查看内存的信息和cpu的信息等),可见/proc目录下的文件提供给我们和内核交互的功能。那么如果我们的驱动也有对应的...
1 2 3 4 5 ... 20
收藏数 416,775
精华内容 166,710
关键字:

proc