免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3504 | 回复: 11
打印 上一主题 下一主题

Linux procfs详解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-12 03:35 |只看该作者 |倒序浏览
  1. ------------------------------------------------------------------------------
  2.                        T H E  /proc   F I L E S Y S T E M
  3. ------------------------------------------------------------------------------
  4. /proc/sys         Terrehon Bowden <terrehon@pacbell.net>;        October 7 1999
  5.                   Bodo Bauer <bb@ricochet.net>;

  6. 2.4.x update          Jorge Nerin <comandante@zaralinux.com>;      November 14 2000
  7. ------------------------------------------------------------------------------
  8. Version 1.3                                              Kernel version 2.2.12
  9.                                               Kernel version 2.4.0-test11-pre4
  10. ------------------------------------------------------------------------------
  11. 翻译               freedemon <freedemon@msn.com>;               
  12.                                                                 October 9 2004
  13. ------------------------------------------------------------------------------


  14. 目录
  15. -----------------

  16.   0     序言
  17.   0.1        简介
  18.   0.2        责任

  19.   1     收集系统信息
  20.   1.0        proc文件系统概览
  21.   1.1        进程相关信息子目录
  22.   1.2        内核数据
  23.   1.3        IDE接口信息 /proc/ide
  24.   1.4        网络统计信息 /proc/net
  25.   1.5        SCSI接口信息 /proc/scsi
  26.   1.6        并行端口信息 /proc/parport
  27.   1.7        TTY端口信息 /proc/tty

  28.   2        调整内核参数
  29.   2.1        /proc/sys/fs - 文件系统数据
  30.   2.2        /proc/sys/fs/binfmt_misc - 二进制可执行格式杂项
  31.   2.3        /proc/sys/kernel - 通用系统参数
  32.   2.4        /proc/sys/vm - 虚拟内存系统
  33.   2.5        /proc/sys/dev - 设备相关参数
  34.   2.6        /proc/sys/sunrpc - 远程过程调用
  35.   2.7        /proc/sys/net - 网络子系统可调参数
  36.   2.8        /proc/sys/net/ipv4 - IPV4设置
  37.   2.9        Appletalk
  38.   2.10        IPX

  39. ------------------------------------------------------------------------------
  40. 绪言
  41. ------------------------------------------------------------------------------

  42. 0.1 简介
  43. ------------------------

  44. 这份文档最初是Suse Linux的一部分,在后来的时间里,它也成了Linux官方文档的一部分,并随
  45. 2.4之后版本的内核广为发布。作为对开放源代码社区的回馈,我们整理了这份不完善的文档,希望
  46. 能给需要它的人以帮助。这份文档最初是为Linux 2.2版本内核编写的,当前它也兼容于2.4版本
  47. 内核,其中一些高版本内核独有的特性在说明中都已列出。本文包含了/proc文件系统的绝大多数
  48. 方面,当然,主要针对的平台是Intel X86体系,在PPC, ARM, SPARC, APX和其他平台上可能有
  49. 少许平台特有的特性会略有不同。在网络部分本文主要针对介绍了IPv4的调整,并少许涉及IPv6、
  50. IPX以及其他网络协议部分。

  51. 非常感谢 Alan Cox, Rik van Riel, and Alexey Kuznetsov 以及许许多多帮助编辑这份
  52. 文档的人们,也非常感谢Andi Kleen 在本文创作过程中做出的巨大贡献。
  53. 感谢每一位支持Linux和开放源码软件的人们。

  54. 如果您有任何修正、注释或添加可以联系 Bodo Bauer  at  bb@ricochet.net,我们非常乐意
  55. 把它加入这份文档。

  56. 本文的最新版本可以在如下地址在线阅读(HTML格式):
  57. http://skaro.nightcrawler.com/~bb/Docs/Proc

  58. 如果本文的提示导致您的系统有任何问题或者无法正常工作,你可以在Linux内核邮件列表上得到帮助
  59. linux-kernel@vger.kernel.org  或联系本文原作者 comandante@zaralinux.com.

  60. 补充:
  61. 作为一份稍微有点老的文档,译者也准备添加一些新的内容,关于2.6版本内核新结构、某些商业发布
  62. 添加的内核特性(例如Redhat EL的exec-shield)以及 netfilter防火墙,在后文也会给出更多范
  63. 例和使用的调整指南。


  64. 0.2 责任
  65. ---------------
  66. 作者如是说:
  67. 我们不能保证这份文档的正确性,因此如果因为这份文档的错误导致您在系统配置过程中引发任何中断、
  68. 错误或数据损失,作者不会负任何责任,只能对您的损失表示“遗憾”。

  69. 译者如是说:
  70. 由于水平所限,我同样不能保证翻译的完整性和准确性。同时由于Linux内核是一个发展迅速的项目,将
  71. 会不断有新特性和信息加入进来,由于开源世界的大量兼容和不兼容补丁的存在,也可能有许多差异的地
  72. 方;同时相关于您的硬件环境以及加载的驱动和内核模块,可能系统表现也会略微有不同之处。
  73. 欢迎纠错与指正,信息可以反馈到 mail: freedemon &at msn &dot com


  74. ------------------------------------------------------------------------------
  75. 第一章: 收集系统信息
  76. ------------------------------------------------------------------------------

  77. ------------------------------------------------------------------------------
  78. 在这一章中,我们将...
  79. ------------------------------------------------------------------------------
  80. * 了解Linux伪文件系统/proc的相关属性,以及系统运行期间它所能提供的信息和功能
  81. * 考察 /proc 结构
  82. * 研究 /proc 文件系统中的不可调(只读)内核参数/信息及其作用
  83. ------------------------------------------------------------------------------



  84. 1.0 proc文件系统总览
  85. -----------------------------------
  86. 在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口
  87. --文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作。在Linux中存在着一类
  88. 特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs、devfs、sysfs
  89. 和procfs。而procfs就是其中应用最广泛的一种伪文件系统。

  90. procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到
  91. 一个目录树中,这样我们就可以简单直接的通过echo或cat这样的文件操作命令对系统信息进行查取
  92. 和调整了。同时procfs也提供了一个接口,使得我们自己的内核模块或用户态程序可以通过procfs
  93. 进行参数的传递。在当今的Linux系统中,大量的系统工具也通过procfs获取内核参数,例如ps、
  94. lspci等等,没有procfs它们将可能不能正常工作。

  95. procfs的使用如同常规的文件系统一样,例如加载一个procfs (首先确定你的内核已经支持procfs,
  96. 默认如此):

  97.   # mount -t proc none /proc
  98.   #

  99. 也可以在/etc/fstab中加入如下一行使系统在启动时自动加载procfs(大多数系统中也是默认如此):
  100.   none                   /proc                   proc    defaults        0 0


  101. 在proc文件系统中,主要包含三大类内容,进程相关部分,系统信息部分,以及系统子系统部分。
  102. 在下面我们可以看到一个典型的procfs布局:

  103.   >; ls /proc
  104.   1     2     2166  2281  cmdline      interrupts  meminfo     stat
  105.   13    2001  2167  3     cpuinfo      iomem       misc        swaps
  106.   1646  2042  2168  4     crypto       ioports     modules     sys
  107.   1780  2058  2169  5     devices      irq         mounts      sysrq-trigger
  108.   1834  2087  2170  6     dma          isapnp      mtrr        sysvipc
  109.   1838  2096  2171  7     driver       kcore       net         tty
  110.   1857  2107  2207  71    execdomains  kmsg        partitions  uptime
  111.   1877  2117  2208  8     fb           ksyms       pci         version
  112.   1889  2143  2216  9     filesystems  loadavg     scsi
  113.   1905  2153  2217  apm   fs           locks       self
  114.   1960  2165  2219  bus   ide          mdstat      slabinfo

  115. 在上面的布局中我们可以看到procfs包含的内容:
  116. * 进程相关部分 (只读)
  117.   这部分文件都是以数字为名的子目录,这个数字就是相关进程的进程ID,在 1.1节中会详细介绍进程
  118.   相关子目录的结构和信息。
  119.   需要注意的是procfs中进程子系统部分的一个特殊点,就是/proc/self,它是指向当前执行进程的
  120.   符号连接,或者说--是指向未来你将要执行指令的心灵感应:

  121.   >; cat self/cmdline
  122.   catself/cmdline

  123.   在这个命令中,我们希望它显示当前进程的cmdline参数,它恰恰就显示了当前进程--我们所执行的
  124.   这条命令,cat self/cmdline。幸好这条指令显示出的信息会忽略空格,导致显示略微的不正常,
  125.   否则我们倒是可以很容易的使用`cat self/cmdline`这样的命令制造出永远循环执行的进程来。;>;

  126. * 内核信息部分 (只读)
  127.   这部分文件同样处于/proc的顶层目录,不过它们大部分都是常规、只读的文本文件,可以直接用cat
  128.   查看信息。作为系统内核执行体的抽象,我们也可以把它看作内核"进程"的信息部分,当然虽然并不
  129.   存在这个进程实体。这里比较特别的一个文件是 /proc/cmdline :

  130.   >;cat cmdline
  131.   ro root=/dev/hda2

  132.   在这个文件中存放的是系统内核引导时的命令行参数。此部分内容将在 1.3节中说明。

  133. * 内核各子系统相关部分 (部分可调)
  134.   这部分是系统内核参数调整的重头戏,在procfs中,除去上面所述的两部分内容外,还有很大一部分
  135.   信息文件被存放在了一些并非以数字命名的特殊目录中,这些目录下的信息就是内核各个重要子系统
  136.   的信息和可调参数,主要有:
  137.    bus          总线信息(只读)
  138.    drivers      驱动信息(只读)
  139.    fs           文件系统特别信息(只读)
  140.    ide          IDE接口信息(只读)
  141.    irq          IRQ信息(只读)
  142.    net          网络子系统信息(只读)
  143.    scsi         SCSI系统信息(只读)
  144.    sysvipc      IPC子系统信息(只读)
  145.    tty          tty子系统信息(只读)
  146.    sys          系统内核可调参数  (可调)

  147. 作为Linux系统内核参数的抽象文件接口,Linux内核的大部分默认可调参数都被放在了 /proc/sys
  148. 目录下,这些参数都以常规文件的形式体现,并且可以用echo/cat等文件操作命令进行调整,调整的
  149. 效果是即时的,并且在系统运行的整个生命周期之间都有效(知道再次改变它们或者系统重启)。
  150. 当然Linux也提供了另外一种途径sysctl来调整这些参数,sysctl是从BSD系统继承而来的一种系统
  151. 参数动态调整方法,sysctl的使用更为简单,并且可以使用/etc/sysctl.conf保存配置以在下次启
  152. 动时自动加载这些设置。对于sysctl可调参数体积调整方法将在另一篇文章中说明。

  153. 对于内核信息和参数的说明将在 1.4 - 1.7节中解释;对于/proc/sys中的可调参数将在第二章中详
  154. 细说明。


  155. 1.1 进程相关子目录
  156. -----------------------------------

  157. 在/proc目录中包含了一些以数字为名的子目录,这些目录就是系统当前运行进程的proc抽象。每一个
  158. 目录都以相关联的活动系统进程PID为目录名,在目录下包含了一些文件,用于显示进程相关的信息。
  159. 每个进程映射子目录的结构都如 Table 1-1.


  160. Table 1-1: 在 /proc 目录中的进程相关入口文件
  161. ..............................................................................
  162. 文件名   内容                                       
  163. cmdline 执行进程的命令行参数                        
  164. cpu         在SMP系统中近程最后的执行CPU                                (2.4)(smp)
  165. cwd         到当前工作目录的符号链接
  166. environ 环境变量      
  167. exe         链接到进程对应的源可执行文件
  168. fd      包含所有进程打开的文件描述符的子目录
  169. maps         进程内存映射,包含进程执行空间以及动态链接库信息                (2.4)
  170. mem     进程内存空间                    
  171. root         连接到进程执行时的 / (root)目录
  172. stat    进程状态                                 
  173. statm   进程内存状态信息              
  174. status  进程状态总览,包含进程名字、当前状态和各种信息统计         
  175. ..............................................................................

  176. 举例来说,要获取一个进程的状态,只要读取下面进程PID子目录下的status文件 /proc/PID/status:

  177.   >;cat /proc/self/status
  178.   Name:   cat
  179.   State:  R (running)
  180.   Pid:    5452
  181.   PPid:   743
  182.   TracerPid:      0                                                (2.4)
  183.   Uid:    501     501     501     501
  184.   Gid:    100     100     100     100
  185.   Groups: 100 14 16
  186.   VmSize:     1112 kB
  187.   VmLck:         0 kB
  188.   VmRSS:       348 kB
  189.   VmData:       24 kB
  190.   VmStk:        12 kB
  191.   VmExe:         8 kB
  192.   VmLib:      1044 kB
  193.   SigPnd: 0000000000000000
  194.   SigBlk: 0000000000000000
  195.   SigIgn: 0000000000000000
  196.   SigCgt: 0000000000000000
  197.   CapInh: 00000000fffffeff
  198.   CapPrm: 0000000000000000
  199.   CapEff: 0000000000000000

  200. 如同第一节所说,/proc/self连接指向读取它自身的进程映像,在之后一节的例子中都将以
  201. 它作为我们的范例。
  202. 这条命令显示的信息与你通过 /bin/ps 命令获取到的进程信息基本相同,这恰巧是因为,ps
  203. 也是通过读取procfs来获取这些信息的。statm 文件包含了更详细的进程内存状态,statm
  204. 的详细内容按照数据项由左向右依次如 Table 1-2.

  205.   >;  cat /proc/self/statm
  206.   105 105 93 4 12 89 12

  207. Table 1-2: statm文件的内容
  208. ..............................................................................
  209. 数据项     内容                        
  210. size     程序大小              
  211. resident 常驻内存空间大小         
  212. shared   共享内存页数
  213. trs      代码段占用内存页数
  214. drs      数据/堆栈段占用内存页数   
  215. lrs      引用库占用内存页数      
  216. dt       脏页数量           
  217. ..............................................................................


  218. 1.2 内核数据
  219. ---------------

  220. 相似于进程入口,在/proc目录下的其他一些文件给出了内核信息数据,这些文件包含了系统
  221. 当前运行内核相关信息。/proc目录下内核相关信息文件在Table 1-3 中列出,依赖于您的
  222. 系统配置和加载的内核模块,在您的系统中的显示可能会略有不同。

  223. Table 1-3: Kernel info in /proc
  224. ..............................................................................
  225. 文件         内容                                          
  226. apm         高级电源管理信息                    
  227. bus         bus总线相关信息     
  228. cmdline     内核引导命令行参数                              
  229. cpuinfo     cpu信息                                
  230. devices     当前可用设备 (包含所有块设备和字符设备)           
  231. dma         DMA通道使用状况                                 
  232. filesystems 当前内核支持的文件系统                             
  233. driver             驱动相关信息                                                (2.4)
  234. execdomains 安全相关的Execdomains信息                                (2.4)
  235. fb             Frame Buffer 设备                                     (2.4)
  236. fs             本地文件系统参数                                        (2.4)
  237. ide         IDE子系统相关信息的子目录
  238. interrupts  中断使用状况                                   
  239. iomem             内存映射图                                                (2.4)
  240. ioports     I/O端口使用状况                                    
  241. irq             关联到cpu的irq使用状况                                (2.4)(smp?)
  242. isapnp             ISA PnP (即插即用) 信息                                (2.4)
  243. kcore       Kernel core image,内核转储映像                        (2.4)   
  244. kmsg        Kernel messages                                   
  245. ksyms       Kernel symbol table,内核符号表                              
  246. loadavg     最后1、5 、15 分钟的平均负载               
  247. locks       Kernel locks, 内核锁信息                                      
  248. meminfo     内存信息                                       
  249. misc        内核信息杂项                                    
  250. modules     已加载内核模块列表                           
  251. mounts      已加载的文件系统                              
  252. net         网络子系统信息                        
  253. partitions  已识别的本地系统分区表           
  254. pci             PCI总线相关信息,在新版本中指向 /proc/bus/pci/ 目录        (2.4)
  255. rtc         rtc实时钟                                   
  256. scsi        SCSI 总线信息                              
  257. slabinfo    Slab 内存分配池信息                                    
  258. stat        内核状态总览                              
  259. swaps       Swap 空间状态                           
  260. sys         内核系统参数  (参见第二章)                                    
  261. sysvipc     SysVIPC 资源状态   (msg, sem, shm)                        (2.4)
  262. tty             TTY驱动信息
  263. uptime      系统 uptime                                    
  264. version     内核版本                                    
  265. video             video 资源状态                                        (2.4)
  266. ..............................................................................

  267. 在proc文件系统中大多数文件都是可读的文本,可以直接使用系统中的常规文件处理命令进行操作。
  268. 当然,这也依赖于目标文件的权限属性。例如要查看系统中断信息 /proc/interrupts:

  269.   >; cat /proc/interrupts
  270.              CPU0        
  271.     0:    8728810          XT-PIC  timer
  272.     1:        895          XT-PIC  keyboard
  273.     2:          0          XT-PIC  cascade
  274.     3:     531695          XT-PIC  aha152x
  275.     4:    2014133          XT-PIC  serial
  276.     5:      44401          XT-PIC  pcnet_cs
  277.     8:          2          XT-PIC  rtc
  278.    11:          8          XT-PIC  i82365
  279.    12:     182918          XT-PIC  PS/2 Mouse
  280.    13:          1          XT-PIC  fpu
  281.    14:    1232265          XT-PIC  ide0
  282.    15:          7          XT-PIC  ide1
  283.   NMI:          0

  284. 在2.4版内核中,当使用了SMP时这个文件末尾会多出两行SMP相关属性 LOC & ERR :

  285.   >; cat /proc/interrupts

  286.              CPU0       CPU1      
  287.     0:    1243498    1214548    IO-APIC-edge  timer
  288.     1:       8949       8958    IO-APIC-edge  keyboard
  289.     2:          0          0          XT-PIC  cascade
  290.     5:      11286      10161    IO-APIC-edge  soundblaster
  291.     8:          1          0    IO-APIC-edge  rtc
  292.     9:      27422      27407    IO-APIC-edge  3c503
  293.    12:     113645     113873    IO-APIC-edge  PS/2 Mouse
  294.    13:          0          0          XT-PIC  fpu
  295.    14:      22491      24012    IO-APIC-edge  ide0
  296.    15:       2183       2415    IO-APIC-edge  ide1
  297.    17:      30564      30414   IO-APIC-level  eth0
  298.    18:        177        164   IO-APIC-level  bttv
  299.   NMI:    2457961    2457959
  300.   LOC:    2457882    2457881
  301.   ERR:       2155

  302. NMI是每个CPU上产生的不可屏蔽中断(Non Maskable Interrupt)的计数;
  303. LOC是每个CPU上APIC本地中断的计数。

  304. ERR是SMP系统中IO-APIC总线失败错误的计数,如果这个数量太高,可能你的内核运行会有
  305. 问题,这时候就需要测试内核,查看硬件和APIC是否有兼容性问题。

  306. 在2.4内核中irq相关的内核信息被放在/proc/irq目录下,在这个目录下包含一个文件
  307. prof_cpu_mask和每个IRQ独属的一个子目录。

  308.   >; ls /proc/irq/
  309.   0  10  12  14  16  18  2  4  6  8  prof_cpu_mask
  310.   1  11  13  15  17  19  3  5  7  9
  311.   >; ls /proc/irq/0/
  312.   smp_affinity

  313. 2.4内核中可以使用IRQ绑定属性,是某个或全部的IRQ挂接到SMP集合中的某个CPU上,这个
  314. 特性可以通过prof_cpu_mask和smp_affinity来调整。在默认情况下这两个文件的内容都
  315. "ffffffff",作为一个位映射而存在,你可以使用echo命令来指定一个CPU处理IRQ事件。

  316.   >; cat /proc/irq/0/smp_affinity
  317.   ffffffff

  318.   >; echo 1 >; /proc/irq/prof_cpu_mask

  319. 这天命令的结果就是系统中只有第一个CPU可以捕获IRQ事件,如果您使用的是"echo 5"的话
  320. 那么第一和第四个CPU都可以捕获和处理事件(1 + 4)。

  321. 在默认情况下IRQ事件由IO-APIC分配,它将轮询每个配置中的CPU,等待其中一个处理事件
  322. 响应。

  323. 在slabinfo文件文件中我们可以看到Linux内核的内存分配池信息,2.4版本内核中使用slab
  324. 算法来为内核对象(网络缓存、目录高速缓存以及文件分配表等等)分配内存页。
  325. 在/proc目录下还有三个重要的目录: net,scsi和sys,我们会在后面的章节中陆续描述;此
  326. 外如果您的系统中没有SCSI设备(或没有SCSI驱动)的话,/proc/scsi目录是不存在的。


  327. 1.3 IDE设备 /proc/ide
  328. ----------------------------

  329. /proc/ide目录下包含了所有内核识别出的IDE设备的信息。在/proc/ide目录下包含drivers
  330. 文件和若干个以IDE设备名或IDE控制器名为名的子目录。

  331.   >; ls -alF /proc/ide/
  332.   total 3
  333.   dr-xr-xr-x    4 root     root            0 10月  9 23:36 ./
  334.   dr-xr-xr-x   54 root     root            0 2004-10-10  ../
  335.   -r--r--r--    1 root     root            0 10月  9 23:36 drivers
  336.   lrwxrwxrwx    1 root     root            8 10月  9 23:36 hda ->; ide0/hda/
  337.   lrwxrwxrwx    1 root     root            8 10月  9 23:36 hdb ->; ide0/hdb/
  338.   lrwxrwxrwx    1 root     root            8 10月  9 23:36 hdc ->; ide1/hdc/
  339.   dr-xr-xr-x    4 root     root            0 10月  9 23:36 ide0/
  340.   dr-xr-xr-x    3 root     root            0 10月  9 23:36 ide1/
  341.   -r--r--r--    1 root     root            0 10月  9 23:36 piix

  342. drivers文件包含了当前加载的IDE设备驱动:

  343.   >; cat /proc/ide/drivers
  344.   ide-floppy version 0.99.newide
  345.   ide-disk version 1.17
  346.   ide-default version 0.9.newide

  347. 在/proc/ide目录下还可以看到其他一些以设备命名的目录,在这些目录下我们可以看到更
  348. 详细的信息。piix是IDE控制芯片组的名字,在你的系统中可能是其他名字。此外还包含若
  349. 干个(一般的PC上是2个)IDE控制器为名的目录,以及以IDE终端设备名命名的快捷方式,它
  350. 门将链接到控制器目录下对应的设备文件上。

  351. 在ide*目录中我们可以得到更多的信息,如 Table 1-4.

  352. Table 1-4: IDE控制器信息  /proc/ide/ide?
  353. ..............................................................................
  354. 文件名   内容                                 
  355. channel IDE通道 (0 or 1)                    
  356. config  配置 (only for PCI/IDE bridge)
  357. mate    Mate name                              
  358. model   IDE控制器的类型/芯片组
  359. hd?     IDE总线上连接的可用设备
  360. ..............................................................................


  361. 当前连接在控制器上的每个设备也将成为一个单独的子目录,如 Table 1-5.

  362. Table 1-5: IDE 设备信息
  363. ..............................................................................
  364. 文件名             内容                                   
  365. cache            设备缓存大小                                 
  366. capacity         设备数据块数量 (按 512Byte 块)
  367. driver           驱动和版本                        
  368. geometry         物理和逻辑的设备参数              
  369. identify         设备标示块                     
  370. media            媒体类型                                 
  371. model            设备标识符(型号或名字)                          
  372. settings         设备配置参数                              
  373. smart_thresholds IDE disk management thresholds            
  374. smart_values     IDE disk management values                 
  375. ..............................................................................

  376. 在这里比较有用的信息是settings文件,它包含了一个驱动器相关的信息总览:

  377.   # cat /proc/ide/ide0/hda/settings
  378.   name                    value           min             max             mode
  379.   ----                    -----           ---             ---             ----
  380.   bios_cyl                526             0               65535           rw
  381.   bios_head               255             0               255             rw
  382.   bios_sect               63              0               63              rw
  383.   breada_readahead        4               0               127             rw
  384.   bswap                   0               0               1               r
  385.   file_readahead          72              0               2097151         rw
  386.   io_32bit                0               0               3               rw
  387.   keepsettings            0               0               1               rw
  388.   max_kb_per_request      122             1               127             rw
  389.   multcount               0               0               8               rw
  390.   nice1                   1               0               1               rw
  391.   nowerr                  0               0               1               rw
  392.   pio_mode                write-only      0               255             w
  393.   slow                    0               0               1               rw
  394.   unmaskirq               0               0               1               rw
  395.   using_dma               0               0               1               rw


  396. 1.4 网络信息 /proc/net
  397. --------------------------------
  398. /proc/net 子目录包含了系统中网络相关的内核统计信息和视图,常规的文件列表如
  399. Table 1-7 中说明; 如果你的内核支持IPV6,那么还有一些IPV6相关信息在 Table 1-6中

  400. Table 1-6: IPv6 信息
  401. ..............................................................................
  402. 文件名       内容                                               
  403. udp6       UDP sockets (IPv6)                                    
  404. tcp6       TCP sockets (IPv6)                                    
  405. raw6       Raw 设备状态 (IPv6)                          
  406. igmp6      系统当前加入的IP多播地址  (IPv6)
  407. if_inet6   IPv6 网络接口地址列表                     
  408. ipv6_route IPv6 内核路由表                        
  409. rt6_stats  IPv6 全局路由表状态               
  410. sockstat6  Socket 状态 (IPv6)                              
  411. snmp6      Snmp 数据 (IPv6)                                      
  412. ..............................................................................


  413. Table 1-7: 网络信息  /proc/net
  414. ..............................................................................
  415. 文件名         内容                                                         
  416. arp           内核 ARP 表               
  417. atm           atm设备接口信息
  418. drivers       加载的驱动模块信息
  419. dev           网络设备以及状态                                
  420. dev_mcast     二层多播组以及监听设备信息
  421.                (包含interface index, label, number of references, number of
  422.                bound addresses).
  423. dev_stat      网络设备状态                                          
  424. ip_fwchains   ipchains 防火墙规则链                          (2.2)               
  425. ip_fwnames    ipchains 防火墙规则链名                        (2.2)                    
  426. ip_masq       包含IP伪装映射表的目录                          (2.2)   
  427. ip_masquerade 主IP伪装映射表                                 (2.2)      
  428. netstat       网络状态                                             
  429. raw           原始设备状态                                          
  430. route         内核路由表                                            
  431. rpc           包含rpc信息的目录                                 
  432. rt_cache      路由cache                                                   
  433. snmp          SNMP 数据                                                      
  434. sockstat      Socket 状态                                             
  435. tcp           TCP  sockets                                                   
  436. tr_rif        Token ring RIF 令牌环网路由表                                   
  437. udp           UDP sockets                                                     
  438. unix          UNIX domain sockets                                             
  439. wireless      Wireless 接口数据 (Wavelan etc)                           
  440. igmp          主机当前加入的IP多播组地址                 
  441. psched        全局数据包调度参数                             
  442. netlink       PF_NETLINK sockets 列表                                    
  443. ip_mr_vifs    多播虚拟地址列表                           
  444. ip_mr_cache   多播路由cache列表                                 
  445. ..............................................................................

  446. 由于2.4之后的内核引入了netfilter/iptables防火墙,因此在防火墙部分的信息与2.2
  447. 略有不同:
  448. ..............................................................................
  449.   文件名                 内容   
  450.   ip_tables_matches     iptables支持的过滤模式
  451.   ip_tables_names       iptables规则表名字
  452.   ip_tables_targets     iptables规则链目标
  453.   ip_conntrack          iptables状态检测跟踪表
  454. ..............................................................................

  455. 您可以使用这些信息来查看当前系统中可用的网络设备,以及这些设备上通过的流量和路由信息:

  456.   >; cat /proc/net/dev
  457.   Inter-|Receive                                                   |[...
  458.    face |bytes    packets errs drop fifo frame compressed multicast|[...
  459.       lo:  908188   5596     0    0    0     0          0         0 [...         
  460.     ppp0:15475140  20721   410    0    0   410          0         0 [...  
  461.     eth0:  614530   7085     0    0    0     0          0         1 [...
  462.    
  463.   ...] Transmit
  464.   ...] bytes    packets errs drop fifo colls carrier compressed
  465.   ...]  908188     5596    0    0    0     0       0          0
  466.   ...] 1375103    17405    0    0    0     0       0          0
  467.   ...] 1703981     5535    0    0    0     3       0          0

  468. 如果系统中使用了Ethernet Channel特性,使若干个物理接口绑定为一个逻辑设备的话,
  469. 这个逻辑设备将会拥有一个以设备名命名的子目录,其中包含一些bond模块相关的特殊信息。
  470. 例如把eth0和eth1绑定为设备 bond0 ,那么可以在 /proc/net/bond0/目录下看到bond
  471. 的特殊信息,例如主从接口、链路状态等等。


  472. 1.5 SCSI 设备信息
  473. -------------
  474. 如果你的系统中含有任何SCSI设备,那么在 /proc/scsi 目录下可以看到系统识别到的SCSI
  475. 设备相关信息:

  476.   >;cat /proc/scsi/scsi
  477.   Attached devices:
  478.   Host: scsi0 Channel: 00 Id: 00 Lun: 00
  479.     Vendor: IBM      Model: DGHS09U          Rev: 03E0
  480.     Type:   Direct-Access                    ANSI SCSI revision: 03
  481.   Host: scsi0 Channel: 00 Id: 06 Lun: 00
  482.     Vendor: PIONEER  Model: CD-ROM DR-U06S   Rev: 1.04
  483.     Type:   CD-ROM                           ANSI SCSI revision: 02

  484. 系统中的SCSI设备将映射到/proc/scsi目录下形成一个子树,按照对应的设备模块和设备
  485. 总线号可以查看相应设备的参数信息,例如一个Adaptec AHA-2940 SCSI 适配器:

  486.   >; cat /proc/scsi/aic7xxx/0
  487.    
  488.   Adaptec AIC7xxx driver version: 5.1.19/3.2.4
  489.   Compile Options:
  490.     TCQ Enabled By Default : Disabled
  491.     AIC7XXX_PROC_STATS     : Disabled
  492.     AIC7XXX_RESET_DELAY    : 5
  493.   Adapter Configuration:
  494.              SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter
  495.                              Ultra Wide Controller
  496.       PCI MMAPed I/O Base: 0xeb001000
  497.    Adapter SEEPROM Config: SEEPROM found and used.
  498.         Adaptec SCSI BIOS: Enabled
  499.                       IRQ: 10
  500.                      SCBs: Active 0, Max Active 2,
  501.                            Allocated 15, HW 16, Page 255
  502.                Interrupts: 160328
  503.         BIOS Control Word: 0x18b6
  504.      Adapter Control Word: 0x005b
  505.      Extended Translation: Enabled
  506.   Disconnect Enable Flags: 0xffff
  507.        Ultra Enable Flags: 0x0001
  508.    Tag Queue Enable Flags: 0x0000
  509.   Ordered Queue Tag Flags: 0x0000
  510.   Default Tag Queue Depth: 8
  511.       Tagged Queue By Device array for aic7xxx host instance 0:
  512.         {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}
  513.       Actual queue depth per device for aic7xxx host instance 0:
  514.         {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
  515.   Statistics:
  516.   (scsi0:0:0:0)
  517.     Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8
  518.     Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0)
  519.     Total transfers 160151 (74577 reads and 85574 writes)
  520.   (scsi0:0:6:0)
  521.     Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15
  522.     Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0)
  523.     Total transfers 0 (0 reads and 0 writes)


  524. 1.6 并口信息 /proc/parport
  525. ---------------------------------------
  526. /proc/parport 包含系统并口信息,按照并口端口号(0,1,2,...)每个设备将映射到一个子
  527. 目录中。在这个目录下包含的信息如 Table 1-8.

  528. Table 1-8:  /proc/parport 下包含的文件信息
  529. ..............................................................................
  530. 文件名      内容                                                            
  531. autoprobe IEEE-1284 标准兼容的设备ID信息         
  532. devices   端口使用的设备驱动列表
  533. hardware  端口使用的base address, IRQ line 和 DMA channel.            
  534. irq       端口使用的IRQ号,你可以写入一个新值指定IRQ号 (IRQ number or none).
  535. ..............................................................................


  536. 1.7 TTY信息 /proc/tty
  537. -------------------------
  538. 在/proc/tty目录中包含了系统中当前在用的tty及其信息,在这个目录中也可以找到设备
  539. 信息和线路disciplines,如 Table 1-9.

  540. Table 1-9:  /proc/tty 中的文件
  541. ..............................................................................
  542. 文件名          内容                                       
  543. drivers       设备及引用计数               
  544. ldiscs        registered line disciplines                    
  545. driver/serial tty线路状态
  546. ..............................................................................

  547. 要查看系统中的当前在用ttys,可以简单的查看 /proc/tty/drivers:

  548.   >; cat /proc/tty/drivers
  549.   pty_slave            /dev/pts      136   0-255 pty:slave
  550.   pty_master           /dev/ptm      128   0-255 pty:master
  551.   pty_slave            /dev/ttyp       3   0-255 pty:slave
  552.   pty_master           /dev/pty        2   0-255 pty:master
  553.   serial               /dev/cua        5   64-67 serial:callout
  554.   serial               /dev/ttyS       4   64-67 serial
  555.   /dev/tty0            /dev/tty0       4       0 system:vtmaster
  556.   /dev/ptmx            /dev/ptmx       5       2 system
  557.   /dev/console         /dev/console    5       1 system:console
  558.   /dev/tty             /dev/tty        5       0 system:/dev/tty
  559.   unknown              /dev/tty        4    1-63 console


  560. ------------------------------------------------------------------------------
  561. 摘要
  562. ------------------------------------------------------------------------------
  563. 本章介绍了 /proc 文件系统提供的系统运行时信息. 在 /proc 文件系统中,您不仅可以
  564. 简单直接的访问进程相关信息,也可以通过它查看各个方面的系统内核状态。

  565. 在 /proc 文件系统中,大部分信息都以常规或文本文件的形式反映出来,您可以任意使用
  566. 简单的文件处理命令来查看它(只要权限允许);如果某些文件不能被查看或者产生乱码,那
  567. 么它可能是一些特殊类型的文件,需要其它手段来处理,例如 /proc/kcore 可以通过gdb
  568. 等内核调试工具来查看,而其他一些数据则可以被ps、top等工具所理解。

  569. ------------------------------------------------------------------------------
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-10-12 03:50 |只看该作者

