《Linux从入门到精通》学习总结1

第1章 Linux概述

1 常用的国内Linux资源

  • www.chinaunix.net : 国内最大的Linux/UNIX技术社区网站
  • www.linuxeden.com : Linux伊甸园,最大的中文开源资讯门户网站
  • www.linuxfans.org : 中国Linux公社,拥有自己的Linux发行版本Magic Linux
  • www.linuxsir.org : 提供Linux各种资源,包括资讯,软件,手册等

 

 

 

 

第2章 Linux安装

1 书中推荐的虚拟机为VMware。VMware面向企业和个人开发了多个版本,其中一些需要用户购买许可证,如VMware Workstation等。VMware Server则可以免费使用。推荐使用VMare Server。

 

 

第3章 Linux基本配置

1 用户可以执行不带参数的su命令将自己提升为root权限,另一个命令行工具是sudo,它可以临时使用root身份运行一个程序,并在程序执行完毕后返回至普通用户状态。

 

 

第4章  桌面环境

 

 

第5章  Shell基本命令 

1 Linux的命令和文件名都是区分大小写的

2 使用tab键,点击一次,如果以已键入的字符开头的文件只有一个,Shell会自动把文件名补全。如果不止一个,需要点击2次tab键,Shell会罗列出所有以已键入的字符开头的文件

3 Shell的通配符,有 " * " , " ? " , "  [ ] " 三种

  • 星号( * ) 匹配任意长度的字符串
  • 问号( ? ) 匹配一个字符
  • 括号( [ ] ) 匹配所有出现在方括号内的字符,如 ls  text[1-3] 显示text1,text2和text3

4 命令pwd显示当前目录

5 回到用户主目录可以用命令单单一个cd  或  cd ~

6 命令 ls -F 里 -F选项会在每个目录后面加上/,可执行文件后加*,链接文件后加@。如下

7 命令ls -a 则显示该目录下所有文件,包括隐藏文件

8 命令 ls -l 查看文件的各种属性

注:属性从左往右:文件的权限标志,文件的链接个数,文件所有者的用户名,该用户所在的用户组组名,文件的大小,最后一次被修改的日期,最后一次被修改的时间,文件名

9 查看文本文件:cat和more

  • cat 命令用于查看文件内容,后面跟文件名作为参数,也可以多个文件名作为参数,也可以使用通配符。如果加上-n选项则会在每一行前显示行数,如 cat -n  xxx.txt
  • cat命令是将所有内容全部显示在屏幕上,但more命令是一页页显示。按下空格键向下翻一页,按Enter键向下滚动一行,按Q键退出。

10 阅读文件的开头和结尾:head和tail。可以再使用-n选项指定显示的行数,如下

              head  -n  2   xxx.txt      ## 显示头两行

              tail  -n  2   xxx.txt         ## 显示结尾两行

11 查找文件内容: grep,如果要搜索带空格的内容,可以用引号把搜索的内容包含进去

12 快速定位文件:locate

13 搜索:find

14 whereis命令查找程序文件,并提供这个文件的二进制可执行文件,源代码文件和使用手册页存放的位置

15 who 查看当前系统中有哪些帐号登录

16 man命令,寻求帮助,如man find

 

 

 

 

第6章  文件目录管理

1 和团队共享文件

  • 创建一个用户组,将相关成员加入
  • 创建一个目录,设置权限
  • 将目录交给组长

2 创建目录:mkdir

  • mkdir  document  picture       ## 同时新建document,picture两个目录
  • mkdir -p  ~/tempex/job          ##  -p选项可以保证如果tempex目录本身不存在,会一起创建

3  touch命令创建的文件是个空文件,另外也可以用来更新一个文件的建立日期和时间,这种功能在自动备份和整理文件时非常有用。

4 mv可以在移动文件和目录同时对其重命名,加 -i 选项会有确认提醒

5 cp命令用来复制文件和目录,加 -i 选项会有确认提醒,加 -r 选项会将子目录连同其中的文件一起复制到另一个目录中

