Linux内核通信之---proc文件系统(详解)

使用 /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 .创建目录:

[c]  view plain  copy
  1. struct proc_dir_entry *proc_mkdir(const char *name,  
  2.                 struct proc_dir_entry *parent);  

1.2 .创建proc文件:

[c]  view plain  copy
  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


实例代码:

#include <linux/module.h>  
#include <linux/kernel.h>  
#include <linux/init.h>  
#include <linux/proc_fs.h>  
#include <linux/jiffies.h>  
#include <asm/uaccess.h>  
  
  
#define MODULE_VERS "1.0"  
#define MODULE_NAME "procfs_example"  
  
#define FOOBAR_LEN 8  
  
struct fb_data_t {  
    char name[FOOBAR_LEN + 1];  
    char value[FOOBAR_LEN + 1];  
};  
  
  
static struct proc_dir_entry *example_dir, *foo_file;    
  
struct fb_data_t foo_data;  
    
static int proc_read_foobar(char *page, char **start,  
                off_t off, int count,   
                int *eof, void *data)  
{  
    int len;  
    struct fb_data_t *fb_data = (struct fb_data_t *)data;  
  
    /* DON'T DO THAT - buffer overruns are bad */  
    len = sprintf(page, "%s = '%s'\n",   
              fb_data->name, fb_data->value);  
  
    return len;  
}  
  
  
static int proc_write_foobar(struct file *file,  
                 const char *buffer,  
                 unsigned long count,   
                 void *data)  
{  
    int len;  
    struct fb_data_t *fb_data = (struct fb_data_t *)data;  
  
    if(count > FOOBAR_LEN)  
        len = FOOBAR_LEN;  
    else  
        len = count;  
  
    if(copy_from_user(fb_data->name, buffer, len))  
        return -EFAULT;  
  
    fb_data->value[len] = '\0';  
  
    return len;  
}  
  
  
static int __init init_procfs_example(void)  
{  
    int rv = 0;  
  
    /* create directory */  
    example_dir = proc_mkdir(MODULE_NAME, NULL);  
    if(example_dir == NULL) {  
        rv = -ENOMEM;  
        goto out;  
    }  
  
    /* create foo and bar files using same callback  
     * functions   
     */  
    foo_file = create_proc_entry("foo", 0644, example_dir);  
    if(foo_file == NULL) {  
        rv = -ENOMEM;  
        goto no_foo;  
    }  
  
    strcpy(foo_data.name, "foo");  
    strcpy(foo_data.value, "foo");  
    foo_file->data = &foo_data;  
    foo_file->read_proc = proc_read_foobar;  
    foo_file->write_proc = proc_write_foobar;  
         
    /* everything OK */  
    printk(KERN_INFO "%s %s initialised\n",  
           MODULE_NAME, MODULE_VERS);  
    return 0;  
  
 
no_foo:  
    remove_proc_entry("jiffies", example_dir);  
 
out:  
    return rv;  
}  
  
  
static void __exit cleanup_procfs_example(void)  
{  
  
    remove_proc_entry("foo", example_dir);    
    remove_proc_entry(MODULE_NAME, NULL);  
  
    printk(KERN_INFO "%s %s removed\n",  
           MODULE_NAME, MODULE_VERS);  
}  
  
  
module_init(init_procfs_example);  
module_exit(cleanup_procfs_example);  
  