Linux procfs详解

在这一章中,我们对procfs的结构进行了一下纵览,对它的作用也该有一些了解了。在procfs中除了得到大量系统内核信息之外,它最重要的一个作用莫过于对进程的监控和分析了。有了procfs,你也可以写出自己的ps/top来,甚至不用任何编程工具......

比如,很多Linux新手都常常遇到的一个问题,就是夹在了一个文件系统之后不能卸载,系统报告这样的错误:


  1. # umount /db1                                            
  2. umount: /db1: device is busy
复制代码


经验老到的管理员们都知道,这个问题是由于某些进程的工作目录还在这个目录下,导致系统卷忙而无法卸载,只要杀掉那个进程,文件系统就可以正常卸载了。但究竟是哪个进程还在那里呢?找起来恐怕也要费半天神。虽然有pfile和lsof之类的工具可用,但总也有应急的时候吧,这棵小脚本就可以为你解忧。


  1. #!/bin/bash
  2. #pcwd.sh,查找系统中工作在目标路径下的进程,使用方法: pcwd.sh 路径名

  3. test $1 || { echo "Usage: pcwd.sh path(absolute path)" && exit };

  4. PS=`ls /proc/*[0-9]*|grep :` ;
  5. PSList=`echo $PS |tr -d '/proc'|tr -d ':'`;
  6. for PID in $PSList
  7.   do
  8.   test -e /proc/$PID && (ls -alF /proc/$PID/cwd|grep $1 >;/dev/null ) && echo "Process $PID (`cat /proc/$PID/status |grep Name |tr -d 'Name:\t'`) is work in $1 ";
  9. done