6 rmdir命令用于删除目录,但只能删除空目录。rm可以删除目录和文件,加 -i 选项会有确认提醒,加 -r 选项会将子目录连同其中的文件一起删除,加 -f 选项则避免每个文件删除的确认提醒等交互式操作

7 文件/目录的权限样式如"-rwxr-xr-x" ,第一个字符表示文件类型,rwxr-xr-x是三组权限位,分别为属主(rwx),属组(r-x)和其他人(r-x)。

8 查看目录的权限可以使用 ls -ld  /xxx/

9 chown命令改变文件的所有权,如下

            sudo chown  yyy:root   in.txt    // 修改属主为yyy,属组为root

            sudo chown  yyy    in.txt         //  只修改属主为yyy

            sudo chown  :root   in.txt        // 只修改属组为root

           sudo chown -R  yyy  dac        //  修改子目录及其的所有文件属主为yyy

10 chgrp命令只能修改文件的属组所有权

11 chmod命令修改一个文件的权限,命令使用"用户组+/-权限"的表达方式来增加/删除相应的权限。也可以通过“用户组=权限”的规则直接设置文件权限。也可以通过“用户组1=用户组2”将用户组1的权限设置跟用户组2一样。用户组包括属主(u),属组(g),其他人(o)和所有人(a),权限包含读(r),写(w)和执行(x),如下

            chmod  u+x   in.txt        // 给属主开通执行的权限

            chmod  a-x    in.txt       //  给所有人删除执行权限

            chmod  ug=rw , o=r   in.txt     // 给属主和属组读写权限,其他人读的权限

            chmod  o=u   in.txt         //   将其他人的权限设置为跟属主一样

12 文件权限的八进制表示,如 711 表示 rwx--x--x

13 文件类型,-表示普通文件,d表示目录,c表示字符设备文件,b表示块设备文件,s表示本地域套接口,p表示有名管道,l表示符号链接

14 符号链接(软连接)需要使用带-s参数的ln命令来创建,如下

             ln -s  TARGET LINK_NAME       // 给目标文件TARGET取了一个别名LINK_NAME

             ln -s  days    my_days          // 建立一个名为my_days的符号链接指向文本文件days

             ln -s   /usr/local/share/   local_share     // 建立一个名为local_share的符号链接指向目录/usr/local/share

还有一种硬链接,它跟符号链接的区别在于:硬链接是直接引用,即修改硬链接内容也会影响源内容。符号链接则通过名称进行引用。使用不带选项的ln命令就是建立硬链接。

             ln  days   hard_days   // 建立一个链接到days的新文件hard_days,硬链接   

15  输出重定向

             ls  >  ~/ls_out       ## 将输出内容输入到~/ls_out文件中   ##  如果ls_out不存在,输出重定向符" > " 会创建该文件,如果存在则删除原有内容,用新内容替代

注:如果不想覆盖文件原有内容,可使用输出重定向符" >> "

16 cat命令会将用户的每行输入会立即显示在屏幕上,直到使用Ctrl+D快捷键来结束,如下

17 通过使用输入重定向符号" < " 可以让程序从一个文件中获取输入 ,如    $ cat  <  data.txt。cat命令可以通过接受参数来显示文件内容,如   $ cat  data.txt

18 另一种输入重定向的例子为立即文档,使用操作符" << ",立即文档指定一个代表输入结束的分隔符,但shell遇到这个分隔符后就结束输入,如下

$  cat   <<   a

> d

> dfd

> dfd 

> aaa

> a           ### 结束分隔符

d

dfd

dfd 

aaa

$ cat  <<  END  > hello 

> Hello  World !

> ok

> END 

19 管道( | )将一条命令的输出连接到另一条命令输入,如 ls  |  grep  ay,即将命令ls的输出发送给命令grep作为其输入


 

 

第7章  软件包管理

1 一些高级软件包管理工具如APTyum可以自动搜寻依赖关系并执行安装

2 管理.deb软件包:dpkg

  • dpkg --install xxx 或dpkg -i xxx  安装软件
  • dpkg --force - 选项表示强制操作,切记不要轻易使用--force
  • dpkg -l  显示所有信息
  • dpkg --search xxx 或 dpkg -S xxx  显示软件包的信息
  • dpkg --remove xxx 或 dpkg -r xxx   卸载xxx软件包

