Linux模块加载流程及如何让系统开机自动加载模块

Linux模块加载
Linux系统加载哪些内核模块,和配置文件有关系。

模块保存在/lib/modules/下。
使用/etc/modules-load.d/来配置系统启动时加载哪些模块。
使用/etc/modprobe.d/下配置模块加载时的一些参数,
也可以利用blacklist来屏蔽模块的自动加载。例如,在安装NVIDIA显卡驱动时,需要屏蔽开源的nouveau驱动,就可以将其加入blacklist。

如何添加一个自己编译的模块
将编译好的.ko模块放到目录/lib/modules/`uname -r`/
注意特别重要的一步:在命令行输入命令depmod,此命令是用来更新模块启动配置表的,没有depmod这个命令,就无法使用modprobe命令来启动模块。
为*.modules文件加可执行权限,我这里这就执行:chmod 755 helloworld.modules
开机自动加载
配置启动时加载哪些内核模块,一般位于/etc/modules-load.d/。

比如,对于virtual box虚拟机:

$ cat /etc/modules-load.d/virtualbox.conf
vboxdrv
vboxnetflt
vboxnetadp
vboxpci


目录允许多个配置文件存在并同时生效。例如,anything.conf文件里面就记录了deepin-anything需要加载的模块vfs_monitor:

$ cat /usr/lib/modules-load.d/anything.conf
vfs_monitor
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书详细介绍如何在个人电脑上安装配置Caldera和Red Hat两种发行版本的Linux操作系统,并能帮助用户解决安装和配置过程中出现的各种问题。本书既能指导你进行基本的安装步骤,也能指导你定制独具特色的Linux 操作系统。通过本书的学习,你会成为一个Linux 操作系统的安装专家,并能使配置的机器完全按自己的意愿工作。 目 录 前言 第1章 安装Linux操作系统的准备工作 1 1.1 概述 1 1.1.1 什么是Linux操作系统 1 1.1.2 Linux操作系统的发行版本 2 1.1.3 安装Linux操作系统之前的准备工作 4 1.2 快速解决方案 5 1.2.1 使用Windows 95/98/NT查看系统 信息 5 1.2.2 查看Red Hat发行版本的硬件兼容 清单 8 1.2.3 查看Caldera发行版本的硬件兼容 清单 8 1.2.4 查找Linux操作系统的低价CD-ROM 光盘 8 1.2.5 查找关于Linux操作系统的最新新闻 9 1.2.6 确定Linux操作系统能否满足你的 工作需要 9 第2章 对硬盘驱动器进行分区 10 2.1 概述 10 2.2 快速解决方案 13 2.2.1 使用FIPS程序在不破坏原有数据的 前提下调整分区 13 2.2.2 使用Red Hat公司的Disk Druid 程序增加分区 14 2.2.3 使用Partition Magic程序整理硬盘 并增加分区 15 2.2.4 使用Caldera公司的Disk Partition 程序增加分区 15 第3章 安装Caldera发行版本 18 3.1 概述 18 3.1.1 安装过程 18 3.1.2 Caldera发行版本的安装选项 19 3.1.3 配置图形的考虑 20 3.1.4 安装多个操作系统: 21 3.2 快速解决方案 22 3.2.1 从CD-ROM光盘开始运行 安装程序 22 3.2.2 安装Caldera公司的Windows下的 辅助安装工具程序 22 3.2.3 确定哪些安装盘是必需的 23 3.2.4 制作安装盘 23 3.2.5 制作一张Windows下的引导盘 24 3.2.6 从软盘开始运行安装程序 25 3.2.7 为一个专用的本地网络分配IP地址 25 3.2.8 从引导管理程序失误中恢复NT 25 3.2.9 制作一张定制的Linux操作系统 引导盘 26 3.2.10 设置直接引导启动到Caldera 发行版本 26 3.2.11 直接引导启动到Caldera发行版本 27 3.2.12 诊断使用LILO程序引导启动时 出现的挂起错误 27 3.2.13 恢复主引导记录 28 3.2.14 运行LILO程序 28 3.2.15 设置LILO程序 28 3.2.16 确定磁盘参数 29 3.2.17 在LILO程序中设置用来选择某个 操作系统的启动引导延时 30 3.2.18 重新安装LILO程序 30 3.2.19 删除LILO程序 30 3.2.20 关闭系统 30 第4章 安装Red Hat发行版本 31 4.1 概述 31 4.1.1 安装过程 32 4.1.2 Red Hat发行版本的安装级别 32 4.1.3 LILO程序,Linux操作系统加载 程序 34 4.1.4 配置显示选项的考虑 35 4.1.5 系统开机引导时可以使用的服务 35 4.1.6 安装多个操作系统 36 4.2 快速解决方案 36 4.2.1 确定哪些安装盘是必需的 36 4.2.2 制作一张Linux操作系统的安装引 导盘 37 4.2.3 下载最新的引导启动映像 37 4.2.4 制作一张Windows下的引导盘 37 4.2.5 从一张引导盘开始运行安装程序 38 4.2.6 从CD-ROM光盘开始运行安装程序 38 4.2.7 为NFS、HTTP或者FTP安装设置 一个本地服务器 39 4.2.8 为一个专用的本地网络分配IP地址 39 4.2.9 通过一个NFS挂装进行安装 39 4.2.10 从一个硬盘驱动器分区进行安装 40 4.2.11 从一个HTTP或者FTP服务器进行 安装 40 4.2.12 从引导管理程序失误中恢复NT 40 4.2.13 选择需要安装哪些组件和软件包 41 4.2.14 使用虚拟控制台跟踪和调试安装 过程 41 4.2.15 引导进入Linux操作系统 42 4.2.16 诊断使用LILO程序启动引导时 出现的挂起错误 42 4.2.17 可以用在MBR中的LILO程序的 代用程序 44 4.2.18 恢复MBR 45 4.2.19 运行LILO程序 45 4.2.20 设置LILO程序 45 4.2.21 配置LILO程序引导多个操作系统 45 4.2.22 确定磁盘参数 46 4.2.23 设置用来选择某个操作系统的 启动引导延时 47 4.2.24 在LILO程序中设置一个缺省的 操作系统 47 4.2.25 重新安装LILO程序 48 4.2.26 删除LILO程序 48 4.2.27 选择自动启用哪些服务 48 4.2.28 关闭系统 48 4.2.29 让Linux操作系统检查1GB以上的 RAM系统内存 49 第5章 使用Linux操作系统 50 5.1 概述 50 5.1.1 Linux操作系统与DOS和NT的比较 51 5.1.2 文件存取权限和所有权限 51 5.2 快速解决方案 52 5.2.1 设置日期 52 5.2.2 设置时间 52 5.2.3 列出目录的内容清单 52 5.2.4 切换目录路径 53 5.2.5 确定自己所在的位置 54 5.2.6 解读文件和目录清单列表 54 5.2.7 改变文件和目录的存取权限 54 5.2.8 改变文件和目录的所有者 55 5.2.9 给文件和目录改名 55 5.2.10 建立目录 55 5.2.11 建立链接 55 5.2.12 删除目录 56 5.2.13 拷贝文件和目录 56 5.2.14 移动文件和目录 57 5.2.15 删除文件 57 5.2.16 识别二进制文件 57 5.2.17 使用vi文本编辑器程序 57 5.2.18 使用pico文本编辑器程序 58 5.2.19 查看文本文件,不使用文本编辑器 程序 60 5.2.20 把命令结果输出到文本文件中 61 5.2.21 建立别名 61 5.2.22 使用find命令确定文件存放位置 61 5.2.23 通过搜索locate数据库来查找文件 62 5.2.24 在path语句说明的路径中查找 文件 62 5.2.25 在path语句中添加新路径 63 5.2.26 在文件内容中查找文本 63 5.2.27 寻求帮助 63 5.2.28 在后台运行命令程序 63 5.2.29 确定当前运行的命令 63 5.2.30 把命令程序调到后台去 64 5.2.31 把后台命令调回前台来 64 5.2.32 取消正在执行的命令 64 5.2.33 清除屏幕 64 5.2.34 一次执行多个命令 65 5.2.35 退出登录 65 5.2.36 重新引导启动机器 65 5.2.37 系统关机 65 第6章 配置X图形界面 66 6.1 概述 66 6.2 快速解决方案 67 6.2.1 在Caldera发行版本中配置X图形 界面的准备工作 67 6.2.2 在Caldera发行版本中配置鼠标 69 6.2.3 在Caldera发行版本中配置键盘 70 6.2.4 在Caldera发行版本中配置图形卡 71 6.2.5 在Caldera发行版本中配置显示器 73 6.2.6 在Caldera发行版本中配置图形显示 模式和颜色设置 73 6.2.7 在Caldera发行版本中配置X服务器 程序本身 74 6.2.8 在Red Hat发行版本中配置X图形 界面 75 6.2.9 在Red Hat发行版本中定制配置 一台显示器 79 6.2.10 在Red Hat发行版本中配置图形 显示模式 80 6.2.11 手动调整X图形界面 82 6.2.12 手动配置显示器 82 6.2.13 手动配置图形卡 83 6.2.14 手动配置图形显示模式 84 6.2.15 进入GUI 85 第7章 窗口管理器程序和桌面环境 86 7.1 概述 86 7.1.1 窗口管理器程序 86 7.1.2 桌面环境 87 7.2 快速解决方案 88 7.2.1 查找窗口管理器程序 88 7.2.2 在Gnome桌面环境中运行程序 88 7.2.3 在Gnome桌面环境中隐藏任务条 89 7.2.4 使用Gnome桌面环境中的帮助系统 89 7.2.5 使用Gnome桌面环境中的控制面板 90 7.2.6 在KDE桌面环境中运行程序 91 7.2.7 在KDE桌面环境中隐藏任务条 92 7.2.8 使用KDE桌面环境中的帮助系统 92 7.2.9 使用KDE桌面环境中的控制中心 93 7.2.10 在KDE桌面环境使用COAS 94 7.2.11 安装一个新的窗口管理器程序 94 第8章 建立用户帐户 96 8.1 概述 96 8.1.1 口令字 97 8.1.2 编写添加用户命令脚本程序 98 8.2 快速解决方案 98 8.2.1 添加一个新用户 98 8.2.2 添加或者修改一个口令字 98 8.2.3 通过linuxconf程序添加一个 新用户 99 8.2.4 查看关于新用户的缺省设置 100 8.2.5 选择关于新用户的缺省设置 100 8.2.6 改变关于新用户的缺省设置 101 8.2.7 修改现有用户的信息 101 8.2.8 通过linuxconf程序修改现有用户 的信息 102 8.2.9 安装shadow口令字软件包 103 8.2.10 转换用户系统使用shadow 口令字 103 8.2.11 转换用户系统不再使用shadow 口令字 103 8.2.12 查找缺省的用户配置文件 103 8.2.13 查找容易被破译的口令字 104 8.2.14 冻结一个用户 104 8.2.15 通过linuxconf程序冻结一个用户 104 8.2.16 删除一个用户 104 8.2.17 通过linuxconf程序删除一个用户 104 8.2.18 检查系统的易受攻击性 105 8.2.19 修改源代码使程序能够运行在使用 shadow口令字功能的系统中 105 8.2.20 打开linuxconf程序 105 第9章 Linux操作系统的文件系统 107 9.1 概述 107 9.1.1 文件系统基础 107 9.1.2 Linux文件系统的格式 107 9.2 快速解决方案 108 9.2.1 建立一个文件系统 108 9.2.2 挂装到文件系统上 108 9.2.3 从文件系统上卸载 109 9.2.4 简化常用挂装命令 109 9.2.5 挂装一个已经准备好的设备 类型 110 9.2.6 在开机引导启动时自动挂装一个 设备 110 9.2.7 把一个现存的目录转移到一个新 分区 111 第10章 编译系统内核 113 10.1 概述 113 10.1.1 为什么要编译 113 10.1.2 为什么不编译 114 10.1.3 内核升级问题 114 10.1.4 应该使用哪一个内核 114 10.1.5 系统内核配置选项 114 10.2 快速解决方案 115 10.2.1 确定用户正在使用的是哪个版本 的内核 115 10.2.2 确定内核是测试版还是正式版 115 10.2.3 通过发行商做好升级内核的 准备 115 10.2.4 哪里可以找到内核源代码 116 10.2.5 为新内核加上LILO选项 116 10.2.6 测试内核安装效果 116 10.2.7 使用Caldera发行版本升级内核 117 10.2.8 使用Red Hat发行版本升级内核 117 10.2.9 编译内核 118 10.2.10 升级内核 119 10.2.11 为内核源代码打补丁 119 10.2.12 对缺省内核进行细调 120 10.2.13 安装内核 121 10.2.14 加载内核模块 121 10.2.15 卸载内核模块 121 10.2.16 使用config程序 122 10.2.17 使用menuconfig程序 122 10.2.18 使用xconfig程序 124 第11章 配置LAN 127 11.1 概述 127 11.1.1 计划一个LAN 127 11.1.2 网络硬件 128 11.1.3 服务 129 11.1.4 确定用户是否需要动态 分配路由 130 11.2 快速解决方案 130 11.2.1 检查网络当前的设置情况 130 11.2.2 设置IP地址 131 11.2.3 在GUI中设置IP地址 131 11.2.4 给网络中的计算机命名 133 11.2.5 在GUI中给网络中的计算机命名 133 11.2.6 分配域名 135 11.2.7 在GUI中分配域名 135 11.2.8 设置动态路由分配 136 11.2.9 在Red Hat发行版本中设置静态路由 分配 138 11.2.10 为计算机配置域名解析 139 11.2.11 建立LAN 140 11.2.12 配置打印服务 141 11.2.13 在GUI中添加一台打印机 142 11.2.14 在GUI中修改一个打印机设置 144 11.2.15 删除一个打印机设置 145 11.2.16 在GUI中删除一个打印机设置 145 11.2.17 配置一个NFS文件服务器计算机 147 11.2.18 配置一个NFS客户计算机 148 11.2.19 确定是否需要NIS 148 11.2.20 配置NIS 148 第12章 通过Samba服务与Windows网络 集成 152 12.1 概述 152 12.2 快速解决方案 154 12.2.1 获取Samba的最新版本 154 12.2.2 检查是否已经安装了Samba 154 12.2.3 从Red Hat发行版本的CD-ROM 光盘上安装Samba软件包 154 12.2.4 从Caldera发行版本的CD-ROM 光盘上安装Samba软件包 154 12.2.5 从源代码安装Samba软件包 154 12.2.6 查看Samba守护进程是否正在 运行 155 12.2.7 配置Samba守护进程从inetd中 运行 155 12.2.8 配置Samba守护进程从系统开机 引导脚本程序中运行 156 12.2.9 配置Samba守护进程不从系统开机引导脚本程序中运行 156 12.2.10 手动启动Samba守护进程运行 157 12.2.11 定义主机的Samba服务访问 权限 157 12.2.12 建立一个Samba配置文件 157 12.2.13 配置硬盘驱动器共享:Linux 到Windows 159 12.2.14 配置硬盘驱动器共享:Windows 到Linux 160 12.2.15 从一个Windows机器上测试硬盘 驱动器共享设置 161 12.2.16 从一个Linux机器上测试硬盘 驱动器共享设置 161 12.2.17 配置打印共享:Linux到 Windows 161 12.2.18 配置打印共享:Windows到 Linux 162 12.2.19 测试打印共享 163 12.2.20 访问一个Windows硬盘驱动器 163 第13章 连接到因特网 164 13.1 概述 164 13.1.1 PPP拨号程序 164 13.1.2 因特网客户程序 164 13.2 快速解决方案 165 13.2.1 连接到ISP 165 13.2.2 使用kppp设置一个PPP连接 166 13.2.3 准备编写一个登录命令脚本 170 13.2.4 在kppp中编写一个登录命令脚本 170 13.2.5 使用linuxconf程序设置一个PPP 连接 171 13.2.6 下载并安装pppsetup软件 173 13.2.7 使用pppsetup软件对PPP拨号进行 设置 173 13.2.8 从命令行拨入 177 13.2.9 从Caldera发行版本的GUI 中拨入 177 13.2.10 从Red Hat发行版本的GUI 中拨入 177 第14章 设置因特网服务 178 14.1 概述 178 14.1.1 连接性 178 14.1.2 电子邮件方面的考虑 178 14.1.3 使所做的设置修改明确生效 179 14.1.4 虚拟主机 179 14.2 快速解决方案 179 14.2.1 设置虚拟主机服务 179 14.2.2 配置电子邮件 180 14.2.3 运行POP电子邮件软件 182 14.2.4 配置Apache软件的WWW服务 功能 183 14.2.5 配置一个FTP服务器 185 14.2.6 配置NFS 186 第15章 软件包管理 188 15.1 概述 188 15.1.1 选择下载的软件包格式 188 15.1.2 软件打包方法 189 15.1.3 X Window环境中的RPM工具 190 15.2 快速解决方案 191 15.2.1 管理RPM软件包 191 15.2.2 使用tar档案文件 193 15.2.3 使用GZip压缩 195 15.2.4 建立一个压缩的tar文件 195 第16章 安装新软件 196 16.1 概述 196 16.2 快速解决方案 198 16.2.1 寻找软件包 198 16.2.2 确定源代码是否可以在你的 机器上通过编译并运行 199 16.2.3 替换制作文件 199 16.2.4 编译源代码 200 16.2.5 安装二进制代码 200 16.2.6 把软件包添加到用户的PATH 语句中 200 16.2.7 识别可执行程序 201 第17章 C语言编程工具 202 17.1 概述 202 17.1.1 C语言编程工具 202 17.1.2 Linux操作系统中的C语言编程 202 17.2 快速解决方案 203 17.2.1 安装C语言编译器 203 17.2.2 安装基本C语言函数库 203 17.2.3 安装内核函数库 203 17.2.4 安装build管理器 204 17.2.5 安装C语言预处理器 204 17.2.6 安装文件比较工具软件 204 17.2.7 安装源代码补丁修补软件 204 17.2.8 寻找专业函数库 205 17.2.9 建立一个简单的制作文件 205 第18章 编写shell命令脚本程序 207 18.1 概述 207 18.1.1 shell概述 207 18.1.2 良好的命令脚本程序编程习惯 208 18.1.3 编程示范 208 18.2 快速解决方案 210 18.2.1 编写一个命令脚本程序 210 18.2.2 给变量赋值 211 18.2.3 使用某个变量的值 211 18.2.4 提示和接受输入数据 211 18.2.5 忽略元字符 211 18.2.6 编写条件if语句 212 18.2.7 接受命令行输入 213 18.2.8 添加注释语句 213 18.2.9 添加一个帮助组件 213 18.2.10 添加一个for循环语句 214 18.2.11 添加一个while循环语句 214 18.2.12 添加一个菜单 214 18.2.13 二次检查用户输入数据 215 18.2.14 比较文件、字符串以及正则 表达式 217 18.2.15 结束一个命令脚本程序 218 18.2.16 测试一个命令脚本程序 219 18.2.17 调试一个命令脚本程序 219 第19章 Perl语言 221 19.1 概述 221 19.1.1 为什么使用Perl语言 221 19.1.2 Perl语言编程示范 222 19.2 快速解决方案 224 19.2.1 建立一个Perl程序 224 19.2.2 运行一个Perl程序 224 19.2.3 使程序输出在下一行显示 224 19.2.4 接受命令行输入 225 19.2.5 给变量赋值 225 19.2.6 使用某个变量的值 225 19.2.7 测试true或者false 225 19.2.8 测试文件 225 19.2.9 使用数学计算 226 19.2.10 数据值比较 226 19.2.11 字符串处理 227 19.2.12 使用数组 227 19.2.13 使用for语句 228 19.2.14 使用foreach语句 229 19.2.15 使用if语句 229 19.2.16 使用unless语句 230 19.2.17 使用until语句 231 19.2.18 使用while语句 231 19.2.19 把数据写入一个文件 231 19.2.20 从一个文件中读出数据 232 第20章 配置系统备份策略 233 20.1 概述 233 20.2 快速解决方案 235 20.2.1 获取ftape驱动程序 235 20.2.2 安装ftape驱动程序 236 20.2.3 选择一种备份策略 236 20.2.4 人工建立备份:通用方法 237 20.2.5 使用软盘或磁带机进行一次完全 备份 237 20.2.6 从磁带或软盘中恢复完全备份 238 20.2.7 向一个现有的tar备份文件中添加 文件 238 20.2.8 设置备份操作在指定时间执行 238 20.2.9 选择备份用的软件 239 20.2.10 自动备份 239 20.2.11 决定是否使用一个活动硬盘 驱动器系统 240 第21章 安全性问题 242 21.1 概述 242 21.2 快速解决方案 243 21.2.1 关闭简单的薄弱环节 243 21.2.2 列出成功登录的记录清单 243 21.2.3 列出不成功登录的记录清单 244 21.2.4 查找安全漏洞 244 21.2.5 密切注意系统安全性方面的进展 244 21.2.6 确定是否需要一堵防火墙 245 21.2.7 强化对网络驱动器访问的控制 246 21.2.8 过滤向外发送的数据包 246 21.2.9 安装ipchains 247 21.2.10 在重启动/关机之前保存数据 包过滤规则 248 21.2.11 开机引导后恢复数据包过滤 规则 248 21.2.12 安装SOCKS 248 21.2.13 安装代理服务器程序 249 21.2.14 配置SOCKS 249 21.2.15 设置Linux机器通过代理防火墙 250
本书详细讲解了用Linux的图形配置工具配置Caldera OpenLinux,通过一个ppp与网络连接、使用K桌面环境、用StarOffice提高在家办公的效率、网络浏览、发传真、接收email及使用GIMP等图形工具。 24学时每次1小时的课程能使你迅速掌握Linux各方面的内容,简单易懂,通俗实用。本书在美国十分畅销,其作者是美国资深计算机书作家。本书适合初、中级读者阅读。 目 录 前言 第一部分 安装和配置 第1学时 准备安装Linux操作系统 2 1.1 什么是Linux操作系统 2 1.2 什么是OpenLinux操作系统 3 1.3 需要什么设备 4 1.4 支持什么设备 4 1.5 什么设备不能工作 5 1.5.1 Win打印机 5 1.5.2 Win调制解调器 5 1.5.3 红外端口 6 1.6 有什么设备 6 1.7 怎样计划安装过程 7 1.7.1 从CD - ROM光盘启动安装 8 1.7.2 从软盘启动安装 8 1.7.3 其他方法 9 1.8 计划开机启动过程 9 1.9 准备硬盘驱动器 10 1.10 课时小结 13 1.11 专家答疑 13 1.12 练习题 13 第2学时 安装Linux操作系统 14 2.1 开始安装 14 2.2 完成Linux操作系统安装过程 20 2.2.1 登录到Linux操作系统 22 2.2.2 重新启动和关机 24 2.3 课时小结 25 2.4 专家答疑 25 2.5 练习题 25 第3学时 安装后的系统配置工作 26 3.1 X Window System 26 3.1.1 X窗口系统是如何配置的 26 3.1.2 XF86Config文件 28 3.1.3 绕过或者禁止kdm登录引导画面 31 3.1.4 开始一个X11任务 31 3.2 为OpenLinux操作系统配置声卡 32 3.2.1 加载声卡驱动模块 32 3.2.2 测试声卡配置值 34 3.2.3 使用COAS配置声卡 34 3.2.4 一个快速录音命令脚本程序 36 3.2.5 配置声卡的简单方法 37 3.3 激活PCMCIA卡的服务程序 37 3.4 使用COAS配置网络信息 40 3.5 在OpenLinux操作系统中使用艾美加 (Iomega)公司的Zip驱动器 42 3.6 课时小结 43 3.7 专家答疑 43 3.8 练习题 43 第二部分 学习Linux操作系统的基本命令 第4学时 阅读与浏览命令 46 4.1 使用man命令获取帮助 46 4.2 浏览及搜索文件系统 48 4.2.1 使用cd命令进入不同的目录 48 4.2.2 使用pwd命令查看自己所在的位置 48 4.2.3 使用find命令在子目录中搜索 匹配的文件 49 4.2.4 使用whereis命令查找文件 50 4.2.5 使用locate命令定位文件 50 4.2.6 使用whatis和apropos命令获取命令 简介 51 4.3 阅读子目录和文件 52 4.3.1 使用ls命令列出子目录的内容清单 52 4.3.2 使用dir和vdir命令列出子目录的 内容清单 55 4.3.3 使用cat命令列出及合并文件 56 4.3.4 使用more命令阅读文件 58 4.3.5 使用less命令浏览文件 59 4.4 使用head或tail命令阅读文件的 开头和结尾 60 4.5 课时小结 61 4.6 专家答疑 61 4.7 练习题 62 第5学时 操作与搜索命令 63 5.1 操作文件和子目录 63 5.1.1 使用touch命令建立文件 63 5.1.2 使用rm命令删除文件 64 5.1.3 使用mkdir命令建立子目录 65 5.1.4 使用rmdir命令删除子目录 66 5.1.5 使用mv命令给文件改名 67 5.1.6 使用cp命令进行拷贝操作 68 5.1.7 使用ln命令建立硬链接和符号链接 70 5.1.8 使用Midnight Commander程序处 理文件 71 5.2 搜索文件 72 5.2.1 什么是规则表达式 72 5.2.2 使用grep命令在文件内进行搜索 74 5.3 压缩和解压缩文件 76 5.3.1 使用磁带文件归档命令建立 档案文件 76 5.3.2 建立cpio档案文件 78 5.3.3 使用gzip命令压缩文件 78 5.3.4 使用compress命令压缩文件 79 5.4 课时小结 79 5.5 专家答疑 80 5.6 练习题 80 第6学时 使用shell 81 6.1 什么是shell 81 6.2 系统中都有哪几种shell 81 6.2.1 ash的特色 82 6.2.2 Linux操作系统缺省的shell—bash 的特色 83 6.2.3 公共域Korn Shell—pdksh 84 6.2.4 与csh兼容的shell—tcsh的特色 84 6.2.5 zsh 85 6.3 了解shell的命令行 85 6.3.1 对shell进行定制设置 88 6.3.2 在后台运行程序 91 6.3.3 怎样使用管道 93 6.4 建立shell的命令脚本程序 95 6.5 课时小结 98 6.6 专家答疑 98 6.7 练习题 98 第7学时 使用X窗口系统 99 7.1 启动X 99 7.1.1 使用不同的颜色深度启动X11 100 7.1.2 在X11环境中使用虚拟控制台 102 7.1.3 启动多个X11任务操作 102 7.1.4 使用xdm程序登录进入OpenLinux操作 系统和X11环境 103 7.2 X11窗口管理器程序 104 7.2.1 配置fvwm窗口管理器程序 105 7.2.2 启动AfterStep窗口管理器程序 108 7.2.3 启动twm窗口管理器程序 109 7.3 X11终端程序 110 7.3.1 改变xterm终端程序的设置 110 7.3.2 使用高内存效率的rxvt终端程序 111 7.4 学习X11基本操作 112 7.4.1 使用X11客户程序的窗口尺寸 设置参数 112 7.4.2 为X11客户程序设置背景和 前景颜色 113 7.4.3 设置X11客户程序的资源 113 7.4.4 改变X11中鼠标和光标的状态 115 7.4.5 如何在X11中进行复制和粘贴 116 7.4.6 捕捉和转储X11窗口 117 7.4.7 定制X11根窗口并使用屏幕保护器 118 7.5 深入探索X11程序 121 7.5.1 使用xlsfonts列出X11的字体清单 121 7.5.2 使用xwininfo客户程序获得 窗口信息 121 7.5.3 使用xmessage客户程序生成日程提 示便条 122 7.5.4 使用X11时钟程序管理时间 123 7.6 课时小结 123 7.7 专家答疑 123 7.8 练习题 124 第8学时 探索K Desktop Environment 桌面环境 125 8.1 启动运行KDE桌面环境 126 8.2 KDE桌面的特点 127 8.2.1 执行基本的桌面操作 127 8.2.2 使用桌面控制条 127 8.2.3 编辑修改KDE桌面上的控制条菜单 128 8.2.4 使用kfm文件管理器程序 129 8.3 使用KDE控制中心配置KDE桌面环境 130 8.3.1 使用显示管理器程序选项 130 8.3.2 更换桌面的墙纸 132 8.3.3 改变屏幕保护器程序 133 8.3.4 改变缺省显示字体 134 8.3.5 设置系统操作声音效果 134 8.3.6 改变鼠标和键盘的设置 135 8.3.7 改变窗口按钮、属性和标题栏 136 8.3.8 控制光标在桌面之间的移动 138 8.4 课时小结 139 8.5 专家答疑 139 8.6 练习题 140 第三部分 与外部世界连接 第9学时 使用通讯程序 142 9.1 设置和测试调制解调器 142 9.2 使用通讯程序向外拨号 145 9.2.1 初始化并使用minicom 程序向外拨号 145 9.2.2 初始化并使用X11客户程序seyon 向外拨号 147 9.2.3 为Linux系统设置拨入连接 149 9.3 发送和接收传真 150 9.3.1 使用efax系列软件进行传真 151 9.3.2 使用ksendfax客户程序发送传真 155 9.3.3 使用mgetty+sendfax发送传真 156 9.4 课时小结 158 9.5 专家答疑 158 9.6 练习题 159 第10学时 与因特网连接 160 10.1 所需要的硬件 160 10.2 所需要的Linux操作系统软件 162 10.3 需要从ISP商处了解的信息 163 10.4 手动设置PPP连接 164 10.4.1 编辑resolv.conf文件 164 10.4.2 编辑PPP连接命令脚本程序 165 10.5 手动启动和中断PPP连接 166 10.5.1 使用minicom程序连接 167 10.5.2 使用ppp-on命令脚本程序连接 167 10.5.3 结束PPP连接 168 10.6 使用kppp客户程序配置一个PPP连接 168 10.6.1 配置kppp连接 168 10.6.2 使用kppp客户程序开始和结束PPP 连接 172 10.7 使用xisp程序配置一个PPP连接 172 10.7.1 配置一个新的xisp帐户 173 10.7.2 使用xisp客户程序开始和结束PPP 连接 174 10.8 检查连接 175 10.8.1 使用ifconfig命令 175 10.8.2 使用netstat命令 176 10.8.3 使用ping命令 176 10.8.4 使用route命令 177 10.8.5 查看系统登录记录 177 10.9 课时小结 178 10.10 专家答疑 178 10.11 练习题 179 第11学时 配置因特网电子邮件 180 11.1 初始化设置和获取电子邮件 180 11.2 使用Mail程序集发送邮件 183 11.2.1 使用mail程序 183 11.2.2 配置并使用elm邮件程序 184 11.2.3 配置并使用pine邮件程序 185 11.2.4 配置和使用网景公司的Messenger 软件收发电子邮件 188 11.2.5 订阅邮件表 191 11.3 配置procmail程序与写作模板对付 垃圾邮件 191 11.4 课时小结 193 11.5 专家答疑 193 11.6 练习题 194 第12学时 配置因特网新闻 195 12.1 使用tin新闻阅读器程序阅读 Usenet新闻 196 12.2 使用slrn新闻阅读器程序阅读 Usenet新闻 199 12.3 使用krn客户程序阅读Usenet新闻 201 12.4 使用网景公司的Discussions软件阅读 Usenet新闻 204 12.5 在Usenet新闻组上发布消息之前 207 12.6 课时小结 207 12.7 专家答疑 207 12.8 练习题 208 第13学时 因特网上的下载与浏览 209 13.1 使用文件传输协议程序来获取文件 209 13.1.1 使用ftp命令检索文件 209 13.1.2 使用ncftp命令进行下载 215 13.2 使用Linux浏览器程序浏览 World Wide Web网 216 13.2.1 使用lynx命令快速浏览 216 13.2.2 探索网景公司的Communicator 浏览器软件 217 13.3 使用因特网Relay Chat聊天 220 13.4 安装和配置AOL(美国在线)的Instant Messenger软件 221 13.5 使用telnet命令连接到其他的计算机 222 13.6 课时小结 224 13.7 专家答疑 224 13.8 练习题 225 第四部分 有效率地使用Linux操作系统 第14学时 文字处理程序 228 14.1 Linux操作系统环境中的字处理器 程序 228 14.1.1 XEmacs环境的特点 229 14.1.2 VIsual iMproved编辑器 程序—vim 232 14.1.3 pine软件的pico编辑器 程序的特点 233 14.1.4 合五为一的编辑器程序—joe 234 14.1.5 配置jed编辑器程序 235 14.1.6 使用kedit编辑器客户程序 235 14.1.7 使用CRiSPlite编辑器程序 236 14.1.8 StarOffice办公室套装软件中的StarWriter组件 237 14.1.9 Corel公司的WordPerfect for Linux 软件 238 14.1.10 Applix Words软件 239 14.1.11 使用sed和其他过滤器改变文本 240 14.2 对文档进行拼写检查 242 14.2.1 使用ispell命令改正文档 242 14.2.2 查找单个单词和其他技巧 243 14.3 课时小结 244 14.4 专家答疑 244 14.5 练习题 245 第15学时 排版打印文档 246 15.1 对文本进行排版 246 15.1.1 使用文本过滤器对文本进行排版 246 15.1.2 使用groff排版程序对文本进行 格式化处理 250 15.1.3 使用TeX排版软件对文本进行格式 化处理 252 15.2 打印文本文档 253 15.2.1 使用LPRng打印系统打印文档 254 15.2.2 使用lisa命令配置打印机 256 15.2.3 配置WordPerfect软件的打印功能 258 15.3 课时小结 260 15.4 专家答疑 260 15.5 练习题 261 第16学时 图形工具 262 16.1 了解Linux操作系统的图形文件格式 262 16.2 转换及观察图形 267 16.2.1 使用GIMP软件编辑图形 268 16.2.2 使用Image Magick软件进行 图像编辑 271 16.2.3 使用xv命令观看图形 272 16.2.4 使用gv命令查看PostScript 格式的文件 273 16.3 关于数字照相机和扫描仪 274 16.4 课时小结 275 16.5 专家答疑 275 16.6 练习题 276 第17学时 学习数学与财务工具 277 17.1 计算器 277 17.1.1 使用dc命令进行桌面计算 277 17.1.2 使用X11的xcalc客户程序 进行计算 278 17.1.3 使用kcalc客户程序进行计算 278 17.1.4 使用units命令进行计量单位转换 279 17.1.5 使用bc语言解释器编程计算器 280 17.2 电子表 281 17.2.1 使用公共域中的sc电子表 281 17.2.2 使用slsc电子表 282 17.2.3 使用免费的Wingz电子表 283 17.2.4 StarCalc电子表程序的特点 284 17.2.5 Applixware电子表程序的 商业化特点 285 17.3 使用gnuplot程序建立数学公式 的图形 286 17.4 课时小结 288 17.5 专家答疑 288 17.6 练习题 289 第18学时 个人事务工具程序 290 18.1 使用at命令安排个人日程备 忘录和任务 290 18.2 使用crontab命令安排周期性的 备忘录提示 292 18.3 使用X11的ical客户程序建立约会 备忘录提示 294 18.4 使用emacs查看日历和管理约会 297 18.5 使用knote客户程序设置报时钟 299 18.6 课时小结 299 18.7 专家答疑 299 18.8 练习题 300 第19学时 使用StarOffice软件实现 家庭办公室管理 301 19.1 安装和配置StarOffice软件 301 19.1.1 启动StarOffice软件运行 303 19.1.2 对StarOffice软件进行定制设置 304 19.1.3 为StarOffice软件安装一台打印机 305 19.2 使用StarOffice软件 305 19.2.1 使用StarWriter建立文档 307 19.2.2 对StarWriter文档进行拼写 检查和保存 309 19.2.3 使用StarCalc进行计算 310 19.2.4 使用StarCalc制作数据表图 313 19.3 课时小结 314 19.4 专家答疑 314 19.5 练习题 315 第20学时 休闲与玩Linux操作系统中的 游戏 316 20.1 使用kscd和xplaycd客户程序播放 音乐CD光盘 316 20.2 适合控制台的游戏 319 20.3 X窗口系统下的游戏 320 20.3.1 使用xboard客户程序玩国际象棋 320 20.3.2 玩X11版的solitaire扑克翻牌游戏 321 20.3.3 玩X11版的backgammon游戏 322 20.3.4 玩X11版的galaga游戏 322 20.3.5 玩X11版的击球游戏xboing 323 20.3.6 玩X窗口版Quake游戏 323 20.4 课时小结 324 20.5 专家答疑 324 20.6 练习题 325 第五部分 监管你的系统 第21学时 系统监管基础 328 21.1 使用su命令以根操作员的身份 执行操作 328 21.2 获取磁盘空间信息 329 21.2.1 使用df命令获取文件系统的 统计数据 330 21.2.2 使用du命令掌握文件系统的 磁盘使用情况 331 21.2.3 使用symlinks命令检查符号链接 332 21.2.4 节省磁盘空间 333 21.3 获取内存信息 335 21.3.1 使用free命令生成内存使用 情况的报告 335 21.3.2 使用vmstat命令生成虚拟内存使用 情况的报告 335 21.3.3 查看shell的“ulimit”设置 336 21.3.4 使用kill命令收回内存 337 21.4 使用top和xload命令获取系统 负载信息 338 21.4.1 使用uptime和w命令确定Linux操作 系统已经运转的时间 339 21.4.2 使用pppstats和mailstats命令获取网 络和邮件信息 340 21.4.3 使用statserial命令监控串行口 340 21.5 管理用户的存取权限 341 21.5.1 使用adduser命令建立用户 341 21.5.2 使用lisa命令管理用户 342 21.5.3 使用passwd命令改变口令字 342 21.5.4 限制登录 344 21.5.5 设置硬盘配额 345 21.6 课时小结 347 21.7 专家答疑 347 21.8 练习题 348 第22学时 管理文件和文件系统 349 22.1 OpenLinux操作系统是如何组织的 349 22.2 使用mount命令存取其他的 文件系统 351 22.3 了解文件系统表/etc/fstab文件 351 22.4 格式化一张软盘 353 22.5 使用KFloppy客户程序格式化软盘 355 22.6 mtools程序包 357 22.7 管理文件的所有权限和存取权限 358 22.7.1 掌握Linux操作系统中的 文件类型 358 22.7.2 解读文件的权限标志 359 22.8 使用chmod命令改变文件的权限 360 22.9 使用chown命令改变文件的所有权 362 22.10 使用chgrp和newgrp命令改变 用户组和所有权 362 22.11 使用rpm、lisa和kpackage程序管理 Linux软件 363 22.11.1 使用rpm命令 364 22.11.2 使用kpackage客户程序 366 22.11.3 使用lisa命令 368 22.12 课时小结 370 22.13 专家答疑 370 22.14 练习题 371 第23学时 备份和恢复系统 372 23.1 备份或者恢复操作之前需要考虑的 几个因素 372 23.1.1 配置BRU备份系统进行 备份和恢复 373 23.1.2 使用tar命令备份系统 376 23.1.3 使用cpio命令进行备份和恢复 377 23.1.4 使用taper命令脚本程序进行磁带机 备份和恢复 378 23.2 课时小结 380 23.3 专家答疑 380 23.4 练习题 380 第24学时 使用任务计划实现系统管理 自动化 381 24.1 使用cron程序包 381 24.1.1 管理用户的cron任务计划 382 24.1.2 使用crontab命令设置任务计划 382 24.2 使用atrun命令管理用户的任务计划 384 24.3 课时小结 386 24.4 专家答疑 386 24.5 练习题 386
内容: 一. Bootloader 二.Kernel引导入口 三.核心数据结构初始化--内核引导第一部分 四.外设初始化--内核引导第二部分 五.init进程和inittab引导指令 六.rc启动脚本 七.getty和login 八.bash 附:XDM方式登录 本文以Redhat 6.0 Linux 2.2.19 for Alpha/AXP为平台,描述了从开机到登录的 Linux 启动全过程。该文对i386平台同样适用。 一. Bootloader 在Alpha/AXP 平台上引导Linux通常有两种方法,一种是由MILO及其他类似的引导程序引导,另一种是由Firmware直接引导。MILO功能与i386平台的LILO相近,但内置有基本的磁盘驱动程序(如IDE、SCSI等),以及常见的文件系统驱动程序(如ext2,iso9660等), firmware有ARC、SRM两种形式,ARC具有类BIOS界面,甚至还有多重引导的设置;而SRM则具有功能强大的命令行界面,用户可以在控制台上使用boot等命令引导系统。ARC有分区(Partition)的概念,因此可以访问到分区的首扇区;而SRM只能将控制转给磁盘的首扇区。两种firmware都可以通过引导MILO来引导Linux,也可以直接引导Linux的引导代码。 “arch/alpha/boot” 下就是制作Linux Bootloader的文件。“head.S”文件提供了对 OSF PAL/1的调用入口,它将被编译后置于引导扇区(ARC的分区首扇区或SRM的磁盘0扇区),得到控制后初始化一些数据结构,再将控制转给“main.c”中的start_kernel(), start_kernel()向控制台输出一些提示,调用pal_init()初始化PAL代码,调用openboot() 打开引导设备(通过读取Firmware环境),调用load()将核心代码加载到START_ADDR(见 “include/asm-alpha/system.h”),再将Firmware中的核心引导参数加载到ZERO_PAGE(0) 中,最后调用runkernel()将控制转给0x100000的kernel,bootloader部分结束。 “arch/alpha/boot/bootp.c”以“main.c”为基础,可代替“main.c”与“head.S” 生成用于BOOTP协议网络引导的Bootloader。 Bootloader中使用的所有“srm_”函数在“arch/alpha/lib/”中定义。 以上这种Boot方式是一种最简单的方式,即不需其他工具就能引导Kernel,前提是按照 Makefile的指导,生成bootimage文件,内含以上提到的bootloader以及vmlinux,然后将 bootimage写入自磁盘引导扇区始的位置中。 当采用MILO这样的引导程序来引导Linux时,不需要上面所说的Bootloader,而只需要 vmlinux或vmlinux.gz,引导程序会主动解压加载内核到0x1000(小内核)或0x100000(大内核),并直接进入内核引导部分,即本文的第二节。 对于I386平台 i386系统中一般都有BIOS做最初的引导工作,那就是将四个主分区表中的第一个可引导 分区的第一个扇区加载到实模式地址0x7c00上,然后将控制转交给它。 在“arch/i386/boot” 目录下,bootsect.S是生成引导扇区的汇编源码,它首先将自己拷贝到0x90000上,然后将紧接其后的setup部分(第二扇区)拷贝到0x90200,将真正的内核代码拷贝到0x100000。以上这些拷贝动作都是以bootsect.S、setup.S以及vmlinux在磁盘上连续存放为前提的,也就是说,我们的bzImage文件或者zImage文件是按照bootsect,setup, vmlinux这样的顺序组织,并存放于始于引导分区的首扇区的连续磁盘扇区之中。 bootsect.S完成加载动作后,就直接跳转到0x90200,这里正是setup.S的程序入口。 setup.S的主要功能就是将系统参数(包括内存、磁盘等,由BIOS返回)拷贝到 0x90000-0x901FF内存中,这个地方正是bootsect.S存放的地方,这时它将被系统参数覆盖。以后这些参数将由保护模式下的代码来读取。 除此之外,setup.S还将video.S中的代码包含进来,检测和设置显示器和显示模式。最 后,setup.S将系统转换到保护模式,并跳转到0x100000(对于bzImage格式的大内核是 0x100000,对于zImage格式的是0x1000)的内核引导代码,Bootloader过程结束。 对于2.4.x版内核 没有什么变化。 二.Kernel引导入口 在arch/alpha/vmlinux.lds 的链接脚本控制下,链接程序将vmlinux的入口置于 "arch/alpha/kernel/head.S"中的__start上,因此当Bootloader跳转到0x100000时, __start处的代码开始执行。__start的代码很简单,只需要设置一下全局变量,然后就跳转到start_kernel去了。start_kernel()是"init/main.c"中的asmlinkage函数,至此,启动过程转入体系结构无关的通用C代码中。 对于I386平台 在i386体系结构中,因为i386本身的问题,在 "arch/alpha/kernel/head.S"中需要更多的设置,但最终也是通过call SYMBOL_NAME(start_kernel)转到start_kernel()这个体系结构无关的函数中去执行了。 所不同的是,在i386系统中,当内核以bzImage的形式压缩,即大内核方式(__BIG_KERNEL__)压缩时就需要预先处理bootsect.S和setup.S,按照大核模式使用$(CPP) 处理生成bbootsect.S和bsetup.S,然后再编译生成相应的.o文件,并使用 "arch/i386/boot/compressed/build.c"生成的build工具,将实际的内核(未压缩的,含 kernel中的head.S代码)与"arch/i386/boot/compressed"下的head.S和misc.c合成到一起,其中的 head.S代替了"arch/i386/kernel/head.S"的位置,由Bootloader引导执行(startup_32入口),然后它调用misc.c中定义的decompress_kernel()函数,使用 "lib/inflate.c"中定义的gunzip()将内核解压到0x100000,再转到其上执行 "arch/i386/kernel/head.S"中的startup_32代码。 对于2.4.x版内核 没有变化。 三.核心数据结构初始化--内核引导第一部分 start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。 这些动作有的是公共的,有的则是需要配置的才会执行的。 在start_kernel()函数中, 输出Linux版本信息(printk(linux_banner)) 设置与体系结构相关的环境(setup_arch()) 页表结构初始化(paging_init()) 使用"arch/alpha/kernel/entry.S"中的入口点设置系统自陷入口(trap_init()) 使用alpha_mv结构和entry.S入口初始化系统IRQ(init_IRQ()) 核心进程调度器初始化(包括初始化几个缺省的Bottom-half,sched_init()) 时间、定时器初始化(包括读取CMOS时钟、估测主频、初始化定时器中断等,time_init()) 提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options()) 控制台初始化(为输出信息而先于PCI初始化,console_init()) 剖析器数据结构初始化(prof_buffer和prof_len变量) 核心Cache初始化(描述Cache信息的Cache,kmem_cache_init()) 延迟校准(获得时钟jiffies与CPU主频ticks的延迟,calibrate_delay()) 内存初始化(设置内存上下界和页表项初始值,mem_init()) 创建和设置内部及通用cache("slab_cache",kmem_cache_sizes_init()) 创建uid taskcount SLAB cache("uid_cache",uidcache_init()) 创建文件cache("files_cache",filescache_init()) 创建目录cache("dentry_cache",dcache_init()) 创建与虚存相关的cache("vm_area_struct","mm_struct",vma_init()) 块设备读写缓冲区初始化(同时创建"buffer_head"cache用户加速访问,buffer_init()) 创建页cache(内存页hash表初始化,page_cache_init()) 创建信号队列cache("signal_queue",signals_init()) 初始化内存inode表(inode_init()) 创建内存文件描述符表("filp_cache",file_table_init()) 检查体系结构漏洞(对于alpha,此函数为空,check_bugs()) SMP机器其余CPU(除当前引导CPU)初始化(对于没有配置SMP的内核,此函数为空,smp_init()) 启动init过程(创建第一个核心线程,调用init()函数,原执行序列调用cpu_idle() 等待调度,init()) 至此start_kernel()结束,基本的核心环境已经建立起来了。 对于I386平台 i386平台上的内核启动过程与此基本相同,所不同的主要是实现方式。 对于2.4.x版内核 2.4.x中变化比较大,但基本过程没变,变动的是各个数据结构的具体实现,比如Cache。 四.外设初始化--内核引导第二部分 init()函数作为核心线程,首先锁定内核(仅对SMP机器有效),然后调用 do_basic_setup()完成外设及其驱动程序的加载和初始化。过程如下: 总线初始化(比如pci_init()) 网络初始化(初始化网络数据结构,包括sk_init()、skb_init()和proto_init()三部分,在proto_init()中,将调用protocols结构中包含的所有协议的初始化过程,sock_init()) 创建bdflush核心线程(bdflush()过程常驻核心空间,由核心唤醒来清理被写过的内存缓冲区,当bdflush()由kernel_thread()启动后,它将自己命名为kflushd) 创建kupdate核心线程(kupdate()过程常驻核心空间,由核心按时调度执行,将内存缓冲区中的信息更新到磁盘中,更新的内容包括超级块和inode表) 设置并启动核心调页线程kswapd(为了防止kswapd启动时将版本信息输出到其他信息中间,核心线调用kswapd_setup()设置kswapd运行所要求的环境,然后再创建 kswapd核心线程) 创建事件管理核心线程(start_context_thread()函数启动context_thread()过程,并重命名为keventd) 设备初始化(包括并口parport_init()、字符设备chr_dev_init()、块设备 blk_dev_init()、SCSI设备scsi_dev_init()、网络设备net_dev_init()、磁盘初始化及分区检查等等, device_setup()) 执行文件格式设置(binfmt_setup()) 启动任何使用__initcall标识的函数(方便核心开发者添加启动函数,do_initcalls()) 文件系统初始化(filesystem_setup()) 安装root文件系统(mount_root()) 至此do_basic_setup()函数返回init(),在释放启动内存段(free_initmem())并给内核解锁以后,init()打开 /dev/console设备,重定向stdin、stdout和stderr到控制台,最后,搜索文件系统中的init程序(或者由init=命令行参数指定的程序),并使用 execve()系统调用加载执行init程序。 init()函数到此结束,内核的引导部分也到此结束了,这个由start_kernel()创建的第一个线程已经成为一个用户模式下的进程了。此时系统中存在着六个运行实体: start_kernel()本身所在的执行体,这其实是一个"手工"创建的线程,它在创建了init()线程以后就进入cpu_idle()循环了,它不会在进程(线程)列表中出现 init线程,由start_kernel()创建,当前处于用户态,加载了init程序 kflushd核心线程,由init线程创建,在核心态运行bdflush()函数 kupdate核心线程,由init线程创建,在核心态运行kupdate()函数 kswapd核心线程,由init线程创建,在核心态运行kswapd()函数 keventd核心线程,由init线程创建,在核心态运行context_thread()函数 对于I386平台 基本相同。 对于2.4.x版内核 这一部分的启动过程在2.4.x内核中简化了不少,缺省的独立初始化过程只剩下网络 (sock_init())和创建事件管理核心线程,而其他所需要的初始化都使用__initcall()宏 包含在do_initcalls()函数中启动执行。 五.init进程和inittab引导指令 init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空 间内加载init程序,它的进程号是1。 init程序需要读取/etc/inittab文件作为其行为指针,inittab是以行为单位的描述性(非执行性)文本,每一个指令行都具有以下格式: id:runlevel:action:process其中id为入口标识符,runlevel为运行级别,action为动作代号,process为具体的执行程序。 id一般要求4个字符以内,对于getty或其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。 runlevel 是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、6运行级别被系统保留,0作为shutdown动作,1作为重启至单用户模式,6 为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。 在一般的系统实现中,都使用了2、3、4、5几个级别,在 Redhat系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示XDM图形登录方式。7- 9级别也是可以使用的,传统的Unix系统没有定义这几个级别。runlevel可以是并列的多个值,以匹配多个运行级别,对大多数action来说,仅当runlevel与当前运行级别匹配成功才会执行。 initdefault是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活 以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运行级别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入 runlevel。 sysinit、 boot、bootwait等action将在系统启动时无条件运行,而忽略其中的runlevel,其余的action(不含initdefault)都与某个runlevel相关。各个action的定义在inittab的man手册中有详细的描述。 在Redhat系统中,一般情况下inittab都会有如下几项: id:3:initdefault: #表示当前缺省运行级别为3--完全多任务模式; si::sysinit:/etc/rc.d/rc.sysinit #启动时自动执行/etc/rc.d/rc.sysinit脚本 l3:3:wait:/etc/rc.d/rc 3 #当运行级别为3时,以3为参数运行/etc/rc.d/rc脚本,init将等待其返回 0:12345:respawn:/sbin/mingetty tty0 #在1-5各个级别上以tty0为参数执行/sbin/mingetty程序,打开tty0终端用于 #用户登录,如果进程退出则再次运行mingetty程序 x:5:respawn:/usr/bin/X11/xdm -nodaemon #在5级别上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行. 六.rc启动脚本 上一节已经提到init进程将启动运行rc脚本,这一节将介绍rc脚本具体的工作。 一般情况下,rc启动脚本都位于/etc/rc.d目录下,rc.sysinit中最常见的动作就是激活交换分区,检查磁盘,加载硬件模块,这些动作无论哪个运行级别都是需要优先执行的。仅当rc.sysinit执行完以后init才会执行其他的boot或bootwait动作。 如果没有其他boot、bootwait动作,在运行级别3下,/etc/rc.d/rc将会得到执行,命令行参数为3,即执行 /etc/rc.d/rc3.d/目录下的所有文件。rc3.d下的文件都是指向/etc/rc.d/init.d/目录下各个Shell脚本的符号连接,而这些脚本一般能接受start、stop、restart、status等参数。rc脚本以start参数启动所有以S开头的脚本,在此之前,如果相应的脚本也存在K打头的链接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先启动K开头的脚本,以stop 作为参数停止这些已经启动了的服务,然后再重新运行。显然,这样做的直接目的就是当init改变运行级别时,所有相关的服务都将重启,即使是同一个级别。 rc程序执行完毕后,系统环境已经设置好了,下面就该用户登录系统了。 七.getty和login 在rc返回后,init将得到控制,并启动mingetty(见第五节)。mingetty是getty的简化,不能处理串口操作。getty的功能一般包括: 打开终端线,并设置模式 输出登录界面及提示,接受用户名的输入 以该用户名作为login的参数,加载login程序 缺省的登录提示记录在/etc/issue文件中,但每次启动,一般都会由rc.local脚本根据系统环境重新生成。 注:用于远程登录的提示信息位于/etc/issue.net中。 login程序在getty的同一个进程空间中运行,接受getty传来的用户名参数作为登录的用户名。 如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。这通常用来系统维护时防止非root用户登录。 只有/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。 当用户登录通过了这些检查后,login将搜索/etc/passwd文件(必要时搜索 /etc/shadow文件)用于匹配密码、设置主目录和加载shell。如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为 /bin/sh。在将控制转交给shell以前, getty将输出/var/log/lastlog中记录的上次登录系统的信息,然后检查用户是否有新邮件(/usr/spool/mail/ {username})。在设置好shell的uid、gid,以及TERM,PATH 等环境变量以后,进程加载shell,login的任务也就完成了。 八.bash 运行级别3下的用户login以后,将启动一个用户指定的shell,以下以/bin/bash为例继续我们的启动过程。 bash 是Bourne Shell的GNU扩展,除了继承了sh的所有特点以外,还增加了很多特性和功能。由login启动的bash是作为一个登录shell启动的,它继承了 getty设置的TERM、PATH等环境变量,其中PATH对于普通用户为"/bin:/usr/bin:/usr/local/bin",对于 root 为"/sbin:/bin:/usr/sbin:/usr/bin"。作为登录shell,它将首先寻找/etc/profile 脚本文件,并执行它;然后如果存在~/.bash_profile,则执行它,否则执行 ~/.bash_login,如果该文件也不存在,则执行~/.profile文件。然后bash将作为一个交互式shell执行~/.bashrc文件(如果存在的话),很多系统中,~/.bashrc都将启动 /etc/bashrc作为系统范围内的配置文件。 当显示出命令行提示符的时候,整个启动过程就结束了。此时的系统,运行着内核,运行着几个核心线程,运行着init进程,运行着一批由rc启动脚本激活的守护进程(如 inetd等),运行着一个bash作为用户的命令解释器。 附:XDM方式登录 如果缺省运行级别设为5,则系统中不光有1-6个getty监听着文本终端,还有启动了一个XDM的图形登录窗口。登录过程和文本方式差不多,也需要提供用户名和口令,XDM 的配置文件缺省为/usr/X11R6/lib/X11/xdm/xdm-config文件,其中指定了 /usr/X11R6/lib/X11/xdm/xsession作为XDM的会话描述脚本。登录成功后,XDM将执行这个脚本以运行一个会话管理器,比如gnome-session等。 除了XDM以外,不同的窗口管理系统(如KDE和GNOME)都提供了一个XDM的替代品,如gdm和kdm,这些程序的功能和XDM都差不多。
Linux系统启动流程大致可以分为以下几个步骤: 1. BIOS/UEFI:当计算机开机时,首先执行的是BIOS/UEFI固件程序。它会对硬件进行初始化,检测硬件是否正常,然后读取启动设备的MBR(Master Boot Record)或GPT(GUID Partition Table)分区表。 2. Bootloader:MBR/GPT分区表中存储了引导程序的位置信息。BIOS/UEFI会将控制权交给引导程序,例如GRUB2。引导程序会提供一个菜单,让用户选择要启动的操作系统。 3. Kernel:当用户选择要启动Linux系统时,引导程序会加载内核文件(vmlinuz)。内核负责初始化硬件设备,加载驱动程序,创建进程,管理内存和文件系统等。内核启动后,会挂载根文件系统,通常是ext4文件系统。 4. Initrd/initramfs:在内核启动之前,还需要加载一些必要的驱动程序和文件系统模块。这些驱动程序和模块可以被打包成一个initrd(initial ramdisk)或initramfs(initial RAM filesystem),并通过引导程序加载到内存中。initrd/initramfs中包含了一些必要的工具程序,例如udev,用于自动识别硬件设备。 5. Init:内核启动之后,会执行init程序,它是Linux系统中的第一个进程。init会读取/etc/inittab和/etc/init.d目录中的配置文件和脚本,然后按照配置文件中的要求启动相应的服务。通常情况下,Linux系统中有多个运行级别,每个级别对应不同的服务和进程。 6. 用户登录:当系统启动完成后,会进入登录界面。用户需要输入用户名和密码,然后系统会验证用户身份,如果验证通过,就会进入图形界面或命令行界面。 这些步骤构成了Linux系统的启动流程,不同的发行版可能有细微的差别,但基本流程是相似的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值