复制代码


就是这样短短的几行代码,甚至不用任何的临时文件,我们就获取了执行命令前的当前系统进程表映像,然后遍历每个进程的proc目录,找到占用我们目录的"坏进程"。

在我的系统上的输出:

  1. [elly@frost.llnl]/tmp# ./pcwd.sh
  2. Usage: pcwd.sh path(absolute path)

  3. [elly@frost.llnl]/tmp# ./pcwd.sh /usr
  4. Process 1283 (vi) is work in /usr ;
  5. Process 3113 (bsh) is work in /usr ;

复制代码

论坛徽章:
0
3 [报告]
发表于 2004-10-12 04:00 |只看该作者

Linux procfs详解

在上面的例子中,我们只用了最简单的四五个文件和文本处理命令,就完成了这个小程序,你甚至可以把所有的语句写在一行上,通过命令行或alias定义就完成这个功能。

把它稍稍修改一下就是另外一个功能,查找正在使用某个文件的进程:


  1. #!/bin/bash

  2. test $1 || { echo "Usage: pfile.sh filename(absolute path)" && exit };

  3. PS=`ls /proc/*[0-9]*|grep :` ;
  4. PSList=`echo $PS |tr -d '/proc'|tr -d ':'`;
  5. for PID in $PSList
  6.   do
  7.   test -e /proc/$PID && (ls -alF /proc/$PID/fd|grep $1 >;/dev/null ) && echo "Process $PID (`cat /proc/$PID/status |grep Name |tr -d 'Name:\t'`) is openning $1;";
  8. done