3 管理RPM软件包:rpm

  • rpm -i xxx 安装软件包xxx
  • rpm -i -h -v  xxx 或 rpm -ivh xxx  安装软件包 , -v显示rpm当前正在执行的工作,-h通过打印一系列的“#”提醒用户当前的安装进度
  • rpm -i 同样也支持--force选项,强制安装
  • rpm -U xxx  升级软件包xxx,也可以加上-v和-h
  • rpm -q 查询当前系统中已经安装的软件包
  • rpm -e xxx  卸载软件包xxx

4 APT工具最常用的两个命令:apt-get和apt-cache

apt-get

  • $ sudo apt-get update       ###  更新软件包信息
  • $ sudo apt-get xxx            ###  安装软件包xxx
  • $ sudo apt-get install xxx   ### 下载并安装软件包
  • $ sudo apt-get upgrade     ### 下载并安装在本系统上已有的软件包的最新版本
  • $ sudo apt-get remove  xxx    ### 卸载软件包xxx
  • $ sudo apt-get source  xxx     ### 下载软件包xxx的源代码
  • $ sudo apt-get clean       ### 删除所有已下载的包文件
  • $ apt-get -h   ### 显示apt-get的完整用法

apt-cache 

  • $ apt-cache search xxx        ### 搜索带“xxx”字样的软件包
  • $ apt-cache depends xxx    ### 查询xxx的依赖关系

 

5 所有apt-get用于下载软件的地址,即安装源,都放在/etc/apt/sources.list中,如下

  • deb和deb-src:表示软件包的类型。Debian类型的软件包使用deb或deb-src。RPM软件包应该使用rpm或rpm-src
  • URL:表示指向CD-ROM,HTTP或FTP服务器的地址,从哪里可以获得所需的软件包
  • hardy等:表示软件包的发行版本和分类

 

 

 

 

第 8 章   磁盘管理 

1 文件系统是一种对物理空间的组织方式,通常在格式化硬盘时创建。在Windows下,有NTFS和FAT两种文件系统。

2 Linux的最常用的几种文件系统:

  • ext4fs文件系统:预留一块专门的区域来保存日志文件,当对文件进行写操作时,所做的修改将首先写入日志文件,随后再写入一条记录标记日志项的结束。完成后才会对文件系统做实际修改。这样系统崩溃时可以利用日志恢复文件系统。
  • ReiserFS文件系统:也是一种日志文件系统。
  • swap:它并不是一种文件系统,swap被称为交换分区,是一块特殊的硬盘空间。当实际内存不够用时操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。windows不会为swap单独划分一个分区,而是使用分页文件实现相同功能,即为“虚拟内存”

3 挂载文件系统

$ sudo   mkdir    /mnt/cdrom          ###  新建一个目录

$ sudo   mount   /dev/cdrom   /mnt/cdrom/            ###  挂载光盘至这个新建的目录

mount:  块设备  /dev/scd0  写保护,以只读方式挂载

$ cd   /mnt/cdrom/

$ ls                  ###  查看光盘内容

$ cd  /                  ### 退出/mnt/cdrom目录

$ sudo umount     /dev/cdrom     ### 卸载光盘

注:卸载光盘前必须先退出光盘所挂载的那个目录,否则系统会提示设备忙并拒绝卸载

4 Linux下所有的设备都被当作文件来操作

5 在Linux中,每个设备都被映射为一个特殊文件,这个文件被称作“设备文件”。对于上层应用程序而言,所有对这个设备的操作都是通过读写这个文件实现的,通过文件来操作硬件。Linux把所有的设备文件都放在/dev/目录下

这些文件中大部分是块设备文件和字符设备文件,块设备(例如磁盘)可以随机读写,/dev/hda1,/dev/sda2等就是典型的块设备文件。字符设备只是按顺序接受“字符流”,常见的有打印机等。