MODULE_AUTHOR("Erik Mouw");  
MODULE_DESCRIPTION("procfs examples");  
MODULE_LICENSE("GPL");  


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

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

  • 16
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
9 2.1.2 ARM处理器体系结构........................................................................................ 10 2.1.3 Linux 与ARM处理器........................................................................................ 12 2.2 ARM指令集................................................................................................................... 13 2.2.1 ARM微处理器的指令集概述............................................................................ 13 2.2.2 ARM指令寻址方式............................................................................................ 15 2.2.3 Thumb 指令概述................................................................................................. 17 2.3 典型ARM处理器简介.................................................................................................. 17 2.3.1 Atmel AT91RM9200............................................................................................ 17 2.3.2 Samsung S3C2410 ............................................................................................... 18 2.3.3 TI OMAP1510/1610 系列................................................................................... 19 2.3.4 Freescale i.Max21 ................................................................................................ 22 2.3.5 Intel Xscale PXA系列......................................................................................... 23 2.4 三星S3C2410开发板.................................................................................................... 24 2.4.1 三星S3C2410开发板介绍................................................................................. 24 2.4.2 众多的开发板供应商.......................................................................................... 26 第3 章 Linux 编程环境................................................................................................................ 28 ║2 嵌入式系统开发技术详解——基于ARM 3.1 Linux 常用工具.............................................................................................................. 28 3.1.1 Shell简介............................................................................................................ 28 3.1.2 常用Shell命令.................................................................................................... 30 3.1.3 编写Shell脚本.................................................................................................... 38 3.1.4 正则表达式.......................................................................................................... 42 3.1.5 程序编辑器.......................................................................................................... 44 3.2 Makefile .......................................................................................................................... 48 3.2.1 GNU make ........................................................................................................... 48 3.2.2 Makefile规则语法.............................................................................................. 49 3.2.3 Makefile文件中变量的使用.............................................................................. 51 3.3 二进制代码工具的使用................................................................................................. 52 3.3.1 GNU Binutils工具介绍....................................................................................... 52 3.3.2 Binutils工具软件使用........................................................................................ 54 3.4 编译器GCC的使用....................................................................................................... 54 3.4.1 GCC编译器介绍................................................................................................. 54 3.4.2 GCC编译选项解析............................................................................................. 56 3.5 调试器GDB的使用技巧.............................................................................................. 60 3.5.1 GDB调试器介绍................................................................................................ 60 3.5.2 GDB调试命令.................................................................................................... 61 3.6 Linux 编程库.................................................................................................................. 66 3.6.1 Linux 编程库介绍............................................................................................... 66 3.6.2 Linux 系统调用................................................................................................... 67 3.6.3 Linux 线程库....................................................................................................... 70 第4 章 交叉开发环境.................................................................................................................. 73 4.1 交叉开发环境介绍......................................................................................................... 73 4.1.1 交叉开发概念模型.............................................................................................. 73 4.1.2 目标板与主机之间的连接.................................................................................. 75 4.1.3 文件传输.............................................................................................................. 76 4.1.4 网络文件系统...................................................................................................... 77 4.2 安装交叉编译工具......................................................................................................... 78 4.2.1 获取交叉开发工具链.......................................................................................... 78 4.2.2 主机安装工具链.................................................................................................. 79 4.3 主机开发环境配置......................................................................................................... 80 4.3.1 主机环境配置...................................................................................................... 80 4.3.2 串口控制台工具.................................................................................................. 81 4.3.3 DHCP服务.......................................................................................................... 84 4.3.4 TFTP服务........................................................................................................... 85 4.3.5 NFS服务............................................................................................................. 86 第1 章 目录 3║ 4.4 启动目标板..................................................................................................................... 88 4.4.1 系统引导过程...................................................................................................... 88 4.4.2 内核解压启动...................................................................................................... 89 4.4.3 挂接根文件系统.................................................................................................. 90 4.5 应用程序的远程交叉调试............................................................................................. 91 4.5.1 交叉调试的模型.................................................................................................. 91 4.5.2 交叉调试程序实例.............................................................................................. 92 第5章 交叉开发工具链.............................................................................................................. 94 5.1 工具链软件..................................................................................................................... 94 5.1.1 相关软件工程...................................................................................................... 94 5.1.2 软件版本的匹配.................................................................................................. 95 5.1.3 工具链制作流程.................................................................................................. 97 5.2 制作交叉编译器............................................................................................................. 98 5.2.1 准备编译环境...................................................................................................... 98 5.2.2 编译binutils......................................................................................................... 99 5.2.3 编译GCC的辅助编译器.................................................................................. 100 5.2.4 编译生成glibc库.............................................................................................. 101 5.2.5 编译生成完整的GCC编译器.......................................................................... 105 5.3 制作交叉调试器........................................................................................................... 106 5.3.1 编译交叉调试器................................................................................................ 106 5.3.2 编译gdbserver ................................................................................................... 106 第6章 Bootloader..................................................................................................................... 108 6.1 Bootloader ..................................................................................................................... 108 6.1.1 Bootloader 介绍................................................................................................. 108 6.1.2 Bootloader 的启动............................................................................................. 109 6.1.3 Bootloader 的种类..............................................................................................111 6.2 U-Boot编程...................................................................................................................113 6.2.1 U-Boot工程简介................................................................................................113 6.2.2 U-Boot源码结构................................................................................................113 6.2.3 U-Boot的编译....................................................................................................114 6.2.4 U-Boot 的移植....................................................................................................117 6.2.5 添加U-Boot命令...............................................................................................118 6.3 U-Boot的调试.............................................................................................................. 121 6.3.1 硬件调试器........................................................................................................ 121 6.3.2 软件跟踪............................................................................................................ 121 6.3.3 U-Boot启动过程............................................................................................... 123 6.3.4 U-Boot 与内核的关系....................................................................................... 128 ║4 嵌入式系统开发技术详解——基于ARM 6.4 使用U-Boot.................................................................................................................. 133 6.4.1 烧写U-Boot 到Flash ........................................................................................ 134 6.4.2 U-Boot的常用命令........................................................................................... 134 6.4.3 U-Boot的环境变量........................................................................................... 141 第7 章 配置编译内核................................................................................................................ 143 7.1 Linux 内核特点............................................................................................................ 143 7.1.1 Linux 内核版本介绍......................................................................................... 143 7.1.2 Linux 内核特点................................................................................................. 143 7.1.3 Linux 2.6 内核新特性....................................................................................... 144 7.2 配置编译内核源码....................................................................................................... 147 7.2.1 内核源码结构.................................................................................................... 148 7.2.2 内核配置系统.................................................................................................... 150 7.2.3 Kbuild Makefile ................................................................................................. 157 7.2.4 内核编译............................................................................................................ 169 7.2.5 内核编译结果.................................................................................................... 179 7.3 内核配置选项............................................................................................................... 180 7.3.1 使用配置菜单.................................................................................................... 180 7.3.2 基本配置选项.................................................................................................... 181 7.3.3 驱动程序配置选项............................................................................................ 183 第8 章 内核移植浅析................................................................................................................ 185 8.1 移植内核源码............................................................................................................... 185 8.1.1 移植前的准备工作............................................................................................ 185 8.1.2 开发板内核移植................................................................................................ 186 8.1.3 移植后的工作.................................................................................................... 194 8.2 Linux 内核启动过程分析............................................................................................ 194 8.2.1 内核启动流程源代码分析................................................................................ 194 8.2.2 内核自引导程序................................................................................................ 195 8.2.3 内核vmlinux入口............................................................................................ 199 8.2.4 Linux 系统初始化............................................................................................. 201 8.2.5 挂接根文件系统................................................................................................ 206 8.2.6 初始化设备驱动................................................................................................ 208 8.2.7 启动用户空间init进程..................................................................................... 209 第9 章 内核调试技术................................................................................................................ 212 9.1 内核调试方法............................................................................................................... 212 9.1.1 内核调试概述.................................................................................................... 212 9.1.2 学会分析内核源程序........................................................................................ 213 第1 章 目录 5║ 9.1.3 调试方法介绍.................................................................................................... 213 9.2 内核打印函数............................................................................................................... 216 9.2.1 内核映像解压前的串口输出函数.................................................................... 216 9.2.2 内核错误报告子程序........................................................................................ 218 9.2.3 内核打印函数.................................................................................................... 220 9.3 获取内核信息............................................................................................................... 227 9.3.1 系统请求键........................................................................................................ 227 9.3.2 通过/proc接口................................................................................................... 228 9.3.3 通过/sys 接口..................................................................................................... 229 9.3.4 通过ioctl方法................................................................................................... 232 9.4 处理出错信息............................................................................................................... 233 9.4.1 oops信息........................................................................................................... 233 9.4.2 panic ................................................................................................................... 234 9.5 内核源码调试............................................................................................................... 236 9.5.1 KGDB调试内核源代码.................................................................................... 236 9.5.2 BDI2000 调试内核源代码................................................................................ 237 第10 章 制作Linux文件系统............................................................................................... 242 10.1 根文件系统目录结构................................................................................................. 242 10.1.1 FHS目录结构................................................................................................. 243 10.1.2 文件存放规则.................................................................................................. 246 10.2 添加系统文件............................................................................................................. 247 10.2.1 添加共享链接库.............................................................................................. 247 10.2.2 添加内核模块.................................................................................................. 249 10.2.3 添加设备文件.................................................................................................. 251 10.3 init系统初始化过程.................................................................................................. 253 10.3.1 inittab 文件....................................................................................................... 253 10.3.2 System V init启动过程................................................................................... 256 10.3.3 Busybox init启动过程分析............................................................................ 258 10.4 定制文件系统............................................................................................................. 260 10.4.1 定制应用程序.................................................................................................. 260 10.4.2 配置应用程序自动启动.................................................................................. 260 第11 章 充分利用开源软件...................................................................................................... 262 11.1 开放源代码工程介绍................................................................................................. 262 11.1.1 Linux 系统和开源软件................................................................................... 263 11.1.2 开源软件的特点.............................................................................................. 264 11.2 Busybox使用.............................................................................................................. 265 11.2.1 Busybox工程介绍........................................................................................... 265 ║6 嵌入式系统开发技术详解——基于ARM 11.2.2 配置编译Busybox........................................................................................... 265 11.3 X11 图形系统............................................................................................................. 270 11.3.1 X Windows介绍.............................................................................................. 270 11.3.2 Tiny-X 介绍..................................................................................................... 270 11.3.3 GTK 图形库..................................................................................................... 271 11.4 Qt图形库.................................................................................................................... 277 11.4.1 Qt介绍............................................................................................................. 277 11.4.2 Qt/Embedded介绍........................................................................................... 278 11.4.3 Qt/Embedded架构........................................................................................... 280 11.4.4 Qt/Embedded软件包与安装........................................................................... 281 11.5 MiniGUI图形系统..................................................................................................... 283 11.5.1 MiniGUI图形系统概述.................................................................................. 283 11.5.2 MiniGUI移植.................................................................................................. 285 11.6 MicroWindows图形系统........................................................................................... 290 11.7 Linux 下的网络应用.................................................................................................. 292 11.7.1 嵌入式设备的网络化...................................................................................... 292 11.7.2 TCP/IP协议概述............................................................................................. 292 11.7.3 Linux 下的Socket编程.................................................................................. 294 11.8 嵌入式Linux 的串行通信......................................................................................... 304 11.8.1 Linux 下的串口操作....................................................................................... 304 11.8.2 Linux 串口编程实例....................................................................................... 309 第12 章 系统集成测试.............................................................................................................. 314 12.1 系统集成测试............................................................................................................. 314 12.1.1 系统集成测试概述.......................................................................................... 314 12.1.2 系统集成测试要求.......................................................................................... 315 12.2 系统跟踪工具............................................................................................................. 315 12.2.1 为什么需要跟踪工具...................................................................................... 315 12.2.2 Strace................................................................................................................ 316 12.2.3 Ltrace ............................................................................................................... 316 12.2.4 LTT................................................................................................................... 317 12.3 系统性能测量工具..................................................................................................... 321 12.3.1 代码效率测量.................................................................................................. 321 12.3.2 LTP................................................................................................................... 324 12.3.3 LMbench .......................................................................................................... 325 12.4 测量内存泄漏............................................................................................................. 326 12.4.1 mtrace............................................................................................................... 326 12.4.2 dmalloc............................................................................................................. 327 12.4.3 memwatch ........................................................................................................ 328 第1 章 目录 7║ 12.4.4 YAMD.............................................................................................................. 330 第13 章 部署Linux系统........................................................................................................... 333 13.1 部署Linux系统概述................................................................................................. 333 13.1.1 部署Linux系统的基本流程.......................................................................... 333 13.1.2 部署Linux系统的关键问题.......................................................................... 334 13.2 文件系统类型............................................................................................................. 335 13.2.1 EXT2/EXT3 ..................................................................................................... 335 13.2.2 JFS.................................................................................................................... 337 13.2.3 cramfs............................................................................................................... 339 13.2.4 JFFS/JFFS2 ...................................................................................................... 340 13.2.5 YAFFS.............................................................................................................. 341 13.3 存储设备..................................................................................................................... 343 13.3.1 MTD 类型设备................................................................................................ 343 13.3.2 磁盘类型设备.................................................................................................. 344 13.4 部署Linux系统......................................................................................................... 346 13.4.1 安装MTD 工具............................................................................................... 346 13.4.2 使用磁盘文件系统.......................................................................................... 347 13.4.3 使用RAMDISK 设备..................................................................................... 348 13.4.4 使用MTD 设备和JFFS2文件系统............................................................... 349 13.4.5 系统启动和升级.............................................................................................. 351 第14 章 系统设计开发实例...................................................................................................... 352 14.1 需求分析..................................................................................................................... 352 14.2 系统硬件设计............................................................................................................. 354 14.3 系统软件设计............................................................................................................. 364 14.4 系统集成与部署......................................................................................................... 366
内容简介回到顶部↑ 本书同时收录了Linux领域两位领导人物的作品—相当于“Linux 文档项目”的一个印刷版本,展示了Linux 核心概念及其基本结构。对于面向所有主流Linux子系统的支持与管理任务,本书都进行了恰到好处的讲解。涵盖的主题包括文件系统、目录、引导和关机、打印、网络兼容性、网络应用、网络登录、安全、用户账号、数据备份等等。此外,还针对TCP/IP网络、电子邮件、硬件问题以及网络的管理与配置,进行了专门讨论。 目录回到顶部↑ 目 录 序 前言 第一部分 Linux网络管理员指南 第1章 网络基础 3 1.1 UUCP网络 3 1.2 TCP/IP网络 5 1.2.1 TCP/IP网络入门 5 1.2.2 以太网 6 1.2.3 其他类型的硬件 7 1.2.4 网际协议 8 1.2.5 串行线路网际协议 9 1.2.6 传输控制协议 9 1.2.7 用户数据报协议 10 1.2.8 端口问题 10 1.2.9 套接字库 10 1.3 连网 11 1.4 系统维护 11 1.5 后续章节提要 13 第2章 TCP/IP网络 14 .2.1 网络接口 14 2.2 IP地址 14 2.3 地址解析 15 2.4 IP路由 16 2.4.1 IP网络 16 2.4.2 子网 16 2.4.3 网关 16 2.5 路由表 17 2.6 Internet控制消息协议 18 2.7 域名系统 19 2.7.1 主机名解析 19 2.7.2 输入DNS 20 2.7.3 利用DNS进行名字查找 21 2.7.4 域名服务器 22 2.7.5 DNS数据库 22 2.7.6 逆向查找 23 第3章 网络硬件的配置 26 3.1 内核配置 27 3.1.1 内核选项1.0及以上版本 27 3.1.2 内核选项1.1.14及以上版本 27 3.2 网络设备指南 28 3.3 以太网安装 29 3.3.1 以太网接缆 29 3.3.2 已获支持的网卡 29 3.3.3 以太网自动侦测 30 3.4 PLIP驱动程序 31 3.5 SLIP和PPP驱动程序 31 第4章 串行硬件的设置 32 4.1 Modem通信软件 32 4.2 串行设备概述 32 4.3 访问串行设备 33 4.4 串行硬件 34 第5章 TCP/IP网络配置 36 5.1 proc文件系统的设置 36 5.2 二进制文件的安装 37 5.3 另一个例子 37 5.4 设置主机名 37 5.5 分配IP地址 37 5.6 编写主机和网络文件 39 5.7 IP接口配置 40 5.7.1 回送接口 40 5.7.2 以太网接口 41 5.7.3 通过网关的路由 43 5.7.4 网关的配置 43 5.7.5 PLIP接口 44 5.7.6 SLIP和PPP接口 45 5.7.7 伪接口 45 5.8 ifconfig详解 45 5.9 netstat详解 46 5.9.1 显示路由表 47 5.9.2 显示接口特性 47 5.9.3 显示链接 48 5.10 检查ARP表格 48 5.11 未来展望 50 5.12 名字服务和解析器配置 50 5.13 解析器库 50 5.13.1 host.conf文件 51 5.13.2 解析器环境变量 51 5.13.3 域名服务器查找 ——resolv.conf的配置 52 5.13.4 解析器的健壮性 53 5.14 named的运行 53 5.14.1 named.boot文件 53 5.14.2 DNS数据库文件 55 5.14.3 编写Master文件 57 5.14.4 验证域名服务器的设置 59 5.14.5 其他工具 61 第6章 串行链路网际协议 62 6.1 常规需求 62 6.2 SLIP的工作原理 62 6.3 dip的使用 63 6.4 运行于服务器模式 68 第7章 点到点协议 69 7.1 PPP打开 69 7.2 运行pppd 70 7.3 使用选项文件 71 7.4 用chat拨出 71 7.5 PPP设置的调试 73 7.6 IP配置选项 73 7.6.1 IP地址的选择 73 7.6.2 通过PPP链路的路由 74 7.7 链路控制选项 75 7.8 常规安全问题 76 7.9 PPP身份验证 76 7.9.1 CHAP和PAP 76 7.9.2 CHAP密钥文件 77 7.9.3 PAP密钥文件 78 7.10 PPP服务器的配置 79 第8章 各种网络应用 80 8.1 inetd超级服务器 80 8.2 tcpd访问控制工具 81 8.3 服务和协议文件 83 8.4 远程过程调用 84 8.5 r命令的配置 86 第9章 网络信息系统 88 9.1 NIS概述 89 9.2 NIS与NIS+之比较 90 9.3 NIS的客户端 90 9.4 NIS服务器的运行 91 9.5 用NYS设置一个NIS客户机 91 9.6 挑选合适的映射 93 9.7 使用passwd和group映射 94 9.8 NIS与影子支持 95 9.9 使用传统的NIS代码 96 第10章 网络文件系统 97 10.1 NFS的准备工作 98 10.2 NFS卷的安装 98 10.3 NFS Daemon 100 10.4 导出文件 100 10.5 自动安装器 102 第11章 泰勒式UUCP 103 11.1 关于UUCP 103 11.1.1 UUCP传输和远程作业的执行 104 11.1.2 UUCICO的内部运行 104 11.1.3 UUCICO命令行选项 105 11.2 UUCP配置文件 105 11.2.1 泰勒式UUCP简介 105 11.2.2 UUCP需要知道些什么 107 11.2.3 站点的命名 107 11.3 泰勒式配置文件 108 11.3.1 常规配置选项:config文件 108 11.3.2 如何将其他的系统 告知UUCP:sys文件 108 11.3.3 设备:端口文件 110 11.3.4 如何拨号:拨号文件 111 11.3.5 TCP上的UUCP 112 11.3.6 直接连接的使用 112 11.4 UUCP的注意事项:调节权限 112 11.4.1 命令执行 112 11.4.2 文件传输 112 11.4.3 文件转发 113 11.5 如何设置拨入 113 11.5.1 设置getty 113 11.5.2 提供UUCP账号 114 11.5.3 预防措施 115 11.5.4 呼叫序列号检查 115 11.5.5 匿名UUCP 116 11.6 UUCP低级协议 116 11.6.1 协议概述 116 11.6.2 传输协议的调节 117 11.6.3 如何选定特殊协议 117 11.7 故障排除 117 11.8 日志文件 118 第12章 电子邮件 120 12.1 何谓邮件消息 121 12.2 邮件如何发送 122 12.3 邮件地址 123 12.4 邮件路由的工作原理 124 12.4.1 因特网上的邮件路由 124 12.4.2 UUCP网络内的邮件路由 124 12.4.3 UUCP和RFC-822 125 12.5 路径别名和映射文件格式 126 12.6 elm的配置 128 12.6.1 全局elm选项 128 12.6.2 国家特有字符集 129 第13章 smail的设置和运行 130 13.1 UUCP的设置 130 13.2 在局域网环境中的设置 132 13.2.1 编写配置文件 132 13.2.2 运行smail 133 13.3 故障排除 134 13.4 邮件投递模式 135 13.5 其他配置选项 136 13.6 消息路由和投递 136 13.7 消息的路由 137 13.8 将消息投递至本地地址 139 13.8.1 本地用户 139 13.8.2 转发 140 13.8.3 别名文件 140 13.8.4 邮件列表 141 13.9 以UUCP为基础的传输 141 13.10 以SMTP为基础的传输 141 13.11 主机名的限制 142 第14章 Sendmail+IDA指南 143 14.1 配置文件综述 143 14.2 sendmail.cf文件 144 14.3 Sendmail+IDA表格指南 146 14.3.1 mailertable 146 14.3.2 uucpxtable 146 14.3.3 pathtable 147 14.3.4 domaintable 147 14.3.5 别名 147 14.4 sendmail的安装 147 14.4.1 sendmail.cf文件的建立 148 14.4.2 sendmail.cf文件的测试 148 14.4.3 对sendmail.cf和表格 进行综合测试 148 14.5 邮件的操作技巧 148 14.5.1 向中转主机转发邮件 149 14.5.2 强制邮件进入配置不当的 远程站点 149 14.5.3 强制邮件通过UUCP进行传输 149 14.5.4 防止邮件通过UUCP进行传输 149 14.5.5 按需运行sendmail队列 149 14.5.6 报告邮件特征 150 14.6 二进制附件的合成和匹配 150 14.7 获取更多的信息 150 第15章 网络新闻 151 15.1 何谓Usenet 151 15.2 Usenet如何对新闻加以控制 152 第16章 C-News 154 16.1 新闻投递 154 16.2 安装 155 16.3 sys文件 156 16.4 active文件 158 16.5 新闻组文章的批处理 159 16.6 对新闻进行过期处理 161 16.7 其他文件 163 16.8 控制消息 164 16.8.1 cancel消息 164 16.8.2 newgroup和rmgroup消息 165 16.8.3 checkgroups消息 165 16.8.4 sendsys、version和senduuname 166 16.9 NFS环境中的C-News 166 16.10 维护工具及任务 167 第17章 NNTP简介 168 17.1 NNTP服务器的安装 169 17.2 限制NNTP访问权限 169 17.3 NNTP身份验证 170 17.4 nntpd与C-News的沟通 171 第18章 新闻阅读机的配置 172 18.1 tin配置 172 18.2 trn配置 173 18.3 nn配置 174 第19章 其他问题 176 19.1 PLIP的空打印机电缆 176 19.2 示范smail配置文件 176 第二部分 Linux系统管理员指南 作者简介 本书简介 前言 第1章 Linux系统综述 189 1.1 操作系统的各个组件 189 1.2 内核的重要组件 189 1.3 Unix系统提供的主要服务 190 1.3.1 init 190 1.3.2 从终端登录 191 1.3.3 syslog 191 1.3.4 周期性执行的命令:cron和at 191 1.3.5 图形化用户接口 191 1.3.6 连网 191 1.3.7 网络登录 192 1.3.8 网络文件系统 192 1.3.9 邮件 192 1.3.10 打印 192 1.3.11 文件系统布局 193 第2章 目录树简介 194 2.1 背景知识 194 2.2 root文件系统 195 2.3 /etc文件系统 196 2.4 /dev文件系统 198 2.5 /usr文件系统 198 2.6 /var文件系统 198 2.7 /proc文件系统 199 第3章 磁盘和其他存储媒体的使用 201 3.1 两类设备 201 3.2 硬盘 202 3.3 软盘 204 3.4 CD-ROM 204 3.5 磁带 205 3.6 格式化 206 3.7 分区 207 3.7.1 主引导记录、引导扇区和分区表 207 3.7.2 扩展和逻辑分区 208 3.7.3 分区类型 209 3.7.4 对硬盘进行分区 209 3.7.5 设备文件和分区 210 3.8 文件系统 210 3.8.1 何谓文件系统 210 3.8.2 文件系统综述 211 3.8.3 如何选用文件系统 212 3.8.4 如何建立文件系统 212 3.8.5 装入和卸装 214 3.8.6 利用fsck检查文件系统的完整性 216 3.8.7 利用badblocks检查磁盘错误 217 3.8.8 抵制碎片 217 3.8.9 适用于所有文件系统的其他工具 217 3.8.10 适用于ext2文件系统的其他工具 218 3.9 无文件系统的磁盘 219 3.10 磁盘空间的分配 219 3.10.1 分区方案 219 3.10.2 空间要求 220 3.10.3 硬盘分区示例 220 3.10.4 为Linux增添更多磁盘空间 221 3.10.5 关于节省磁盘空间的几个提示 221 第4章 内存管理 222 4.1 何谓虚拟内存 222 4.2 创建交换空间 222 4.3 交换空间的使用 223 4.4 与其他操作系统共享交换空间 224 4.5 交换空间的分配 224 4.6 缓冲区 225 第5章 引导和关机 227 5.1 概论 227 5.2 深入研究引导过程 227 5.3 关机详情 229 5.4 重新启动 230 5.5 单用户模式 230 5.6 应急盘 231 第6章 init 232 6.1 init的重要作用 232 6.2 通过init启动getty:/etc/inittab文件 232 6.3 运行级别 233 6.4 /etc/inittab中的特殊配置 234 6.5 在单用户模式下引导 234 第7章 登录和注销 236 7.1 通过终端登录 236 7.2 通过网络登录 237 7.3 登录的意义 237 7.4 访问控制 238 7.5 外壳的启动 238 第8章 用户账号的管理 239 8.1 何谓账号 239 8.2 创建用户 239 8.2.1 /etc/passwd和其他的信息性文件 239 8.2.2 如何选择数字式用户和组ID 240 8.2.3 初始化环境:/etc/skel 240 8.2.4 手工创建一个用户 240 8.3 更改用户属性 241 8.4 删除用户 241 8.5 临时禁用用户 242 第9章 备份 243 9.1 备份的重要性 243 9.2 选择备份媒体 243 9.3 选择备份工具 244 9.4 简单备份 244 9.4.1 如何利用tar进行备份 245 9.4.2 如何利用tar恢复文件 246 9.5 多级备份 247 9.6 要备份什么 248 9.7 压缩备份 248 第10章 时间同步 250 10.1 时区概论 250 10.2 硬件及软件时钟 250 10.3 时间的显示与设置 251 10.4 时间有误怎么办 252 第三部分 附 录 附录A 词汇表 255 附录B Linux 文档项目复制许可证 256 附录C GNU通用公共许可证 257
### 回答1: Linux中的proc文件系统是一种虚拟文件系统,它将系统内核中的信息以文件的形式呈现给用户空间。用户可以通过读取和写入这些文件来与内核进行通信proc文件系统中的文件包含了系统的各种信息,如进程信息、内存信息、网络信息等。用户可以通过读取这些文件来获取系统的状态信息,也可以通过写入这些文件来修改系统的配置参数。因此,proc文件系统是实现用户和内核通信的一种重要方式。 ### 回答2: Linux中的proc文件系统是一种特殊的文件系统,它将系统中的进程信息以文件的形式暴露出来,使用户空间和内核空间可以通过文件访问的方式进行通信。 在proc文件系统中,每个进程都被视为一个目录,目录的名称为进程的PID(进程标识符)。每个PID目录下都包含了一系列的文件,这些文件用于描述进程的不同属性和状态。 用户空间可以通过读取proc文件系统中的文件来获取进程的信息。例如,/proc/<PID>/status文件中包含了关于进程的各种状态信息,如进程的PID、父进程的PID、进程运行状态等等。用户可以通过读取这个文件来了解进程的当前状态。 此外,proc文件系统中的一些文件可以被用户写入,以改变进程的一些属性或执行一些操作。例如,/proc/<PID>/oom_adj文件可以被用户写入一个整数值,以调整进程在系统内存不足时被杀死的优先级。用户可以通过写入这个文件来改变进程的oom_adj优先级。 而在内核空间中,内核可以通过proc文件系统来与用户空间通信内核可以通过创建和修改proc文件系统中的文件,向用户空间提供系统的信息或接收用户空间的请求。 总之,proc文件系统通过文件的形式提供了用户空间和内核空间之间的通信接口。用户空间可以通过读取和写入proc文件系统中的文件来获取和控制进程的信息,而内核空间则可以通过创建和修改proc文件系统中的文件来与用户空间进行通信。这种基于文件的通信方式使得用户和内核之间的通信更加灵活和方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值