复制代码


在我系统上的输出:

  1. [elly@frost.llnl]/tmp# ./pfile.sh
  2. Usage: pfile.sh filename(absolute path)

  3. [elly@frost.llnl]/tmp# ./pfile.sh access_log
  4. Process 109 (httpd) is openning access_log;
  5. Process 110 (httpd) is openning access_log;
  6. Process 112 (httpd) is openning access_log;
  7. Process 113 (httpd) is openning access_log;
  8. Process 116 (httpd) is openning access_log;
  9. Process 99 (httpd) is openning access_log;

复制代码


目标文件名可以使用相对或绝对路径,甚至可以只输入半个文件名...当然路径越精确查找的结果也越准确。在这个例子中,很容易就可以扩展它的功能,让它实现类似lsof的功能,可以列举系统中所有正在被使用的文件。

.

论坛徽章:
0
4 [报告]
发表于 2004-10-12 04:14 |只看该作者

Linux procfs详解

好啦,我们做一个有用点的程序。

ps,每台机器上都有吧。不幸的是,在某些极端环境下,系统中的PS是不可靠的,比如,坏了...或被人替换了。

很多恶意的黑客入侵系统之后会在系统上安装一类叫rootkit的后门包,用来替换系统中ps、netstat等重要程序以隐藏自己的痕迹,这个时候一般比较稳妥的办法是自己上传一份可靠的系统工具包,或者静态编译的工具包。当然,也可以用这个土办法,直接从procfs里读取信息。(如果是比较高明的黑客,使用LKM等内核后门那这个就没有用了哦)