6 挂载文件系统:mount命令,也可以使用 -t 选项明确指明设备所使用的文件系统类型,常见文件系统的表示方法

表示方法描述
ext2Linux的ext2文件系统
ext3Linux的ext3文件系统
ext4Linux的ext4文件系统
vfatwindows的FAT16/FAT32文件系统
ntfswindows的NTFS文件系统
iso9660CD-ROM光盘的标准文件系统

另外常用的选项是 -r 和 -w ,分别指定以只读模式和可读写模式挂载设备。 -w 是默认的

        $ sudo  mount -r  /dev/sda3  /mnt/vista

7 在启动的时候挂载文件系统: /etc/fstab文件

8 查看磁盘使用情况: df命令

df命令提供了 -t 参数用于显示特定的文件系统

9 检查和修复文件系统: fsck命令

  • $ sudo  fsck  /dev/sda1
  • $ sudo  fsck  -p     ### 读取fstab文件来检查文件系统

注:使用fsck命令检查并修复文件系统是存在风险的,特别是当磁盘错误非常严重时,修复前请记得备份

10 在磁盘上建立文件系统: mkfs命令,如下

        $ sudo  mkfs  -t  ext3   /dev/sdb1    ### 将/dev/sdb1分区格式化为ext4格式

        $ sudo  mkfs  -t  ext4  -c  /dev/sdb1    ### 可以用 -c 选项来检查指定设备上损坏的块

11 压缩文件:gzip,是目前Linux下使用常见的压缩工具

         $ gzip  xxx    ### 会将xxx压缩成xxx.gz ,源文件xxx就不存在

        $ gzip  -d   xxx.gz   或   gunzip  xxx.gz     ### 解压xxx.gz文件,xxx.gz就不存在,变成xxx

        $ gzip  -l  xxx.gz      ### -l 选择用于查看压缩效果,文件大小以字节为单位

        $ gzip  -tv   xxx.gz     ###  -t 选项用来测试压缩文件的完整性

12 更高压缩率:bzip2,压缩率高,压缩速度慢,使用方法跟gzip一样

        $ bzip2 xxx    ### 会将xxx压缩成xxx.bz2 ,源文件xxx就不存在

        $ bzip2  -d   xxx.bz2   或   bunzip2  xxx.bz2     ### 解压xxx.bz2文件,xxx.bz2就不存在,变成xxx

        $ bzip2  -l  xxx.bz2      ### -l 选择用于查看压缩效果,文件大小以字节为单位

        $ bzip2  -tv   xxx.bz2     ###  -t 选项用来测试压缩文件的完整性

bzip2可以识别的压缩文件格式包括 .bz2 , .bz , .tbz2 , .tbz 和 bzip2。

13 支持rar格式,  rar x  xxx.rar    ### 解压xxx.rar

14 Linux下的两个存档工具:tar和dd

文件打包:tar   

             tar  -cvf   shell.tar  shell/      ### 将shell目录连同其下的文件一同打包成文件shell.tar,tar不会删除原来的文件

    -c 选项指定tar创建归档文件,-v 选项显示命令的执行过程,-f 选项则用于指定归档文件的文件名

             tar  -xvf   shell.tar            ### -x 选项解开shell.jar 文件

     -w 选项用于提示确认。-z 选项会自动调用gzip程序,归档文件时最后会去调用gzip压缩归档文件;解开时会先调用gzip解压再解档,如下

             tar  -czvf   shell.tar.gz   shell/      ### 打包

             tar  -xzf     shell.tar.gz                 ### 解档

    -j 选项用于调用bzip2程序,用法跟-z选项一样

             tar  -cjvf   shell.tar.bz2   shell/      ### 打包

             tar  -xjf     shell.tar.bz2                 ### 解档

转移文件:dd,因为有了更好的dump和restore命令,dd现在很少用。if选项指定输入端的文件系统,of选项则指定其输出端。

         $ dd  if=/dev/cdrom  of=CD.iso

15 Linux中用于建立分区表的工具: fdisk。fdisk是一个交互式的应用程序。在执行完一项操作后,fdisk会显示一行提示信息,并给出一个冒号“ :”,等待用户输入命令。使用命令m可以显示fdisk所有的命令信息