范例:懒人的ps,就叫它lps吧。

  1. #!/bin/bash


  2. PS=`ls /proc/*[0-9]*|grep :` ;
  3. PSList=`echo $PS |tr -d '/proc' |tr -d ':' |sort `;

  4. echo -e "PID\tPPID\tUID\tGID\tSTAT\t\tMEM\tTTY\tCMD"
  5. for PID in $PSList
  6.   do
  7.   test -e /proc/$PID && sPID=`cat /proc/$PID/status |grep ^Pid: |awk '{print $2}'` \
  8.   && sPPID=`cat /proc/$PID/status |grep ^PPid: |awk '{print $2}'` \
  9.   && sTTY=`ls -alF /proc/$PID/fd |grep /dev/ |awk '{print $11}' |grep ty |head -n 1` \
  10.   && sUID=`cat /proc/$PID/status |grep ^Uid: |awk '{print $2}'` \
  11.   && sGID=`cat /proc/$PID/status |grep ^Gid: |awk '{print $2}'` \
  12.   && sSTAT=`cat /proc/$PID/status |grep ^State: |awk '{print $2 $3}'` \
  13.   && sMEM=`cat /proc/$PID/status |grep ^VmSize: |awk '{print $2 $3}'` \
  14.   && if [ -e /proc/$PID/exe ]
  15.   then
  16.      sCMD=`ls -alF /proc/$PID/exe |awk '{print $11}' |tr -d '$*' `
  17.   else
  18.      sCMD=`cat /proc/$PID/status |grep ^Name: |awk '{print $2}'`
  19.      sCMD="[ $sCMD ]"
  20.   fi

  21.   echo -e "$sPID\t$sPPID\t$sUID\t$sGID\t$sSTAT\t$sMEM\t$sTTY\t$sCMD"
  22. done


复制代码


简要介绍,这个lps或列举系统中自身进程(lps)之外的所有进程,然后读取和显示他们的八项属性,依次是:
进程ID(PID)  父进程ID(PPID) 属主UID(UID) 属主GID(GID) 当前状态 占用内存 运行终端 完全执行路径。

在显示格式参考了Linux标准ps输出的一部分,例如某些系统线程没有可执行文件的,就会显示他们的内核名字,例如[ ksoftirqd_CPU0 ] 。
懒人的PS中没有任何参数,你也可以扩展它的功能,使之能支持按照进程树状显示等等。

在我系统上的输出:

  1. [elly@frost.llnl]/tmp# ./lps.sh
  2. PID     PPID    UID     GID     STAT            MEM     TTY     CMD
  3. 1       0       0       0       S(sleeping)     1116kB          /sbin/init
  4. 101     1       0       0       S(sleeping)     2168kB          /usr/local/sbin/sshd
  5. 109     99      99      99      S(sleeping)     6100kB          /usr/local/apache/bin/httpd
  6. 110     99      99      99      S(sleeping)     6100kB          /usr/local/apache/bin/httpd
  7. 112     99      99      99      S(sleeping)     6100kB          /usr/local/apache/bin/httpd
  8. 113     99      99      99      S(sleeping)     6100kB          /usr/local/apache/bin/httpd
  9. 116     99      99      99      S(sleeping)     6100kB          /usr/local/apache/bin/httpd
  10. 118     1       0       0       S(sleeping)     1656kB          /bin/bash
  11. 119     1       0       0       S(sleeping)     1648kB          /bin/bash
  12. 120     1       0       0       S(sleeping)     1648kB          /bin/bash
  13. 128     1       0       0       S(sleeping)     2224kB  /dev/tty1       /bin/login
  14. 1283    3113    0       0       S(sleeping)     1512kB  /dev/ttyp0      /bin/vi
  15. 129     1       0       0       S(sleeping)     1136kB  /dev/tty2       /sbin/getty
  16. 130     1       0       0       S(sleeping)     1136kB  /dev/tty3       /sbin/getty
  17. 131     1       0       0       S(sleeping)     1136kB  /dev/tty4       /sbin/getty
  18. 135     1       0       0       S(sleeping)     1136kB  /dev/tty5       /sbin/getty
  19. 136     1       0       0       S(sleeping)     1136kB  /dev/tty6       /sbin/getty
  20. 137     1       0       0       S(sleeping)     1140kB  /dev/ttyS0      /sbin/getty
  21. 15329   3112    0       0       S(sleeping)     1792kB  /dev/ttyp1      /bin/bash
  22. 2       1       0       0       S(sleeping)                     [ keventd ]
  23. 256     128     0       0       S(sleeping)     1712kB  /dev/tty1       /bin/bash
  24. 3       1       0       0       S(sleeping)                     [ ksoftirqd_CPU0 ]
  25. 3112    101     0       0       S(sleeping)     2452kB  /dev/ptyp1      /usr/local/sbin/sshd
  26. 3113    3112    0       0       S(sleeping)     1728kB  /dev/ttyp0      /bin/bash
  27. 3872    120     0       0       S(sleeping)     1084kB          /bin/sleep
  28. 4       1       0       0       S(sleeping)                     [ kswapd ]
  29. 4       1       0       0       S(sleeping)                     [ kswapd ]
  30. 4       1       0       0       S(sleeping)                     [ kswapd ]
  31. 4089    15329   0       0       S(sleeping)     1664kB  /dev/ttyp1      /bin/bash
  32. 4089    15329   0       0       S(sleeping)     1664kB  /dev/ttyp1      /bin/bash
  33. 5       1       0       0       S(sleeping)                     [ bdflush ]
  34. 6       1       0       0       S(sleeping)                     [ kupdated ]
  35. 99      1       0       0       S(sleeping)     6016kB          /usr/local/apache/bin/httpd