16 备份文件系统: dump

       #  dump  -0u  -f   /dev/nst0    /web    ### 执行从/web到/dev/nst0的0级备份

-0 选项指定dump执行级别为0的备份。级别0表示完整备份。-u选项指定dump更新/etc/dumpdates文件,该文件记录历次备份的时间,备份级别和实施备份的文件系统。 -f 选项指定了用于存放备份的设备

       # rdump  -0u  -f  backup:/dev/nst0 /web    ### rdump命令用于将备份转储到远程主机

17 从灾难中恢复:restore,它是dump的配套工具,用于从备份设备中提取数据。在恢复前,首先要建立一个临时目录。

       # mkdir   /var/restore       ###建立用于恢复文件的临时目录/var/restore

       # cd  /var/restore

       # restore -i  -f    /dev/sdb3     ### -i 选项用于交互式地恢复单个文件和目录,-f 选项指定存放备份的设备

       # restore -r -f   /dev/sdb3     ###  -r 选项恢复整个文件系统

       # rrestore -i -f   backup:/dev/nst0    ### 从远程主机提取备份信息

18 cron 是一个能够定时执行命令的软件

 

 

 

第9章  用户与用户组管理

1 创建帐户

        $  sudo   useradd  -m   xxx       ### 添加一个用户名为xxx的用户,并自动建立主目录

        $  sudo   passwd   xxx              ### 设置用户xxx的登录密码

2 不带 -m 选项的useradd命令不会为新用户建立主目录,用户可以登录到系统的shell,但不能够登录到图形界面。

3 useradd命令的另一个常用的选项是 -g , 该选项用于指定用户所属的组。如下

         $ sudo useradd -g users mike    ### 建立名为mike的用户帐号,并指定其属于users组

4 添加组可以使用groupadd命令,如下

         $ sudo  groupadd  newgroup

5 shell会记录用户的每一条命令,可以history命令查看

history会列出所有使用过的命令并加以编号,这些信息被存储在用户主目录的.bash_history文件中,这个文件默认情况下可以存储1000条命令记录。用如下命令可以列出最近n条

       $ history  10     ### 列出最近使用的10条命令

6 所有用户信息都登记在/etc/passwd文件中,而/etc/shadow文件则保存着用户的的登录密码

7 删除用户:userdel

      $ sudo  userdel  mike      ### 删除用户帐号mike,但不删除用户的主目录

      $ sudo  userdel -r mike   ### -r 选项会连同主目录一起删除

8 管理用户帐号:usermod,常用的选项

  • -d : 修改用户主目录
  • -e :修改帐号的有效期限,以公元月/日/年的形式表示(MM/DD/YY)
  • -g :修改用户所属的组
  • -l :修改用户帐号名称
  • -s :修改用户登录后所使用的Shell

$ sudo usermod -l mike -d /home/mike -e /12/31/13 jon   ###将john改名为mike,主目录改为/home/mike,并设置有效期至2013年12月31日

9 查看用户信息:id,查看用户的UID,GID以及所属的组,id以用户名为参数。没有用户名则显示当前登录用户的信息

10 用户间切换:su

11 /etc/passwd文件内容预览

每一行由7个字段组成,字段间使用冒号分隔,各字段的含义如下:

  • 登录名
  • 口令占位符
  • 用户ID号(UID)
  • 默认组ID号(GID)
  • 用户的私人信息:包括全名,办公室,工作电话,家庭电话等
  • 用户主目录
  • 登录Shell

12 MD5加密算法可以对任意长度的口令进行加密且不产生损失,加密后的长度都是一个固定值(34个字符)

 

 

 

 

第10章 进程管理

1 创建shell脚本test,如下

#!  /bin/bash

while echo "I'm making files!!"

do

         mkdir adir

         cd adir

         touch afile

         sleep 2s

done

$ chmod +x test  

./test   &      ### &表示后台运行