复制代码

论坛徽章:
0
5 [报告]
发表于 2004-10-12 04:41 |只看该作者

Linux procfs详解

最后一个!

信息,我要更多一点。

Solaris上有/usr/proc/bin工具集,里面的ptree和pmap很是好用,甚至比本来的ps还好
可惜Linux上是没有的,现在你可以自己写一个,用来综合显示更多的进程状态。


  1. #!/bin/bash
  2. #PROC=`mount |grep 'type proc'|awk '{print $3}'`

  3. test $1 || { echo "Usage: pstat.sh PID" && exit };
  4. PID=$1;

  5. echo "Process $1 Status...";
  6. echo "......................";
  7. echo
  8. cat /proc/$PID/status|grep ^Name:
  9. cat /proc/$PID/status|grep ^Pid:
  10. cat /proc/$PID/status|grep ^PPid:
  11. cat /proc/$PID/status|grep ^Uid:
  12. cat /proc/$PID/status|grep ^Gid:
  13. cat /proc/$PID/status|grep ^State:
  14. cat /proc/$PID/status|grep ^VmSize:
  15. echo
  16. CMD=`ls -alF /proc/$PID/exe |awk '{print $11}' |tr -d '$*'`;echo "Command path: $CMD";
  17. ARG=`cat /proc/$PID/cmdline`;echo "Command line: $ARG";
  18. CWD=`ls -alF /proc/$PID/cwd |awk '{print $11}'`;echo "CWD: $CWD";
  19. echo
  20. ENVI=`cat /proc/$PID/environ`;echo "ENVIRON: $ENVI";
  21. echo
  22. echo
  23. echo "Process shared object:";
  24. echo "......................";
  25. cat /proc/$PID/maps |grep $CMD |grep xp;
  26. cat /proc/$PID/maps |grep .so |grep xp;
  27. echo
  28. echo
  29. echo "Process used file:";
  30. echo "......................";
  31. ls -alF /proc/$PID/fd |grep '\->;' |awk '{print $11}' |sort |uniq -c |sort -rn ;
  32. echo