2 每个进程都有一个ID号,即PID。所有进程都必须由另一个进程创建(除了在系统引导时由内核自主创建并安装的几个进程),会有一个父进程的PID,即PPID

3 监视进程:ps命令

  • ps aux :显示当前系统上运行的所有进程的信息

  • ps lax:显示父进程ID(PPID)和谦让度(NI)

4 即时跟踪进程信息:top命令。使用命令q可退出

5 查看占用文件的进程:lsof ,查看某个文件被哪些进程使用

6  向进程发送信号:kill,标准语法如下:

                kill [-signal] pid

使用kill命令是否一定可以终止一个进程吗?答案是否定的。但有一个KILL信号可以在内核级别杀死一个进程,如下三种方式

         $ sudo kill  -KILL  pid

         $ sudo kill  -SIGKILL pid

         $ sudo kill  -9   pid

7 调整进程的谦让度:nice和renice,高谦让度意味着低优先级,谦让度值在-20 ~ +19 。

         $ nice -n  2  bc      ### 设置bc以谦让度增量2启动

         $ sudo nice -n  -3 bc     ### 设置bc以谦让度-3启动,但可能不得不用root权限启动

         $ nice bc      ### 不带 -n 选项,默认以谦让度0启动

         $ renice +12 -p 8567   ### renice命令可以在进程运行时调整谦让度,-p 选项指定进程的PID

 

 

 

第11章  网络配置

1 DSL是数字用户线路(Digital Subscriber Line)的缩写。目前国内主要使用的DSL技术分支是ADSL,A代表非对称,即上传和下载速度不同。

2 ifconfig命令用于启动或禁用一个网络接口,同时设置其IP地址,子网掩码以及其他网络选项。如下

        $ sudo ifconfig eth0 192.168.1.14 netmask 255.255.255.0 up   ### 将网络接口eth0的IP地址设置为192.168.1.14,子网掩码为255.255.255.0,up表示同时启动这个网络接口

        $ sudo ifconfig eth0 down

3 使用route配置静态路由。Linux内核中维护着一张路由表,每当一个数据包需要被发送时,Linux会把这个包的目标IP地址和路由表中的路由信息比较。使用netstat -r命令可以看到当前系统中的路由信息

route命令用于增加或删除一条路由,如下

          $ sudo route add default gw 10.71.84.2

也可以手动设置路由信息,如希望链接到一个网络地址为10.62.74.0/24的网络,在本地网络中有一台IP地址为10.71.84.51的主机可作为网关。

          $ sudo route add -net 10.62.74.0/24 gw 10.71.84.51 

4 DNS是一种确定主机名和IP地址间的映射关系的方法。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

linux内核编程 目 录 雷蒙序 简介 Linux文档工程小组“公告” 译者序 第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 什么是操作系统 11 1.2.3 内核数据结构 13 第2章 内存管理 15 2.1 虚拟内存抽象模型 15 2.1.1 请求调页 17 2.1.2 交换 17 2.1.3 共享虚拟内存 18 2.1.4 物理寻址模式和虚拟寻址模式 18 2.1.5 访问控制 18 2.2 高速缓存 19 2.3 Linux页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页 26 2.8.3 换出和淘汰页 27 2.9 交换缓存 27 2.10 页换入 28 第3章 进程 29 3.1 Linux进程 29 3.2 标识符 31 3.3 调度 32 3.4 文件 34 3.5 虚拟内存 35 3.6 创建进程 36 3.7 时间和定时器 37 3.8 执行程序 38 3.8.1 ELF 39 3.8.2 脚本文件 40 第4章 进程间通信机制 41 4.1 信号机制 41 4.2 管道 42 4.3 套接字 44 4.3.1 System V的进程间通信机制 44 4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核PCI数据结构 53 5.6.2 PCI设备驱动程序 53 5.6.3 PCI的BIOS函数 56 5.6.4 PCI修正过程 57 第6章 中断处理与设备驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理数据结构 61 6.1.3 中断处理 62 6.2 设备驱动程序 63 6.2.1 测试与中断 64 6.2.2 直接存储器访问(DMA) 65 6.2.3 存储器 66 6.2.4 设备驱动程序与内核的接口 66 6.2.5 硬盘 69 6.2.6 网络设备 74 第7章 文件系统 77 7.1 第二个扩展文件系统EXT2 78 7.1.1 EXT2系统的inode节点 79 7.1.2 EXT2系统的超级块 80 7.1.3 EXT2系统的组描述符 80 7.1.4 EXT2系统的目录 81 7.1.5 在EXT2文件系统中查找文件 81 7.1.6 在EXT2文件系统中改变文件 的大小 82 7.2 虚拟文件系统 83 7.2.1 VFS文件系统的超级块 84 7.2.2 VFS文件系统的inode节点 84 7.2.3 注册文件系统 85 7.2.4 装配文件系统 85 7.2.5 在虚拟文件系统中查找文件 87 7.2.6 卸载文件系统 87 7.2.7 VFS文件系统的inode缓存 87 7.2.8 目录缓存 88 7.3 缓冲区缓存 88 7.3.1 bdflush内核守护进程 90 7.3.2 update进程 90 7.4 /proc文件系统 91 7.5 特殊设备文件 918章 网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 建立INET BSD Socket连接 99 8.4.4 INET BSD Socket侦听 100 8.4.5 接受连接请求 100 8.5 IP层 100 8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务队列 108 9.1.3 定时器 109 9.1.4 等待队列 110 9.1.5 自旋锁 110 9.1.6 信号量 110 9.2 模块 111 9.2.1 模块载入 112 9.2.2 模块卸载 113 第10章 处理器 115 10.1 X86 115 10.2 ARM 115 10.3 Alpha AXP处理器 115 第11Linux内核源代码 117 11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 11812章 Linux数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符设备文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 把设备文件用于输入 170 第6章 启动参数 182 第7章 系统调用 185 第8章 阻塞处理 190 第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 21113章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分 Linux程序员指南 第1Linux操作系统 219 第2章 Linux内核 220 第3章 Linux libc包 221 第4章 系统调用 222 第5章 “瑞士军刀”:ioctl 223 第6章 Linux进程间通信 224 6.1 介绍 224 6.2 半双工Unix管道 224 6.2.1 基本概念 224 6.2.2 用C语言创建管道 225 6.2.3 简便方法 229 6.2.4 管道的原子操作 233 6.2.5 关于半双工管道需要注意的几个 问题 233 6.3 命名管道 234 6.3.1 基本概念 234 6.3.2 创建FIFO 234 6.3.3 FIFO操作 235 6.3.4 FIFO上的阻塞动作 236 6.3.5 SIGPIPE信号 237 6.4 系统V IPC 237 6.4.1 基本概念 237 6.4.2 消息队列 239 6.4.3 信号量 251 6.4.4 semtool:交互式信号量操作 程序 260 6.4.5 共享内存 267 第7章 声音编程 274 7.1 内部扬声器编程 274 7.2 声卡编程 274 第8章 字符单元图形 276 8.1 libc中的I/O函数 277 8.1.1 格式化输出 277 8.1.2 格式化输入 278 8.2 termcap库 278 8.2.1 前言 278 8.2.2 获得终端描述 279 8.2.3 查看终端描述 279 8.2.4 termcap权能 280 8.3 Ncurses简介 280 8.4 初始化 282 8.5 窗口 283 8.6 输出 284 8.6.1 格式化输出 285 8.6.2 插入字符/行 286 8.6.3 删除字符/行 286 8.6.4 方框和直线 287 8.6.5 背景字符 287 8.7 输入 288 8.8 选项 289 8.8.1 输出选项 289 8.8.2 输入选项 290 8.8.3 终端属性 291 8.8.4 使用选项 291 8.9 更新终端 292 8.10 视频属性与颜色 293 8.11 光标和屏幕坐标 294 8.12 滚动 294 8.13 小键盘 295 8.14 软标签 295 8.15 杂项 295 8.16 低级访问 296 8.17 屏幕转储 296 8.18 Termcap模拟 296 8.19 Terminfo函数 296 8.20 调试函数 297 8.21 Terminfo权能 297 8.21.1 布尔型权能 297 8.21.2 数值型权能 298 8.21.3 字符串型权能 299 8.22 [N]Curses函数概述 306 第9章 I/O端口编程 307 9.1 鼠标编程 307 9.2 调制解调器编程 308 9.3 打印机编程 308 9.4 游戏杆编程 30810章 把应用程序移植到Linux上 309 10.1 介绍 309 10.2 信号处理 309 10.2.1 SVR4、BSD和POSIX.1下 的信号 310 10.2.2 Linux信号选项 310 10.2.3 Linux下的信号 310 10.2.4 Linux支持的信号 311 10.3 终端I/O 311 10.4 进程信息和控制 311 10.4.1 kvm过程 312 10.4.2 ptrace和/proc文件系统 312 10.4.3 Linux下的进程控制 312 10.5 可移植条件编译 313 10.6 补充说明 314 附录 以字母顺序排列的系统调用 315 第四部分 Linux内核概念系统结构 摘要 323 前言 324 第1章 系统结构 325 1.1 系统概述 325 1.2 内核的目标 325 1.3 内核结构的概述 325 1.4 支持多个开发人员 327 1.5 系统数据结构 328 1.5.1 任务列表 328 1.5.2 内存映射 328 1.5.3 索引节点 328 1.5.4 数据连接 329 第2章 子系统的系统结构 330 2.1 进程调度程序系统结构 330 2.1.1 目标 330 2.1.2 模块 330 2.1.3 数据表达 331 2.1.4 依赖性、数据流和控制流 331 2.2 内存管理程序系统结构 331 2.2.1 目标 331 2.2.2 模块 331 2.2.3 数据表示 331 2.2.4 数据流、控制流和依赖性 332 2.3 虚拟文件系统系统结构 333 2.3.1 目标 333 2.3.2 模块 333 2.3.3 数据表示 333 2.3.4 数据流、控制流和依赖性 334 2.4 网络接口系统结构 334 2.4.1 目标 334 2.4.2 模块 334 2.4.3 数据表示 335 2.4.4 数据流、控制流和依赖性 335 2.5 进程间通信系统结构 335 第3章 结论 336 附录A 术语定义 337 附录B 参考文献 338 第五部分 Linux内核具体系统结构 摘要 3411章 前言 342 1.1 目标 342 1.2 Linux介绍 342 1.3 软件系统结构的背景知识 342 1.4 方法与途径 343 1.5 适用本书的读者 344 1.6 本部分的章节安排 344 第2章 系统结构 345 第3章 子系统结构 346 3.1 进程调度程序 346 3.1.1 目标 346 3.1.2 外部接口 346 3.1.3 子系统描述 346 3.1.4 数据结构 347 3.1.5 子系统结构 348 3.1.6 子系统依赖性 348 3.2 内存管理程序 348 3.2.1 目标 348 3.2.2 外部接口 349 3.2.3 子系统描述 349 3.2.4 数据结构 350 3.2.5 子系统结构 350 3.2.6 子系统依赖性 351 3.3 虚拟文件系统 352 3.3.1 目标 352 3.3.2 外部接口 352 3.3.3 子系统描述 353 3.3.4 设备驱动程序 353 3.3.5 逻辑文件系统 354 3.3.6 模块 354 3.3.7 数据结构 355 3.3.8 子系统结构 355 3.3.9 子系统依赖性 355 3.4 进程间通信 355 3.4.1 目标 355 3.4.2 外部接口 357 3.4.3 子系统描述 357 3.4.4 数据结构 358 3.4.5 子系统结构 359 3.4.6 子系统依赖性 359 3.5 网络接口 360 3.5.1 目标 360 3.5.2 外部接口 361 3.5.3 子系统描述 361 3.5.4 数据结构 362 3.5.5 子系统结构 363 3.5.6 子系统依赖性 363 第4章 结论 365 附录A 术语定义 366 附录B 参考文献 368 第六部分 附 录 附录A Linux文档工程拷贝许可证 372 附录B GNU通用公共许可证 374
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值