复制代码


这个程序叫pstat.sh,可以显示进程的综合信息。输出分为四段,分别是进程状态(包含父子进程关系、进程信任状以及内存占用),执行环境(包含进程执行程序,命令行参数和环境变量),进程执行对象(包含进程执行体和引用的共享库),最后是进程打开的所有文件。


  1. [elly@frost.llnl]/tmp# ./pstat.sh
  2. Usage: pstat.sh PID

  3. [elly@frost.llnl]/tmp# ./pstat.sh 7238
  4. Process 7238 Status...
  5. ......................

  6. Name:   vi
  7. Pid:    7238
  8. PPid:   3113
  9. Uid:    0       0       0       0
  10. Gid:    0       0       0       0
  11. State:  S (sleeping)
  12. VmSize:     1648 kB

  13. Command path: /bin/vi
  14. Command line: vi
  15. CWD: /usr/

  16. ENVIRON: USERNAME=root


  17. Process shared object:
  18. ......................
  19. 08048000-08098000 r-xp 00000000 03:01 3891       /bin/vi
  20. 40000000-40013000 r-xp 00000000 03:01 3942       /lib/ld-2.1.3.so
  21. 40016000-40019000 r-xp 00000000 03:01 4002       /lib/libtermcap.so.2.0.8
  22. 4001a000-40107000 r-xp 00000000 03:01 3949       /lib/libc-2.1.3.so
  23. 4010f000-40117000 r-xp 00000000 03:01 3981       /lib/libnss_files-2.1.3.so


  24. Process used file:
  25. ......................
  26. /dev/ttyp0
  27. /etc/motd

复制代码

论坛徽章:
0
6 [报告]
发表于 2004-10-12 04:47 |只看该作者

Linux procfs详解

进程游戏就玩到这里。

如果你有足够的细心和耐心,你可以按照上面的程序框架完成任何其他编程语言能够完成的工作。考虑到通用性,我没有使用任何临时文件,因此在实现上会有更多的困难和限制。不过程序框架已经在这里了,扩展它需要更多的知识执行流程和错误处理。中国移动说,你能。

下一章会继续回到procfs的主题上,讲述通过procfs进行系统参数的调整和配置。

.

论坛徽章:
0
7 [报告]
发表于 2004-10-12 08:54 |只看该作者

Linux procfs详解

好!3qs

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
8 [报告]
发表于 2004-10-12 09:04 |只看该作者

Linux procfs详解

不错
8过,查mnt进程没有这么复杂,使用fuser就可以了

论坛徽章:
0
9 [报告]
发表于 2004-10-12 12:34 |只看该作者

Linux procfs详解

好!顶!
何时有下篇?

论坛徽章:
0
10 [报告]
发表于 2004-10-12 12:46 |只看该作者

Linux procfs详解

支持 一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP