About eText Wizard

eTextWizard

目录：

一、关于eText Wizard（电子文档处理器）:

  1. 软件开发目的及软件用途
  2. 软件的主要功能
  3. 软件的安装及卸载
  4. 软件的注册
  5. 软件的下载地址

二、“国华软件工作室”的其他软件：

三、我的主页及联系方式：
一、关于eText Wizard: Top
1.软件开发目的及软件用途 Top
相信各位在上网一段时间后，硬盘里一定积攒了大量的电子文本，如：
技巧集锦、教程、技术文章、编程指南、小说、散文、传记等等，这些
精彩文件平时大量占用你的硬盘空间，一到用的时候，怎么也找不到；
读起来也很费力，一部《三国》你至少要打开一百二十个文件；而且
第二天也找不到昨天读到那里了，你说急人不急人！
   终于有一天想把他们作成帮助文件，但是，面对某个目录下的几千个
文本文件，才发现所谓的“所见即所得”的帮助文件制作软件竟然要
一个又一个地“手工重复劳作”........
  我曾经用Help&Manual手工作了一个包含两千多条Delphi技巧的帮助文件，
历时两三周终于完成，可是...手抽筋，眼发晕，食欲不振.......
  有时，真的希望有人把我想要的文本全处理好再放到网上，可是...
  面对网上成兆亿的文本难道只有手工处理吗？
  由此，萌发了我的软件开发方向：电子文档处理。
  “电子文档处理器”同时也是一个强大的HELP和CHM格式电子书批量制作工具。

“把繁重而又重复乏味的工作全部交给电脑去做吧！
    人的智慧在于告诉它应该怎么做！”
                                —xxx如是说。

2.软件的主要功能 Top

                功能
                 | 简介

                Txt->Help
                 | 文本文件转帮助文件，支持UNIX格式的TXT，自动添加标题、目录、索引。

                Txt->Html
                 | 文本文件转网页，自动处理URL&EMAIL

                Txt->Chm
                 | 文本文件转网页帮助文件，自动添加目录、索引、
                前页、后页等

                Html->Txt
                 | 网页文件转文本，转换完成比较干净彻底
                （可处理&nbsp;等），支持部分ASP文件。

                Html->Chm
                 | 网页文件转网页帮助文件，自动添加目录、索引。

                VBcode->Html
                 | VB源程序转为网页文件便于浏览。

                FileRenamer
                 | 批量文件改名，可预览结果，众多实用选项。

                Index Maker
                 | 对一个或多个目录下的所有或部分文件作索引，
                自动提取网页的<Title>作为标题，自动提取
                TXT第一行作为标题，多种输出格式。

                Dir Maker
                 | 批量目录建造。 *

                Title Editor
                 | 文本文件的标题编辑器及文件预览器。*

                Find&Replace
                 | 批量文件字符串查找替换器
                *

                Big5->GB

       注解：带*的项目尚未最终完成

3.软件的安装及卸载 Top

运行环境： MS win95;win98;win2000. win98以前的版本运行需要VB5.0
          的链接库文件MSVBVM50.DLL。

安装：

直接运行完全安装版即可（建议初次安装使用完全安装版）；
如果你以前安装过eTextWizard，直接下载新版本的主执行文件
eTextWizard.exe覆盖原来的即可。

卸载：

运行“控制面版”的“添加和删除程序”，找到“电子文档处理器”，
  选“卸载”，再依屏幕操作即可。

4.软件的注册 Top

本软件为“共享软件”，即“先试后买”的软件。

由于目前正处于测试阶段，故软件价格待定。

5.软件的下载地址:

本软件将会不定期更新版本，请留意！

http://www.ebook007.com/softdown.htm

二、“国华软件工作室”的其他软件： Top

TextVampire(网络即时贴) v1.0：Top
浏览文本或网页时，随时把你喜欢的文字很方便地存成.Txt文件。
你要做的只是选好文本，再按一下CTRL-C，这时，点击“网络即时贴”的
粘贴并生成文本文件”钮，TextVampire会自动截取所选文本的第一行（非空）
作为文件名保存起来，方便你将来收集整理、查找；同时也简化了你的击键次数。

http://www.ebook007.com/softdown.htm

三、我的主页及联系方式： Top

我的主要站点：

http://www.ebook007.com/
 (北极星书库)

http://go.163.com/~guohua99/(电子文档处理器)

镜像站点：

http://chmbook.363.net/

eMail:

fengguohua@hotmail.com

警告：Top

对重要文件请先作好备份，以免造成不必要的损失；
用户试用此软件的同时由用户个人承担试用此软件的一切风险，如用户不接受
此项要求请马上把本程序从你的硬盘删除； TXT转HELP结束后，程序会自动删除
已处理过的目录下的所有RTF文件，请在运行前
检查该目录下是否有重要的RTF文件，请作好备份。
请不要使用本软件制作非法电子出版物，否则一切后果由制作人自行承担，与本软件作者无关。
请不要修改本软件的版权信息（包括随软件发布的一切文档），否则作者将保留追究其法律责任的权利。
在不修改作者版权信息及保证软件完整性的前提下，任何个人或组织可随意发布或试用本软件的免费共享版，
但不得对本软件做任何逆向工程（指反汇编、反编译，公布注册码、散发正式版等）。
本文档中所指“程序”或“本程序”均指eTextWizard(中文名：电子文档处理器)。

注：MS,Windows Help(hcw.exe,hcrtf.exe),Html Help(hhw.exe,hhc.exe)的版权均归美国微软公司所有。

All Rights Reserved, Fengguohua of North Star, 2000-05-03

Top


-->Linux使用技巧集-->如 何 在 Linux 下 拨 号 上 Internet 网

 后页
前页
目录
北极星书库
如 何 在 Linux 下 拨 号 上 Internet 网
姓名 ：娄 志 勇 侯 红 梅
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

---- Linux 是 目 前 最 热 门 的 网 络 操 作 系 统 之 一， 它 包 含 了 完 整 的Internet 服 务， 其 中 和 拨 号 上 网 有 关 的 软 件 有: 1) Xwindow 视 窗 系 统;2)PPP 拨 号 软 件;3) Netscape Communicator 4 浏 览 器。 通 过 它 们 你 就 可 以 象 使 用 Win9X/NT 那 样 快 速 上 网。

---- 一、 安 装Modem

---- Linux 既 支 持 内 置Modem 卡， 也 支 持 外 置 式Modem。 笔 者 推 荐 使 用 外 置 式 Modem， 因 为 其 操 作 简 单、 便 于 观 察 硬 件 工 作 状 态。 请 在 主 机 上 为Modem 选 择 一 个 空 闲 的COM 端 口， 例 如:COM2 (Serial B)， 用9 针( 或25 针) 信 号 线 连 接 好 COM 口 和Modem, 打 开 电 源 开 关。

---- 二、 配 置PPP 拨 号 软 件

---- 以 超 级 用 户root 登 录, 进 入Linux 的Desktop， 打 开xterm 窗 口， 键 入pppsetup, 这 时 屏 幕 出 现:

---- 1) 询 问 拨 号 电 话 号 码 对 话 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ What is the phone number of your ISP ? ┃
┃ ┃
┃ [ atdt163 ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 在 对 话 框 中 输 入 拨 号 上 网 电 话 号 码, 如 果 你 使 用 音 频 电 话, 就 填 入atdt163 , 使 用 脉 冲 电 话， 就 应 填 入atdp163 。 选 择OK, 进 入 下 一 步。

---- 2) Modem 端 口、 速 率 选 择 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Where is your modem /dev/cua ? ┃
┃ ┃
┃ cua0 = (COM1 :under DOS) ┃
┃ cua1 = (COM2 :under DOS) ┃
┃ cua2 = (COM3 :under DOS) ┃
┃ cua3 = (COM4 :under DOS) ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┃ What baud rate is your modem ? ┃
┃ ┃
┃460KBps - ISDN modem ┃
┃230KBps - 56KBps modem or ISDN modem ... ┃
┃115KBps - 28.8,33.6,or 56 KBps modem ... ┃
┃57.6KBps - 28.8,33.6,or 56 KBps modem ... ┃
┃38.4KBps - 28.8 or 33.6 modem ... ┃
┃19.2KBps - 14.4 KBps modem ... ┃
┃ 9.6KBps - No comment ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 上 面 一 段 是 询 问 你 将MODEM 连 到 了 哪 个COM 端 口(Linux 称 之 为 cua 设 备) 上， 选 择cua1, 即COM2 口。

---- 下 面 一 段 则 是 询 问modem 速 率。Linux 既 支 持 通 常 速 率, 如:14.4K,28.8K,33.6K, 也 支 持 高 速 的56K, 甚 至 更 高 速 的230K,460k ISDN modem。 选 择 适 合 你 实 际 情 况 的 速 率， 进 入 下 一 步。

---- 3) 是 否 回 拨 电 话 对 话 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Does your ISP use CALLBACK ? ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 选 择NO， 不 需 回 拨 电 话。

---- 4) 电 信 局 域 名、 域 名 服 务 器IP 地 址 对 话 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Where is your ISP's domain name ? ┃
┃ ┃
┃ [ hf.ah.cn ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ － ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┃ Where is the IP address of your ISP's ┃
┃ name server ? ┃
┃ ┃
┃ [ 202.102.192.68 ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 域 名、 域 名 服 务 器IP 地 址 要 根 据 本 地 电 信 局 提 供 的 资 料 填 写, 例 如: 安 徽 合 肥 地 区 的 域 名 为: hf.ah.cn, 域 名 服 务 器IP 地 址 为202.102.192.68 。

---- 5) 使 用 拨 号 脚 本

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Does your ISP use PAP or CHAP ? ┃
┃ ┃
┃ PAP authentication ┃
┃ CHAPauthentication ┃
┃ MS-CHAP Microsoft version CHAP ┃
┃ SCRIPT create chat script for login┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 不 使 用PAP 或CHAP 协 议， 选 择SCRIPT， 建 立 自 己 的 拨 号 脚 本。 屏 幕 提 示：

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ What text should I wait for ?┃
┃ ┃
┃ [ : ] ┃
┃ ┃
┃ And waht should I send ? ┃
┃ ┃
┃ [ username ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┃ What text should I wait for ?┃
┃ ┃
┃ [ : ] ┃
┃ ┃
┃ And waht should I send ? ┃
┃ ┃
┃ [ password ] ┃
┃ ┃
┠ ─ － ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 在 第 一 段" 等 待 什 么" 提 示 中， 填 入 冒 号":", 即 在 拨 号 后 等 待 电 信 局 主 机 提 示 符: 的 出 现； 而 在 第 一 段" 发 送 什 么" 提 示 中， 填 入 你 的 拨 号 上 网 用 户 名, 如username, 即 对 电 信 局 主 机 的 提 示 用usename 作 为 应 答。

---- 同 理, 在 第 二 段" 等 待 什 么" 提 示 中， 填 入 冒 号":"； 而 在 第 二 段" 发 送 什 么" 提 示 中， 填 入 你 的 拨 号 上 网 口 令, 如password。

---- 至 此，PPP 拨 号 设 置 完 成。 在 你 拨 号 上 网 时，Linux ppp 软 件 会 自 动 用 你 填 入 的 内 容 建 立 拨 号 连 接， 就 象Win9X " 拨 号 网 络" 做 的 那 样。

---- 三、Netscape Communicator 4 浏 览 器 的 调 整

---- Netscape communicator 4 浏 览 器Linux 版 与Win9X 版 界 面 相 同, 设 置 方 法 大 同 小 异， 需 要 注 意 二 点：

---- 1) 在Cache 选 项 菜 单 中，Cache 缓 存 大 小 要 根 据 实 际 内 存、 硬 盘 空 间 情 况 设 定。 一 般Disk Cache 应 是Memory Cache 的2 倍。

---- 2)Email 服 务 器 地 址 要 认 真 填 写。SMTP Server、POP3 Server 地 址, 国 内 各 地 电 信 局 命 名 方 式 情 况 不 一, 不 一 定 和DNS Server 地 址 一 样, 要 以 本 地 电 信 局 提 供 的 数 据 为 准, 需 特 别 注 意。

---- 四、 拨 号 上 网

---- 1) 打 开xterm 窗 口， 键 入ppp-go, 这 时Modem 就 会 发 出 欢 快 的 拨 号 声,Linux PPP 软 件 开 始 建 立 拨 号 连 接。

---- 2) 当Modem 连 接 成 功 后, 再 打 开Netscape communicator 浏 览 器, 在Location: 后 面 键 入Web 地 址， 你 就 进 入 激 动 人 心 的Internet 网 了!

---- 3) 当 任 务 完 成 后, 在xterm 窗 口 中 键 入ppp-off 即 可 离 线。

后页
前页
目录
北极星书库


Get Update News

Update Link:
http://www.ebook007.com/softdown.htm

“电子文档处理器”会经常更新，请登陆“北极星书库”以得到最新版本。如有任何意见和建议也请给我发Email。

我的Email地址： fengguohua@hotmail.com。


Goto eTextWizard's Homepage

My Homepage:
http://www.ebook007.com/

“北极星书库”有海量的已经经过我的“电子文档处理器”处理过的Windows帮助文件或Windows HtmlHelp格式的小说、传记等作为电子书范本供大家参考。欢迎大家试用“电子文档处理器”--他不仅是一个强大的批量文本转换工具、文档制作工具，同时也是一款少见的具有强大功能的电子书批量制作工具，“北极星书库”的所有HELP和CHM格式电子书全部用“电子文档处理器”批量制作完成！！


-->Linux使用技巧集-->Linux 下 的 VC 集 成 开 发 环 境

北极星书库
Linux 下 的 VC 集 成 开 发 环 境
姓名 ：娄 志 勇 侯 红 梅
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

一、 概 述

---- Linux 下 的 Visual C 是 个 软 件 集 成 开 发 环 境, 其 中 包 括 了 用 来 创 建、 修 改、 编 译、 运 行、 调 试 应 用 软 件 所 需 要 的 一 切。 它 可 以 让 您 用 可 视 化 的 面 向 对 象 编 程 技 术， 迅 速 开 发 出 基 于Xwindow 的 应 用 软 件， 其 构 成 可 用 如 下 等 式 表 明：

Visual C = vxp + gcc

---- vxp 是 由 国 人 陈 勇 先 生 开 发 的Linux 自 由 软 件， 它 负 责 在 前 台 提 供 一 个 友 好 的、 可 视Xwindow 软 件 编 程 界 面。( 下 载 地 址http://www.shsu.edu/~stdyxc05)

---- gcc 则 是Linux 自 带 的GNU C 语 言 编 译 器 及 相 关 的Xwindow 开 发 工 具。 这 一 部 分 是 整 个 开 发 环 境 的 核 心， 处 在 后 台， 并 由vxp 自 动 调 用。

二、Visual C 屏 幕 画 面

---- 启 动Linux 的Xwindow 系 统， 双 击vxp 图 标， 即 可 进 入Visual C 集 成 开 发 环 境， 屏 幕 上 出 现4 个 窗 口: ( 见 图1 -- pic1.gif )。

---- 1. 主 窗 口： 位 于 屏 幕 顶 部， 标 题 为Visual X windows Programming API , 由 菜 单 条、 工 具 条、 信 息 指 示 区 组 成。 菜 单 条 包 括： 文 件、 运 行、 程 序、 编 译、 工 具、 选 项、 窗 口、 帮 助 等 项 目; 工 具 条 有 新 建、 打 开、 保 存等 按 钮； 信 息 指 示 区 则 给 出 当 前 对 象 的 名 称、 几 何 尺 寸、 相 对 坐 标位 置 等 信 息。

---- 2. 工 具 箱 窗 口： 位 于 屏 幕 左 侧， 标 题 为Widgets, 由 若 干 图 标 组 成, 每 个 图 标 代 表 一 种控 件。 如 按 钮、 滚 动 条、 列 表 框 等。

---- 3. 对 象 树 窗 口： 位 于 屏 幕 右 侧， 标 题 为Objects Tree 。 该 窗 口 实 时 地、 以 直 观 的 树型 标 明 了 各 对 象 的 层 次 关 系。

---- 4. 窗 体 窗 口： 位 于 屏 幕 中 央， 是 个 标 题 为untitled 的 空 窗 口， 也 是 应 用 软 件 的 最高 层 主 窗 口。

三、Visual C 编 程 实 例

---- Visual C 编 程 可 分 为3 个 步 骤：

---- 1. 绘 制 程 序 界 面

---- 2. 设 置 对 象 属 性

---- 3. 书 写 回 调 代 码

---- 第1 步 是 利 用 工 具 箱 提 供 的 各 种Widget 控 件， 在untitled 窗 体 窗 口 中 放 置 菜 单、 按 钮、 滚 动 条、 对 话 框 等 对 象， 绘 制 成 预 定 的 应 用 程 序 界 面。

---- 在 这 里， 为 简 单 起 见， 我 们 在untitled 窗 口 中 只 放 了 一 个 名 为"PushBotton1" 的 按 钮。 方 法 为： 在 工 具 箱 窗 口 内 单 击 标 有"OK" 字 样 的 按 钮 控 件， 然 后 将 鼠 标 移 到 窗 体 窗 口， 在 理 想 中 的 起 始 位 置 拖 动 鼠 标， 一 个 高 亮 度 的 矩 形 即 随 着 鼠 标 指 针 缩 放， 当 松 开 鼠 标 后， 高 亮 度 的 矩 形 即 被 同 样 大 小 的 按 钮 所 代 替, 其 名 称 为 系 统 默 认 的"PushBotton1"

---- 第2 步 是 在 第1 步 的 基 础 上， 利 用 系 统 提 供 的 " 资 源 编 辑 器" (Resources Editor) 对 选 定 对 象 的X 资 源-- 即 属 性-- 进 行 设 置。

---- 例 如："PushBotton1" 按 钮 对 象 就 有 颜 色、 字 体、 标 签 字 串 等 多 种 属 性， 程 序 员 可 以 根 据 需 要 对 这 些 属 性 进 行 设 置。 当 选 中 一 个 对 象 后， 资 源 编 辑 器 会 自 动 以 列 表 框 的 形 式 给 出 该 对 象 的 各 种 属 性、 可 能 的 属 性 值， 减 轻 了 程 序 员 的 记 忆 负 担。

---- 紧 接 第1 步， 我 们 以 修 改PushBotton1 的"labelString" 标 签 字 串 属 性 为 例， 将 鼠 标 指 针 移 到PushBotton1， 单 击 鼠 标 右 键， 调 出 资 源 编 辑 器， 在Select A Resource 项 里 选 择"labelString" 属 性， 将 其 值 改 为"My OK button" , 这 时,"PushBotton1" 字 样 应 被"My OK button" 代 替 ( 见 图3 -- pic3.gif )。

---- 第3 步 是 整 个 编 程 过 程 中 比 较 困 难 的。 这 一 步 是 要 程 序 员 通 过 " 回 调 代 码 编 辑 器"(Callback Code Editor)， 用C 语 言 编 写 回 调 代 码-- 即 控 制 对 象 的" 方 法"。

---- 例 如： 当 用 户 鼠 标 单 击My OK button 按 钮 后， 我 们 想 让 屏 幕 上 出 现"My OK button is selected " 信 息， 程 序 员 就 应 当 这 样 编 写 回 调 代 码：

---- 在"My OK Button" 上， 单 击 鼠 标 右 键， 调 出 " 回 调 代 码 编 辑 器" 。 在 最 下 方 的Source Code 文 本 输 入 框 里 键 入：

printf("My OK Button is selected");

---- 至 此， 一 个Xwindow 程 序 的 框 架 就 出 来 了。 单 击 " 保 存" 按 钮， 将 其 命 名 为example.vxp 。

四、 编 译、 运 行 和 调 试

---- 1. 进 入vxp 主 窗 口。

---- 2. 在Application 菜 单 项 中， 选 择 " 生 成C 代 码" 项, 可 将example.vxp 转 换 成example.c, 然 后 选 " 生 成makefile" 或 " 生 成Imakefile" 。

---- 3. 在Compile 菜 单 项 中， 选 择 via makefile 或via Imakefile， 用gcc 进 行 编 译， 生 成 可 执 行 文 件example 。

---- 4. 在Run 菜 单 项 中, 选Execute application 来 运 行example; 选Debug application调 试example 。

---- 从 使 用 中 我 们 可 以 看 出， 相 对 于 传 统 的 软 件 工 具，Linux Visual C 为 程 序 员 提 供 了 更 加 强 有 力 的 的 开 发 手 段， 大 大 提 高 了 工 作 效 率 和 编 码 质 量。


-->Linux使用技巧集-->Linux DOS2Linux mini-HOWTO

Linux DOS2Linux mini-HOWTO
姓名 ：Guido Gonzato
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

- From DOS to Linux - Quick!

By Guido Gonzato　<Guido@ibogfs.cineca.it>
April 26, 1996
Version 1.1

中译 : mglow.bbs@bbs.ee.ntu.edu.tw
文中 <ps.> 的部份为译者补述, 并非为原文所译. 再者, 原文发表日期距今也将近
一年, 有部份的说明与今日现况或有些微出入..但不足以影响其立论的正确性 :)

前言

这个 mini-HOWTO 是为(将成为曾经是??) DOS 的使用者而写的. 尤其是那些已经饱受 DOS 凌虐而准备投向 Linux , 这个在 i386 上 Un*x clone OS 的朋友.

当我在我的 PC 上安装 Linux 後, 我很希望能够迅速的了解并且利用它. 我相信这也 是每个人的期望. 你可能已经知道 DOS 可以视为 Un*x 的一角. 身为一位 "资深" DOS 使用者, 我可以告诉你它们有许多的相似之概念: 档案系统, 目录, 环境变数, 程式的 执行, .BAT 档案..等等. 这篇文章的目的在於让已经用过 DOS 的使用者能够将他们在 DOS 上的认识转换到 Linux 上. 你尽可以在床上读个几页, 当然, 之後再去 PC 上 操作或许会更好.

在此, 我仍然要强调, 这篇文章 *不是* Linux 的入门课程 -- 对初学者而言, 我建议 你能够有一份 Matt Welsh 所写的 "Linux Installation and Getting Started", 这篇文章在 sunsite.unc.edu 或是其 mirrors, 放在 /pub/Linux/docs/LDP 下; 写得 很不错而且易懂. 另外 HOWTO 和 FAQ 也是不错的选择. 而这篇文章并不是以上作品的 同类型文章, 只是一定有一些家伙 (我就是其一) 在只看了二十页不到 (而非全部的 200 页以上), 就迫不及待的想要进入 Linux 的世界.

第零节: 介绍

0.1: Linux 就是你要的吗??

这个世界上并不存在著"最好的电脑" 或是 "最棒的 OS"(作业系统): 这完全视你的 需求而定. 比方说, 我很不喜欢 Mac (得罪了 :) : 它的确很容易使用, 但我还是喜欢 PC 帮我完成某些事. (试试在 Mac 上做和 dir/s/w >lst 一样的事) 至今, 对许多人 而言 Mac 只是 "最好" 的电脑. 同样的, 我也不认为 Linux 是最好的 OS : 显然, Linux 优於 Win95, 但是很多人还是喜欢後者(Win95).

Un*x 的主要诉求对象是以程式设计师和科学家, 而 Mac & Win 是针对著一般性的使用者 而设计的. 因此, Linux 足以提供一个广阔的天空 -- 如果你需要的是 Compilers, 网路, 以及学术实验性质的软体, 而你也喜欢三不五时的修理你的 Linux : 换句话说, 你喜欢 hacking. 另一方面, 假使你非得要求有帮你完成所有事的对话框, 需要使用商用套装程 式, 或是说, 你对命令列的提示号有失落感的话 ... 那你还是早点死心吧...:p

接下来就看你了. 但在此之前先提醒一件事: Linux 和 DOS/Windows 是可以在同一台 电脑上并存的.

0.2: 这就是我要的!! 请告诉我更多一些!!

现在, 假设你已经装好了 Linux. 依照安装步骤, 你也应该有个帐号(account) (如果 不是这样, 请参考 6.1 节). 现在你的 Linux 已经在运作当中了. 或许有人已经告诉 你, 所有你需要的软体都已经在系统里了, 而你该做的就是 login. 这时你键入了 login name, password, 然後两眼对著萤幕发直 -- "好啦, 但再来呢??"

别失望.. 你尽可以完成从前你在 DOS 下的工作, 甚至更多. 设想一下, 你现在面对 的不是 Linux, 而是 DOS. 这时, 你应该会作下列的工作:

1. 执行程式; 建立, 复制, 编修档案或是改变档名 -- 维护档案;
2. 建立, 删除, 或是在目录间跳动 -- 维护目录;
3. 格式化磁片然後备份档案 -- 磁碟处理;
4. 修修补补 autoexec.bat 和 config.sys 这两个档 -- 系统维护;
5. 写自己的程式, 可能是 .bat 或是 qbasic -- 程序处理;
6. ..其它还有吗..?? :)

你一定很高兴知道, 上述的事在 Linux 下一样可以完成, 而且方法和 DOS 极为相似. 在 DOS 下, 一般使用者使用的命令只是系统提供的许多命令中的少数几个 -- Linux 也一样. 在此, 如果你并未熟悉完成上述六点的相关 DOS 命令, 那请你先暂停.. 先 去翻翻 DOS 使用手册吧. 在往後的讨论里, 本文将不会对诸如什麽是目录或是 PATH 是什麽来做解释.

在继续讨论前的一些注意事项:

1) 和 DOS 不同, Linux 具有一些内建的系统安全机制. 在你打开 PC 电源然後启动 Linux 之後, 你必需 "log in", 这是为了使系统知道你即将使用系统并工作; 这是因 为 Un*x 是一个多人使用的 OS. 此外, 一般的使用者并非拥有这台电脑(的一切资源); 只有使用 root 来做 login 的使用者才是真正的拥有者(这个人就是所谓的系统管理者, 在你在己的 PC 上, 你就是 root); 每个档案及目录都有存取权限的定义, 这使得有些 档案无法被一般使用者存取. 另一方面, DOS, 却无法提供这些保护 -- 你可以存取整颗 的硬碟.

2) 一旦你结束工作要关机, 请 *不要* 马上切断 PC 的电源 ! 相反的, 这必须经过一 些正当的程序 (按下 ctrl-alt-del , 等到系统做完例行的检查之後, 告诉你 OK, 才可 以关掉电源). 从另一个角度来说, Linux 是一个很稳定的系统, 你完全不必担心一旦有 某个错误的应用程式导致系统挂掉, 逼迫你必需按下 reset 钮 :p

3) 我们非常鼓励你多尝试与实验 : 请放心, 这样不会对系统造成伤害 (ps. 前提是你 并不是用 root 的身份来尝试). 你可以在提示号後面打以下指令以得到帮助 ($ 是标准 提示号, 而 # 是 root 专用的) :
        $ help
(相当合乎逻辑), 或是想得到更多讯息:
        $ man <command>
在这里, 如果你已经安装了 man pages, 那麽这样就会将与 <command> 相关的 manual (man 的原字) page 印出来. 你也可以试试这样:
        $ apropos <command>
或
        $ whatis <command>

4) 通用规则 (help, man ..etc)

a) <...> 表示必须给定的参数, [...] 则可有可无. 例如 :
        $ tar -tf <file.tar> [> redir_file]
file.tar 一定要指定, 但是 redir (重新导向输出档) 是可以不用加的.
b) 以下 "RMP" 表示 "Read the Man Pages for further information" -- "请看 man
page".

你现在已经可以继续阅读下面的部份了.

第一节: 档案维护

1.1. 档案: 前言

Linux 拥有一个档案系统 - 意思是 "一个有很多档案和目录的结构" - 和 DOS 非常 相似. 档案都有一个名称(档名, 它的组成必须要遵循一些规则), 被置放在目录当中. 有些是可执行的程式, 它们必须要一些额外的参数才可以正确执行. 另外, 你也可以使用 "万用字元" (wild card) , 输出/入导向, 管道(piping). 但, 和 DOS 仍有些许的不同.

- - 第一: 在 DOS 下, 档名必须遵守 8.3 格式的规则. 比方说 NOTENOUG.TXT. 在 Linux 里我们有比较自由的空间. 假如你的 Linux 已经安装在 ext2 或是 umsdos 等等的 档案系统上, 你就可以使用长档名来为档案取名, 这样可以使档名中包含更多的字元和 "点". 举个例子, This_is.a.VERY_long.filename. 请注意到我用了大写和小写的字母, 而事实上...

- - 第二: 大小写是不一样的. 因此, FILENAME.tar.gz 和 filename.tar.gz 是两个不 同的档案. 这个规则在命令来说也是成立的: 当使用 ls 这个指令 (和 DOS 的 DIR 类似) 会得到目录下案的列表, 但是用 LS 的话, 系统只会丢给你一个错误的讯息.

- - 第三: 用 "." 开始的档案名称会被视作隐藏档. 例如: .I.am.a.hidden.file , 使用 ls 时就看不到了 (ps. 用 ls -a 可以看见隐藏档)

- - 第四: Linux 并没有规定可执行档一定要有 .COM , .EXE 或 .BAT 的延伸档名. 如 果我们用 ls -F 这个命令, 就会发现执行档後面会被加上一个 '*'. 例如:
        $ ls -F
        letter_to_Joe　Cindy.jpg　cjpg*　I_am_a_dir/　my_1st_script*
cjpg* , my_1st_script* 是可以被执行的. 在 DOS 中, .BAK 表示备份档案, 而 Linux 则在档名尾加上一个 '~'.

- - 第五: DOS 程式需要的参数要用 /switch 的方法给予, 而 Linux 却是用 -switch. 就像 dir /s 与 ls -R. 附注一点, DOS 下的某些程式如 PKZIP 和 ARJ, 是用和 Un*x 一样的参数给定方式.

1.2. 档案: 对应 DOS 与 Linux 相关的指令

左边是 DOS 的命令; 右边是 Linux 里具用同样功能的指令.
COPY:　 cp
DEL:　　rm
REN:　　mv
TYPE:　 more, less, cat

Redirection and plumbing operators: < > >> |
Wildcards: * ?
nul:　　/dev/null
prn, lst:　　　 /dev/lp0; lpr

- - EXAMPLES -

DOS　　　　　　　　　　　　　　　　　　 Linux

C:\GUIDO>copy joe.txt joe.doc　　　　　 $ cp joe.txt joe.doc
C:\GUIDO>copy *.* total　　　　　　　　 $ cat * > total
C:\GUIDO>copy fractals.doc prn　　　　　$ cat fractals.doc | lpr
C:\GUIDO>del temp　　　　　　　　　　　 $ rm temp
C:\GUIDO>del *.bak　　　　　　　　　　　$ rm *~
C:\GUIDO>ren paper.txt paper.asc　　　　$ mv paper.txt paper.asc
C:\GUIDO>type letter.txt　　　　　　　　$ more letter.txt
C:\GUIDO>type letter.txt　　　　　　　　$ less letter.txt
C:\GUIDO>type letter.txt > nul　　　　　$ cat letter.txt >/dev/null
        n/a　　　　　　　　　　　　　　 $ more *.txt *.asc
        n/a　　　　　　　　　　　　　　 $ cat section*.txt

附注:

1) * 在 Linux 中变得聪明多了:
- - * 表示除了隐藏档外的所有档案; .* 表示所有隐藏档;　*.* 就是"某些字元" + 一个点 + "某些字元" 的档案名称;
- - p*r 可以满足 peter 和 piper 两个字; picked 和 peck 也都可以表为 *c* ;
2) 使用 more 这个命令时, 按下<space> 可以继续阅读下一页, 'q' 或 ctrl-c 结束. less 和 more 类似, 但可用方向键.
3) Linux 里 *没有* UNDELETE 这种命令. 所以, 砍掉档案前要三思啊..
4) 除了 DOS 中的 < > >> 之外, Linux 可以使用 2> 来对错误讯息导向. (stderr)
5) Linux 有另外一组万用字元: []. 使用:
- - [abc]* 表示以 a, b, 或是 c 开头的档案;
- - [I-N]* 表示由 I, J, K, L, M, 或 N 开头的档案;
6) 没有像 DOS 一样的 rename 可用; 也就是说, ren *.xxx *.yyy 是无效的.

1.3. 执行程式: 多工与 Session

要执行一个程式, 就像 DOS 一样键入它的名字就可以了. 如果说这个程式被放在 PATH (第四节) 指定的目录 (第二节), 那麽该程式就会被启动. 例外的是, Linux 不像 DOS 可以执行放在现行目录下的程式 (.) , 除非 . 已经加入 PATH 中了. 若要执行现行 目录下的程式, 可以这样做: ./<prog>.

这是一个标准命令的格式:
        $ command -s1 -s2 ... -sn par1 par2 ... parn <input >output
-s1 , -s2 ... -sn 是命令选项, parn 是程式参数. 我们可以在同一行上键入数个命令:
        $ command1 ; command2 ; ... ; commandn
这就是执行命令的方法, 但是我们可以更进一步. 一个使我们使用 Linux 的主要原因 是, 它是一个多工的系统 -- 它可以同时执行数个程式 (以下, '程式'用'行程'代替) 你可以将一个原本在背景执行的行程提升到前景并继续执行. 而且, Linux 可以使你有 多个 session : 这就像同时有好几台电脑在工作!

- - 切换 session 1..8:
        $ <ALT-F1> ... <ALT-F8>.
- - 开始一个新的 session , 但不离开原本 session :
        $ su - <loginname>
例如:
        $ su - root
这相当有用. 比如, 当你要 mount 一个磁碟(机) 时. 因为只有 root可以作这件事.
- - 结束一个 session:
        $ exit
- - 在前景执行一个行程:
        $ progname [-switches] [parameters] [<input] [>output]
- - 在背景启动一个行程(在背景执行) 要加上 '&' 这个符号:
        $ progname [-switches] [parameters] [<input] [>output] &
- - 查看有多少行程正在执行:
        $ ps
这样会列出一个表格. 每一个行程都会有一个 PID 来识别 (一个数字).
- - 杀掉一个行程:
        $ kill <PID>
有时後你必需用这个方法来结束一些行程 (当你不知道怎样正确结束时 :) 一个行程或许 要用以下方法才可以结束:
        $ kill -15 <PID>
        $ kill -9 <PID>
此外, shell (像 COMMAND.COM 相等的东西) 允许你暂停某个行程的执行, 或是把前景 换到背景执行, 背景换来前景. 我们用'工作'来称呼行程.
- - 查看有多少工做:
        $ jobs
这样列出来的工作是以一个 shell 分配的数字来区别的, 而不是用 PID.
- - 暂停一个前景的行程:
        $ <CTRL-C>
(但不总是有效 :p )
- - 暂停前景的程式:
        $ <CTRL-Z>
(ditto)
- - 将一个被暂停的程式移到背景继续执行:
        $ bg <job>
- - 把一个背景执行中的程式提升到前景:
        $ fg <job>
- - 再一次的, 要砍掉一个行程:
        $ kill %<job>
这里的 <job> 可能是 1, 2, 3, ... 有了这些命令你就可以在同一个时间格式化磁碟, 压缩档案, 编译一个程式, 还可以解压缩, 而且, 你仍然还是看到提示号和游标在等 待你的命令. 不妨在 DOS 下试试看这麽做吧!! 在 Windows 下也试试, 比较一下它们 效率的不同, 然後你就会知道你的选择是否正确了.

第二节: 使用目录

2.1. 目录: 前言

我们已经大略看过 DOS 和 Linux 在档案处理方面的不同. 在目录方面, DOS 用 \ 表示根目录, Linux 则是 /. 同样的, 巢状表示的目录, DOS也用 \ 来分隔每一层次 目录, Linux 用 /. 比方说以下路径:
        DOS:　　\PROGRAMS\C++\SOURCES\HELLO.CPP
        Linux:　/home/guido/papers/geology/mid_eocene.tex

相同的是, .. 表示上一层目录, . 表示现行目录. 记得一件事, 系统并不允许你在任何 地方 cd , rd, 或是 md. 每一个 user 都有一个自己的目录称作是 home, (这是系统管 理者分配的) 例如在我自己的 PC 上, 我的 home 是 /home/guido.

2.2. 对应 DOS 和 Linux 中的相关指令

DIR:　　ls, find, du
CD:　　 cd, pwd
MD:　　 mkdir
RD:　　 rmdir

- - EXAMPLES -

DOS　　　　　　　　　　　　　　　　　　 Linux

C:\GUIDO>dir　　　　　　　　　　　　　　$ ls
C:\GUIDO>dir file.txt　　　　　　　　　 $ ls file.txt
C:\GUIDO>dir *.h *.c　　　　　　　　　　$ ls *.h *.c
C:\GUIDO>dir/p　　　　　　　　　　　　　$ ls | more
C:\GUIDO>dir \*.tmp /s　　　　　　　　　$ find / -name "*.tmp"
C:\GUIDO>cd　　　　　　　　　　　　　　 $ pwd
        n/a - see note　　　　　　　　　$ cd
        n/a - see note　　　　　　　　　$ cd ~
        n/a - see note　　　　　　　　　$ cd ~/temp
C:\GUIDO>cd \other　　　　　　　　　　　$ cd /other
C:\GUIDO>cd ..\temp\trash　　　　　　　 $ cd ../temp/trash
C:\GUIDO>md newprogs　　　　　　　　　　$ mkdir newprogs
C:\GUIDO>md \progs\turbo　　　　　　　　$ mkdir /progs/turbo
C:\GUIDO>rd newprogs　　　　　　　　　　$ rmdir newprogs
C:\GUIDO>rd \progs\turbo　　　　　　　　$ rmdir /progs/turbo

附注: ~ 是 home 的一个缩写. cd ~ 可以使你瞬间回到自己的 home, 不论你在哪里. cd ~/tmp 会带你到 /home/your_home/tmp. 这样, 可以了解吗??

第三节: 软碟, 硬碟, 和类似装置

3.1. 使用软式磁碟

或许你从未想过, 但 DOS 的 FORMAT A: 作了比它看起来更多的事. 事实上, 当你键入 FORMAT 这个命令时, 它会:

1) 实际的去格式化磁碟;
2) 建立 A:\ 这个目录 (= 建立一个档案系统);
3) 使这个磁碟能够被使用者使用 (= mount 一个磁碟机).

这三个步骤在 Linux 中是分开的. 我们可以在 Linux 中建立及使用 MS-DOS 格式的磁碟, 但是当然还有其它的格式可用. 最常用的要算是 ext2. 以下是准备一份可用的磁碟之方法 (请先 su 为 root):

- - 格式化一张 1,44 Meg 的软碟 (A:)
        # fdformat /dev/fd0H1440

- - 建立一个档案系统:
        # mkfs -t ext2 -c /dev/fd0H1440
或
        # mformat a:
建立一个 MS-DOS 的档案系统.

在使用这张磁片前, 你需要先将这个磁片连同磁碟机 mount.
- - mount 一个磁碟机:
        # mount -t ext2 /dev/fd0 /mnt
or
        # mount -t msdos /dev/fd0 /mnt

现在你已经可以使用这张磁片了. 当你结束工作, 要拿出磁片前, 请你 *一定* 要 umount. (重要!)
        # umount /mnt
好, 你可以把磁片拿出来了. 很明显的, fdformat 和 mkfs 只要对未格式化的磁片进 行就可以了, 已作过的就不需要了. 如果要使用 B 磁碟机, 请参考前述的范例, 用 fd1H1440 和 fd1 替换 fd0H1440 和 fd0.

现在你从前对 A: , B: 的工作现在都移转到 /mnt 下了. 例如:

DOS　　　　　　　　　　　　　　 Linux

C:\GUIDO>dir a:　　　　　　　　 $ ls /mnt
C:\GUIDO>copy a:*.* \docs\temp　$ cp /mnt/* /docs/temp
C:\GUIDO>copy *.zip a:\zip　　　$ cp *.zip /mnt/zip
C:\GUIDO>a:　　　　　　　　　　 $ cd /mnt
A:\>　　　　　　　　　　　　　　/mnt$

不消说, 对软碟成立的方法, 对其它的 device 一样成立. 比方, 你可以 mount 另一 个硬碟或是光碟机. 稍微看一下 /dev 下的 device. 下面是 mount 一个光碟机的范例: 　　　　# mount -t iso9660 /dev/cdrom /cdrom

第四节: 量身订作一个 OS

4.1. 系统初始化相关档案

在 DOS 中有两个很重要的档案 -- AUTOEXEC.BAT 和 CONFIG.SYS. 当启动 DOS 时, 这两个档案负责一些系统的设定工作 , 诸如设定环境变数 PATH, FILES 等等, 甚至 呼叫其它必需在开机时载入的程式.

在 Linux 中也有一些类似工作的档案, 但其中有些却是相当的危险; 再你真正了解 你将要做的事之前, 请千万别去碰它. 无论如何, 我还是得告诉你那些需要特别谨慎 的档案:

FILES　　　　　　　　　　　　　 NOTES

/etc/inittab　　　　　　　　　　don't touch for now!
/etc/rc.d/*　　　　　　　　　　 ditto

如果你想做的是设定 PATH 或是其它的环境变数, 抑或修改 login 时的讯息, 呼叫一个 程式, 以下大概就是你要的:

FILES　　　　　　　　　　　　　 NOTES

/etc/issue　　　　　　　　　　　sets pre-login message 设定 login 前的讯息
/etc/motd　　　　　　　　　　　 sets post-login message 设定 login 後的讯习
/etc/profile　　　　　　　　　　sets PATH and other variables, etc. 设定环境变数
/home/your_home/.profile　　　　does whatever you want 这里可以随意加入你想要的

如果最後那一个档案(~/.profile) 存在, (注意到它是隐藏档), 那麽在你 login 之後 它的内含命令就会被执行.

范例 - 请看这个 .profile:

        # I am a comment
        echo Environment:
        printenv | more　 # equivalent of command SET under DOS
        alias d='ls -l'　 # easy to understand what an alias is
        alias up='cd ..'
        echo "I remind you that the path is "$PATH
        echo "Have a good day, "$LOGNAME

PATH 和 LOGNAME, 正如你所预料的, 是两个环境变数.

4.2. 程式初始化设定档

在 Linux 下, 一般来说所有的事都可以依照你的要求而作安排. 大多数的程式都有 它们自己的初始化设定档, 这些都可以由你来修改. 通常, 它们都以 .prognamerc 的 型式存在於 home 目录里. 在这里, 首先你可能需要接触的设定档有:

..xinitrc: 用来初始化 X Window System.
..fvwmrc: 初始化 fvwm 这个 window manager. 你可以在
/usr/lib/X11/fvwm/system.fvwmrc 找到范例.
..xfm/*: xfm (一个 file manager) 的设定档.
..Xdefault: 由 rxvt -- 一个终端机模拟程式 -- 所使用.

对於这些设定档, 或是你将来会遇到的其它档案, 请查 Man page.

第五节: 关於程式设计

5.1. 编写叙述程式 (Scripts): .BAT 档的聚合体

你或许使用过 .BAT 来当做一长串命令的缩写 (我常做这种事). 这件事可以藉由在 profile 或 .profile 中设定 alias 来达成. 但是, 一旦 .BAT 档太过复杂, 那麽你 会喜欢由 shell 提供的叙述语言 (Scripting language) : 它几乎和 Qbasic 一样强 大而且易用. 它可以使用变数, 可以拥有像是 while , for, case if.. then .. else, 的语法结构; 它还有其它的优点 -- 例如, 它可以当成是程式语言的替代品.

要撰写一个 script - 就像在 DOS 下写 .BAT 档一样 - 只要编写一个 ASCII 的档案, 内含你想要的指令, 然後储存, 再使用下面这个命令让它可以被执行:
        $ chgmod u+x <scriptfile>
当要执行时, 只要键入它的档名就可以了.

这里有个小小的警告: 系统内定的编辑器叫作 vi, 它有一点难以使用, 我想你应该也 会这样认为它有些烦人. 我不会在这篇文章中讨论它 -- 我自己也还尚未找到使用的窍 门 :p 请参考 Matt Welsh 的 "Linux installation... ", 109 页. 但你也可以使用其 它的编辑器, 如 joe 或是 X 下的 emacs. 这里只稍为说明一点你必需知道的 vi 知识 (至少让你可以 quit :p )

- - 加入一段文字可以用在文章中按下 'i';
- - 离开 vi 但不储存文章 : 请按 ESC 再打 :q!
- - 离开且存存 : 按 ESC, 再打 :wq

在 Linux 中编写 shell script 是一门大学问 -- 它几乎要一本书才能讲得详细. 本文不会再更深入的讨论这个问题; 但是, 以下提供了几个有用(希望是)的范例, 希望 能够使你对 shell script 有个初步的了解.

EXAMPLE 1: first_script

        #!/bin/sh
        # I am a comment
        # don't change the first line - it's got to be there
        echo "Today is `date`"
        echo "My name is "$0
        echo "You gave me the following "$#" parameters: "$*
        echo "First parameter is "$1
        echo "Have you grasped the trick?"

EXAMPLE 2: 2exe

        #!/bin/sh
        echo "making "$1" executable... "
        chmod u+x $1

EXAMPLE 3: backup

        #!/bin/sh
        echo "Copying files in ~/bak... "
        for name in $*
        do
          cp ${name} ~/bak
        done

EXAMPLE 4: fmta

        #!/bin/sh
        echo "I remind you that only root can format disks"
        fdformat /dev/fd0H1440
        mkfs -t ext2 -c /dev/fd0H1440
        echo "disk formatted."

EXAMPLE 5: mnta

        #!/bin/sh
        echo "I remind you that only root can mount disks"
        mount -t msdos /dev/fd0 /mnt
        echo "don't forget to umount when you've done."

5.2. 自己写个 C 程式

你应该不会期待在 Linux 有 GW/Qbasic 吧?? 在 Un*x 中, 系统内定的语言是 C, 不管你是喜欢还是讨厌它. 当然还有其它的语言可以用 (FORTRAN, Pascal, Lisp, Bacic .. 但没有 Turbo Pascal ^Q^ ).

假设你懂得 C.. 如果你曾经被 Turbo C++ 或是它在 DOS 下的兄弟们宠爱过, 那这里 有两句话恐怕不啻晴天霹雳: Linux 下的 C 编译器叫作 gcc, 但, 它没有 IDE 环境, 没有线上求助系统, 没有整合式除错器,..等等. 只有一个命令列的编译器, 但强大 且有效率. 以下这个命令可以编译你已写好的 hello.c :
        $ gcc hello.c
这样会产生一个 a.out 的执行档. 如果你想让 gcc 造出其它档名的执行档, 键入
        $ gcc -o hola hello.c
要联结一个程式库, 你要在 gcc 後加上一个 -l<arg> 的选项. 比如说要联结 math
library
        $ gcc -o mathprog mathprog.c -lm
( -l<arg> 会迫使 gcc 联结 /usr/lib/lib<arg>.a; 因此, -lm 会联结
/usr/lib/libm.a)

对小程式来说, 这是一个好方法. 但是若程式是由数个 source files 组成, 我们可能 会需要 make 这个程式. 假设我们已经写好一个语法分析程式 parser.c, 它 #include 了两个 .h : parser.h , xy.h. 现在, 有个 calc.c 需要使用到 parser.c 中的功能. 这样该怎麽办??

我们可以写一个叫作 makefile 的档案, 告诉编译器所有 source 和 object files 间的关系, 在这个例子里,

        #　This is makefile, used to compile calc.c
        #　Press the <TAB> key at appropriate positions!

        calc: calc.o parser.o
        <TAB>gcc -o calc calc.o parser.o -lm
        # calc depends on two object files: calc.o and parser.o

        calc.o: calc.c parser.h
        <TAB>gcc -c calc.c
        # calc.o depends on two source files

        parser.o:　parser.c parser.h xy.h
        <TAB>gcc -c parser.c
        # parser.o depends on three source files

        # end of makefile.

储存, 然後键入
        $ make
以便编译程式. 或者, 这个档案被存在 calc.mak 里, 那麽就必需
        $ make -f calc.mak
当然, 请参阅 Man pages 以得到更多的资讯.

此外, 某些函数的用法在 man pages 可以找得到, 例如
        $ man printf

第六节: 剩下的 1%

6.1. 使自己暂时脱离 root 的身份

用 root 来 login , 并且处理每天的工作实在不是一件好事情. 因为这个帐号相当 危险, 应该仅供系统维护时使用. 下面这个命令可以为你自己建立一个一般性的帐号. 用 root login, 再键入
        # adduser
然後输入系统询问的资料. (如果有你看不懂的问题, 请按下 <RET>. 这样系统将会 使用预设的资料.)

6.2. 建立虚拟记忆体

虽然 Linux 理论上只要 2M 就可以执行, 但是愈多的记忆体会使工作更顺利. X Window System 会要求至少 8M RAM , 否则它就罢工. 要使用虚拟记忆体来增加可用记忆空间, 请以 root 身份执行:
        # dd if=/dev/zero of=/swapfile bs=1024 count=8192
        # mkswap /swapfile 8192
        # sync
        # swapon /swapfile
接著把最後一行加入 /etc/rc.d/rc.local 中, 使每次开机时就会自动开启 swap.

6.3. 使用 tar & gzip

在 Un*x 中有著几个被广泛使用於保存或压缩档案. tar 是一个保存档案的工具. 它有 点类似 PKZIP 但并不会作压缩的工作 -- 它只是将许多档案包装成一个而已:
        $ tar -cvf <archive_name.tar> <file> [file...]
把 tar file 解开, 要用以下的命令:
        $ tar -xpvf <archive_name.tar> [file...]
如果欲检视 tar file 中的档案列表,
        $ tar -tf <archive_name.tar> | less
用 compress 或是 gzip 可以压缩档案. 压缩後档案就无法再使用除非解开来:
        $ compress <file>
or:
        $ gzip <file>
这样建立出来的压缩档会以 .Z (compress) 或 .gz (gzip) 作为延伸档名. 这些档案 无法再被 compress 或 gzip 再压缩. 想将档案解压缩的话, 请用
        $ compress -d <file>
or
        $ gzip -d <file>

请参阅 Man pages.

其它像是 arj ,zip 或是 unzip (PK??ZIP 相容) 的工具在 Linux 下一样找得到. 在 Un*x 的世界里, .tar.gz 或 .tgz 的档案就像 DOS 下的 .ZIP 一般普遍. 以下这个命令可以浏览 .tar.gz 档案中的档案列表:
        $ gzip -dc <file.tar.gz> | tar tf - | less

6.4. 安装应用程式

大多数的 Linux 软体都以 .tar.gz 的方式包装; 有些软体就可以在 / 下用这个命令 完成安装:
        # gzip -dc <file.tar.gz> | tar xvf -
档案会在正确的目录中解压缩 (目录亦会自动建立好). 看来不错, 不是吗?? :)
Slackware distribution 的使用者(其实其它的 distribution 也不差, 像是 redhat)
就有一个满有亲和力的安装程式 pkgtool.

其它的软体可能有它们自己的安装方试; 你可以找到说明的文件. 此外, 有些软体 是以 C 或 C++ source code 的方式来制成, 并未编成执行档. 这时就必须自行编译. 绝大多数的情形你只要打
        # make

很明显的, 你会需要 gcc -- 这个应该在所有的 distributions 中都有. 但是记住:
请用 root 身份完成以上这些软体安装的工作.

6.5. 你不能不知道的小技巧

让系统帮你键入命令: 按下 <TAB> 可以让系统自动补齐命令中未打完的字. 例如: gcc this_is_a_long_name.c ; 只要键入 gcc thi<TAB> 就够了. (当有数个使用以上 相同字元开始的档案时, 你必需给与一定数量的字元使系统可以判定到底你想要的是哪
一个).

回卷: 按 SHIFT + PAG UP 可以使萤幕回卷数页, 这视你拥有的 Video RAM 多寡而定.
更进一步的说, 当你要使用下面这个命令
        $ script <script_file>
这样会使得在萤幕上出现的任何东西都被复制到 script_file 中, 直到你使用 exit 这个命令为止. 这样就可以在稍後再来检视刚才的内容.

重设萤幕: 如果你不慎 more 或是 cat 一个像可执行档的档案, 我想你的萤幕应该会 充满了奇怪的符号. 用 reset 就可以解决这个问题:
        $ reset
或是依序键入 CTRL-V ESC c RETURN.

来自 kernel 的讯息: 看一下 /var/adm/messages (以 root 身份), 里面包含了 kernel 要告诉你的资讯, 其中有启动时出现的讯息.

6.6. 一些有用的程式

最重要的一件事就是, 要怎样找到这些软体. 我想大家都已经知道如何在网路中驰骋, 以及使用 archie 和 ftp. 这里列出三个最重要的 Linux 相关 ftp site:
sunsite.unc.edu, TSX-11.mit.edu, nic.funet.fi . 请使用距离你比较近的 mirror.
(ps. 国内的 nctuccca.nctu.edu.tw, linux.cis.nctu.edu.tw, ftp.ncu.edu.tw..etc)

at 可以让你在特定的日期及时间执行程式

delete-undelete 就像它们的名字一样 :)

df 会告诉你有关你的硬碟的资讯;

dosemu 能执行一些 DOS 的程式 (但非全部..ps. 我想应该是大多数了..) - 包含 Windows 3.x , 但需作些调整;

file <filename> 告诉你 <filename> 是哪一种档案 (ASCII 文字档, 可执行档, 包装後
的档案 ..等等);

find (参看 2.2 节) 是最强且有用的工具之一. 它能够找寻档案系统中, 所有符合 搜寻条件的档案, 并且对它作处理. 最常见的使用方法是:
        $ find <directory> <expression>
这里的 <expression> 包含了搜寻的标准和对目标档案的处理动作. 例如:
        $ find . -type l -exec ls -l {} \;
会找到所有的 symbolic links 并且显示它们联结的目的地.
        $ find / -name "*.old" -ok rm {} \;
则找寻所有符合 *.old 型式的档案, 然後询问你是否要删除它.
        $ find . -perm 755
搜寻所有存取权限为 755 的档案 (即可执行档)
        $ find . -user root
会找到拥有者为 root 的档案. 其它还有很多的用法, 当然, RMP :p

grep 可以在档案中找寻一个字串. 比如说
        $ grep -l "geology" *.tex
将列出所有包含 "geology" 这个字的 tex 档. 其馀请 RMP;

gzexe 将可执行档压缩, 但仍可执行;

joe 是一个很棒的编辑器. 用 jstar 可以启动它 -- 你会得到一个看起来像, 用起来 也像 WordStar 或是它的兄弟姊妹如 DOS editor 的编辑器;

lpr <file> 可以在背景列印档案. 用 lpq 可查看在列印序列中排队的情形;

mc -- 一个很好用的 file manager;

pine , 一个不错的 e-mail 程式;

sudo 使一般使用者做某些 root 才能做的事 (像是 format 或是 mount .. RMP :p )

uname -a 会告诉你系统目前的状况;

zcat 和 zless 可以帮助你阅读被 gzip 压缩的文字档 - 却不用先将它解压.
        $ zless textfile.gz
        $ zcat textfile.gz | lpr

6.6. 常用的档案, 与它们的延伸名称, 相关程式

在 Linux 里你会遇到许多型式的档案 -- 它们都有不同的延伸名称. 以下是一个大
略的列表:

..1 ... .8: Manual Pages, 由 man 来读取.

..arj: arj 产生的压缩档.

..dvi: TeX (後述) 产生的输出档. 用 xdvi 就可以阅读; dvips 可以用来将 .dvi
转换成 .ps 的 postscript 档.

..gif: 图型档. 用 seejpeg 或是 xpaint.

..gz: gzip 的压缩档.

..info: info 档 ( man page 的一种型式). 由 info 来读取.

..jpg,.jpeg: 图型档. 使用 seejpeg.

..ps: postscript file. 用 gs , 或是 ghostview 来阅读. (great !!)

..tgz,.tar.gz: 由 tar 包装, 再由 gzip 压缩的档案.

..tex: 经过 TeX 处理的文字档, TeX 是一个强大的排版程式. 许多的 distributions
都附有 tex.

..texi: texinfo 档. (和 .info 类似). texinfo 使用之.

..xbm,.xpm,.xwd: 图形档. 用 xpaint.

..zip: 由 zip 压缩包装的档案, 请使用 zip 和 unzip.

..Z: 由 compress 压缩的档案.

剧终 -- 现在...

恭喜你!! 你已经对 Un*x 有了最初步的认识, 而可以准备用 Un*x 来进行更多的工作了. 但仍要提醒你, 这样仍然不够, 你仍然需要多一点 Linux 的使用及尝试的磨链. 不过, 如果你只不过是要使用一些应用程式, 那麽以上的讨论我猜已经足够了..:) 虽然我现在 仍然对 Linux 懂得不多, 但是 Linux 已经可以帮我处理许多每天必需的工作了!

我相信你一定会迷上 Linux , 进而更进一步的学息它 - 每个人都这样的. 我猜, 有了 Linux , 你一定不会想念 DOS ! 虽然我并不敢奢望有太多的读者, 但我仍深切 的希望能够对阅读本文的读者有所帮助 :)

Disclaimer

"From DOS to Linux - Quick!" was written by Guido Gonzato, <Guido@ibogfs.cineca.it>, April 1996. Many thanks to Matt Welsh, the author of "Linux Installation and Getting Started", to Ian Jackson, the author of "Linux frequently asked questions with answers", to Giuseppe Zanetti, the author of "Linux - Il sistema operativo FREE SOFTWARE per personal computer 386/486", to all the folks who emailed me suggestions, and especially to Linus Torvalds and GNU who gave us Linux.

This document is provided "as is". I put great effort into writing it as accurately as I could, but you use the information contained in it at your own risk. In no event shall I be liable for any damages resulting from the use of this work.

This document can be freely distributed as long as:

- - it is distributed in its entirety, including this disclaimer and permission notice;
- - no money is charged for it;
- - it is not modified in any way without my permission.

Translations, prints, re-editings, or extractions from this document must be approved by me before being distributed. For any requests, suggestions, flames, etc., feel free to contact me. If you don't have e-mail access, my snail-mail address is:

Guido Gonzato - Via Monte Ortigara 19/a, 37127 Verona - Italy

Enjoy life!

                             Guido　 =8-)

中译感言

看了这麽多前辈们累积的心血,　心中总是有点不安.. 偶然间有这个机会做一点翻译的 工作, 还是万万不足以表答小弟心中对前辈们的感谢..
希望这篇文章能够对您有所帮助. 小弟第一次从事翻译的工作, 谬误在所难免.
关於本文的译文若是您有任何的疑问或是建议, 您可以到 freebsd.ee.ntu.edu.tw 的 Interpret 板讨论, 或是 e-mail
b84089@cctwin.ee.ntu.edu.tw 或
mglow.bbs@bbs.ee.ntu.edu.tw 告诉我, 小弟一定会尽力给予满意的答覆..
另外, 本文尽可在 TANet 上流传而不需作者(就是我啦)的同意.. 但如欲移作商业用途, 还是请先知会一下..:)

                                                mglow.bbs@bbs.ee.ntu.edu.tw
                                                                     on 970211


-->Linux使用技巧集-->Linux运行环境

Linux运行环境
姓名 ：
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

Linux现已能运行于多种平台：Intel 386、486、 Pentium、Pentium Pro CPU及AMD、Cyrix 、IT 等兼容Intel的CPU;MOTOROLA 680x0 CPU、DEC ALPHA CPU、SUN SPARCs CPU以及POWER PC。
    硬件需求：
    最小配置：386SX/16 ,1MB RAM,一个软驱(这样的配置在现在除了夸口外已没有什么实际意义了)。
    可用配置：486或相当的CPU，4MB－8MB RAM可运行普通任务；16MB可以大大减少与硬盘的交换动作；32MB几乎感觉不到交换动作；64MB可以运行更大、更多、更繁忙的任务。
    硬盘需求：基本的UNIX工具、SHELL及其管理工具不会超过10MB；如果需要灌装全部的套件，如SLACKWARE、RED HAT等则需600MB－1GB。
    硬盘：支持ATAPI、SCSI接口硬盘。
    显示卡：支持标准VGA、SuperVGA和几乎市场上流行的所有显卡。
    网络：支持几乎所有的以太网卡、部分FDDI卡、部分令牌环。
    CDROM:支持ATAPI和SCSI接口的CDROM。
    声卡：支持多种流行声卡，尤其是Sound Blaster系列。


-->Linux使用技巧集-->跟我学用Linux命令

跟我学用Linux命令
姓名 ：熊　健
Email：
地址 ：浙江
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

Linux虽然是免费的，但它的确是一个非常优秀的操作系统，与MS－WINDOWS相比具有可靠、 稳定、速度快等优点,且拥有丰富的根据UNIX版本改进的强大功能。下面，作为一个典型的DOS 和WINDOWS用户，让我们一起来学习Linux的一些主要命令，希望大家能尽快进入到Linux的世界里。
    一、启动
    Linux的启动操作过程和DOS相似(尽管如此，但作为操作系统本身，Linux在启动和退出时所作的工作要比DOS多得多),也可以通过按下Ctrl＋Alt＋Del三键进行热启动。不同的是Linux启动到最后时，需要进行登录。下面是一个典型的登录过程：
    ……
    RedHat Linux release 5.1
    Kernel 2.0.32 on an i686
    login:
    你键入：root<CR>后，计算机显示输口令(password:)，输入你的口令（如果是第一次启动，则是你在安装时所输入的口令)即可。当计算机出现一个“#”提示 符时，表明你登录成功!
    [root@localhost root]#_ 　　 Linux提示符
    C:\>_　　　　　　　　　DOS提示符
    二、常用的一些命令：
    1.显示文件目录命令ls(DOS下为DIR)
    在Linux中用ls命令显示文件及目录(当然，你仍然也可用DIR命令，只不过在这里的参数不同)。例如：#ls<CR>
    root mnt boot dev bin usr xiong tmp etc games
    看起来似乎简单(就相当于DOS中的“DIR/W”)，但你会发现你看到的有些难懂，连哪些是目录哪些是文件都不清楚，哪些又是可执行文件呢?不要紧，请输入：#ls －F＋root/ mnt/ boot/ dev/ bin/ usr/ xiong* tmp/ etc/ games / readme
    看清楚了吧，带*为可执行文件(相当于DOS中的EXE和COM文件)，带/为子目录，其它的为通用文件。另外，我们可用ls －l显示文件目录的详细情况(相当于DOS中的DIR命令)。千万注意区分大小写!!如LS －f;Ls等都是错误的。另外，ls命令还有许多参数，你可以用man ls或ls－－help去进一步了解。
    2.改变当前目录命令cd(DOS下为CD)
    在DOS中，我们可以用C:\>CD\MNT\cdrom或cd\mnt\cdrom
    C:\mnt\cdrom>cd ..或cd..或CD..
    C:\mnt>cd\或C:\mnt>cd \
    而在Linux中为cd /mnt/cdrom，目录名的大小写必须与实际相同，cd后必须有空格。
    pwd 显示当前目录
    cd .. 必须为小写，必须有空格
    cd / 总目录为/，cd与/必须有空格
    3.建立子目录mkdir(DOS下为MD或MKDIR)
    在Linux中只能用mkdir，可用相对路径和绝对路径，请比较：
    C:\>md xiong或md \xiong或md\xiong
    DOS系统
    [root@localhost /]#mkdir xiong或mkdir /xiong
    Linux系统
    4.删除子目录命令rmdir(DOS下为RD)
    在Linux中用rmdir命令删除子目录，例如：
    rmdir /mnt/cdrom 相当于rd \mnt\cdrom
    注意：同DOS一样，要删除的子目录必须是空的，而且必须在上一级目录中才能删除下一级 子目录。
    5.删除文件命令RM(DOS下为DEL或EARSE)
    在Linux中用RM命令删除文件，例：
    rm /ucdos.bat 相当于del \ucdos.bat
    6.文件改名命令MV(DOS下为REN或RENAME)在Linux中用mv命令给文件改名，例：
    mv /mnt\floppy p相当于 ren \mnt\floppy p
    说明：在Linux中的mv命令除了文件改名外，还有文件移动的功能，请看例子：
    mv /mnt/floppy /bin 相当于DOS中的命令 move \mnt\floppy \bin
    7.文件复制命令cp(DOS下为COPY)
    在Linux中用cp命令进行文件复制，例：
    cp /ucdos/* /fox 相当于copy \ucdos\*.* \fox
    注意：DOS中的*.*在Linux中用*代替。
    8.获取帮助信息命令man(DOS下为HELP)
    在Linux中用man命令获取帮助信息，例：
    man ls 相当于help dir
    ls －－help 相当于dir/
    9.显示文件的内容less(DOS下为TYPE)
    在Linux中用less命令进行文件显示工作，例如，我们要显示man1子目录下的mwm.lx的内容，只需输入：[root@localhost man1]#less mwm.lx<CR>即可。在Linux中，我们也可用另外一个命令“more”来显示文件内容，例如：more mwm.lx。你会看到，这两个命令非常相似，实际上，less命令的功能要比more强一些，你可以自己去摸索。在Linux中，还提供了两个DOS中没有的阅读文件的命令，它们是head和tail命令，分别用来显示文件的头部和后部的部分内容。使用格式为：head(tail) [m]<name>，缺省n时，显示10行，例如：
    head /usr/man/mwm.lx 显示文件mwm.lx前10行的内容
    head 15 /usr/man/mwm.lx 显示文件mwm.lx前15行的内容
    tail 17 /usr/man/mwm.lx 显示文件mwm.lx后17行的内容
    10.重定向与管道
    大家知道，在DOS中，我们可以通过重定向与管道方便地进行一些特殊的操作，如：dir>direct将当前目录放入文件direct中；type readme>>direct，将文件readme的内容追加到文件direct中；又如：type readme.txt|more,分页显示文本文件readme.txt的内容。在Linux中的重定向与管道操作同DOS中的操作几乎一样，上面两个例子在Linux中应为：ls>direct; less readme.txt|more(注：实际上，Linux中的more和less命令本身具有分页功能)。
    11.外壳程序(shell)：命令解释器(command)
    在DOS系统中，我们绝大多数用户都是用的command.com这个命令解释器。当然，你也可换用Norton或DOS4.0以后的dosshell。在Linux中，有好几种shell。常见的有：ash,bash,ksh,tcsh,zsh等，从上面的环境变量中SHELL=/bin/bash可以看出你用的是哪种shell，它位于何处。计算机默认的一般是bash。
     以上讲到的仅仅是与DOS功能相似的一些Linux命令，而作为一个多用户、多任务的操作系统，其强大的功能还远不止于此。希望更多的人用上这个优秀的操作系统,相信你一定不会后悔的。()


-->Linux使用技巧集-->在RedHat 5.0中配置News Server

在RedHat 5.0中配置News Server

估计大家都看了很多中英文的News Howto,结果一般是看得稀里糊涂
(我自己就是这样的感受:-),一是那些文档年代"久远",二是针对从源代
码编译开始的情况,三它们不是针对Linux来讲的.装了RH5.0后我发现配
置INN(我认为C-News软件已经"死"了)已经是很简单的事情了,下面把我
的一些粗浅的经验介绍给大家.欢迎指正并完善.

一,基本概念
关于UUNet,有很多文章和书籍介绍,这里没必要重复了.值得一提的
是,你的新闻服务器并不一定要连入UUnet,完全可以配置为一个Stand
Alone的News Server.在新闻服务器上读,写(post)文章的用户称为Reader,
Reader与Server之间是按照C/S方式来做的.当然可以把你的新闻服务器
与其他服务器相连,相互转发文章.一个新闻服务器向另一个服务器转发
文章,则第一个服务器被称为feeder.所以要记住news feed的行为发生在
两个服务器之间.
我们假定你的新闻服务器的名字为news.foo.com.cn(当然域名就应该
是foo.com.cn),在安装RedHat 5.0时选择了INN包并允许开机启动innd,
这时RedHat已经自动完成了大部分配置,你根本不需要去编译源码,也就
找不到config.dist,Install.ms等文件.安装完成后相关文件在以下目录:
/usr/sbin/innd
/usr/sbin/inndstart
/etc/rc.d/rc.news
/etc/news/*
/etc/crontab
/usr/bin/inews
/usr/bin/rnews
/usr/lib/news/*
/usr/lib/news/bin/*
/var/lib/news/
/var/lib/news/send-nntp
/var/lib/news/send-uucp
/var/spool/news/
/var/log/news/
/usr/doc/inn-1.7/
/usr/doc/inn-1.7/Install.*
/usr/doc/inn-1.7/FAQ/

二, 先把news.foo.com.cn配置为单独的新闻服务器
首先要提醒一点,凡是owner是news.news的文件,你要切换成news身份
去操作(RH5.0已经给你建立了news组和用户,你可以去看一下/etc/group
和/etc/passwd文件)---发出su news命令即可.其实对于/etc/news/下的
文件可以用root身份直接编辑(我用joe编辑没有问题).
1 配置/etc/news/inn.conf
如果你安装时正确地配置了网络,这一步可以省去,缺省如下:
##inn.conf -- inn configuration ....
##......
domain:foo.com.cn
organization: foo company news site
server:localhost
这样一般就可以了,若要了解细节,用"man inn.conf"看一下,照猫画虎
是个好方法.
2 配置/etc/news/nnrp.access
事实上INN包是一组程序来完成News的工作,而不是innd一个人做所有的
事,但innd总揽全局,除了send-nntp/send-uucp由cron带动以外,其他的工作都
由innd完成或发起,nnrpd就是一例. nnrpd完成news readers的服务.它的配置
文件是/etc/news/nnrp.access,控制哪些站点可以访问,是否带密码访问这个
新闻服务器.修改这个文件无需重新启动innd.缺省值如下:
# Default to no access
*:: -no- : -no- :!*
#allow access from localhost
localhost:Read Post:::*
这时你添加几行,允许更多的人访问你的站点,如加入:
stdin:Read Post:::*
*.foo.com.cn:Read Post:::*
注意每一行最后应没有空格.用"man nnrp.access"了解更详细的情况.配
置完以后用"/usr/lib/news/bin/inncheck nnrp.access"检查你的配置是否正
确:出错则有提示,正确反而什么都没有.
3 添加新闻组
站点上有哪些新闻组由/var/lib/news/active文件确定.你可以手工编辑
这个文件来添加新闻组(不要忘了切换到news身份哟),active文件的格式用"man
active"去看吧.推荐的方法是用"ctlinnd newgroup chinese.comp.XXX(or
whatever)"
ctlinnd这个命令很有用,后面可能还会介绍.比如你手工该了active文件,你就
需要用ctlinnd reload active "modify active"通知innd更新新闻组条目.
4 监管某个新闻组
在active配置文件里,最后一项可以是y,n,m,j,x,=XXX.XXX,当它是m时,
就表示此新闻组受到监管.监管的意思就是news reader发表到这个组的文章
先发到监管人的Email信箱,监管人审查后再把它贴到新闻组上去.它的配置文
件是/etc/news/moderators,这个功能用得比较少,用man看一下就行了(一路
man下去,配置就完成了:-).
5 启动innd
有些不重要的配置文件如/etc/news/overview.fmt无须修改,使用缺省
就很好. 负责启动innd的是/etc/rc.d/rc.news,但RH5.0已经把innd启动,所以
这时你无须做任何事,你的news站点基本正常运行了,用/usr/lib/news/bin/inncheck
-v
看一下,应该没有错误.现在要做的就是配置客户端(reader)软件来测试一下.
配置netscape没什么好讲的,如果用tin来读文章,需要注意几点:
a,如果以本地方式读,需要增加一个连接ln -s /var/lib/news/active
/usr/lib/news/active
b,如果以nntp方式读(tin -r),需要设定一个环境变量export
NNTPSERVER=news.foo.com.cn
或生成文件/etc/nntpserver.
c, tin的资源文件有$HOME/.newsrc,$HOME/.tin/tinrc等,用ls -a看.

三 与其他的news站点相互"灌水"
例如与news.freesoft.cei.gov.cn.为了简化说明,我们假定只能由freesoft向
news.foo.com.cn站点feed文章,即freesoft是你的上级(当你的News服务器可以向
freesoft发文章时,你们的关系是对等的,无所谓上级下级).进行这样的配置首先
要上级同意你的请求(否则他不修改他的配置:-).
1 获取上级的active和newsgroups
su news#切换为news身份
1) telnet news.freesoft.cei.gov.cn nntp > /tmp/newsgroups
list newsgroups
quit
2) telnet news.freesoft.cei.gov.cn nntp > /tmp/active
list active
quit
3) 编辑这两个文件,把你所想要的加入到你的/var/lib/news/active或
newsgroups文件中. 然后用ctlinnd reload active "modify"更新.
(用inncheck active先检查一下是好习惯).
2 允许上级站点feed文章到你的站点
修改配置文件/etc/news/hosts.nntp,加入一行
news.freesoft.cei.gov.cn:
即可,用man
hosts.nntp了解细节.相关文件hosts.nntp.nolimit,passwd.nntp等
视情况作出修改(如需要密码等).
发命令ctlinnd reload hosts.nntp "modify hosts.nntp"通知innd更新.
相应地,在news.freesoft.cei.gov.cn上也要加入news.foo.com.cn
更新innd:ctlinnd reload hosts.nntp "modify hosts.nntp"
3 配置/etc/news/newsfeeds

这个配置文件是最复杂的了,参数很多,好多我也没搞清楚(没耐性仔细看完man
newsfeeds:-).
它主要管news server之间feed的方式及distribution.
feed的方式一般有三种:
实时的nntplink/send-nntp/send-uucp.
nntplink又有logfile/channel/stdin几种
方式,不过我在我的机器上居然没有找到nntplink这个程序!
我对uucp不了解,估计现在用得
也不太多. nntp的传送方式又有几种:
1) 常规方式:pipe
2) xbatch,
类似于uucp的传送方式,batch->compress->transmission->uncompress->unbatch
3) streaming NNTP(streaming vs pipeling)

看来配置newsfeeds真是烦死了,不过我们还是用简单的方式来做,复杂的情况留到以后再说.

比如说在freesoft上的newsfeeds上加入一行:
foo:chinese.comp.*:Tf,Wnm:news.foo.com.cn
然后用ctlinnd reload newsfeeds "modify newsfeeds"更新innd缓冲区.
4 配置/etc/news/nntpsend.ctl

这个文件主要是为在newsfeeds中要求nntpsend的条目配置batch和innxmit参数.
所以要用man
innxmit要查看各种参数的细节.在我们这种情况,需要在freesoft
的nntpsend.ctl上加入一行:
foo:news.foo.com.cn::-S -t300
^^^注意这个"foo"就是newsfeeds里的sitename,必须要对应起来.

配置完成后把这个文件拷贝到/var/lib/news/下(要把它的owner改为news.news).
5 配置/etc/crontab
先用/usr/lib/news/bin/inncheck -v检查没有错误.
然后用手工发命令/var/lib/news/send-nntp foo news.foo.com.cn

一切正常的话可以修改crontab了.我注意到在/etc/cron.hourly/inn-cron-nntpsend

里已经调用了send-nntp,你只需要加入参数 foo news.foo.com.cn就行了.

运行一段时间没有问题的话,可以掉过头来你做freesoft的feeder,在你这一端进行

相应的配置,你们就可以相互转信了. 如果你与UseNet的一台news
server连上的话,你
应该也是UseNet的一员了.

这些只是我数天来的粗浅经验,并未严格检验,很多参数,格式没有讲.我只是把我的思路

提出来,希望对你有所帮助,或抛砖引玉.

注: 网络的配置不当会引起一些希奇古怪的问题,如我用tin
-r不能post文章,但用netscape
却可以,发现hostname返回的是news而不是news.foo.com.cn,修改/etc/sysconfig/network就

好了.难道netscape自己会send-ihave?
(linger于1999-06-11上载)


-->Linux使用技巧集-->在xteam linux下上网冲浪

在xteam linux下上网冲浪
姓名 ：赵江
Email：
地址 ：南京
转摘 ： http://www.cbinews.com/

    以前接触过的Linux，在上网时总是感到有些不太方便，尤其是我们这些网虫最常用到的拨号上网，配置起来非常复杂。对于我们许多想接触Linux但又有上网嗜好的国内用户还是不太适合的。前不久笔者买到了一套Linux中文版Xteam Linux，并且试用了一下它的拨号上网功能，觉得和以前的Linux相比之下好用了许多。由于在Xteam Linux下专门设计了一个类似于Win95下拨号网络的Linux拨号工具：PPPtool，它所使用的网络协议也是TCP/IP协议，而且配置和使用都是在可视化的窗口界面下进行的，所以比较简单直观。至少那些那些能够熟练使用Windows95系统的朋友都可以轻松的掌握，现就将自己的拙见介绍给大家。
    想使用PPPtool的话，首先要在安装Xteam Linux时选择安装X，将PPPtool安装上，这样你的工作就会稍微轻松一些。但如果你为了节省硬盘空间或者是出于其它原因选择了最小安装，那么你还需要在安装了X和KDE之后才能使用PPPtool。要提醒大家的是，必须要安装PPP－2.3.5－1.i386.rpm文件包。
    拨号连接的配置和Windows95下的情况差不多，主要是设置下面这些参数：Modem连接的端口、Modem的最大传输速率、对方拨号服务器的电话号码、名字服务器的地址、拨号用户和登录口令。接下来就一一向各位Linux新手作一个介绍。
    1、新建拨号连接
    启动PPPtool后，双击“新建拨号网络图标”，即出现新建拨号向导窗口。输入一个拨号网络名称后，点击“确定”按钮，进入“Modem设置”窗口。在此你可以选择Modem所安装的端口和最大连接速率。与Windows95中不同的是，你要根据Modem所连接的串口来选择。如果Modem连接在COM1口上，就选择“/dev/cua0”，若是在COM2口就选择“/dev/cual”。再点击“下一步”，然后输入拨号服务器号码、用户帐号和口令，点击“下一步”，再点击“结束”按钮。现在拨号网络的窗口中就出现了你新建立的拨号连接了。
    2、查看拨号连接属性
    双击你刚刚新建的拨号连接图标，弹出一个窗口，一共有三个独立的页面，分别用来设置基本参数、拨号选项以及TCP/IP属性。“基本参数”页面中的选项是刚才新建连接时设定的，所以无需改动；“连接选项”页面中的选项我们一般不会用到，就使用它的默认值即可；至于“TCP／IP”页面中只有“域名服务器”一栏需要设置，大家可以将自己拨号服务器的IP地址输入。
    3、拨号上网
    在拨号连接图标上点击右键，选择“拨号”。此时会出现一个拨号状态条，同时Modem应发出一阵在Windows95下大家都比较熟悉的嘈杂声音。一会儿之后，就会出现对话框，同时告诉你连接网络成功了。但如果不幸拨号失败，在确定硬件(Modem、COM口等)无故障的前提下，大家可以从下面的几种原因中进行排查：账号的用户名或口令错误、电话线路忙、对方拨号服务器忙。
    还有一点要提醒大家的就是最好大家都使用root身份登录，因为笔者发现PPPtool只能由超级用户(root)进入，而笔者的其他朋友在使用自己的普通用户身份进入系统时就不行了，目前还不知道是什么问题，如果哪位Linux高手知晓其中的奥妙，还请指点一二。不过想回来我们自己在单机上安装的Xteam Linux应该都是可以用root登录的吧。
    在网络连通后，你就可以启动独特的Xteam Linux下附带的Netscape浏览器，来感受一番与Windows95截然不同的网络情结了


-->Linux使用技巧集-->在linux下设置WWW Server

在linux下设置WWW Server
姓名 ：宁辛
Email：
地址 ：
转摘 ： http://www.cfan.com.cn/

    编者按：许多人的生活已变得越来越简单：食物、水、空气、网络。这种简单源于一种“透明”—网络操作对于用户已变得越来越透明了。但在这种透明背后，却是越来越庞大复杂的网络操作系统，越来越不透明的管理。你看看本期专题的几篇文章便可明白了。

    其实关于网络操作系统真是罄竹难书。这里不过是冰山一角。但也许是最闪亮的一角：如何在Linux上设置WWW Server和建立DNS服务器，教你在SCO OpenServer和Windows NT、Windows 95中相互共享打印机的技巧，Solaris和NetWare5安装技巧。当然，UNIX操作系统还有很多，这里的几款无法代表全部。希望大家举一反三，能够获得一些启发。

    目前WWW Server软件有许多，能运行在linux下的也不少，有NCSA HTTPd Server、CERN HTTPd Server、pache、Netscape Fast Track Server、Zeus Server等。这些软件各有特色：NCSA（美国伊利诺斯大学的国家超级计算应用中心）是WWW Browser Mosaic发迹之地，也是Netscape公司的安德森成名的地方；CERN（欧洲原子核研究中心）是WWW的起源地，1989年蒂姆·贝纳斯-李正是在这开发成功了世界上第一个Web服务器和客户机。这两家推出的WWW Server功能齐全，成为同类软件的标准，再加上它们都是Freeware，因此刚一推出就大受欢迎。前几年，在linux下WWW Server软件使用最多的是NCSA和CERN，但这一两年来，后起之秀Apache却独领风骚，号称“WWW Server之王”。在最新的Red Hat、Slackware和 OpenLinux各版本中都包含了Apache。

    Apache是在NCSA的基础上发展起来的，因此这二者的配置文件十分相似。Redhat5.2自带的是Apache 1.3。

    一、安装

    Apache的安装十分简单。最好在安装red hat时，选择安装web server，这样即使你对编译操作不熟的话，也能轻轻松松把服务器架设起来。

    如果你想亲自编译源文件，那么你已经不是一个初学者，建议你直接去看how-to文档或其他资料。

    打开机器，进入X-Window系统后，启动Netscape Navigator，敲入本机的IP地址，如果出现“It worked”的欢迎页面，那说明服务器程序工作正常。你可以进行下一步配置工作。

    在不同的版本下，服务器默认的工作根目录也不一样。Red Hat默认的是/etc/httpd，配置文件在/etc/httpd/conf目录下，页面文件在/home/httpd目录下。

    二、设置httpd.conf、srm.conf、access.conf文件

    Apache安装成功后，在conf子目录下有四个文件：httpd.conf、srm.conf、access.conf、magic（请注意：在www-howto文档中，说第四个文件是mime.types，但在实际安装中，在conf子目录下是magic文件）。httpd.conf是Apache设置文件中的主文件，httpd程序启动时会先读取httpd.conf。srm.conf是数据配置文件，在这个文件中主要设置WWW Server读取文件的目录、目录索引时的画面、CGI执行时的目录等等。access.conf是负责基本的读取文件控制，限制目录所能执行的功能及访问目录的权限设置。

    下面将简单对这三个数据设置文件进行说明。

    1. httpd.conf文件

    TransferLog：如果你想知道你的网站上哪个页面最受来访者的欢迎，在一段时间内有多少人访问你的站点，你当然可以设置一个计数器，但每页都设计数器，太繁琐而且得到的结果不太可靠。最好的办法是查看相应log文件，TransferLog命令就是指定当浏览器要求服务器传送文件时记录到所设置的文件，可以根据此文件查看有哪些用户看过哪些HTML文件。可用一些程序分析这个文件的数据，得出监测各种有用的数据。默认的访问log文件是logs/access_log。

    ErrorLog：这个命令是指定当WWW Server运转过程中发生问题时错误信息存放到哪个文件。默认是logs/error_log。

    VirtualHost：这个命令是用来设置虚拟主机，即用一台主机执行多个域名的WWW Server。详细命令使用将在第三部分详细解释。

    2. srm.conf

    DocumentRoot：指定WWW Server存放html文件的根目录。WWW Server从硬盘中读取html文件传送给浏览器，并不是可从任一个目录中读取文件，而是从一个特定目录中开始读取文件，这个特定的目录就是由DocumentRoot命令来指定。red hat5.2中默认的目录是/home/httpd/html。

    如果用户访问http://www.swm.com.cn/netlife/index.html，此时WWW Server并不是从系统的根目录下的netlife目录中读取index.html，而是从/home/httpd/html/netlife目录中读取index.html文件。

    UserDir：如果要在WWW Server上给一些用户开设空间，搁放个人主页，最好不要把每个人的html文件都放到DocumentRoot目录中，用UserDir命令可让每个人的页面放置在自己的home目录中。默认的目录是public_html。

    如果UserDir设置的目录是public_html，而Username是yan，而该user的home目录是/home/yan，那你访问http://www.swm.com.cn/~yan/intr.html时所看到的intr.html文件存放在/home/yan/public_html中，而不是/home/httpd/html。

    3. access.conf

    如果你有些目录只想让某些人访问，或者只允许在特定的目录下允许CGI程序，这时就要对access.conf进行修改。

    Apache的存取控制方式有两种：一是“整体存取控制”，只通过access.conf来控制文件的设置，来限定目录所能执行的功能及存取目录的权限设置。二是“特定目录存取控制”，在特定目录中建立存取设置文件，这个文件名在srm.conf中的AcessFileName来决定，默认是.htaccess。例如某些目录中的文件只允许某些人访问，那可在该目录下建立.htaccess文件，当WWW Server读取该目录时便会自动读取.htaccess来决定是否读取执行或要求口令验证。这两种方式所使用的命令几乎相同，而且设置的格式也相同。

    Directory：说明要设置的目录，然后再用命令来设置目录的功能和权限。

    Options：设置目录可以执行哪些功能。有None、All、ExecCGI、Includes、Indexs、IncludesNoExec、FollowSymlink、SymlinksOwnerMatch等选项。如果想让某个目录可以执行CGI程序，那么应在Options命令中加上ExecCGI选项。

    Require：设置可以对所指定目录以指定方式来存取的Users和Group。该命令执行后，当读取该目录数据时，系统会要求输入Username和Password。

    * 忠告：修改完设置文件后，不要像在Windows工作那样，重启机器使其生效。要记住，你现在linux下，使用linux的好处之一就是不用再见到Windows 98那死机时的蓝屏以及不必对配置文件做了一点点修改就无聊而又频繁地重启机器。你的WWW服务器任何时候都有很多人在访问，频繁地重启机器将把你的客人赶跑。要学会不重启机器，而是重新启动一个正执行的程序（Process，严格一点应叫做进程、作业）。可以用kill命令来使程序重新启动。具体kill的使用参见有关文档。

    先用ps命令查看httpd的pid号，然后用kill命令杀死它，重新启动httpd。具体命令如下：

    linux〉 ps -x

    linux〉 kill -HUP 13668（13668是假设httpd的pid号，在实际使用中，不同的情况值也不同）

    这样就可将httpd重新启动，使修改的配置文件生效。

    看完上面一大堆命令，是不是有些烦，其实你不了解这些命令也无所谓，用系统默认设置也能正常工作。

    三、虚拟主机（Virtual Host）的设置

    作为系统管理员，若你只有一个IP地址，却有好几个域名，又要求访问每个域名都要看到不同的内容，那怎么办？总不至于为每个域名都配上一台服务器吧。这就要采用虚拟主机（Virtual Host）技术，幸好Apache就支持这种功能。虚拟主机有两种方式：IP－Based（基于IP式）、Name-based（基于域名式）。IP－Based指的是一个域名对应一个IP地址，而Name-based指的是多个域名对应一个IP地址。

    虚拟主机的设置并不复杂，只要在httpd.conf文件中加入相应的命令就行。

    下面是一个Name-based（基于域名式）虚拟主机的httpd.conf例子（编者注：因篇幅原因，我们这只给出了相关部分，全文见www.swm.com.cn）。IP为：192.9.188.20，两个域名分别是long.com.cn、short.com.cn。

    httpd.conf:

    NameVirtualHost 192.9.188.20

    〈VirtualHost www.long.com〉

    ServerAdmin webmaster@long.com

    ServerName www.long.com

    DocumentRoot /home/httpd/long/html

    ErrorLog logs/error_log

    TransferLog logs/access_log

    〈/VirtualHost〉

    〈VirtualHost www.short.com〉

    ServerAdmin webmaster@short.com

    ServerName www.short.com

    DocumentRoot /home/httpd/short/html

    ErrorLog logs/short.com-error_log

    TransferLog logs/short.com-access_log

    〈/VirtualHost〉

    NameVirtualHost命令指定在哪个IP上设置虚拟主机

    在VirtualHost命令中进行各个主机的具体设置。

    ServerAdmin命令是设定当WWW Server执行有问题时，会将ServerAdmin所设置的E-mail传送到浏览器，让使用者用该E-mail与系统管理员联系。

    ServerName命令是设置WWW Server的域名。

    四、提供个人主页空间、用户homepage的设定

    经常见到某些网站提供个人主页，显得很神气，其实你也可以开放你机器上的空间给别人，这很简单就能实现。只要你按照下面的提示对你的WWW服务器配置文件进行修改。

    给用户开放个人主页空间，一是要确定用户主页的存放目录，二是开放用户主页目录的读取权限。

    方法一：你以root的身份给用户chen开个帐号，系统自动会给chen分配一空间/home/user，而后在/home/chen的目录下建一public_html的子目录，子目录的属性要设成other可读和可执行的。

    接着修改access.conf。在文件的最后加上以下一段：

     〈Directory /home/chen/public_html〉

     AllowOverride None

     order allow,deny

     allow from all

     〈/Direstory〉

    而后，重新运行httpd，用户就可以通过http://www.swm.com.cn/~chen/访问chen的个人主页。

    这种方法的优点是方便，缺点是安全性太差。

    方法二：另一种办法是在/home/httpd目录下为用户chen建个目录chen。修改srm.conf中的UserDir为/home/httpd/*/html，接着重新运行httpd便可以了。


-->Linux使用技巧集-->用linux下的php3发E-MAIL

用linux下的php3发E-MAIL

必须先配制sendmail,然后可以用以下两种方法:
1.直接用mail函数
2.调用sendmail
exec("/usr/lib/sendmail -t << END
From: xxx@xxx.com
To: xxx@xx.com
Cc: ...,...,...,...
Bcc: ...,...,...,...
Subject: xxxxx
xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxx
.
END
");

(linger于1999-08-09上载)


-->Linux使用技巧集-->PHP4.03在linux下的安装

PHP4.03在linux下的安装
姓名 ：何志强
Email：
地址 ：
转摘 ： www.chinaasp.com

....本文主要介绍PHP4.03及mysql3.23.9在redhat6.0系统apache1.3.11下的安装。 文中所汲及的软件都可以在本站的软件栏目下载。

....所需软件

php4.03源程序 C语言代码
mysql3.23 alpha源程序
apache 1.3.11源程序
phpmyadmin_2.0.5 管理MYSQL数据库的最佳工具
第一步 下载所需程序，安装MYSQL3.23程序。

....su为root新建一目录为程序安装的目录如
/server
在server下建目录mysql ,apache,
....将上面3个文件下载到/usr/src/下.

运行如下指令解开文件包

tar -zxvf php-4.0b3.tar.gz
tar -zxvf mysql-3.23.9-alpha.tar.gz
tar -zxvf apache_1.3.11.tar.gz
将phpmyadmin下载到/server下

同样运行
tar -zxvf phpMyAdmin_2.0.5.tar.gz

cd /usr/src/mysql-XXXX
这里XXXX是程序的版本号，下同，系统必需已安装C开发库

./configure -help
./configure -prefix=/server/mysql
make
make install
cd /server/mysql/bin
./mysql_install_db
到这mysql已安装成功
可以运行mysql数据库

/server/mysql/libexec/mysqld &

可以通过数据库查看程序mysqlshow查看数据库当前的状态

/server/mysql/bin/mysqlshow

第二步 安装apache及php4。

.... 如果系统中已有apache运行先关闭此服务

killall httpd

编译apache及php4, 每一个行号为一行

cd /usr/src/apache_1.3.x
./configure --prefix=/server/apache
cd ../php-4.0.x
./configure --with-mysql=/server/mysql --with-apache=../apache_1.3.x --enable-track-vars
make
make install
cd ../apache_1.3.x
./configure --prefix=/server/apache --activate-module=src/modules/php4/libphp4.a
make
make install
cd ../php-4.0.x
cp php.ini-dist /usr/local/lib/php.ini
apache及php4已安装成功下面配置apache及php4

配置php4
php4的配置文件为/usr/local/lib/php.ini文件

可以用vi 来编辑，如果你安装了MC也可以用MC来编辑

在[mysql]下修改

mysql.default_port = 3306
mysql.default_host = localhost
mysql.default_user = root

保存文件。

配置apache
apache的配置文件为/server/apache/conf/httpd.conf

去掉
#AddType application/x-httpd-php .php
行的注册号"#"加入行
AddType application/x-httpd-php .php3
保存文件。

配置phpmyadmin_2.0.5
在/server/phpmyadmin_2.0.5下找到config.inc.php3文件 从第10行起修改如下
$cfgServers[1]['host'] = 'localhost';
$cfgServers[1]['port'] = '3306';
$cfgServers[1]['adv_auth'] = false;
$cfgServers[1]['stduser'] = 'root';
$cfgServers[1]['stdpass'] = '';
$cfgServers[1]['user'] = 'root';
$cfgServers[1]['password'] = '';
$cfgServers[1]['only_db'] = '';
$cfgServers[1]['verbose'] = '';

修改第65行
require("english.inc.php3");为
require("chinese_gb.inc.php3");
保存此文件。

启动apache
/server/apache/bin/apachectl start

第三步测试

....在/server/apache/htdocs/下链接目录/server/phpMyAdmin_2.0.5为admin
....在流览器中打开http://localhost/admin/index.php3 这时该能连接到MYSQL的数据库中，你可以对数所库进行操作。这表明整个系统以能正常工作。 你也可以新建立一个php文件如下

文件名 info.php

//查看系统状况 文件开始

<? phpinfo();?>

//文件结束

在流览器中访问此页时你将得到有关PHP的运行资料.

注.本文中所有内容都在文中有关的平台上运行通过，不同的PHP版本可能会有所不同


-->Linux使用技巧集-->inittab的重要意义

inittab的重要意义

主题: inittab的重要意义
-------------------
北极星书库||http://www.ebook007.com
BBS水木清华站∶精华区

发信人: taichi.bbs@bbs.ee.ncu.edu.tw (小太极), 看板: Linux
标 题: Re: 多工....
发信站: 中央大学松涛风情资讯站 (Fri Mar 21 21:54:13 1997)
转信站: sobee!netnews.ntu!spring!News.csie.ncu!Evergreen

＞ ==>发信人: starship.bbs@bbs.ee.ttit.edu.tw (刺客的鱼), 信区: Linux
＞ 【 在 taichi.bbs@bbs.ee.ncu.edu.tw (小太极) 的大作中提到: 】
＞ : 如果你的 /etc/inittab 是安装以後就没改过的话, 那你的 vitual terminal
＞ : 只有六个 (alt - F1~F6), 那就是正常的。
＞ : 若你想要有多於 6个以上的v.t. 那你可以修改 /etc/inittab
＞ : 看到如下的设定:
＞ : c1:1235:respawn:/sbin/agetty 38400 tty1 linux
＞ : c2:1235:respawn:/sbin/agetty 38400 tty2 linux
＞ : c3:5:respawn:/sbin/agetty 38400 tty3 linux
＞ : c4:5:respawn:/sbin/agetty 38400 tty4 linux
＞ : c5:5:respawn:/sbin/agetty 38400 tty5 linux
＞ : c6:45:respawn:/sbin/agetty 38400 tty6 linux
＞ ^^^^^^^^^^^^^这些是什麽意思.请教一下...:)

inittab 档的设定通常格式如下:

id:runlevel:action:process
例： c6:45:respawn:/sbin/agetty 38400 tty6 linux

id就是代表名称通常是两个字元, 你可以自己取, 如上面的c6

runlevel是代表unix的执行模态, 通常有单工(单人模式)、多工(多人模式)
而你在单人模式或多人模可能会想执行不同的程式, 如多人模式的
文字介面, 多人模式的 x视窗介面, 就又可以有不同的执行模态
所以上面45 是指模态4(多人X视窗介面)及模态5(多人文字介面)
就执行这一行

action是指这行指令是要如何执行, 如boot(只有在开机时执行)、
once(在指定的执行模态只执行一次)、wait(转换模态时,
等原来的process终结後再执行)........
上面的respawn是指只要process一终结就重跑一次,vitual console
非常需要。

process就是执行的程式啦! 上例是agetty

(inittab 是 init 的起始设定档)
另外你有兴趣的话, 可以 man inittab 以及 man init

(shell98于1999-05-19上载)


-->Linux使用技巧集-->用比较法学Linux基本命令

用比较法学Linux基本命令
姓名 ：孙小东
Email：
地址 ：第一汽车集团公司职工大学
转摘 ：

用比较法学Linux基本命令

---- 随着中文版的Linux的诞生,Linux这个诞生于网络,发展于网络的开放式操作系统已经步入我们的世界,它是由芬兰大学生Linus Torvalds于1991年基于Unix系统开发的,并经众多爱好者、公司的努力和支持已经成熟、壮大起来了。它具有Unix系统的可靠性、稳定性、多任务性以及强大的网络功能，吸引了广大电脑爱好者。为使大家能更好、更快地熟悉、深入到Linux系统中来，将Linux的基本操作与我们所熟悉的DOS操作中相似的命令比较，从以下几方面进行基本命令的学习：
---- 一、基础知识

---- 1．开机进入

---- Linux系统的开机同正常的DOS、Windows开关机顺序相同。若是多操作系统则在LILO boot：后输入Linux，就可进入Linux的注册提示符Login：，在其后输入用户名，在口令提示符password：输入口令，注册正确后，可进入相应的用户环境。如输入：root，及其密码，可进入超级用户环境#，输入其他用户名及口令，可进入该用户环境$。

---- 2．关机退出

---- 在超级用户提示符#下输入halt（立即关机）或shutdown time（延迟time分后关机，给各用户每隔一段时间发出还有多长时间将关机的警告）后， 计算机将进行一系列的关机工作，最后出现System halt，就是关机结束，可以关闭电源了。非超级用户则需用exit退出操作环境，再进入超级用户环境，方可进行关机工作。

---- 3．命令操作注意事项

---- 在Linux中有一些与DOS不完全相同的地方，见下表：

DOS Linux
命令行字母 不区分大小写 区分大小写
提示符 > #、$
路径分隔符 \ /
通配符 *、? *、?、[]

---- 在Linux系统中，超级用户的系统提示符是#，一般情况下普通用户的系统提示符是$，普通用户的系统提示符也同DOS一样可以进行更改。通配符中*与?的含义是一样的，[]是仅包括括号内的符号，连续的符号可用“-”连接首尾的符号代替，如[12345678]可以用[1-8]代替，[abcdefijk]可用[a-fi-j]表示。

---- 4．文件类型

---- 与DOS、Windows不同的是，在Linux系统中，目录和设备都被视为文件，共有四种文件类型，它们是：⑴普通文件，即我们通常所说的文件，在长列目录方式时行首前用一符号“-”表示。⑵目录文件，即我们通常所说的目录，在长列目录方式时行用首前用一字母“d”表示。⑶字符设备文件，如显示器、打印机、终端等，在长列目录方式时行首前用一字母 “c”表示。⑷块设备文件，如硬盘、软盘、光盘在长列目录方式时行首前用一字母“b”表示。

---- 在Linux中用长格式列目录命令ls -l时，如下例：

---- 文件类型

-rwxrw-r-- 5 user group 1089
Nov 18 1998 filename
存取权 用户 组名
字节数 最后修改时间 文件名
---- 大家对DOS下的8.3格式的文件名都一定很熟悉了,由于它的表达能力有限,所以在Windows95之后加入了长文件名支持,Linux继承了UNIX的优点,也可以用长长的一串字符作文件名。但是在Linux中文件类型可不像在DOS下那样容易从文件的扩展名上了解到，在DOS下的可执行文件的扩展名为com或exe，而在Linux中只能通过文件属性得知，采用命令ls –F可区分目录和文件，在目录后有“/”符号，可执行文件后有“*”符号，用ls –aF可见所有的文件和目录列出，包括隐藏的文件和目录，隐藏文件的文件名以点号“.”开头。

---- 5.读取权限

---- 在Linux中，文件的主人即所有者，其他使用者分别称为同组者、其他人，为保证各用户文件的安全，Linux同UNIX一样通过限制某些用户对文件的随意存取。共有三个级别的存取权：读权r、写权w、执行权x。在存取权中共有九个字符的位置其顺序是：所有者、同组人、其他人。在上例中分别表示：主人对文件拥有读写权和执行权，同组人对文件拥有读写权、其他人对文件只拥有读权。

---- 6.获取在线帮助命令

---- 在Linux中有一条专门用于取得在线帮助的命令man ，其使用方式为# man command。man有一套它自己的命令，通常由单个键组成，按空格键和F键将翻到下一页，按B键翻到上一页，按Q键退出man工具，回到命令行。掌握了以上的基础知识，结合熟知的DOS命令进行比较,对于学习Linux的基本命令就可以很快地运用自如,为进一步深入学习Linux打下深厚的基础.。

---- 二、文件管理和目录操作

---- 与DOS、Windows一样，在Linux中也有许多关于文件管理和目录操作方面的命令，对二者的主要命令列表如下：

---- 1.文件管理

功能 DOS Linux 注意事项
显示文件内容 type、more cat 、more type、cat
是全部显示，more是分页显示
打印文件 print lpr
拷贝文件 copy cp
移动文件及改名 move mv
删除文件 del, erase rm
---- 2.目录操作

功能 DOS Linux 注意事项
列目录及文件 dir/选项 ls –选项
在Linux中cd/直接返回登录时的目录而不是根目录，
显示工作目录 cd pwd
变更工作目录 cd\目录 cd/目录
建立目录 md，mkdir mkdir
删除目录 rd，rmdir rmdir
目录更名 move mv
拷贝目录 xcopy copy
---- 在二者中，命令的格式都是一样的，只是选项、参数不相同而已，也可以进行组合操作，具体运用时可使用帮助命令，只不过Linux的命令的功能更为强大，据记载DOS中的不少命令都是借鉴UNIX而来的，而Linux正是居于UNIX发展起来的，这也是二者有着几乎相同的命令和格式的原因之一。

---- 三、软、硬盘及光驱的使用

---- 1．软、硬盘及光驱的使用

---- 在Linux中对其他硬盘逻辑分区、软盘，光盘的使用与我们通常在DOS与Windows中的使用方法是不一样的，不能直接访问，因为在Linux中它们都被视为文件，因此在访问使用前必须使用装载命令mount将它们装载到系统的/mnt目录中来，使用结束，必须进行卸载。命令格式如下：

mount –t 文件系统类型 设备名 装载目录

文件类型常用的有：
msdos dos分区文件
ext2 Linux的文件系统
swap Linux swap分区或swap文件
iso9660 安装CD-ROM的文件系统
vfat 支持长文件名的dos分区
hpfs OS/2分区文件系统
---- 设备名是指要装载的设备的名称，如软盘、硬盘、光盘等，软盘一般为/dev/fd0 fd1，硬盘一般为/dev/hda hdb ，硬盘逻辑分区一般为期hda1 hda2…等等，光盘一般为/dev/hdc。在装载前一般要在/dev/mnt目录下建立一个空的目录，如软盘为floppy，硬盘分区为其盘符如c、d等等，光盘为cd-rom，使用命令：

mount –t msdos /dev/fd0 /mnt/floppy
装载一个mddos格式的软盘
mount –t ext2 /dev/fd0 /mnt/floppy
装载一个Linux格式的软盘
mount –t vfat /dev/hda1 /mnt/c
装载Windows98格式的硬盘分区
mount –t iso9660 /dev/hdc /mnt/cd-rom
装载一个光盘
---- 装载完成之后便可对该目录进行操作，在使用新的软盘及光盘前必须退出该目录，使用卸载命令进行卸载，方可使用新的软盘及光盘，否则系统不会承认该软盘的，光盘在卸载前是不能用光驱面板前的弹出键退出的。

---- 2．格式化命令mkfs

---- 格式化软盘时不需事先安装空盘，只需将软盘放入软驱中，使用如下命令，便可格式化一张在Linux中使用的软盘：

#mkfs –t ext2 /dev/fd0 1440
---- 在熟悉以上基本命令之后，就可以进行其他命令的进一步学习，例如：文件编辑软件vi，存取权限的修改,检查修复文件系统，增减用户及修改密码,安装其他Linux文件，及一些Linux的实用工具软件，建立x-Windows图形界面，利用Linux上网等等，来增加对Linux的感性认识。
  作者： 孙小东（第一汽车集团公司职工大学）


-->Linux使用技巧集-->标题：

标题： 从NT引导程序来启动LINUX
姓名 ：IP浪子
Email：
地址 ：
转摘 ： www.chinaasp.com

从NT引导程序来启动LINUX
原文By Gustavo Larriera 中文译文: By "o k"

今天，象你我这些技术专家，经常不得不应付以下情形，就是让LINUX和NT两个不同的系统在同一台机器中和平共处。已经有了许多相关的HOW-TO文献--去看一看是个不坏的建议--去看如何设定LILO(The Linux Loader，Linux引导程序)以完成此类工作的那些。遗憾的是，经典文献基本没有涉及NT 引导程序。是的，我知道对不少人而言，Linux和NT间存在着门户之争:-) 但从一个IT技术者的角度而言，主要目标只是如何圆满完成这个工作而已。

现实生活中的很多时候，要求我们安装Linux时，不能去改变已有的NT引导方式。比如, 很可能那是你老板的机器，并且他/她非常喜欢自己的机器永远以自己熟悉的方式启动;-) 本文将集中介绍如何设定NT引导程序使其能引导Linux（当然也要能继续引导NT!）

我希望这些小技巧能使Linux的使用者以最简单的方式达到通过NT引导程序来启动Linux的目的。以下介绍适用于采用Intel兼容CPU的NT4.0服务器和工作站。

引子
你费了好多口舌，终于让老板同意在她的机器上装Linux。她NT用得很开心，Word啦，Excel啦，还有其它小东东，得心应手。她也并不固执，决定也可以试试Linux的啦，Linux装就装吧，不过有一个条件：她喜欢继续通过她熟悉的，能启动NT或DOS的那菜单来引导。她的意志就是你的意志，于是你决定不用LILO来双重引导她的机器。
MBR有所帮助
你应该牢牢记住的最重要的一点是，许多软件产品会利用硬盘上面仅有的那个宝贵的主引导记录（Master Boot Record，MBR）NT是这样，没有选择余地；Linux也可以这样，如果你喜欢。机器的BIOS会执行储存在当前激活分区的信息，来初始化你希望的操作系统。
NT安装后，MBR会被修改成去引导一个在激活分区的根目录下，叫NTLDR的程序。原来的MBR会被存到一个叫BOOTSECT.DOS的小文件中。NT安装完成后要记住绝不能覆盖这个MBR, 否则NT将无法启动。以防万一， NT的用户需要NT的应急修复磁盘（Emergency Repair Disk，ERD）。

记住了这些后，就要注意设定LILO时*不能*装到MBR中去，而是装到Linux的root分区中去。这样，对NT而言，不会带来问题；而Linux没有MBR也可以活下去。

NT之引导过程
当NTLDR启动， NT用户看到"OS Loader V4.xx" 后，它会切换处理器到386状态，并启动一个非常小的文件系统。接着，它会去读BOOT.INI文件，看是否有其它操作系统存在，并显示一个选择菜单。下面是一个典型的BOOT.INI:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 is here"
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 VGAMODE" /basevideo /sos
C:\="DOS is here"
TBOOT.INI有两部分构成。 "boot loader section"部分指定菜单在屏幕上的停留时间，和缺省菜单选项。"opearating systems section" 部分指定可选的操作系统种类。可以看到机器可以启动NT(以标准模式或VGA安全模式)和DOS。从这个例子我们可以推断，DOS从硬盘C:(第一个硬盘的第一个分区)启动，而
NT从第二个分区启动。典型安装时，会以DOS的FAT文件系统格式化一个C:的分区，然后将NT装在另外一个NTFS(NT文件系统)的分区。
如果用户选择了启动NT, 另外一个程序NTDETECT.COM，就会开始进行硬件检查。如果一切正常，NT内核就会被装入，正如我们都知道的那样。

再来看如果启动的不是NT的情形。此时，NTLDR 需要知道非NT OS引导所必需的引导扇区是哪个。此时，相应的引导扇区映象必须要在一个小小的512字节的文件中。比如，要引导DOS，NTLDR 将会寻找一个叫BOOTSECT.DOS的引导扇区映象文件。 这个映象文件是NT的安装程序产生的。

那么， 引导Linux又是怎样呢？这很简单，需要的只是一个引导扇区映象文件，姑且称之为BOOTSECT.LIN (在本文稍后会看到如何得到这个文件)。 必须将BOOTSECT.LIN 放到C:, 并要修改 BOOT.INI。此时"operating systems ection"部分看起来应该是这样的：

[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 is here"
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 VGAMODE" /basevideo /sos
C:\="DOS is here"
C:\BOOTSECT.LIN="Now Linux is here"
修改BOOT.INI， 可以用任何普通ASCII文本编辑器（比如记事本）。这个文件的正常属性为系统-隐藏-只读，所以你必须用 'attrib' DOS 命令或在NT中，用文件属性对话框中来变更属性。

Linux侧的故事
现在我们将注意力转到Linux。我们需要安装Linux，定制LILO，产生BOOTSECT.LIN文件。
第一步是装好Linux。我们都知道怎么做：为Linux选适当的系统，SWAP,和用户分区，运行安装程序，等等。一切顺利时，这一步在45分钟之内就可以完成。

接下去就要定制LILO。我们知道怎么做，但要注意*不能* 将LILO装到MBR中去(除非你想将NT吞了:-))。设定LILO时，要选择将它装到你Linux 的root分区。如果你还不知道如何设定LILO, 就花几分钟读读HOW-TO文献，或者就用一些好的安装程序，我是用S.u.S.E.的, 因此我的安装程序就是 'yast'
(Yet Another Setup Tool)。

LILO定制好之后，(为行文方便， 此处假设Linux的root分区是/dev/hda3)我们必须用'dd'来产生引导记录映象文件。以root Login后，按以下做:

# dd if=/dev/hda3 bs=512 count=1 of=/dosc/bootsect.lin
如果没有能将FAT C: partition mount成为 /dosc，譬如说由于这个分区被以NTFS方式格式化，不能访问这个分区。此时可以将 BOOTSECT.LIN写到一个以DOS方式格式化的磁盘中，或者NT能读的其它什么分区也可以。如果BOOTSECT.LIN不是被放到C:\，要记住此时应相应修改BOOT.INI文件。

现在你老板可以从她的NT Loader菜单中选择Linux了。NTLDR将会装载BOOTSECT.INI，她就可以看到LILO的提示。她就可以去尝试她新的Linux机器了。最后，你可以设定LILO在选择提示时能去引导Linux和C: 上的DOS。你的老板就可以再次回到C: 分区上的NT Loader。 前文描述的方法可以反复进行，如果你希望能选择引导多个Linux，就必须为每一个Linux都产生一个相应的引导扇区映象文件。

版权所有 (C) 1999 NJLUG
出版于第36期《Linux公报》1999年1月 中文版第三期


-->Linux使用技巧集-->在Linux机器上设置pop3代理

在Linux机器上设置pop3代理
姓名 ：周焕清
Email：
地址 ：浙江省慈溪锦堂师范学校
转摘 ： http://www.computerworld.com.cn

---- 　　概述：在Linux服务器上,http/https/ftp代理的应用非常广泛， squid大家都很熟悉，但是有些特殊情况下，你可能需要让一台Linux 机器也做为pop3代理服务器，代理客户端从互联网上接收邮件，并传送邮件给客户工作站。

---- 　　作用：也许这种服务对于专线连到ISP的用户更适合，在有的公司的内部网中，你需要从外部世界收信，可能你不能直接与外部世界通信，但你能很容易地访问到你的防火墙机器，这时，在防火墙机器上安装pop3代理就起到了一种不可替代的作用。

---- 　　软硬件环境：Redhat Linux 5.2，TIS通用防火墙代理服务程序 plug-gw (下载），实现方法：

---- 1.安装pop3代理非常简单，你仅需要下载上面提到的一个很小的程序plug-gw即可，请下载后放入/usr/local/etc目录下(需要执行权限）

---- 2.这里假设你需要代理互联网上两个邮件服务器，一个是 public.sta.net.cn,另一个是pop3.163.net，（若你设置了防火墙相关规则，请确保其外部接口至少能与上面提到的两个邮件服务器通信，可参见另一篇关于防火墙的文章）

---- 3.在/usr/local/etc目录下创建存取表文件netperm-table,象下面这样：

    root@sh-proxy etc # more netperm-table
    plug-gw: port 110 192.168.13.* -plug-to
public.sta.net.cn-port110
    plug-gw: port 114 192.168.13.21 -plug-to pop3.163.net
-port110

    root@sh-proxy etc # ls -l
    total 24
    -rwxrwxr-x 1 root root 314 Sep 14 17:58 netperm-table
    -r-xr-xr-x 1 root root 22489 Dec 31 1998 plug-gw

---- 　　注：第一行允许192.168.13.0网段上任何机器可使用该代理服务器接收public.sta.net.cn上的邮件。

---- 　　第二行仅允许一台机器192.168.13.21可使用该代理服务器接收 pop3.163.net上的邮件。

---- 　　4.修改/etc/services，加下面的一行：

    pop3proxy 114/tcp

---- 5.在命令行下运行两句程序，也可加入到/etc/rc.d/rc.local的最后，使得每次启动时装载:

    # /usr/local/etc/plug-gw -daemon pop3 pop3 &
    # /usr/local/etc/plug-gw -daemon pop3proxy pop3proxy &

---- 　　注：请确信/etc/services中存在一行pop3 110/tcp ,若前面的名字不是pop3，而是其它的如pop-3等，那么或者更新为pop3 110 /tcp，或者运行/usr/local/etc/plug-gw -daemon pop-3 pop-3 &

---- 　　6.若你在windows客户端用outlook express收发邮件，若从 public.sta.net.cn收信，仅需改pop3服务器为你的防火墙即可，若从 pop3.163.net收信，你还得更改标准pop3端口号为114,而不是110。


-->Linux使用技巧集-->实现LINUX与WINDOWS95文件共享

实现LINUX与WINDOWS95文件共享
姓名 ：赵江
Email：
地址 ：南京
转摘 ：

     Linux现在可以说是如日中天，君不见各大报刊杂志媒体上关于它的介绍和应用都是铺天盖地的吗？相信众多的电脑玩家中也有和笔者一样，在一块硬盘上安装了Linux和Windows95两个操作系统的。但是这样一来，就有一个问题困扰着我们——Linux和Windows95的文件不能方便地共享，这怎么办？如果你也和笔者有着同样的遭遇，那就请关注下面的文章吧，相信在看完之后，你一定会有一个满意的解决之道。
    一、在Linux中操作Windows95的文件
    虽然Linux对Windows95支持方法较多，但在这里向大家介绍一种最简便的方法，即利用mount挂装文件系统访问Windows95。这种方法是把Windows95分区作为Linux的一个“文件系统”挂装到Linux的某个空文件夹下，将Windows95分区与mnt文件夹联系起来，然后在Linux下访问/mnt文件夹实际上就是访问Windows95分区中的内容了。
     比如当我们键入下列命令“mount/dev/had1/mnt”之后，就已经将Windows95分区挂到Linux下的/mnt文件夹中了，这时就可以使用Linux中的常用命令来读取、拷贝、删除和改写Windows95中的文件了。
     例如：
     “vi/mnt/temp/setup.bat”可在Linux下查看Windows95分区中temp目录下的setup.bat文件内容；
     “cp/mnt/windows/win.ini/tmp”将Windows95分区中windows目录下的win.ini拷贝到Linux的/tmp文件夹中；
     “rm/mnt/temp/＊.＊”就在Linux下将Windows95分区中的temp文件夹中所有文件删除。
     上述的方法对于Unix和Windows95共存的系统也是适用的，至于具体的命令语句，大家可以查看相关的书籍，在此就不再详述了。但是有一点要提醒各位注意，linux下对Windows85分区的文件操作格式为“命令/mnt/Windows95分区中文件路径”，其中的“Windows95分区中文件路径”默认的是根目录，如果需要进入子目录的话，还要添加相应的路径。
     可是在Windwos95中实现对Linux中的文件调用时，就不能采用上述方法，而要使用专门的工具了。好，我们一起再来看看——
    二、Windows95中的Linux分区文件调用工具
     这个软件的名称叫做explore2fs，使用它可以实现对Linux分区中的文件进行读取、复制、写入和属性修改等功能。
     explore2fs是个绿色免费软件，整个程序也就只由一个可执行的文件组成，运行后可以看见图1所示的窗口。由于采用的是类似资源管理器的操作界面，所以对于那些熟悉Windows95但又刚刚接触Linux的朋友来说是能够很快上手使用的。在窗口左边是Linux分区下的所有目录，右边显示的则是相应目录中的文件，而且上部还有一些快捷按键来帮助你工作。
     在使用explore2fs之前还要作一些相应的设置工作，主要有两个方面：1、确定用哪个程序来浏览Linux文件；2、允许Linux分区的写操作。前者可以在“View/Options/General”中的[Program]进行设定，原先默认的是Windwos附带的那个写字板，但是你可以自行设置为系统中其它的编辑程序(附图2)。而后者的设置需要在刚才的标签中选取[Debug]，然后点中“Enable write support”的复选框即可。在完成了设置工作之后，就可以选取需要浏览的Linux文件并右击鼠标选择“View”来观看其内容；需要拷贝文件的时候，可以先选取文件，再右击鼠标选取“Import”和“Export”来进行。其中“Import”是把Windows95分区中的文件写入Linux分区中，“Export”则把Linux分区中的文件复制到Windows95的分区中，还有一个最简单的办法就是直接使用Drag and Drop来操作。
    但是由于Windows和Linux使用的分区不同，explore2fs的作者声称当从Windows95中写文件到Linux分区的时候，有可能破坏Linux原有的分区。虽然笔者在使用的过程中还没有遇到这种悲剧的上演，还是特地在此提出告诫大家，以免有一天你的Linux不能正常启动的时候来找我算帐，呵呵……
    看完这里，当你需要在一个操作系统下调用另外一个操作系统中的文件时，就不要来回切换操作系统，再用软盘拷贝了吧，是不是觉得一切都很简单？如果你需要这个explore2fs，可以在以下链接中进行下载：http://uranus.it.swin.edu.au/～jn/explore2fs/explore2fs－1.00－pre2.zip，其大小为320K。


-->Linux使用技巧集-->如何在Linux上建立DNS服务器

如何在Linux上建立DNS服务器
姓名 ：张子波
Email：
地址 ：天津光电通信技术有限公司技术中心
转摘 ： http://www.computerworld.com.cn/

---- 在一个基于TCP/IP协议的网络系统中，网络中的主机是通过一个32位的IP地址来进行寻址的。当一个网络拥有大量机器时，记住这些机器的IP地址是相当困难的。因此，为了简单起见，人们通常通过主机的名字来访问网络上的其它机器。这样就需要在寻址时把主机的名字解析成与它相对应的IP地址。目前解决这个问题主要有三种方法。

---- 一种解决方法是在网络上的每台机器上都维护一个hosts文件，该文件包含了一个网络上所有主机名到IP地址的映射表。当网络上增加、移走主机或重新分配IP地址时，就要修改每台机器上的hosts文件。显然，当网络上拥有大量机器时，这种方法是非常繁琐的。另一种解决方法是使用NIS（网络信息服务）在网络上共享一个hosts文件。但这种方法只适用于中小规模的Linux/UNIX网络，如果网络中含有windows机器，它就无能为力了。最后一种解决方法就是使用DNS（域名系统）。DNS作为一种新的名字解析机制，克服了上述两种方法的不足。本文将以RedHat Linux 6.0（kernel 2.2.5）为网络操作系统平台，介绍DNS的工作原理和配置方法。

---- 一、 DNS的工作原理

---- [编按：略]

---- 二、 DNS的配置

---- 假设我们有一个C类网络202.9.201，企业域名为toec.com。该网络上的域名服务器为ns.toec.com，它的IP地址为202.9.201.111。网络上有两台工作站workstation1.toec.com和workstation2.toec.com。它们的IP地址分别为202.9.201.1和202.9.201.2。在配置DNS之前，首先要确保网络畅通，可用ping或telnet等命令进行测试。然后用root帐号登录。

---- （一）、配置/etc/resolv.conf文件。在文件中加入下面两行：

search toec.com
nameserver 202.9.201.111

---- 其中search选项给出了一些可能的域名（各域名之间用空格分开）及搜索域名时的顺序。例如，要解析域名www.toec.com的IP地址，域名服务器会根据search选项的内容，首先解析www.toec.com.toec.com，如果解析失败再解析www.toec.com。nameserver选项则指定了域名服务器的IP地址。
---- （二）、配置/etc/nsswitch.conf文件。在文件中加入下面一行：

hosts: files dns

---- 该文件规定了在进行域名解析时，先在本地的/etc/hosts文件中查询。如果未找到，再通过/etc/resolv.conf文件中指定的域名服务器查询。
---- （三）、配置/etc/named.conf文件。该文件是守护进程named的配置文件，其内容如下所示：

options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "127.0.0";
};
zone "toec.com" {
type master;
file "toec.com";
};
zone "201.9.202.in-addr.arpa" {
type master;
file "202.9.201";
};

---- 现将文件中各行的含义介绍如下：

1～3行：directory选项定义了所有区域文件都位于/var/named目录下，下面zone中设置的文件名都是基于它的相对路径。

4～7行：告诉服务器守护进程named从/var/named/named.ca文件中读取有关根域名服务器的地址。如果域名服务器只工作在一个没有与Internet连接的局域网上，则该区域可不设。

8～11行：指定named作为127.0.0网段逆向查询（通过IP地址查询与之对应的主机名）的主域名服务器，并从/var/named/127.0.0文件中读取数据。

12～15行：指定named作为toec.com域的主域名服务器，并从/var/named/toec.com文件中读取数据。

16～19行：指定named作为202.9.201网段逆向查询的主域名服务器，并从/var/named/202.9.201文件中读取数据。
---- （四）、建立DNS数据库
---- 1、建立/var/named/named.ca文件，它包含了根服务器的IP地址。由于该文件是一个不断更新的文件，建议读者从Internet上下载一个最新的版本，而不要使用Linux系统提供的named.ca文件。其内容如下所示：

3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10
3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33

2、建立/var/named/toec.com文件。文件内容如下所示：

@ IN SOA ns.toec.com. root.ns.toec.com. (
1998081901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
NS ns.toec.com.
MX 10 ns.toec.com.
localhost A 127.0.0.1
ns A 202.9.201.111
workstation1 A 202.9.201.1
workstation2 A 202.9.201.2
mail CNAME ns.toec.com.

---- 现将文件中各行的含义介绍如下：

---- （1）、第1行是一条SOA（Start Of Authority）记录。定义了toec.com域的主域名服务器的正式主机名字和负责维护此域的人的e-mail地址。其中地址中的“@”要由“.”代替。

---- （2）、第2行设置了该文件的版本号。二级域名服务器通过此版本号来判断主域名服务器的数据是否已更新。

---- （3）、第3行设置了二级服务器对主服务器进行两次SOA记录检查的时间间隔。

---- （4）、第4行设置了当二级服务器访问主服务器或数据更新失败后，间隔多长时间重试。

---- （5）、第5行设置二级服务器在没有和主服务器联系的情况下，经过多长时间放弃所有区域数据。

---- （6）、第6行设置二级服务器经过多长时间以后放弃RR（资源记录）。

---- （7）、第7行是一个NS记录。指定toec.com域的主域名服务器为ns.toec.com。

---- （8）、第8行是一个MX记录。为toec.com域指定一个邮件交换器，即上面SOA记录中root@ns.toec.com邮件地址所对应的邮件服务器名字。

---- （9）、第9～12行是几条A记录。定义了DNS域名到IP地址的映射，其中主机名部分可将toec.com省略。named在解析时会根据named.conf文件的相关设置，自动添加省略的部分。

---- （10）、第13行是一个CNAME记录，定义了主机的别名。例如，将ns.toec.com作为公司的邮件服务器，就可将mail.toec.com设为ns.toec.com的别名。这样，用户就可以根据习惯来访问公司的邮件服务器了。

---- 3、建立/var/named/202.9.201文件。该文件是网段202.9.201的逆向查询文件，内容如下所示：

@ IN SOA ns.toec.com. root.ns.toec.com. (
1998081901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.toec.com.
111 PTR ns.toec.com.
1 PTR workstation1.toec.com.
2 PTR workstation2.toec.com.

---- （1）、文件中1～7行与toec.com文件完全一样。
---- （2）、8～10行是几条PTR记录，定义了IP地址到DNS域名的映射。其中主机名部分必须为正式名称。

---- 4、建立/var/named/127.0.0文件。该文件是内部网络127.0.0的逆向查询文件，只有一个127.0.0.1 loopback地址。内容如下所示：

@ IN SOA ns.toec.com. root.ns.toec.com. (
1998081901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.toec.com.
1 IN PTR localhost.

---- （五）、启动named守护进程
---- # /usr/sbin/named

---- 三、检验DNS服务器的设置

---- 在Linux中提供了一个检查DNS服务器配置的工具：nslookup。在命令行状态下输入nslookup，就可进入nslookup的交互式环境。如果named配置正确，则会显示当前域名服务器的名称和地址。结果如下所示：

Default Server: ns.toec.com
Address: 202.9.201.111

---- （一）、检查正向DNS解析。在提示符“>”下输入主机名workstation1或workstation1.toec.com。nslookup应能显示主机名对应的IP地址，结果如下所示：
> workstation1
Server: ns.toec.com
Address: 202.9.201.111

Name: workstation1.toec.com
Address: 202.9.201.1

---- （二）、检查逆向DNS解析。在提示符下输入workstation1.toec.com的IP地址。nslookup应能显示IP地址对应的主机名，结果如下所示：
> 202.9.201.1
Server: ns.toec.com
Address: 202.9.201.111

Name: workstation1.toec.com
Address: 202.9.201.1

---- （三）、检查MX邮件地址记录。输入域名toec.com，nslookup应能显示对应的邮件服务器地址，结果如下所示：
> set q=mx
> toec.com
Server: ns.toec.com
Address: 202.9.201.111

toec.com preference = 10, mail exchanger = ns.toec.com
toec.com nameserver = ns.toec.com
ns.toec.com internet address = 202.9.201.111

---- （四）、检查CNAME别名记录。在提示符下输入ns.toec.com的别名mial.toec.com。nslookup应能显示正式的主机名，结果如下所示：
> set q=cname
> mail.toec.com
Server: ns.toec.com
Address: 202.9.201.111

mail.toec.com canonical name = ns.toec.com
toec.com nameserver = ns.toec.com
ns.toec.com internet address = 202.9.201.111

---- 四、更新DNS数据库
---- （一）、如果网络上增加了一台新的主机，则需要在/var/named/toec.com文件中追加一条A记录，在/var/named/202.9.201文件中追加一条相应的PTR记录，然后修改两个文件的版本号（Serial）。

---- （二）、利用控制named的工具ndc重新启动守护进程named，使已更新的DNS数据库生效。

---- # /usr/sbin/ndc restart

---- 通过上面的设置和测试，域名服务器就可以正常工作了。这里需要说明的是，根据INTERNIC对域名的管理规范，在一个独立的域名上，至少要有两台DNS服务器。即一台主服务器和一台二级服务器，以提高域名解析的可靠性。其实，在网络中只要建立一台主DNS服务器，DNS即可工作。因此，本文没有介绍二级服务器的配置方法，有兴趣的读者可以参考有关资料。


-->Linux使用技巧集-->用FIPS为LINUX分区

用FIPS为LINUX分区
姓名 ：张国华
Email：
地址 ：
转摘 ： www.cpcw.com

    LINUX是目前最热门的东西，相信许多朋友都在准备着装一个。在各种媒介上也都有许多关于LINUX的文章，网上更是随处可见。但是奇怪的是都没有提到用FIPS这个分区工具？真是很奇怪啊！
    那么FIPS是什么东西来的呢？其实你打开LINUX光盘找一找，它就在光盘根目录的dos-stuff目录下或dos-stuff\fips目录下了。好了，找到了吧？那么我们就具体谈谈它的使用吧！
    FIPS (First Interactive Partition Splitter) 程序是一个功能非常强大的MS-DOS工具程序，它可以在不删除硬盘上原有数据的情况下将硬盘上的一个分区分割重新分区。不过该程序只能分割MS-DOS的主分区（如果你的主分区不够大的话就算了吧），不能分割MS-DOS的扩展分区。下面是它的详细使用说明:
    1、假设你的全部硬盘都已分配给DOS/Windows使用. 请您建立一张DOS启动盘，将CDROM上的/install/FIPS目录下的RESTORRB.EXE（恢复分区用），FIPS.EXE 和ERRORS.TXT拷贝到该软盘上，不要直接在硬盘上使用FIPS。否则后果自负！
    2、先使用MS-DOS或Windows 95提供的SCANDISK （或Norton公司最新版本的NDD）来检查要划分的硬盘，修复错误，然后使用DEFRAG.EXE(或Norton公司最新版本的Speedisk，如果装了WIN95、98系统的就请用WIN95、98的磁盘碎片整理程序)来将硬盘。以保证硬盘的后半部分没有任何MS-DOS文件，注意像mirror或image这样的程序会重新把一些文件放在硬盘的最后面，请用“attrib -r -s -h image.idx”或 “attrib -r -s -h mirorsav.fil” 将这些文件的属性改为可读并删除他们，另外在autoexec.bat或config.sys中除去image或者mirror及其他防病毒程序如NAV，防止他们在FIPS重新启动机器时恢复原来的硬盘分区表。此外如果要用FIPS分割被doublespace，stacker， drivespace压缩的磁盘时只能分割压缩盘的宿主盘。做完这了这些准备工作之后，我们就开始分区吧。
    3、用做好的FIPS启动盘启动机器。运行FIPS, 当用户启动 FIPS 的时候， 程序可以让用户把硬盘上boot区及root区的备份写到软盘上的ROOTBOOT.00x （其中的 x 代表一个从0到9 的数字）文件里。如果在使用 FIPS 时发生任何错误，你就可以从软盘启动并执行RESTORRB 来恢复硬盘上原先的配置。 请注意： 如果你不止一次地使用 FIPS 的话（这一般是不必要的，但是可能发生），程序会把一个以上的 ROOTBOOT 档案写到软盘上。RESTORRB会让用户选择要恢复哪个配置文件。RESTORRB.000 这个文件包含用户原先的配置。正确选择0、1或2（视用了多少次而定，最后一次使用的数字最大）就可以即刻恢复分区前的状态，是不是很方便！^_^
    现在你必须输入新分区应该从哪个磁柱开始。使用左／右方向键来递增或递减磁柱的计数。不要急，看清楚了再按ENTER。剩下的分区以及新分区的大小会在程序中显示，选择正确的磁柱对你来说并不困难。每使用上／下方向键一次会递增十个磁柱。准备好后，按下enter继续。在此之后，可以选择重新编辑分区表（这会让用户重新选择划分分区）或是继续。如果用户键入“c”，则FIPS将会计算改变过的启动分区，再检查一次并提示用户是否要继续。如果用户键入“y” ，那么FIPS 将会把这些改变写入硬盘并结束。重新启动机器，用FDISK查看新配置是否已经起作用。现在,您的系统上应该有两个FAT分区,第一个是您的DOS/Windows的文件系统,第二个是个空的分区,可以被TurboLinux作为自己的分区。
    最后把这张启动盘保管好，以后一旦需要恢复你硬盘的分区，软盘启动并执行RESTORRB。你的硬盘就如同从未分过这一个区一样了！怎么样，的确很方便吧，还不快行动，把LINUX请进你的硬盘里去！


-->Linux使用技巧集-->在RedHat5.0中配置News Server

在RedHat5.0中配置News Server
姓名 ：
Email：
地址 ：
转摘 ：

估计大家都看了很多中英文的News Howto,结果一般是看得稀里糊涂 (我自己就是这样的感受:-),一是那些文档年代"久远",二是针对从源代 码编译开始的情况,三它们不是针对Linux来讲的.装了RH5.0后我发现配 置INN(我认为C-News软件已经"死"了)已经是很简单的事情了,下面把我 的一些粗浅的经验介绍给大家.欢迎指正并完善.

一,基本概念
关于UUNet,有很多文章和书籍介绍,这里没必要重复了.值得一提的 是,你的新闻服务器并不一定要连入UUnet,完全可以配置为一个Stand Alone的News Server.在新闻服务器上读,写(post)文章的用户称为Reader, Reader与Server之间是按照C/S方式来做的.当然可以把你的新闻服务器 与其他服务器相连,相互转发文章.一个新闻服务器向另一个服务器转发 文章,则第一个服务器被称为feeder.所以要记住news feed的行为发生在 两个服务器之间.
我们假定你的新闻服务器的名字为news.foo.com.cn(当然域名就应该 是foo.com.cn),在安装RedHat 5.0时选择了INN包并允许开机启动innd, 这时RedHat已经自动完成了大部分配置,你根本不需要去编译源码,也就 找不到config.dist,Install.ms等文件.安装完成后相关文件在以下目录:
/usr/sbin/innd
/usr/sbin/inndstart
/etc/rc.d/rc.news
/etc/news/*
/etc/crontab
/usr/bin/inews
/usr/bin/rnews
/usr/lib/news/*
/usr/lib/news/bin/*
/var/lib/news/
/var/lib/news/send-nntp
/var/lib/news/send-uucp
/var/spool/news/
/var/log/news/
/usr/doc/inn-1.7/
/usr/doc/inn-1.7/Install.*
/usr/doc/inn-1.7/FAQ/

二, 先把news.foo.com.cn配置为单独的新闻服务器
首先要提醒一点,凡是owner是news.news的文件,你要切换成news身份 去操作(RH5.0已经给你建立了news组和用户,你可以去看一下/etc/group 和/etc/passwd文件)---发出su news命令即可.其实对于/etc/news/下的 文件可以用root身份直接编辑(我用joe编辑没有问题).
1 配置/etc/news/inn.conf
如果你安装时正确地配置了网络,这一步可以省去,缺省如下:
##inn.conf -- inn configuration ....
##......
domain:foo.com.cn
organization: foo company news site
server:localhost
这样一般就可以了,若要了解细节,用"man inn.conf"看一下,照猫画虎 是个好方法.

2 配置/etc/news/nnrp.access
事实上INN包是一组程序来完成News的工作,而不是innd一个人做所有的事,但innd总揽全局,除了send-nntp/send-uucp由cron带动以外,其他的工作都 由innd完成或发起,nnrpd就是一例. nnrpd完成news readers的服务.它的配置 文件是/etc/news/nnrp.access,控制哪些站点可以访问,是否带密码访问这个 新闻服务器.修改这个文件无需重新启动innd.缺省值如下:
# Default to no access
*:: -no- : -no- :!*
#allow access from localhost
localhost:Read Post:::*
这时你添加几行,允许更多的人访问你的站点,如加入:
stdin:Read Post:::*
*.foo.com.cn:Read Post:::*
注意每一行最后应没有空格.用"man nnrp.access"了解更详细的情况.配 置完以后用"/usr/lib/news/bin/inncheck nnrp.access"检查你的配置是否正 确:出错则有提示,正确反而什么都没有.

3 添加新闻组
站点上有哪些新闻组由/var/lib/news/active文件确定.你可以手工编辑 这个文件来添加新闻组(不要忘了切换到news身份哟),active文件的格式用"man active"去看吧.推荐的方法是用"ctlinnd newgroup chinese.comp.XXX(or whatever)" ctlinnd这个命令很有用,后面可能还会介绍.比如你手工该了active文件,你就 需要用ctlinnd reload active "modify active"通知innd更新新闻组条目.

4 监管某个新闻组
在active配置文件里,最后一项可以是y,n,m,j,x,=XXX.XXX,当它是m时, 就表示此新闻组受到监管.监管的意思就是news reader发表到这个组的文章 先发到监管人的Email信箱,监管人审查后再把它贴到新闻组上去.它的配置文 件是/etc/news/moderators,这个功能用得比较少,用man看一下就行了(一路 man下去,配置就完成了:-).

5 启动innd
有些不重要的配置文件如/etc/news/overview.fmt无须修改,使用缺省 就很好. 负责启动innd的是/etc/rc.d/rc.news,但RH5.0已经把innd启动,所以 这时你无须做任何事,你的news站点基本正常运行了,用/usr/lib/news/bin/inncheck -v
看一下,应该没有错误.现在要做的就是配置客户端(reader)软件来测试一下.
配置netscape没什么好讲的,如果用tin来读文章,需要注意几点:
a,如果以本地方式读,需要增加一个连接ln -s /var/lib/news/active
/usr/lib/news/active
b,如果以nntp方式读(tin -r),需要设定一个环境变量export
NNTPSERVER=news.foo.com.cn
或生成文件/etc/nntpserver.
c, tin的资源文件有$HOME/.newsrc,$HOME/.tin/tinrc等,用ls -a看.

三 与其他的news站点相互"灌水"
例如与news.freesoft.cei.gov.cn.为了简化说明,我们假定只能由freesoft向 news.foo.com.cn站点feed文章,即freesoft是你的上级(当你的News服务器可以向 freesoft发文章时,你们的关系是对等的,无所谓上级下级).进行这样的配置首先 要上级同意你的请求(否则他不修改他的配置:-).
1 获取上级的active和newsgroups
su news#切换为news身份
1) telnet news.freesoft.cei.gov.cn nntp > /tmp/newsgroups
list newsgroups
quit
2) telnet news.freesoft.cei.gov.cn nntp > /tmp/active
list active
quit
3) 编辑这两个文件,把你所想要的加入到你的/var/lib/news/active或 newsgroups文件中. 然后用ctlinnd reload active "modify"更新.
(用inncheck active先检查一下是好习惯).
2 允许上级站点feed文章到你的站点
修改配置文件/etc/news/hosts.nntp,加入一行
news.freesoft.cei.gov.cn:
即可,用man
hosts.nntp了解细节.相关文件hosts.nntp.nolimit,passwd.nntp等 视情况作出修改(如需要密码等).
发命令ctlinnd reload hosts.nntp "modify hosts.nntp"通知innd更新.
相应地,在news.freesoft.cei.gov.cn上也要加入news.foo.com.cn
更新innd:ctlinnd reload hosts.nntp "modify hosts.nntp"
3 配置/etc/news/newsfeeds

这个配置文件是最复杂的了,参数很多,好多我也没搞清楚(没耐性仔细看完man
newsfeeds:-).
它主要管news server之间feed的方式及distribution.
feed的方式一般有三种:
实时的nntplink/send-nntp/send-uucp.
nntplink又有logfile/channel/stdin几种
方式,不过我在我的机器上居然没有找到nntplink这个程序!
我对uucp不了解,估计现在用得
也不太多. nntp的传送方式又有几种:
1) 常规方式:pipe
2) xbatch,
类似于uucp的传送方式,batch->compress->transmission->uncompress->unbatch
3) streaming NNTP(streaming vs pipeling)

看来配置newsfeeds真是烦死了,不过我们还是用简单的方式来做,复杂的情况留到以后再说.

比如说在freesoft上的newsfeeds上加入一行:
foo:chinese.comp.*:Tf,Wnm:news.foo.com.cn
然后用ctlinnd reload newsfeeds "modify newsfeeds"更新innd缓冲区.
4 配置/etc/news/nntpsend.ctl

这个文件主要是为在newsfeeds中要求nntpsend的条目配置batch和innxmit参数.
所以要用man
innxmit要查看各种参数的细节.在我们这种情况,需要在freesoft
的nntpsend.ctl上加入一行:
foo:news.foo.com.cn::-S -t300
^^^注意这个"foo"就是newsfeeds里的sitename,必须要对应起来.

配置完成后把这个文件拷贝到/var/lib/news/下(要把它的owner改为news.news).
5 配置/etc/crontab
先用/usr/lib/news/bin/inncheck -v检查没有错误.
然后用手工发命令/var/lib/news/send-nntp foo news.foo.com.cn

一切正常的话可以修改crontab了.我注意到在/etc/cron.hourly/inn-cron-nntpsend

里已经调用了send-nntp,你只需要加入参数 foo news.foo.com.cn就行了.

运行一段时间没有问题的话,可以掉过头来你做freesoft的feeder,在你这一端进行

相应的配置,你们就可以相互转信了. 如果你与UseNet的一台news
server连上的话,你
应该也是UseNet的一员了.

这些只是我数天来的粗浅经验,并未严格检验,很多参数,格式没有讲.我只是把我的思路

提出来,希望对你有所帮助,或抛砖引玉.

注: 网络的配置不当会引起一些希奇古怪的问题,如我用tin
-r不能post文章,但用netscape
却可以,发现hostname返回的是news而不是news.foo.com.cn,修改/etc/sysconfig/network就

好了.难道netscape自己会send-ihave?
(linger于1999-06-11上载)


-->Linux使用技巧集-->定制Linux内核，发挥Linux潜能

定制Linux内核，发挥Linux潜能
姓名 ：吕晓波
Email：
地址 ：
转摘 ：http://home.cpcw.com/netschool

    众多的Linux用户在经历了对Linux由好奇到熟悉的过程之后，是否希望按照自己机器的实际配置对Linux进行定制，从而获得最佳的系统性能呢？也许有用户会认为在自己使用Linux的过程中没有碰到到任何问题，Linux确实象人们所宣传的那样“永远不会崩溃”，因此完全没有必要冒着风险对系统内核进行的改动。其实，对Linux系统内核进行定制和修改并不向很多人想象中的那么复杂。如果用户能够根据自己的实际情况对Linux系统内核进行合理的修改，可以有效的简化Linux内核，去除不需要的组件，从而提供更快的系统启动速度，释放更多的内存资源。

    下面我们对Linux系统内核做一下简单介绍。

    所谓系统内核实际上是系统设计人员编写的控制系统的各个组件，在不同程序之间分配系统资源，同时协调系统与硬件和外设之间数据传递的系统核心程序代码。与Windows系统的内核不同，Linux系统的内核是可配置的，用户可以根据自己的实际需要，在对系统内核进行定制。例如，用户可以针对自己机器CPU的具体型号对系统内核进行优化。

    尽管不同厂商在推出其各自的Linux产品之前，都已经针对某些具体的硬件设备或网络协议对系统内核进行了设置，但是用户还是可以针对自己所实际使用的机器对Linux系统内核进行进一步的修改，从而将Linux系统的性能提升到新的高度。
    本文将主要结合目前较为流行同时也是较为成熟的Red Hat Linux版本对系统内核的定制进行详细的介绍。使用其它厂商推出的Linux产品的用户也可以参照本文的介绍，对Linux内核进行定制。

准备工作

    尽管重新编译Linux系统内核的操作大多数可以自动完成而且也并不复杂，但是一旦出现错误，将可能导致Linux系统无法正常启动。因此，为了预先防范可能出现的任何问题，用户一定要在对Linux系统内核进行任何的改动之前，制作一张Linux系统启动盘（注：用户在安装Linux系统的过程中可能已经被要求制作了系统启动盘，如果用户没有现成的系统启动盘，可以按照本文随后的介绍重新制作一张），同时还应当将一些重要的数据进行及时的备份。
    下面，我们就来看一下如何实现Linux系统内核的定制。

    用户需要以管理员root帐号登录Linux系统。因为本文的所有命令都是通过命令方式实现，所以用户最好选择以命令方式登录。如果用户机器上的Linux系统默认登录到图形方式的话，可以使用图形环境下的终端命令窗口（单击GNOME桌面任务条中以计算机图案显示的按钮）。

制作启动盘

    一般在Linux系统的安装过程中，安装程序都会要求用户制作一张Linux系统启动盘，这样当Linux系统出现严重错误而无法正常启动时，用户就可以使用启动盘重新启动Linux系统。如果用户没有任何现成的启动盘，可以按照如下所述方法自己动手制作。

    假设用户使用的是Red Hat 推出的Linux产品，首先在命令模式或命令终端窗口下输入“more /etc/lilo.conf”命令，然后回车。该命令将会分屏显示Linux加载程序，即Linux Loader(简称LILO)的配置文件。用户在文件中找到如下条目“image=/boot/vmlinuz-2.2.12-20”。该项指出的路径正是用户每次启动Linux系统时首先被装载的Linux系统内核的位置。其中“vmlinuz-”项后的数字代表用户目前所使用的Linux系统内核的版本，实际显示值视用户的具体情况可能会有所不同。记下该数字之后，输入“q”返回到命令方式。

    随后用户输入“mkbootdisk --verbose --device /dev/fd0 2.212-20 ”命令，其中的Linux系统内核版本号以用户的实际版本数字为准。回车之后，Linux将会要求用户插入一张软盘，然后自动为我们制作一张系统启动盘。
设置系统内核

    现在，我们开始对Linux系统内核进行定制。首先，用户输入命令“cd /usr/src/linux”，将当前的工作目录转换到/usr/src/linux。

    Linux系统为用户提供了两种系统内核的设置接口，分别为menuconfig和xconfig。其中，用户可以在任何命令方式下通过输入命令“make menuconfig”启动menuconfig，然后使用方向键和Tab键进行选择和修改。对于xconfig，用户只能在X Windows下通过命令“make xconfig”启动。xconfig提供了更加友好的用户界面，用户可以通过鼠标点击选择选择各项菜单和按钮。本文将主要介绍xconfig使用方法，用户可以通过使用menuconfig实现同样的功能。

    用户输入命令“make xconfig”按回车，在一连串文字飞快显示之后，将会弹出xconfig的主窗口。该窗口包含许多按钮选项，点击其中任意一项会弹出对Linux系统内核进行具体设置的设置窗口。例如，用户点击xconfig窗口中的第二项"Processor type and features"之后，就可以在相应的弹出窗口中对用户自己机器处理器进行设置。

    在每一个设置窗口中，用户可以通过选择“Y”或“N”选项启动或关闭任意功能。此外，用户还可以选择“M”选项，把某些功能作为模块进行编辑。所谓模块并不是系统内核的组成部件，但是在需要时系统内核会连接指定的模块从而共同提供特定的功能。在默认情况下，设置窗口中的许多功能都是作为不同的模块被编辑的。

    如果用户在具体的设置过程中对某一个具体功能的设置不清楚的话，可以点击该功能选项的帮助按钮，启动相应的帮助文本。帮助文本能够提供所有功能选项的详细说明。如果用户发现自己可能选择了错误的选项而希望恢复以前的设置的话，可以选择直接返回主窗口而不保存任何所做的改动。
    用户在完成了所有需要改动的设置之后，可以点击xconfig主窗口的"Save and Exit"，保存用户设置并退出xconfig。

编辑系统内核

    用户在按照个人的实际需要完成对系统内核的设置之后，需要对新的系统内核进行编译。

    用户在关闭所有打开的程序之后，在命令方式下输入“make bzImage”命令。该命令会自动完成对新系统内核的编辑，大约需要10到30分钟，具体时间取决于用户机器的性能。

    编译完系统内核之后，返回到命令方式。这时如果出现报错信息，则表示用户对系统内核进行了错误的设置，例如没有启动某一个功能所必须的其它附加功能等。这时用户所能做的只能是从头开始，从新设置系统内核。

    在顺利编译完新的系统内核之后，用户还需要对配置系统内核过程中设定的各种功能模块进行编译和安装。具体为：输入“make modules”命令，然后按回车。该命令将会完成对内核模块的编译。完成编译之后，输入“make modules_install”命令，该命令会自动安装已编译模块。

收尾工作

    在完成了对新系统内核以及模块的编译之后，我们需要把新的系统内核复制到Linux的启动目录中。用户可以输入以下命令“cp arch/i386/boot/bzImage /boot/vmlinuz-mykernel”。此外，我们还需要对LILO进行相应的修改，以便使LILO在系统启动时能够找到新的系统内核。我们可以使用任何一种Linux系统下的文本编辑工具对LILO配置文件进行修改。这里我们使用pico文本编辑器。输入“pico /etc/lilo.conf”命令，启动pico编辑器，并载入LILO配置文件。找到"image="项，用“/boot/vmlinuz-mykernel”替代该项的现有值。建议用户记下"image="项的当前值，这样如果出现任何问题，就可以方便的恢复到安全设置。完成修改之后，按Ctrl-X，选择“Y”然后回车，保存设置并退出pico编辑器。
    这样，我们已经完成了定制Linux系统内核的所有工作。重新启动机器再次进入Linux系统之后，用户将会感受到新的系统内核所带来的新的体验。


-->Linux使用技巧集-->(LILO配置文件) 手册

(LILO配置文件) 手册
姓名 ：ZEO
Email：
地址 ：[中国Linux论坛]
转摘 ：http://home.cpcw.com/netschool

Lilo.conf (LILO 配置文件) 手册
翻 译：ZEO [中国Linux论坛]
文 档 名：Lilo.conf (LILO 配置文件) 手册
翻 译：ZEO
发布日期：28 July, 1995
翻译日期：一九九九年十一月
=====================================================================
LILO.CONF（5）

名称
lilo.conf-lilo的配置文件。
描述
本文件，缺省位置为etc/lilo.conf，由引导装入程序的安装程序
LILO 读取。
其表现可能如下：

boot=/dev/hda
delay=40
compact
vga=normal
root=/dev/hda1
read-only
image=/zImage-2.5.99
label=try
image=/zImage-1.0.9
label=1.0.9
image=/tamu/vmlinuz
label=tamu
root=/dev/hdba
vga=ask
other=/dev/hda3
label=dos
table=/dev/hda

本配置文件指定 LILO 使用在/dev/hda路径上的主引导记录。（关于使 用 LILO 的不同方式以及其与其他操作系统间交互作用，参见 LILO 文档中 的 USER.TEX）

启动时，引导装入程序会等待 4 秒的时间（40 deciseconds）让你按 SHIFT 键。如果未按，则上述提及的第一核心映象（zImage-1.5.99，可能 你5分钟之前才装上的）将被启动。如果按下了SHIFT键则引导装入程序就会 问你要启动哪一个映象。 万一你忘了该选择启动哪个映象， 按[TAB]（或 [？]如果你有一个美国标准语键盘的话）就会有个菜单给你选择。你在这时 可以选定或者启动这个全新的内核，或者启动一个原来可靠的内核，或一个 在其他根文件系统上的内核 （当你在自己常用的根文件系统上做了什么傻 事），或者启动一个不同的操作系统。在LILO.CONF 中提及的映象可多达 16 个。

由上可见，一个配置文件以一系列的全局选项开始（如例子中的开始的 6 行），随之是不同映象选项的描述。在映象描述中的选项将会覆盖全局选 项所设定的内容。

全局选项部分

其有许多可能的关键词。下面的描述几乎是照抄于 USER.TEX（仅有少许 缩略）

backup=backup-file

将原引导扇区拷贝到备份文件（其也有可能是一个设备，如/dev/null） 而非/boot/boot.NNNN

boot=boot-device

设定包含引导扇区的设备的名称（如一个硬盘的分区）。如果未指定该 关键字引导扇区将从当前作为根文件系统安装的设备中读取（或者可能 也会写入）。

change-rules

定义引导时对分区类型数的改变（'hiding'）。详细资料请参看 user.tex 中“分区类型改变规则“一节。

compact

试图将相邻扇区的多次读取请求合并成一次读取请求。这样就大幅度地 减少了读取时间，并使系统描述(MAP)更小。
在从软驱进行读取时尤其要使用 'compact' 选项。

default=name

使用特别指定的映象作为默认的启动映象。如果未设置 'defaul' 选项， 则将使用在该配置文件中最早出现的那个映象作为启动映象。

delay=tsecs
指定引导装入程序在启动第一个映象之前应等待的时间为多少个 10 分 之一秒。这对于在键盘可用后立即从硬盘上启动系统很有用。如果未设 置 'delay' 选项或设为 0，则引导装入程序就不会等待。

disc=device-name

定义特定硬盘的非标准参数。具体细节参见 USER.TEXT 中的硬盘分区结 构一章。其对于定义 'BIOS=' 参数尤其有用。若你的硬盘的 BIOS 数据 是 0x80 ，0x81（十六进制）等等，将无法判断哪一块 Linux 磁盘与哪 一块 BIOS 磁盘相对应（因为这决定于 BIOS 的设置和 BIOS 的类型）。 因此若你采用的是非一般的安装，那你就需要说明 LINUX 磁盘和 BIOS 磁盘间的对应关系。比如：

desk=/dev/sda
bios=0x80
disk=/dev/hda
bios=0x81

就会说明你的 SCSI 盘是第一个 BIOS 盘，而你的（主硬盘）IDE盘是第 二个 BIOS 盘。

disktab=disktab-file

指定磁盘参数表的名称。若未指定“disktab”选项，则磁盘描述（Map） 装入程序会寻找 /etc/disktab 文件。并不提倡disktab选项使用。

fix-table

这个选项使得 LILO 可对分区表上的 3D 地址进行调整。 每个分区表入口 包含有该分区的最前和最后一个扇区的 3D 地址（扇区/磁头/柱面 以及线 性地址。 如果一个分区不是以磁道号定位的， 且某个其他操做系统 （如 PC/MS-DOS 或 OS/2 ） 正在使用同一磁盘，他们就有可能导致 3D 地址的 改变。仅当分区的两个地址类型相一致时 LILO 才能保存其启动扇区。 如 果设定了 'fix-table' 选项，lilo 就可重新调整错误的 3D 地址。

警告：这并不能保证其他的操做系统以后就不会试图重设该地址。也可能 这种变化有其他不可预料的副作用。正确的修改方式是用可以轨道 定位分区的程序来重新对磁盘驱动器分区。并且，对一些磁盘来说 如一些可进行地址转换的大的EIDE磁盘），在某些情况下， 会不 可避免的出现分区表入口相冲突的现象。

force-backup=backup-file

与 'backup' 类似，但若有旧的备份文件存在则会将其覆盖。

ignore-table

告知LILO忽略作废的分区表。

install=boot-file

将指定的文件作为新的引导扇区来安装。若未设置 'install' 选项，则将
boot/boot.b作为默认缺省值使用。

linear

产生线性扇区地址而非“扇区/磁头/柱面”地址。线性地址不依赖于磁盘的 分区结构，且在运行时被翻译。注意如果使了'linear'选项则可能使启动 盘不能被移植，这是因为BIOS中用于决定磁盘分区结构的服务对软盘的作 用不稳定。在对大硬盘使用'linear'选项时，由于3D扇区地址在启动前是 未知的，故 /sbin/lilo 可能会产生对不可访问的磁盘区域的一个参考。

lock

允许自动记录引导命令行，作为以后启动的默认缺省值。这样，在手工取 消之前lilo会锁定一个选项。

map=map-file

定位磁盘描述（MAP）文件。若未指定 'map' 选项，就会使用 /boot/map
文件。

message=message-file

指定一个含有在运行启动提示符前显示的信息的文件。在显示出 'LILO' 后 等待按键的时间里不会有信息显示。在信息中，用FF字符（[Ctrl + L]） 清空本地显示器。信息文件的大小限制在65535字节以内。如果信息文件被 改动或取消则必须重建磁盘描述（Map）文件。

nowarn

使关于以后可能危害的警告失效。

optional

使单一映象选项 'optional' （见后）应用于所有映象。

password=password

使单一映象选项 'password=...' （见后）应用于所有映象。

prompt forces

不等待任何的按键事件发生就直接进入启动提示符模式。如设定了 'promp'
选项而没设定 'timeout' 选项，则不能自行启动。

restricted

使单一映象选项'restricted'（见后）应用于所有映象。

serial=parameters

允许使用来自串行口的控制。指定的串行口将会被初始化，引导装入程序就 会从该串行口及PC键盘接受输入。在串行线上发送暂停（break）指令和按 下键盘上的 SHIFT 键的效果是一致的，都会引起引导装入程序的注意。如 果串行线比键盘输入更不安全，如该线与 MODEM 相连时，则所有启动映象 都应设密码加以保护。参数串的格式如下：

[，[[]]]

：表串行口的数目，最小为0。
0对应于COM1并指定为/dev/ttyS0，等等。
所有四个端口均可用（如果可以使用的话）。

：串行口的比特率。
以下比特率可被支持：110，150，300，600，1200，2400，4800
及9600bps。
默认值是2400bps。

：表在串行口上使用的奇偶效验。引导装入程序忽略输入的奇偶效 验位，并除去第八位。以下字符可用来描述奇偶效验：
n表示无相同，e表示偶数的相同，o表示奇数的相同。

：在一个字符中的位的数目。仅支持7或8位。
若奇偶效验是 'none' 则默认是8，
若奇偶效验是'even'或'odd'，则默认是7。

若设定了'serial'选项，则'delay'的值就自动上升为20。

例如：serial=0，2400n8就会用缺省值参数来安装COM1。

timeout=tsecs

为键盘输入设定一个超时选项（以10分之一秒为单位）。若在指定的时间 内没有按键则第一个映象就会被自动启动。同样，如过用户停顿过长则密 码输入就会被取消。默认的超时值是无限。

verbose=level

用以打开大量的进程报告。数目越大则给出的冗长输出越多。如果在 LILO 命令行中附加参数 -v，则冗长标准也相应增加。最大的冗长标准是5。

另外，内核配置参数 append，ramdisk，read-only，read-write，root以 及vga都可在全局选项中被设定。如果在相应的核心映象的配置栏中没对其加以 指定，该设定值其就会被用做默认的缺省值。

单一映象部分

一个单一映象或者以一行
image=pathname
开始（以提示含有一个LINUX内核的启动映象的文件或设备），或以一行 other=pathname 开始以提示启动其他独立的系统。

在前一例中，如果一个映象行指定是从一个设备启动，则必须用
range=start-end
提示被描述的扇区范围。

在后一例中，有3个选项可供选择。

laoder=chain-loader

该参数指定了将使用的连锁装入程序。使用默认缺省/boot/chain.b。 如果是从其他设备而非第一硬盘或软盘启动则必须指定连锁装入程序。

table=device
其指定含有分区表的设备。若未指定该参数，引导装入程序就不会把分 区信息传送到已启动的操做系统。（一些操做系统有其他的方式来决定 从哪个分区来启动。如，MS-DOS将其的启动盘分区结构或分区保存到引 导扇区里）。应注意若一个已定位且引用了 'table' 选项的分区表被 修改则必须重新运行/sbin/lilo文件程序。s

unsafe

在创立磁盘描述（Map）时不要访问启动扇区。 这将取消一些正确性检 查，包括分区表检查。如果启动扇区是在一个固定格式化的软盘驱动器 上，则在运行定位装载程序时使用 unsafe 选项就不需插入可读取的磁 盘到驱动器里。
以下选项在这两例中均可运用。

label=name

引导装入程序使用每个映像说明的主文件名（不包含路径）来标识该映像。 通过设定变量'label'可使用不同的名称。

alias=name

通过指定一个别名可对同一个目录使用第二名称。

lock（见前）

optional

删去在磁盘描述表创立时不可用的映像。这对于在指明测试并不总是可用的 内核很有用。

password=password

用密码保护映像。
restricted

若是在命令行被指定各参数则只在启动映像使需要输入密码。

内核选项部分

如果被启动的映像是一个LINUX内核，则可以将命令行参数传送到该内核。

append=string

将指定的各选项增加到传送于内核的参数行。其典型的运用于指定不能完全 自检或彻查对其有危害的硬盘的参数。比如：

append="hd=64，32，202"

literal=string

与 'append' 类似，但会取消所有其他选项（如根驱动器的设定）。由于用 'literal' 选项可在无意之间删掉重要的选项，故该选项不能设在全局选项 中。

ramdisk=size

该选项指定了任选RAM磁盘的大小。0 表示不应创立任何RAM磁盘。若不指定 该参数，则使用在根文件系统中建立的RAM磁盘大小。

read-only

该参数指定根文件系统应该以只读的形式装载。典型的是，该系统的起始程 序稍后将以可读写方式重新装载根文件系统。

read-write

其指定根文件系统应以可读写方式装载。

root=root-device

该参数指定应作为根文件系统装载的设备。如果目前使用的是指定的名称， 则根驱动器就设在根文件系统目前所在的设备上。如果根设备被 -r参数所 修改，则使用相应的设备。若未指定 'root' 参数，则使用包含核心映象的 根设备设置（该设置是编译内核时在内核的 Makefile 文件中用 ROOT_DEV 变量设定的，并稍后可用 rdev（8）程序修改）

vga=mode

其指定在启动时应选择的 VGA 文本模式。 下列数值可被识别 （忽略大小
写）：

normal：选择普通 80x25 文本模式。

extent（或ext）：选择 80x50 文本模式。

ask：停止并要求用户的输入（在启动时）

：使用相应的文本模式。在启动时用vga=ask选项或按

[Enter]都可获得一个可用模式的列表。

若未指定该参数，则使用在核心映像中获得的 VGA 文本环境。（该设置是 编译内核时在内核的 makefile 文件中用 SVGA_MODE 变量设定的，稍后可 用 rdev（8）程序修改）

参见

lilo，rdev（8）。
lilo的发布版本来源于广泛的文件，以上部分只是这些文件的选录。


-->Linux使用技巧集-->Linux中的字型(FONTS)设定

Linux中的字型(FONTS)设定
姓名 ：Adam
Email：
地址 ：[中国Linux论坛]
转摘 ：http://home.cpcw.com/netschool

    在X-window 系统中，字型是图形界面中不可或缺的资源之一。让使用者可以在视窗标头，功能表或文字栏位中显示或输入文字。

1)字型路径之设定:
查看目前 X 伺服程式的字型路径:
# xset -q

新增字型目录:
# xset +fp ~/myfonts 或 # xset fp+ ~/myfonts

删除字型目录:
# xset -fp ~/myfonts 或 # xset fp- ~/myfonts

当字型目录做更新后，则字型路径的设定也需更新:
# xset fp refresh

2)字型显示工具 xlsfonts
可显示目前 X 伺服程式可利用之字型。如：
# xlsfonts | grep time

xfd
带 -fn 可显示某一特定字型中的每一个字元。如：
# xfd -fn fixed &

xfontsel
提供了一个字型预览视窗，供使用者动态地来选择及预览 X 伺服程式所载入之字型群。如：
# xfontsel &

3)字型伺服器(FONT Server)
新增或删除於字型路径中字型伺服程式透过一TCP/IP 埠(port)与X伺服程式通讯。清华大学的font server 的埠为7100。其写法如下：
tcp/xfs.nthu.edu.tw:7100/all
tcp：连结的方式。
xfs.nthu.edu.tw：字型伺服程式的主机名称，缩写或IP 位址。
7100：所使用的埠。
all：将字型伺服程式的所有字型载入 Font Path 中。

    所以新增字型伺服程式於字型路径中，其写法如下：
# xset +fp tcp/xfs.nthu.edu.tw:7100/all

查看伺服器状态：
# fsinfo -server xfs.nthu.edu.tw:7100

4)建立自己的字型目录
透过 bdftopcf，先将 .bdf 的字型档(文书档)转成二进位的 .pcf 档
# bdftopcf newfont.bdf

复制该.pcf档至预定的字型目录中
# cp newfont.bdf ~/myfonts

建立字型资料库，产生 fonts.dir
# mkfontdir ~/myfonts

最后加入字型路径中或更新字型路径即可
# xset +fp ~/myfonts 或 # xset fp refresh


-->Linux使用技巧集-->Linux中IP隧道的分析与建议

Linux中IP隧道的分析与建议
姓名 ：小漫
Email：
地址 ：
转摘 ：http://home.cpcw.com/netschool

作者的话：

本文系在阅读Linux源码及一些相关资料的基础上写成的。

欢迎就文章的各个方面提出建议和批评意见，作者希望更多的交流和探讨。

欢迎在保留原文完整性的前提下在网上转贴，需部分引用请通知作者。

传统媒体转载和引用此文，请务必经过作者同意。

欢迎在实际的应用中使用此文提出的思想，希望同时知会作者。

作者信箱:xiaoman04@hotmail.com 欢迎来信！！

*****************************************************************

O、

由于网络的日益普及，网络的安全成为目前的热门话题。本文对隧道技术的分析，

就侧重安全领域，对利用隧道技术实现虚拟专网提出建议。

为什么需要IP隧道？没有接触过这个概念的人自然提出这样的疑问。实际上概念

最初的提出很简单，为了在TCP/IP网络中传输其他协议的数据包。设想IPX协议或

X.25封装的数据包如何通过Internet网进行传输，在已经使用多年的桥接技术中是

通过在源协议数据包上再套上一个IP协议头来实现，形成的IP数据包通过Internet后

卸去IP头，还原成源协议数据包，传送给目的站点。对源协议数据来说，就如被IP

带着过了一条隧道。这种技术在业余无线网络（Amateur Packet Radio network，

应该怎么翻，请告诉我）得到了最广泛的应用。

利用IP隧道来传送的协议包也包括IP数据包，本文主要分析的IPIP封包就是如此，从字

面来理解IPIP就对了，就是把一个IP数据包又套在一个IP包里。为什么要这么做呢？

多此一举嘛。其实不然，见过一些应用就会明白，移动IP（Mobile-IP）和IP多点广播

（IP-Multicast）是两个通常的例子。目前，IP隧道技术在构筑虚拟专网（ Virtual

Private Network）中也显示出极大的魅力。本文也将对利用IP隧道技术构筑VPN做

简单设想。

背景：隧道的多种理解和实现

Internet的研究者多年前就感到需要在网络中建立隧道，最初的理解是在网络

中建立一条固定的路径，以绕过一些可能失效的网关。可以说，隧道就是一条

特定的路径。

这样的隧道是通过IP报头中的源路由选项来实现的，在目前看来，这个方法的缺陷

十分明显。要设置源路由选项就必须知道数据包要经过的确切路径，而且目前

多数路由实现中都不支持源路由。

另一个实现隧道的机制是开发一种新的IP选项，用来表明源数据包的信息，原IP头

可能成为此选项的一部分。这种隧道的意义与我们所说的隧道已十分接近。但它的

不足在于要对目前IP选项的实现和处理做较大的修改，也缺乏灵活性。

最后常用的一种实现方法是开发一种新的IP封包协议，仍然套用当前的IP头格式。

通过IP封包，不须指明网络路径，封包就能透明地到达目的地。也可以通过封包空

间把未直接连接的机器绑在一起，从而创建虚拟网络。这种方法易行、可靠、可扩

展性强，Linux采用了这一方法，这也是目前我们所理解的隧道思想。

一、

封包协议的结构和实现

封包协议的实现原理十分简单。先看看通过隧道传送的数据报在网络中如何流动，

如图一。

为了叙述简便，我把在隧道中传送的IP数据包称为封包。

-------------------
北极星书库||http://www.ebook007.com

/ 子网A \ / 子网C \

/ \ / \

| | | |

| & | | |

| + +++++ | | ***** |

| +++++ + | | * * |

| + | | ***** * |

\ + / ----------- \ * * / ----------

\ ++> # * **>(#) * ***> # ++++ \

| * * | | + |

| * * | | + |

| ***** * | | +++++++ |

| ***** | | V |

| | | & |

\ / \ /

\ 子网B / \ 子网D /

----------- ----------

++++++ 原数据报

****** 封装后的数据包（封包）

# 封装/解封

& 用户主机

图一. 封包协议实现模型

看图中的设备 #，分别处于隧道的两端，分别起打包（封装）和解包（解封）

的作用，在整个数据包的传送路径中，除了隧道两端的 # 设备，其他网关把

数据包看成一个普通的IP包进行转发。

设备 # 就是一个封包基于的两个实现部件--封装部件和解封部件。封装和解封

部件（设备）都应当同时属于两个子网。封装部件对接收到的数据报加上封包头

，然后以解封部件地址作为目的地址转发出去；而解封部件则在收到封包后，还

原原数据报，转发到目的子网。

隧道的源端（封装部件）对进入隧道的数据包进行封装，形成封包。一个完整

的封包如图二所示。

| | 封包IP头 |

| | 封包协议头 |

/ | 原协议头 |

| | |

原数据报 | | 原协议数据 |

| . .

| . .

| | |

图二. 封包结构

二、

Linux中的实现

本人分析的版本是Linux2.0.34（RedHat5.2采用）。

在Linux中，隧道的实现主要基于两个文件new_tunnel.c和ipip.c

同时Linux定义了一种新的协议类型--IPIP（IPPROTO_IPIP），与上面所说封包

类型类似。

基本思路

在Linux中IP Tunnel的实现也分为两个部件：封装部件和解封部件，分别司职发送和接

收。但这两个部分是在不同的层次以不同的方式实现的。

封装部件是在数据链路层以虚设备的方式实现。所有源代码见

/usr/src/linux/drivers/net/new_tunnel.c

为实现封装，Linux实现一个称为tunl的网络设备（类似loopback设备），此设备

具有其他网络设备共有的特征，对于使用此设备的上层应用来说，对这些网络设备

不加区分，调用及处理方法当然也完全一样。

tunnel_init()和tunnel_xmit()是new_tunnel.c中的两个主要过程。

tunnel_init()初始化与设备tunl相关的device结构。

而tunnel_xmit()在从tunl设备发送数据时被调用，tunl设备作为实现IP隧道

技术的封装部分，在此过程中完成对相应的数据报进行封装所需的全部操作，

形成IPIP类型的IP包，并重新转发此数据包（ip_forward()）。

解封部件在IP的上层实现，系统把它作为一个虚的传输层（实际上与传输层毫无

关系），具体处理见文件

/usr/src/linux/net/ipv4/ipip.c。

我们知道，每一个IP数据包均交由ip_rcv函数处理，在进行一些必要的判断后，ip_rcv

对于发送给本机的数据包将交给上层处理程序。对于IPIP包来说，其处理函数是

ipip_rcv（就如TCP包的处理函数是tcp_rcv一样，IP层不加区分）。也就是说，当

一个目的地址为本机的封包到达后，ip_rcv函数进行一些基本检查并除去IP头，然后

交由ipip_rcv解封。

ipip_rcv所做的工作就是去掉封包头，还原数据包，然后把还原后的数据包放入相应的

接收队列（netif_rx()）。

从以上IP Tunnel实现的思想来看，思路十分清晰，但由于IP Tunnel的特殊性，其

实现的层次并不单纯。实际上，它的封装和解封部件不能简单地象上面所说的那样

及新的IP头（这些一般认为是传输层或网络层的工作），调用ip_forward转发新包

也不是一个网络设备应当做的事。可以说，tunl借网络设备之名，一把抓干了不少

工作，真是‘高效’。而解封部件宏观上看在网络层之上，解出IPIP头，恢复原数据包

是它分内的事，但在它解出数据包（即原完整的协议数据包）后，它把这个包

放入相应的协议接收队列。这种事可不是一个上层协议干的，这是网络设备中断

接收程序的义务。看到了，在这点上，它好象到了数据链路层。

是不是有点乱，隧道机制就是这样，你有没有更好的办法？

三、

为实现VPN的扩展

实际上Linux只为实现隧道机制提供了一个框架，图二中的封包协议头在

Linux中被忽略了，也就是说，封包头只含封包IP头，其后紧跟原IP数据包。

这样的结构用于传输公开数据没有关系，但对于一个VPN来说，安全保密是

不可缺少的重要功能。我们希望通过隧道的数据可靠且不可窃取和冒充的，

那么，加密和认证就必不可少。

为实现这一构想，设计以下封包协议头：

0 4 8 16 24 31

| ver |type | hlen | OldPacketLen |

| DeviceID | EncapID |

| Flags | CheckSum |

| IPIP Options( If any ) |

. | padding |

. .

图三、 IPIP头设想图

ver: 版本号，利于扩展

type: 用于建立不同目的的隧道（可能处理上有差别）

OldPacketLen: 进入隧道的原数据包长度

DeviceID: 对数据包进行封装的设备标识

EncapID: 此封包的ID号

Flags: 标志位，共16位，初步定义如下：

1有否加密

2有否做摘要

3有否签名

5有否传送消息密钥

6消息密钥有否加密

CheckSum: 头校验

IPIP Options: 用来传送一些必要的数据，比如消息密钥、签名等

| 类型 | 长度 | 数据 ... |

好了，有了这个东西，我们就可以扩展Linux IP Tunnel为我们的VPN服务了。

首先，改写new_tunnel.c和ipip.c两个文件，加入对IPIP头的处理。

接着，我们要实现一种密钥的管理和传送机制。

当然，对称密钥是必需的，而对IP数据包加密要使用序列密码。从全体考虑，

我们可以提出建立VPN的逻辑步骤；

1、准备工作：建网安装系统完成配置等等

2、隧道的两端分别向对方发送自己的公开密码和设备号

3、如有必要，产生序列密码，后加密签名传给对方

4、正常通信，----放心，你的数据已经很保险了。

在一个VPN的隧道中，一个封包的格式应如图四所示。

| | 封包IP头 |

| | 封包协议头 |

/ | |

| | 原协议头 |

| | 及 |

封包数据 | | 原协议数据 |

| . （密文） .

| . .

| | |

图四. VPN封包结构

你的几种使用方法。

事情往往不能两全其美，你在安全强度和通信速度上必须作出选择，

（不然你就需要在安全强度和Money的耗费中做选择。）

使用这样的协议，根据你的需求不同，你可有不同的使用方法，下面列举

一些：

0、跨Internet的公司多个内部网之间进行通信，保密性并不重要

直接使用原框架机制，无任何加密措施

这样速度快、效率高，公司也不用申请多个IP地址，方便可行

1、一般性的商业应用，具有保密要求

利用事先产生的序列密码，每次对原数据包加密

安全度提高了，是一种十分实用的方法。只要强度足够，一般很难破译

速度快

2、密码不变的方式你认为不够安全

你可以自己实现一种密码传送方法，每隔一段时间更换一次密码。

其中一些握手关系需要完善，有兴趣的欢迎探讨。

如果发展成熟，此法相信很有前途。

4、高度机密领域

敬请使用一次一密，并进行每次签名。

每次产生新密钥和签名十分费时，在目前我国Internet网络的速度下

几乎不可行。

但相信有此需要的部门也能够设法提高其网络带宽，让网络状况适合

这种应用。

另外，当然还可以就加密强度自身作出选择，比如选择128位，还是512位、1024位

四、

待完善

主要牵涉到隧道的管理，在封包的传送过程中如果出现错误是十分正常的，

当一台路由器检测到错误时，它会发送一个ICMP包给隧道的发送端，但遗憾的是

ICMP返回的数据除了IP头外，只含8个字节的上层协议信息。只凭这个难以对

主要包括：

隧道的另一端的可达性

隧道的拥塞状况

隧道的MTU

到来时，封包的发送者要能够找出所封装的数据来自何方，并发送相应的ICMP包。

强调一点，MTU的更新对隧道来将很重要，因为一个灵活的隧道的下一级设备是

不定的，同时一些数据包本身也要求更改MTU。

所有这些，在Linux中的处理都不够或根本没有处理。大家努力呀！

*本文经《中国Linux论坛》推荐发表在《中国计算机报》59期.


-->Linux使用技巧集-->如何在Linux服务器上设置DNS?

如何在Linux服务器上设置DNS?
姓名 ：吴阿亭
Email：
地址 ：[《中国Linux论坛》版主 ]
转摘 ：http://home.cpcw.com/netschool

背景： 公司用专线连到Chinanet，并获得一段C类IP地址空间（如：16个），
同时向ChinaNIC申请了公司域名yourdomain.com,现在设置一台机器
作DNS服务器，同时也设为防火墙。
对象： Internet专线用户
软件： Redhat Linux 5.2

实现过程：
1. 该服务器上装有两块网卡，内部接口eth1地址为192.168.11.5,外部
接口eth0地址为 202.a.b.c 机器名设为 dns.yourdomain.com ,安装
及配置过程略
2. Redhat Linux 5.2随CD带的是bind 8.X的版本，下面是我的配置：
----------
[root@dns jephe]# more /etc/named.conf
options {
directory "/var/named";
forward first;
forwarders {
202.96.199.133;
};
};
zone "."{
type hint;
file "root.hints";
};
zone "0.0.127.in-addr.arpa"{
type master;
file "127.0.0";
};
zone "11.168.192.in-addr.arpa"{
type master;
file "192.168.11";
};
zone "yourdomain.com"{
notify no;
type master;
file "yourdomain.com";
};
---------
注：a. 202.96.199.133 是 Chinanet的一个DNS服务器（ns.sta.net.cn) .
b. root.hints 包含了互联网上的一组根服务器的地址，可从网上下载，
（ftp://ftp.internic.net/domain/named.ca），然后换名为root.hints，
你也可取别的名字，这个区信息非常重要，必须存在，为了保持它最新，
一般每月更新一次。也可设一个script文件，每次自动更新
c. 127.0.0 是该机器本地接口的反向解析文件，设置后便几乎不再需要更改。
d. 192.168.11是内部网段的一些服务器的反向解析信息。
e. yourdomain.com 文件是你所申请的域的正向解析文件。在你向ChinaNIC
申请域名yourdomain时，一般地，你还需要提供管理这个域的DNS服务器，
你可以用dns.yourdomain.com(202.a.b.c)。
---------
[root@dns named]# more 127.0.0
@ IN SOA dns.yourdomain.com. root.dns.yourdomain.com. (
1999092501 86400 3600 3600000 86400 )
NS dns.yourdomain.com.
1 PTR localhost.
[root@dns named]# more 192.168.11
@ IN SOA dns.yourdomain.com. root.dns.yourdomain.com. (
1999092501 86400 3600 3600000 86400 )
NS dns.yourdomain.com.
1 PTR host1.yourdomain.com.
2 PTR host2.yourdomain.com.
4 PTR host4.yourdomain.com.
[root@dns named]# more yourdomain.com
@ IN SOA dns.yourdomain.com. root.dns.yourdomain.com. (
1999092501 86400 3600 3600000 86400 )
NS dns.yourdomain.com.
dns A 202.a.b.c
MX 5 dns.yourdomain.com.
www CNAME dns
ftp CNAME dns
[root@dns named]# more /etc/resolv.conf
search yourdomain.com
nameserver 127.0.0.1
nameserver 202.96.199.133
[root@dns named]# more /etc/hosts
127.0.0.1 localhost localhost.localdomain
202.a.b.c dns.yourdomain.com dns
192.168.11.5 dns.yourdomai.com dns
192.168.11.1 host1.yourdomain.com host1
192.168.11.2 host2.yourdomain.com host2
------------
注： a. 你需要联系你的ISP关于反向域解析设置，一般情况下，
你不需要反向解析，但有些应用程序可能用到它，还有，
当你访问网上某些网站时，网站会检查你连上来的IP地址，
看能否找到相应的域名，若不能，则拒绝连接如ftp.tis.com ,
若你得到的一段C类IP地址空间，仅仅16个其中202.a.b.c和202.a.b.c2
你正在用，但你的ISP恐怕不会把这16个地址子域交给你管理，
为了简单起见，ISP会简单地要求你加哪些机器，你能提供给他们如下：
你需要提供相应的信息，象这样

$ORIGIN b.a.202.in-addr.arpa
c PTR dns.yourdomain.com.
c2 PTR host2.yourdomain.com.

b. 每次更新DNS信息后，你可用killall -HUP named去重读更改的
配置文件，你可以开另一个窗口运行tail -f /var/log/messages
查看有无出错信息，以便检查你的设置是否有错。

c. 最后你可以用nslookup来检查你的DNS设置，依次检查正反向域设置，
然后看能否解析外面的站点。

参考信息：

1. ISC Bind homepage :http://www.isc.org/view.cgi?/products/BIND/index.phtml
2. bind guide: http://howto.linuxberg.com/LinuxGuide/index.html

Jephe


-->Linux使用技巧集-->LINUX的引导过程

LINUX的引导过程
姓名 ：钟卫东 李莉
Email：
地址 ：
转摘 ：http://home.cpcw.com/netschool

    启动Linux系统,通常需要安装LILO (the LInux LOader)，LILO不仅可以引导LINUX，也可以引导其他操作系统，包括MS-DOS或WIN 9X以及Windows NT等。在安装LINUX时，LILO可以装在硬盘的MBR中，也可以安装在活动分区的引导扇区中。
    微机启动时，BIOS装载MBR，然后从当前活动分区启动，LILO获得引导过程的控制权后，会显示LILO提示符，如下所示：

LILO BOOT:

    此时如果用户不进行任何操作，LILO将在等待制定时间（例如5秒）自动引导默认的操作系统，而如果在此期间按下TAB键，则可以看到一个可引导的操作系统列表，例如：

LILO BOOT:[TAB]

WIN98 LINUX

BOOT:

    上述列表表明LILO可引导WIN98和LINUX两种操作系统，并且WIN98是默认的操作系统。如果此时用户在LILO提示符后键入LINUX则可启动LINUX 操作系统。

    LINUX的另外一个特点是可以将许多参数传递给LINUX内核，例如：

BOOT:LINUX SIGLE

    可指定LINUX进入单用户模式。

    当用户选择启动LINUX操作系统时，LILO就会根据事先设置好的信息从ROOT文件系统所在的分区读取LINUX映象，然后装入内核映象并将控制权交给LINUX内核。LINUX内核获得控制权后，以如下步骤继续引导系统：

    1. LINUX内核一般是压缩保存的，因此，它首先要进行自身的解压缩。内核映象前面的一些代码完成解压缩。

    2. 如果系统中安装有可支持特殊文本模式的、且LINUX可识别的SVGA卡，LINUX 会提示用户选择适当的文本显示模式。但如果在内核的编译过程中预先设置了文本模式，则不会提示选择显示模式。该显示模式可通过LILO或RDEV工具程序设置。

    3. 内核接下来检测其他的硬件设备，例如硬盘、软盘和网卡等，并对相应的设备驱动程序进行配置。这时，显示器上出现内核运行输出的一些硬件信息。

    4. 接下来，内核装载ROOT文件系统。ROOT文件系统的位置可在编译内核时指定，也可通过LILO或RDEV指定。文件系统的类型可自动检测。如果由于某些原因装载失败，则内核启动失败，最终会终止系统。

    5. 然后，INIT切换到多用户模式，并为每个虚拟控制台和串行线路启动一个GETTY进程，GETTY进程管理用户从虚拟控制台和串行终端上的登录。根据不同的配置，INIT也可以启动其他进程。


-->Linux使用技巧集-->Linux部分命令简介

Linux部分命令简介
姓名 ：何广
Email：
地址 ：
转摘 ：http://home.cpcw.com/netschool

    在“瘟酒吧”下呆久了，相信大家都有点腻了，而不时的“该程序执行了非法操作，即将关闭”和蓝脸使我们的神经饱受折磨，你试过辛辛苦苦干了几个小时的文件瞬间的丢失吗？还好还有NT，但是由于我们的计算机的硬件配置（更只要的是我们口袋中的money）所限，在NT的效果并不理想，现在终于有了一个Linux可以为我的等穷人服务了，但刚装上它时，由于对它的常用命令不太了解，往往对着屏幕而不知道干什么好！从书店、网上找来命令一个又一个不断的研究，当我经历了不计其数的重装系统过程（告诉你一个新招：用ghost很方便重装系统）后，终于对 Linux有了一点的了解，以己推人，我也深知新手的苦衷，特将一点心得贡献给大家（注：我所列出的只是我认为常用的，为便于大家查找，故以字母顺序排列。还有，我用的是Ret Hat Linux）：

    &
    &命令可用在其他任何命令的后面，它用来通知计算机在后台运行某一命令。通过把作业放在后台，用户可以继续使用当前的shell来处理其他命令；如果命令在前台运行的话，那么用户在此进程结束前不能继续使用当前的shell。

    adduser
    adduser命令由root或其他具有权限的管理员用来创建新用户，跟在adduser 命令后面的是所要创建的帐号名，例如： adduser flying

    alias
    alias命令用来设置命令的别名或替代名。一般说来别名往往是实际命令名的缩写。例如用户为ls设置一个别名dir：
alias dir=ls
    若仅输入alias本身时，系统将显示当前所有的别名。

    bg
    bg命令用来迫使被挂起的进程在后台运行。例如，当你已经在前台启动了一个命令时（没有在此命令后使用&），你才想到这一命令将运行较长一段时间，但你这时还需使用shell。在这种情况下，可通过ctrl+z挂起当前运行的进程。此时你既可以使它长期挂起，也可以通过输入bg把这一进程放到后台运行。这样shell就可以用来执行其他的命令了。

    cat
    cat通常是用来在屏幕上滚动显示文件的内容。它的格式是：
cat〈filename〉

    cd
    cd用来改变目录。这一命令非常有用，它有三种典型的使用方法。
    cd　　　移到目录树的上一层
    cd~ 　　移动到用户的主目录，与单独使用cd相同
    cd directory name 改变到指定的目录

    cp
    cp用来拷贝对象。例如要把file1拷贝到file2，用如下命令：
cp file1 file2

    dd
    dd命令用来转换文件格式。

    fg
    fg命令用来激活某个被挂起的进程并使它在前台运行。当有一个进程正在运行时，由于某种原因需要挂起它，在执行完其他任务后，需要重新把这一进程调到前台运行，这时便可用bg命令使这一进程继续运行。

    find
    find命令用来查找指定目录的文件。当找到后将按照用户的要求对文件进行处理。语法是：
    find 以它为起点进行搜索的目录 想要查找的文件名或元字符 对文件执行的操作

    grep
    grep命令用来在指定的对象中搜索指定的文本。语法是：grep〈text〉〈 file〉。它还可以和其他命令的结果联合使用，例如：
ps -ef|grep-v root
    这一命令要求grep接受ps命令的输出，并除去所有包含单词root的进程（-v 的含义是显示与文本不匹配的内容）。在不使用-v选项时，这一命令将显示进程 清单中所有包含单词root的进程。

    halt
    halt命令用来通知内核关闭系统，它是一个只能由超级用户执行的命令。

    hostname
    既可以用来显示系统当前的主机名或域名，也可用来设置系统的主机名。

    login
    当向系统注册时，将使用login。login命令也可用来随时从这一用户改变到另一用户。

    logout
    logout命令用来使当前用户从系统中注销。如果这是你使用的注册到系统的唯一用户，那么将退出系统。

    ls
    ls命令用来列出目录的内容，它的输出格式可通过选项来控制。没有任何选项的ls命令将按照字母顺序列出所有非隐藏文件，显示的列数以正好适合窗口的大小为准。最常用的一组选项是-la。这里a表示要列出所有的文件；l表示以长 格式列出，它使输出结果成为一个详细的长列表。

    more
    more是一个过滤程序，它可以每次一屏地翻阅文本文件的内容。这一命令只能对文件向下进行翻页。

    mount
    mount命令用来把特殊文件（通常是设备名）指定的文件系统安装在作为一个参数被指定的目录上。只有超级用户能够安装文件。如果在运行mount命令时不使用任何参数，它将列出当前被安装的所有文件系统。

    mv
    mv命令用来把某个对象从这一位置移动到另一位置。如果最后一个变量指定的是一个现有的目录，那么这一命令将把命令行中指定的所有文件移到这一目录中；如果给出的是两个文件，mv将把第一个文件移到第二个文件中。只有当最后 一个变量是一个目录时，mv命令的变量才可以超过两个。

    ps
    ps用来报告进程的状态，它将显示一张当前进程的快照。

    rm
    rm用来删除指定的文件。利用-r选项，rm将递归地删除文件（warning：危 险）。rm可与find命令联合使用，查找某一文件并删除它。在缺省的情况下，rm 命令不能删除目录。

    rmdir
    rmdir用来删除指定的空目录。语法是：
rm〈directory name〉

    umount
    umount命令用来卸载文件。语法是：
umount〈filename〉

    unalias
    unalias用来取消别名。如前面曾把dir设置为ls命令的别名，要取消它只须输入unalias dir即可。

    unzip
    unzip用来列出、检测或从某个zip文档中抽取文件，它的缺省用法是从文档中抽取文件。其基本语法是：
unzip〈filename〉

    who
    who命令用来显示当前注册到系统的每个用户的注册名、终端类型、注册时间和远程主机名。
    如果有两个非选项的参数传递给who命令，那么它将打印出正在运行此命令的用户的信息。
    如果想要查看某一对话所持续的时间，可利用-u选项。

    xset
    xset命令用来设置X Window环境中的一些选项，可利用它来设置响铃（xser b〈volume〉〈frequency〉〈duration in milliseconds〉）、鼠标速度（xset m〈acceleration〉〈threshold〉），以及其它参数。

    zip
    zip命令用来列出、检测或向某个zip文档中添加文件，它的缺省用法就是向某个文档中添加文件。

    如果我的这点东东还能帮你一点忙，我将十分的高兴，毕竟Linux是打破windws垄断的一个武器，不过若真要想对linux有更多的了解，你还要在电脑前呆他一段的时间！


-->Linux使用技巧集-->Linux下即插即用设备的安装

Linux下即插即用设备的安装
姓名 ：闫建勇
Email：
地址 ：
转摘 ：http://home.cpcw.com/netschool

    即插即用，在Linux底下？不好办，你还是换老的非即插即用设备吧。这是我初次接触Linux时，那些Linux高手们告诉我的。可是，我觉得总该有办法的。经过不懈的努力，我发现了两种方法。一是先从DOS启动，初始化设备后，再用loadlin加载到Linux中。但这不是我所梦寐以求的，因为每次需要大量时间来启动。我继续不停的寻找，终于有一天，我找到了我需要的东西，一个称为isapnptools的应用程序。

    现在，大多数发行套件中都有isapnptools。如果你的套件中有，安装它即可。如果你的发行套件中没有它，到http://www.roestock.demon.co.uk/isapnptools/ 去下载一份，解压后把isapnp 和 pnpdump 拷贝到目录 /sbin中即可。

    下面就是实战阶段了。需要准备的就是把你所有要装的即插即用设备全部装好，以ROOT身份登陆。然后运行以下命令/sbin/pnpdump > /etc/isapnp.conf，这会把你机器上所有的即插即用设备信息写入文件/etc/isapnp.conf中，下面是我的机器上的/etc/isapnp.conf文件的一部分：

# $Id: plugnplay.html,v 1.1.1.1 1998/12/26 04:41:14 jack Exp $

# This is free software, see the sources for details.

# This software has NO WARRANTY, use at your OWN RISK

#

# For details of this file format, see isapnp.conf(5)

#

# For latest information on isapnp and pnpdump see:

# http://www.roestock.demon.co.uk/isapnptools/

#

# Compiler flags: -DREALTIME -DNEEDSETSCHEDULER

#

# Trying port address 0203

# Board 1 has serial identifier c5 c0 7f 53 05 01 22 05 07

# Board 2 has serial identifier 5a 80 86 00 01 20 00 a8 65

# Board 3 has serial identifier e8 46 46 46 46 90 30 72 56

# (DEBUG)

(READPORT 0x0203)

(ISOLATE PRESERVE)

(IDENTIFY *)

(VERBOSITY 2)

(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING

# Card 1: (serial identifier c5 c0 7f 53 05 01 22 05 07)

# Vendor Id AXE2201, Serial Number 3229569797, checksum 0xC5.

# Version 1.0, Vendor version 0.0

# ANSI string -->Ethernet PnP ISA Card /S <--

#

# Logical device id AXE2201

# Device support I/O range check register

#

# Edit the entries below to uncomment out the configuration required.

# Note that only the first value of any range is given, this may be

# changed if required

# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE AXE2201/3229569797 (LD 0

# Compatible device id PNP80d6

# Logical device decodes 10 bit IO address lines

# Minimum IO base address 0x0240

# Maximum IO base address 0x0380

# IO base alignment 32 bytes

# Number of IO addresses required: 32

# (IO 0 (SIZE 32) (BASE 0x0240))

# IRQ 3, 5, 9, 10, 11, 12 or 15.

# High true, edge sensitive interrupt

# (INT 0 (IRQ 3 (MODE +E)))

# (ACT Y)

))

# End tag... Checksum 0x00 (OK)

# 略去声卡部分

＃略去modem卡部分

# Returns all cards to the "Wait for Key" state

(WAITFORKEY)

    我的系统中共有三个即插即用设备，分别是NE2000兼容网卡，Yamaha OPL～SA2声卡和一个USR 56K modem。由于文件太长，我略去了声卡和modem部分。

    接下来就是为每个设备分配所需资源。有许多方法可以实现。第一种，也是最简单的方法就是，如果你在同一台机器上也装了WIN95或WIN98，通过控制面板的系统的属性页，可以看到在WINDOWS系统下各即插即用设备的资源，记下用到Linux即可。如果你的机器中没有其它的操作系统，采用第二种方法。即手动分配资源，只要各设备资源不发生冲突就行。手动分配资源以前，最好先看一下已经使用的中断列表、I/O列列表，它们分别位于/proc/interrupts、/proc/ioports、/proc/dma。一旦你确定了各设备使用的资源，就可以分配了。

    选择分配给每个设备的资源非常简单。你只要去掉你的设备所需资源前的注释号即可。描述资源的行很容易找到，因为它们总是以INT, IO或 DMA开头。在这些行之前是你所能使用资源的描述。你可以选一组，因为象下面这样的一行说明它们有优先权的区别。

# Start dependent functions: priority preferred

    在去掉所需资源的注释号后，你还必须去掉(ACT Y)行上的注释号来告诉ISAPNP激活该设备。

    下面是我的/etc/isapnp.conf经过编辑并去掉注释行后的样本：

READPORT 0x0203)

(ISOLATE PRESERVE)

(IDENTIFY *)

(VERBOSITY 2)

(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING

(CONFIGURE AXE2201/3229569797 (LD 0

(IO 0 (SIZE 32) (BASE 0x0240))

(INT 0 (IRQ 3 (MODE +E)))

(ACT Y)

))

(CONFIGURE YMH0020/2156265473 (LD 0

(IO 0 (SIZE 16) (BASE 0x0220))

(IO 1 (SIZE 8) (BASE 0x0530))

(IO 2 (SIZE 4) (BASE 0x0388))

(IO 3 (SIZE 2) (BASE 0x0330))

(IO 4 (SIZE 2) (BASE 0x0370))

(INT 0 (IRQ 5 (MODE +E)))

(DMA 0 (CHANNEL 0))

(DMA 1 (CHANNEL 1))

(ACT Y)

))

(CONFIGURE YMH0020/2156265473 (LD 1

(IO 0 (SIZE 1) (BASE 0x0201))

(NAME "YMH0020/2156265473[1]{OPL3-SA2 Sound Chip }")

(ACT Y)

))

(CONFIGURE USR3090/1179010630 (LD 0

(IO 0 (SIZE 8) (BASE 0x02f8))

(INT 0 (IRQ 3 (MODE +E)))

(NAME "USR3090/1179010630[0]{U.S. Robotics 56K Voice INT}")

(ACT Y)

))

(WAITFORKEY)

    如果喜欢，留着其余的注释也行。下一步就是测试你的配置是否正确。使用以下命令/sbin/isapnp /etc/isapnp.conf，屏幕会出现一些信息，样本如下：

Board 1 has Identity c5 c0 7f 53 05 01 22 05 07: AXE2201

Serial No 3229569797 [checksum c5]

Board 2 has Identity 5a 80 86 00 01 20 00 a8 65: YMH0020

Serial No 2156265473 [checksum 5a]

Board 3 has Identity e8 46 46 46 46 90 30 72 56: USR3090

Serial No 1179010630 [checksum e8]

    如果你的配置文件有问题或发生资源冲突，它就会告诉你。发生问题不要着急，从头慢慢查找原因，一步一步再来。如果一切平安无事，你还必须保证你的即插即用设备在启动时能进行认证。不幸的是许多发行套件的初始脚本执行方式不同。如果你的发行套件中有isapnptools的话，可能你已经有正确的初始脚本。如果没有，仿照/etc/rc.d/init.d中的格式，自己写一个。

    最后一步是让你的内核支持即插即用设备。目前，内核支持isapnp设置的即插即用设备的唯一方法是把它们编译为模块。所以，对每一个被认为是即插即用的设备，确信把它编译为内核支持的模块。

    好了，不用再为你的新的设备不能被Linux接受而烦恼了，去尽情享受Linux带给你的乐趣吧。


-->Linux使用技巧集-->RedHatLinux用户管理经验点滴

RedHatLinux用户管理经验点滴
姓名 ：周迪
Email：
地址 ：
转摘 ：www.ccidnet.com

    RedHat Linux是众多Linux发行版本中较流行的一个。这里结合笔者的使用经验谈谈在RedHat Linux下的用户管理。笔者使用的是RedHat 5.1发行版，核心版本2.2.11，如不作特别说明，下面的操作都是在root 账户下完成的。

    为普通用户和用户组加入磁盘配额限制

    Linux的quota程序允许为系统上每一用户或用户组指定所能使用的磁盘配额。目前quota仅能工作在ext2类型的文件系统上。使用quota需要确定以下两点：

    1当前的系统核心支持quota。

    2系统已正确安装quota程序包。

    如果你当前的系统核心不支持quota,请重新编译你的核心，当系统提示：

    Quota support(CONFIG—QUOTA)[n]

    回答y ，生成新的系统核心。

    如果没有quota程序包，请到以下地址下载quota的源程序并编译之。

    ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz

    一般Linux的发行版本的核心都缺省包含了quota支持，也附带了quota 程序包，只需安装quota 并加以设置便可让quota工作。

    quota的具体设置步骤：

    1．编辑系统初始脚本（RedHat是/etc/rc.d/rc.sysinit，别的发行版可能有所不同）让它检查quota并激活quota。

    ＃ Check quota and then turn quota on.

    if [ －x /usr/sbin/quotacheck ]

    then

     echo ″Checking quotas. This may take some time.″

     /usr/sbin/quotacheck －avug

     echo ″Done.″

     fi

     if [ －x /usr/sbin/quotaon ]

     then

         echo ″Turning on quota.″

         /usr/sbin/quotaon －avug

     fi

    在RedHat 5.1版的/etc/rc.d/rc.sysinit文件中已包含了以上语句，请检查你自己的系统初始脚本文件，没有就加上。注意必须让其在/etc/fstab。

    2．编辑 /etc/fstab。你的 /etc/fstab 文件可能会是这样的：

    /dev/hda1 /　　 ext2 defaults 1 1

    /dev/hda2 /home ext2 defaults 1 1

    选择用户所在分区所在行的第四个域，为用户加入 quota支持，如下：

    /dev/hda1 /　　 ext2 defaults 1 1

    /dev/hda2 /home ext2 defaults,usrquota 1 1

    如为用户组加入quota支持，可将usrquota替换为grpquota。

    如两者兼而有之，可将这两项一并写入，如下：

         /dev/hda1 /　　 ext2 defaults 1 1

     /dev/hda2 /home ext2 defaults,usrquota,grpquota 1 1

    3．建立quota记录文件quota.user和quota.group。进入用户所在分区根目录，如上例中打入cd /home即可，按下面命令建立文件：

    touch quota.user

    touch quota.group

    chmod 600 quota.user quota.group

    完成上面几步以后，重新启动计算机以使设置生效。

    4．为用户或用户组设置磁盘配额限制。假设在你的系统上有一名为bob 的用户，现在想给他10MB的硬盘配额限制，他所拥有的最大文件数不得超过100个。执行edquota －u dquo,系统将进入编辑环境(具体编辑环境视editor变量设置而定)，将如下三行：

    Quotas for user bob:

    /dev/hda2: blocks in use: 14, limits (soft=0, hard=0)

    inodes in use: 12, limits (soft=0, hard=0)

    改为：

    Quotas for user bob:

    /dev/hda2: blocks in use: 14, limits (soft=0, hard=10240)

    inodes in use: 12, limits (soft=0, hard=100)

    其中：

    blocks in use：用户已使用块的大小，单位是kB。

    inodes in use：用户现有文件的大小。

    这两项都是系统自动给出，不必改动。

    软限制（soft limits）

    通常设置软限制为一接近硬限制的值，超越此限制时，系统将警告用户将到达最大磁盘配额限制。软限制为0 时没有软限制。结合宽限期使用时，只要用户超越了软限制，一过宽限期，任何对磁盘空间的额外需求将被立即拒绝。

    硬限制（hard limits）

    磁盘配额的绝对限制，设置了quota的用户不能超越此限制。

    宽限期（Grace Period）

    宽限期是用户超越了软限制而没有到达硬限制时的一段放宽期，在这段时间内，用户可以在硬限制范围内自由地使用磁盘空间，超过这段时间，所有对磁盘空间的额外需求将被拒绝，即使用户还在硬限制之内。宽限期的单位可以是秒、分、时、天。执行edquota －t命令设置宽限期。执行该命令后，将系统提示中的两个0 days 改成你认为合适的值即可。

    有时想给一批用户加上同样的限制，比方说，给系统上所有100个用户加上与bob同样的限制，可手工先给bob加上限制，然后执行下面命令：

    edquota －p bob ′awk －F: ′＄3 > 499 {print ＄1}′/etc/passwd′

    给用户组设置磁盘配额限制与普通用户类似，假设有一用户组game,执行 edquota －g game即可。

    控制用户的登录地点

    文件/etc/secruity/access.conf可控制用户登录地点，为了使用access.conf，必须在文件/etc/pam.d/login中加入下面行：

    account required /lib/security/pam—access.so

    access.conf文件的格式：

    permission : users : origins

    其中：

    permission：可以是 “＋”或“－”，表示允许或拒绝。

    user：可以是用户名、用户组名，如果是all则表示所有用户。

    origins：登录地点。local表示本地，all表示所有地点，console表示控制台。另外，origins也可以是某一网络。

    后面两个域中加上 except是“除了”的意思。例如：除了用户wheel、shutdown、sync禁止所有的控制台登录：

    －:ALL EXCEPT wheel shutdown sync:console

    root账户的登录地点不在access.conf文件中控制，而是由/etc/securetty文件控制，具体作法一看便知。

    限制用户每次所发邮件大小

    Linux系统使用sendmail发送邮件，配置文件是/etc/sendmail.cf，缺省使用TCP/IP协议。我们的Linux机器上往往会有多个用户同时工作，或者干脆就用它作邮件服务器，在同一时刻，系统可能要收发很多邮件，因此不能让某一用户过多地占用sendmail的时间。sendmail的缺省配置对每次收发邮件的大小没有限制，更改配置文件/etc/sendmail.cf，找到O MaxMessageSize，去掉行首的＃号，并将其后的数值改为一合适的数值，单位为字节。如：

    O MaxMessageSize = 1048576

    意为每次收发邮件最大为1MB，任何超过这个值的邮件将被拒绝。


-->Linux使用技巧集-->如何编译Linux的内核

如何编译Linux的内核
姓名 ：张子波
Email：
地址 ：
转摘 ：www.ccidnet.com

    内核，是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统，决定着系统的性能和稳定性。Linux作为一个自由软件，在广大爱好者的支持下，内核版本不断更新。新的内核修订了旧内核的bug，并增加了许多新的特性。如果用户想要使用这些新特性，或想根据自己的系统度身定制一个更高效，更稳定的内核，就需要重新编译内核。本文将以RedHat Linux 6.0（kernel 2.2.5）为操作系统平台，介绍在Linux上进行内核编译的方法。

    一、 下载新内核的源代码

    目前，在Internet上提供Linux源代码的站点有很多，读者可以选择一个速度较快的站点下载。笔者是从站点www.kernelnotes.org上下载了Linux的最新开发版内核2.3.14的源代码，全部代码被压缩到一个名叫Linux-2.3.14.tar.gz的文件中。

    二、 释放内核源代码

    由于源代码放在一个压缩文件中，因此在配置内核之前，要先将源代码释放到指定的目录下。首先以root帐号登录，然后进入/usr/src子目录。如果用户在安装Linux时，安装了内核的源代码，则会发现一个linux-2.2.5的子目录。该目录下存放着内核2.2.5的源代码。此外，还会发现一个指向该目录的链接linux。删除该连接，然后将新内核的源文件拷贝到/usr/src目录中。

    （一）、用tar命令释放内核源代码

    # cd /usr/src

    # tar zxvf Linux-2.3.14.tar.gz

    文件释放成功后，在/usr/src目录下会生成一个linux子目录。其中包含了内核2.3.14的全部源代码。

    （二）、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。

    # cd /usr/include

    # rm -Rf asm linux

    # ln -s /usr/src/linux/include/asm-i386 asm

    # ln -s /usr/src/linux/include/linux linux

    # ln -s /usr/src/linux/include/scsi scsi

    （三）、删除源代码目录中残留的.o文件和其它从属文件。

    # cd /usr/src/linux

    # make mrproper

    三、 配置内核

    （一）、启动内核配置程序。

    # cd /usr/src/linux

    # make config

    除了上面的命令，用户还可以使用make menuconfig命令启动一个菜单模式的配置界面。如果用户安装了X window系统，还可以执行make xconfig命令启动X window下的内核配置程序。

    （二）、配置内核

    Linux的内核配置程序提供了一系列配置选项。对于每一个配置选项，用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核；"m"表示将相应特性的支持或设备驱动程序编译成可加载模块，在需要时，可由系统或用户自行加入到内核中去；"n"表示内核不提供相应特性或驱动程序的支持。由于内核的配置选项非常多，本文只介绍一些比较重要的选项。

    1、Code maturity level options（代码成熟度选项）

    Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [N/y/?] 如果用户想要使用还处于测试阶段的代码或驱动，可以选择“y”。如果想编译出一个稳定的内核，则要选择“n”。

    1、 Processor type and features（处理器类型和特色）

    （1）、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 选择处理器类型，缺省为Ppro/6x86MX。

    （2）、Maximum Physical Memory (1GB, 2GB) [1GB] 内核支持的最大内存数，缺省为1G。

    （3）、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 协处理器仿真，缺省为不仿真。

    （4）、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]

    选择该选项，系统将生成/proc/mtrr文件对MTRR进行管理，供X server使用。

    （5）、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 选择“y”，内核将支持对称多处理器。

    2、 Loadable module support（可加载模块支持）

    （1）、Enable loadable module support (CONFIG_MODULES) [Y/n/?] 选择“y”，内核将支持加载模块。

    （2）、Kernel module loader (CONFIG_KMOD) [N/y/?] 选择“y”，内核将自动加载那些可加载模块，否则需要用户手工加载。

    3、 General setup（一般设置）

    （1）、Networking support (CONFIG_NET) [Y/n/?] 该选项设置是否在内核中提供网络支持。

    （2）、PCI support (CONFIG_PCI) [Y/n/?] 该选项设置是否在内核中提供PCI支持。

    （3）、PCI access mode (BIOS, Direct, Any) [Any] 该选项设置Linux探测PCI设备的方式。选择“BIOS”，Linux将使用BIOS；选择“Direct”，Linux将不通过BIOS；选择“Any”，Linux将直接探测PCI设备，如果失败，再使用BIOS。

    （4）Parallel port support (CONFIG_PARPORT) [N/y/m/?] 选择“y”，内核将支持平行口。

    4、 Plug and Play configuration（即插即用设备支持）

    （1）、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 选择“y”，内核将自动配置即插即用设备。

    （2）、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 选择“y”，内核将自动配置基于ISA总线的即插即用设备。

    5、 Block devices（块设备）

    （1）、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 选择“y”，内核将提供对软盘的支持。

    （2）、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 选择“y”，内核将提供对增强IDE硬盘、CDROM和磁带机的支持。

    6、 Networking options（网络选项）

    （1）、Packet socket (CONFIG_PACKET) [Y/m/n/?] 选择“y”，一些应用程序将使用Packet协议直接同网络设备通讯，而不通过内核中的其它中介协议。

    （2）、Network firewalls (CONFIG_FIREWALL) [N/y/?] 选择“y”，内核将支持防火墙。

    （3）、TCP/IP networking (CONFIG_INET) [Y/n/?] 选择“y”，内核将支持TCP/IP协议。

    （4）The IPX protocol (CONFIG_IPX) [N/y/m/?] 选择“y”，内核将支持IPX协议。

    （5）、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 选择“y”，内核将支持Appletalk DDP协议。

    8、SCSI support（SCSI支持）

    如果用户要使用SCSI设备，可配置相应选项。

    9、Network device support（网络设备支持）

    Network device support (CONFIG_NETDEVICES) [Y/n/?] 选择“y”，内核将提供对网络驱动程序的支持。

    10、Ethernet (10 or 100Mbit)（10M或100M以太网）

    在该项设置中，系统提供了许多网卡驱动程序，用户只要选择自己的网卡驱动就可以了。此外，用户还可以根据需要，在内核中加入对FDDI、PPP、SLIP和无线LAN（Wireless LAN）的支持。

    11、Character devices（字符设备）

    （1）、Virtual terminal (CONFIG_VT) [Y/n/?] 选择“y”，内核将支持虚拟终端。

    （2）、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]

    选择“y”，内核可将一个虚拟终端用作系统控制台。

    （3）、Standard/generic (dumb) serial support (CONFIG_SERIAL) [Y/m/n/?]

    选择“y”，内核将支持串行口。

    （4）、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]

    选择“y”，内核可将一个串行口用作系统控制台。

    12、Mice（鼠标）

    PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?] 如果用户使用的是PS/2鼠标，则该选项应该选择“y”。

    13、Filesystems（文件系统）

    （1）、Quota support (CONFIG_QUOTA) [N/y/?] 选择“y”，内核将支持磁盘限额。

    （2）、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 选择“y”，内核将提供对automounter的支持，使系统在启动时自动 mount远程文件系统。

    （3）、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 选择“y”，内核将支持DOS FAT文件系统。

    （4）、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]

    选择“y”，内核将支持ISO 9660 CDROM文件系统。

    （5）、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]

    选择“y”，用户就可以以只读方式访问NTFS文件系统。

    （6）、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系统运行状态的虚拟文件系统，该项必须选择“y”。

    （7）、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的标准文件系统，该项也必须选择“y”。

    14、Network File Systems（网络文件系统）

    （1）、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 选择“y”，内核将支持NFS文件系统。

    （2）、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)

    选择“y”，内核将支持SMB文件系统。

    （3）、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)

    选择“y”，内核将支持NCP文件系统。

    15、Partition Types（分区类型）

    该选项支持一些不太常用的分区类型，用户如果需要，在相应的选项上选择“y”即可。

    16、Console drivers（控制台驱动）

    VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 选择“y”，用户就可以在标准的VGA显示方式下使用Linux了。

    17、Sound（声音）

    Sound card support (CONFIG_SOUND) [N/y/m/?] 选择“y”，内核就可提供对声卡的支持。

    18、Kernel hacking（内核监视）

    Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 选择“y”，用户就可以对系统进行部分控制。一般情况下选择“n”。

    四、 编译内核

    （一）、建立编译时所需的从属文件

    # cd /usr/src/linux

    # make dep

    （二）、清除内核编译的目标文件

    # make clean

    （三）、编译内核

    # make zImage

    内核编译成功后，会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件zImage。如果编译的内核很大的话，系统会提示你使用make bzImage命令来编译。这时，编译程序就会生成一个名叫bzImage的内核映像文件。

    （四）、编译可加载模块

    如果用户在配置内核时设置了可加载模块，则需要对这些模块进行编译，以便将来使用insmod命令进行加载。

    # make modules

    # make modelus_install

    编译成功后，系统会在/lib/modules目录下生成一个2.3.14子目录，里面存放着新内核的所有可加载模块。

    五、 启动新内核

    （一）、将新内核和System.map文件拷贝到/boot目录下

    # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14

    # cp /usr/src/linux/System.map /boot/System.map-2.3.14

    # cd /boot

    # rm -f System.map

    # ln -s System.map-2.3.14 System.map

    （二）、配置/etc/lilo.conf文件。在该文件中加入下面几行：

    default=linux-2.3.14

    image=/boot/vmlinuz-2.3.14

    label=linux-2.3.14

    root=/dev/hda1

    read-only

    （三）、使新配置生效

    # /sbin/lilo

    （四）、重新启动系统

    # /sbin/reboot

    新内核如果不能正常启动，用户可以在LILO:提示符下启动旧内核。然后查出故障原因，重新编译新内核即可。


-->Linux使用技巧集-->对RedHat系统的一些概括性描述

对RedHat系统的一些概括性描述
姓名 ：
Email：
地址 ：
转摘 ：http://linux.wuxi.net.cn/

RedHat使用RPM作为软件组织方式, 其启动风格是SYSV的. 我在这里
就我所理解的东东作一个描述.

1. 启动
------

在/etc/rc.d/--有下列目录rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
init.d
还有下列文件
rc rc.local rc.sysinit

rcn.d (n为1到6) 是对应于不同的runlevel下起不同的服务. 这些目录下都
是一些符号连接, 连接到init.d下的一些文件.以S开头的表示要启动, 以K开头的不启动.
第一个字母后面的数值是一个优先级, 这个优先级是用chkconfig来维护的. init.d下
的每一个文件都有类似下面的话:

# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.

看有chkconfig的那一行, 2345表示在runlevel 2 3 4 5下被启动, 20 80 是优先级
20为启动, 80为关闭. 即在rc3.d你可能看到 S20 或 K80. Redhat下的setup也是用
它处理的. 你可以再参考一下man chkconfig. 有一点注意, 优先即是一个两位数.

RedHat下启动网络一定要启动network的服务, 该服务会执行
/etc/sysconfig/network, 并用ifup加载所有的/etc/sysconfig/network-script
下定义的网卡. 注意, 在缺省配置中这些定义文件名中不可以有'.' 象ipforward这样的定义
也是在它中完成的. 你可以看看它的源文件. 它还定义了一个重要的变量$NETWORK, 其他的所
有网络服务都通过检查该变量来决定是否启动.

另外的三个文件是这样的

先执行rc.sysinit 完成了包括mount分区 激活swap 加载modules等重要的工作.
再执行rc.local 完成一些本地的处理, 缺省情况下, 它几乎什么都没作.
最后是执行rc 启动所有的服务.

2. 文档
------

最常用的是man手册, 在/usr/doc下有一些HOWTO, 和一些软件的文档. 实际上最
方便的是info系统, 如果你没用过的话, 执行一下info. 看一看热键的帮助. 里面的文档非常
多. 许多的软件的说明文件有多种格式, text-info是很普通的, 特别是在一些大的软件中.
你可以使用 install-info 命令来安装新的text-info文件. 另一种比较通用的格式是SGML,
它可以被方便的转化为其他格式的文件 如:html info lyx latex txt rtf.

tex和latex也是一种比较通用的格式, 他们最终被处理成dvi文件来观看.
ps(postscript)使用gv(ghostview)来观看.
pdf 使用xpdf或acroread来看, xpdf的速度要快一些, 但对新的pdf格式不支持.
这三种格式主要是图形格式, 分辨率比较高. 但大部分的说明是纯文本的, 这时, info
是最爽的.

3. 关闭
------
halt reboot shutdown Ctrl_Alt_Del这三个命令都完成了那些工作?
它们同属于SysVinit包. reboot是一个连向halt的符号连接.

我这里讲的是RedHat 6.0所带的SysVinit2.74.

先说明几个小问题:
runlevel是从wtmp中找到的. 在启动时, 由init写入.
runlevel 0 是 halt mode,
1 是 single mode or maintenance mode
6 是 reboot mode.

halt(reboot)
如果系统的runlevel不是0或6, halt会exec shutwon -h,
而reboot会exec shutdown -r.
主要的工作都是由shutdown来完成的. halt的参数都被整理后
发到shutdown(exec时的参数).

shutdown
大部分代码用于处理参数等等, 核心工作是由shutdown来完成的.
shutdown主要是调用execv init来修改runlevel. 它也完成
下列工作: warn 系统上的每一个用户. 处理几个文件:
/etc/nologin
/fastboot
/forcefsck
参数-n, 这是, 它自己来完成所有的工作, 而不调用init.

Ctrl-Alt-Del实际上是由init进程直接处理的, 它通知kernel将
Ctrl-Alt-Del信号转化为SIGINT发到它.

4. 口令的长度和加密算法
-------------------
北极星书库||http://www.ebook007.com

很多人在说Linux使用了DES加密算法, 最多只能用8个字符的口令. 但这是不对的,
Linux的认证都是透过pam来作的, 它使用了两种算法 bigcrypt和md5, 前一种支持到128个字
符, 后一种是无限长. 事实上在UNIX中只需要一种单向的算法即可, 它并不需要一种可以加密解
密的算法. RedHat中用setup来修改级认证机制时, 它只修改了三个文件
/etc/pam.d/login
/etc/pam.d/rlogin
/etc/pam.d/passwd
中的一行:
passwd /lib/security/pam_pwdb.so shadow md5
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pam中的auth并不需要这样的设置, 它会根据crypted passwd中的salt来判断是那一种算法,
因此文件中两种算法是可以并存的,
cat /etc/shadow
friday:$1$I92CumQb$I./BJehrqEKIUX9vNmZcL/:10832:0:99999:7:-1:-1:134538420
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
md5以$1$开头, 其salt为$1$I92CumQb$.

5. Shadow 和 Unshadow

将当前的passwd状态在两种格式之间转换, 可以用下列命令来完成.
pwconv
unpwdconv

不过, 我实在看不出后者有什么用.

6. make install
在你安装软件的最后一步往往是make install.
这时, 通常有两种做法:
1. cp execfile /usr/bin/execfile
2. 使用 install 命令 如:
install execfile /usr/bin/execfile

事实上, 后一种更广泛. 它有一些参数可以设定文件的属主, 文件的模
式等.

7. vi 中的颜色
------------
在~/.exrc加入下面一行
syntax on

8. Xemacs 的中文环境
Emacs使用Mule来处理多国语言.
如果你已经安装好了带Mule的Xemacs. 在你的~/.emacs 加入如下一行.
(setup-chinese-gb-environment)
这样, 每次启动会自动的设制成中文环境.


-->Linux使用技巧集-->Linux系统的简介及安装过程

Linux系统的简介及安装过程
姓名 ：
Email：
地址 ：
转摘 ：http://linux.wuxi.net.cn/

如何安装Linux

准 备 开 机 磁 片

   在 安 装 Slackware 之 前 必 须 准 备 两 片 磁 碟 片 ， 一 片 是 boot disk 放 开 机 及 核 心 程 式 ， 一 片 是 root disk 放 基 本 的 系 统 程 式 。 基 於 记 忆 体 使 用 上 的 考 量 ， 不 同 的 boot disk 所 支 援 的 硬 体 各 不 相 同 ， 必 须 根 据 自 己 的 配 备 加 以 选 择 。 在 使 用 boot disk 开 机 後 ， 会 看 到 一 小 段 介 绍 ， 跟 著 出 现 boot : 等 您 输 入 指 令 。 如 果 root disk 和 boot disk 放 在 同 一 台 磁 碟 机 上 ， 直 接 按 enter 即 可 开 始 载 入 系 统 核 心 。 如 果 想 把 root disk 放 在 另 一 台 磁 碟 机 上 ， 则 键 入 drive2 即 可 在 系 统 核 心 载 入 後 ， 从 另 一 磁 碟 机 读 入 系 统 程 式 。

Slackware 目前提供的 boot disk bare 只支援IDE硬碟
cdu31a IDE + SCSI + CDU31/33a CD-ROM
cdu535 IDE + SCSI + CDU531/535 CD-ROM
loaded 几乎支援所有您的硬体配备?
mitsumi IDE + SCSI + Mitsumi CD-ROM
old1118 旧 1.1.18 核心程式
nec260 IDE + SCSI + NEC 260 ( IDE CD-ROM )
net IDE + ethernet ( 用於NFS安装 )
sbpcd IDE + SCSI + SB Pro/Panasonic CDROM
scsi IDE + SCSI + SCSI CD-ROM
scsinet IDE + SCSI + SCSI CD-ROM + ethernet
xt IDE + XT HD
如 果 您 是 从 CD - ROM 安 装 ， 则 所 使 用 的 boot disk 必 须 同 时 支 援 CD-ROM 驱 动 程 式 及 ISO9660 档 案 系 统 。
net 系 列 的 boot disk 似 乎 不 支 援 ISO9660 的 档 案 系 统 ， 所 以 即 使 侦 测 到 您 的 光 碟 机 ， 还 是 不 能 从 CD-ROM 安 装 。
Slackware目前提供的root disk color 144 : 全 萤 幕 彩 色 安 装 程 式 。
umsds 144 : 将 linux 放 进 DOS 的 一 个 目 录 内 。
tty 144 : 单 色 交 谈 式 的 安 装 程 式 。
tape 144 : 支 援 从 磁 带 安 装 。
如 果 您 拿 到 的 是 .gz 档 , 必 须 先 用 gzip -d *.gz 解 压 缩 ， 再 用 rawrite 程 式 将 磁 片 影 像 档 写 到 软 碟 上 。

制作安装磁片 D:\SLACKWAR\BOOTDSKS.144>..\rawrite
RaWrite 1.2 - Write disk file to raw floppy diskette
Enter source file name: scsi 欲制作系统磁片之档名
Enter destination drive: a 欲制作系统磁片至A碟或B碟
Please insert a formatted diskette into drive A: and press -ENTER- 将磁片放置磁碟机
Number of sectors per track for this disk is 18
Writing image to drive A:. Press ^C to abort.
Track: 79 Head: 1 Sector: 16
Done.
Linux 系统安装磁片制作法如下:
先搜询上述目录寻得下列档案拷贝至硬碟一暂存区.
BARE
color144.gz
rawrite.exe
再来将 formated 贴有 boot 磁片放入磁碟机
执行 rawrite .
Enter source file name:idecd
Enter destination drive:a:

再来将 formated 贴有 root 磁片放入磁碟机
执行 rawrite .

Enter source file name:color144
Enter destination drive:a:

接下来您就可以抛弃 DOS 系统了.
请您现在以 boot 片开机 , 开机後会停留在 boot:
这时请您按 Enter 继续..再等到它出现
VFS: Insert ramdisk floppy and press Enter 请您换入 root 片按 Enter 继续..
等到系统出现
slackware login:
这时请您输入 root 即可进入系统 , 这时您就可以进行下一步进行硬碟分割动作.
分配硬碟空间给linux
DOS 是 用 fdisk 程 式 来 分 配 硬 碟 空 间 ， linux 所 使 用 的 程 式 也 叫 fdisk ， 只 不 过 在 操 作 上 有 些 差 异 。 下 面 说 明 linux 的 fdisk 操 作 方 式 ：
  下fdisk指令後可看到下面的画面：
# fdisk
Using /dev/hda as default device!
Command (m for help):

   在 这 □ fdisk 以 /dev/hda 为 编 辑 的 对 象 ， 也 就 是 IDE 的 第 一 部 硬 碟 ， 如 果 要 把 linux 放 在 其 他 硬 碟 ， 或 修 改 其 他 硬 碟 分 配 情 形 ， 可 在 fdisk 指 令 後 加 上 该 硬 碟 的 device name， 如 IDE 的 第 二 部 硬 碟 为 /dev/hdb， 第 三 部 为 /dev/hdc ， 以 此 类 推 。 SCSI 则 是 /dev/sda 、 /dev/sdb 。
＊把linux放在第二部IDE硬碟，fdisk /dev/hdb
＊ 把linux放在第二部SCSI硬碟，fdisk /dev/sdb

   进 入 fdisk 後，用m 指 令 可 以 得 到 一 份 指 令 列 表 。
Command (m for help): m

Command action

a toggle a bootable flag 将active的partition，设为非active
c toggle the dos compatiblity flag
d delete a partition 删除一笔partition记录
l list known partition types 列出本程程式所能辨认的partition代码
m print this menu 列出可用的指令
n add a new partition 新增一笔partition记录
p print the partition table 列出目前在硬碟上的partition记录
q quit without saving changes 离开本程式而不更动partition内容
t change a partition's system id 修改某一个partition的类别
u change display/entry units 改变硬碟资料的显示方式
v verify the partition table 查核partition记录
w write table to disk and exit 将partition写入硬碟
x extra functionality (experts only) 一些较低阶的编辑功能
以下是增加一个linux partition及一个swap partition过程：
１．　查看目前硬碟分配情形

Command (m for help): p

Disk /dev/hda: 16 heads, 63 sectors, 826 cylinders
Units = cylinders of 1008 * 512 bytes

Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 53 26680+ 4 DOS 16-bit <32M
/dev/hda2 54 54 521 235872 83 Linux native

========>> 以建立的linux partition ２．　加入新的linux partition

Command (m for help): n

Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (522-826): 522
Last cylinder or +size or +sizeM or +sizeK (522-826): +8M

Command (m for help): p

Disk /dev/hda: 16 heads, 63 sectors, 826 cylinders
Units = cylinders of 1008 * 512 bytes

Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 53 26680+ 4 DOS 16-bit <32M
/dev/hda2 54 54 521 235872 83 Linux native
/dev/hda3 522 522 538 8568 83 Linux native

上 面 是 新 增 一 个 8 Mega 的 partition ， 由 於 这 个 partition 是 用 来 作 swap 用 ， 而 linux fdisk 对 新 增 的 partition 一 律 假 定 为 linux native ( type 0x83 ) ，所 以 必 须 再 将 这 个 partition 改 为 linux swap (type 0x82) ， 方 法 如 下 ：

Command (m for help): t

Partition number (1-4): 3
Hex code (type L to list codes): 82
Changed system type of partition 3 to 82 (Linux swap)

Command (m for help): p

Disk /dev/hda: 16 heads, 63 sectors, 826 cylinders
Units = cylinders of 1008 * 512 bytes

Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 53 26680+ 4 DOS 16-bit <32M
/dev/hda2 54 54 521 235872 83 Linux native
/dev/hda3 522 522 538 8568 82 Linux swap

现在要继续新增一个存放linux档案系统的partition，在这□是将
剩馀空间全分配给linux：

Command (m for help): n

Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 4
First cylinder (539-826): 539
Last cylinder or +size or +sizeM or +sizeK (539-826): 826

Command (m for help): p

Disk /dev/hda: 16 heads, 63 sectors, 826 cylinders
Units = cylinders of 1008 * 512 bytes

Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 53 26680+ 4 DOS 16-bit <32M
/dev/hda2 54 54 521 235872 83 Linux native
/dev/hda3 522 522 538 8568 82 Linux swap
/dev/hda3 522 522 538 8568 82 Linux swap

Command (m for help): wq <- w: 储存 q: 结束跳出

接下来您可以输入刚刚系统所提示的 setup 指令了.
setup menu 指令说明如下:

1. HELP Read the Slackware Setup HELP file 阅读线上安装说明
2. KEYMAP Remap your keyboard if you're not using a US one 更改键盘排列
3. QUICK Choose quick or verbose install mode [ now: VERBOSE ] 快速安装模式
4. MAKE TAGS Experts may customize tagfiles to preselect packages 改变软体内键安装选项
5. ADDSWAP Set up your swap partition(s) 设定交换分割区
6. TARGET Set up your target partions 设定要目标分割区
7. SOURCE Select source media 选择来源媒体
8. DISK SETS Decide which disk sets you wish to install 选择欲安装套件
9. INSTALL Install selected disk sets 开始安装已选套件
10. CONFIGURE Reconfigure your Linux system 设定 Linux 系统
11. .EXIT Exit Slackware Linux Setup 结束设定

其 实 您 只 须 将 游 标 移 至 第 5 项 , 按 enter 则 它 会 从 5 - 10 依 序 执 行 不 用 您 操 心 喔 !
选 ADDSWAP 按 enter 後 , 则 出 现 Do you wish to install this as your swap partition?
如 您 确 定 device 无 误 则 YES 继 续 , 接 下 来 是 MKSWAP WARNING 可 不 理 它 按 enter 继 续 , USE MKSWAP 也 是 选 YES 过 关 , ACTIVATE SWAP SPACE ? 这 项 也 请 选 YES 让 系 统 帮 您 规 划 swap , SWAP SPACE CONFIGURED 设 为 开 机 即 挂 上 swap 区 , 下 一 页 您 该 不 会 灰 心 了 按 No 离 开 吧 ?
Using this partition for Linux 只 是 让 您 再 次 确 定 罢 了 . 接 下 来 的 FORMAT PARTITION 建 议 您 选 Check 项 , 虽 稍 慢 点 不 过 保 险 一 点 喔 ..
下 一 项 为 SELECT INODE DENSITY 用 DEFAULT 即 可 , 再 按 个 enter 您 就 可 选 择 来 源 媒 体 , 再 来 因 来 源 不 同 请 自 行 设 定 .
接 著 介 绍 Pick your installation method 选 择 安 装 方 式 , 选 custom .
再 来 是 您 得 告 诉 它 来 源 目 录 , 例 /linux/slack ; 接 著 是 SERIES SELECTION 选 择 您 想 安 装 的 套 件 , 我 是 除 了 CUS 没 选 外 其 馀 全 选 , 选 完 後 是 SELECT PROMPTING MODE 选 择 安 装 提 示 模 式 , 我 选 None 自 动 安 装 别 来 烦 我 . 接 著 您 可 以 休 息 一 下 下 了 等 它 装 完 再 继 续 罗 !

接 下 来 是 设 定 您 的 系 统 罗 !
如 您 须 要 制 作 boot disk 请 您 选 YES , 这 里 的 BOOT DISK 是 此 版 的 正 式 可 开 机 磁 片 而 不 是 安 装 系 统 用 的 boot disk 别 弄 错 了 喔 ..
接 著 是 modem & mouse 您 接 那 个 port 别 设 错 了 ,
SCREEN FONT CONFIGURATION 字 形 您 想 更 改 的 话 请 选 yes ;
FTAPE 请 选 NO 假 如 没 磁 带 机 的 话 ,
modem speed 38400 这 是 此 地 能 设 的 最 高 速 的 了

接 下 来 是 设 定 lilo 多 重 开 机 程 式 . 程 序 是 Begin -> Linux -> Install .
再 来 设 定 NETWORK , Enter Hostname 如 您 是 内 部 网 路 使 用 您 可 任 意 设 , 如 有 连 InterNet 的 那 就 设 您 注 册 的 HOST name 即 可 , DOMAINNAME 也 同 上 . LOOPBACK ONLY ? 如 有 正 式 的 class c ip 此 项 请 选 no , 如 玩 玩 的 选 YES 就 很 好 用 了 . 如 选 no 的 您 还 须 设 定 下 列 东 东 . local ip address , gateway ip address , netmask , nameserver ip.
接 下 来是 GPM CONFIGURATION 这 是 一 个 滑 鼠 剪 贴 功 能 , 随 您 用 不 用 罗 !
sendmail configuration 请 选 SMTP + BIND , TIMEZONE 请 选 ROC .
您 系 统 现 在 是不 是 又 回 到 setup menu 了 , 那 恭 喜 您 ! 您 可 以 按 ctrl+alt+del 重新开机罗..
如此您已经完成 Linux 系统的安装工作了....
重新开机後如一切正常那您可以进行下一步骤 : 更新 Linux 核心

-------------------
北极星书库||http://www.ebook007.com
更新Linux核心
set up 六 程 序 Slackware Linux 的 安 装 可 以 大 略 分 解 为 五 个 步 骤 以 下 这 五 个 步 骤 可 以 是 连 贯 动 作 , 但也可以 个 别 独 立 操 作 。
1 . 启 动 SWAP PARTITION 除 非 您 硬 碟 内 已 经 没 有 可 用 的 分 割 区 , 最 好 您 第 一 个 步 骤 就 要 先 设 置 SWAP PARTITION , 让 系 统 所 需 要 的 虚 拟 记 忆 体 立 刻 生 效 , 这 对 记 忆 体 很 小 的 机 器 尤 其 重 要 , 否 则 您 甚 至 可 能 没 有 办 法 继 续 进 行 安 装 工 作 。
2 . 指 定 安 装 目 的 分 割 区 (Target) 第 二 个 步 骤 , 就 是 告 诉 系 统 安 装 程 式 , 究 竟 您 想 把 系 统 安 装 到 哪 一 个 ( 或 者 哪 几 个 ) 硬 碟 分 割 区 。 实 际 执 行 这 步 骤 时 , 您 只 需 要 把 游 标 移 到 萤 幕 上 的 SOURCE 选 项 , 按 下 键 , 之 後 回 答 一 些 问 题 。
3 . 指 定 安 装 来 源 (Source) 您 首 先 要 告 诉 安 装 程 式 , 您 究 竟 想 用 什 麽 方 式 安 装 , 比 方 磁 片 、 硬 碟 、 CD- ROM 、 网 路 远 端 一 部 NFS server 或 磁 带 等 等 , 这 就 是 安 装 来 源 。 实 际 执 行 操 作 时 , 您 可 以 在 刚 刚 指 定 Target 的 阶 段 之 後 面 , 接 著 进 行 指 定 Target , 或 者, 也 可 以 在 萤 幕 上 选 择 Target 选 项 。
4 . 选 择 安 装 软 体 ( DISK SETS ) 执 行 这 项 操 作 时 , 首 先 我 们 要 选 择 安 装 哪 些 软 体 , 或 者 哪 些 不 安 装 。
5 . 实 际 安 装 (Install) 整 个 安 装 过 程 。 接 下 来 您 可 以 输 入 刚 刚 系 统 所 提 示 的 setup 指 令 了 .
setup menu 指 令 说 明 如 下 :

1. HELP Read the Slackware Setup HELP file 阅读线上安装说明
2. KEYMAP Remap your keyboard if you're not using a US one 更改键盘排列
3. QUICK Choose quick or verbose install mode [ now: VERBOSE ] 快速安装模式
4. MAKE TAGS Experts may customize tagfiles to preselect packages 改变软体内键安装选项
5. ADDSWAP Set up your swap partition(s) 启动 swap partition, 使虚拟记忆体即刻生效
6. TARGET Set up your target partions 设定要目标分割区
7. SOURCE Select source media 选择来源媒体
8. DISK SETS Decide which disk sets you wish to install 选择欲安装套件
9. INSTALL Install selected disk sets 开始安装已选套件
10. CONFIGURE Reconfigure your Linux system 设定 Linux 系统
11. .EXIT Exit Slackware Linux Setup 结束设定

启 动 虚 拟 记 忆 体 主 画 面 下 第 五 个 选 项 ADDSWAP , 我 们 用 方 向 键往 下 移 动 到 此 , 之 後 按 键。 这 画 面 中 的 /dev/hdb2 是 系 统 自 己 抓 到 的 , 无 须 额 外 手 工 指 定 , 不 过 , 前 提 是 之 前 进 行 硬 碟 分 割 时 , 已 经 把 /dev/hdb2 的 分 割 区 型 态 ( Partition Type ) 改 为 Linux swap 。 以 下 自 动 化 程 序 所 作 的 有 三 个 动 作 , 第 一 就 是 进 一 步 把 分 割 区 型 态 为 Swap Partition , 执 行 实 际 的 规 划 动 作 (mkswap) , 第 二 个 动 作 , 是 让 该 新 规 划 好 的 Swap partition 即 刻 生 效 。 最 後 一 步 , 则 是 安 装 到 将 来 系 统 的 /etc/fstab , 这 样 以 後 系统 开 机 时 就 会 自 动 启 动 虚 拟 记 忆 体 。 指 定 安 装 目 的 分 割 区 在 这 步 骤 里 , 我 们 要 一 一 的 告 诉 系 统 安 装 程 式 , 哪 一 个 分 割 区 我 们 想 作 为 档 案 系 统 。 除 此 以 外 , 假 如 硬 碟 某 一 个 分 割 区 已 经 安 装 有 DOS 或 OS / 2 , 也 可 以 在 此 告 诉 系 统 安 装 程 式 , 这 样 子 将 来 就 可 以 直 些 在 Linux 档 案 系 统 下 取 用 DOS 与 OS / 2 档 案 系 统 内 的 东 西 。 这 一 阶 段 的 实 际 操 作 步 骤 也 很 简 单 。 我 们 首 先 指 定 所 要 安 装 Linux 的 分 割 区 , 接 著 安 装 程 式 会 询 问 确 认 该 分 割 区 的 属 性 , 然 後 们 需 决 定 要 不 要 对 该 分 割 区 规 划 出 档 案 系 统 ( make filesystem ) 。 下 面 画 面 中 , 我 们 可 以 看 到 , 系 统 安 装 程 式 会 自 动 侦 测 出 所 有 属 性 为 Linux native ( Partition ID 为 83 ) 的 分 割 区 。 我 们 被 询 问 的 第 一 个 话 题 , 就 是 / 档 案 系 统 将 设 於 何 处 ? 这 里 笔 者 回 答 /dev/hdb3 , 这 是 第 二 颗 硬 碟 的 第 三 个 分 割 区 。 额 外 一 提 , Linux 可 以 安 装 在 第 一 或 第 二 颗 硬 碟 , 悉 听 尊 便 。 接 下 来 会 看 到 下 面 这 画 面 , 这 里 询 问 档 案 系 统 型 态 , 我 建 议 读 者 选 择 ext2 , 因 为 绝 大 多 数 人 都 是 选 用 这 个 。 我 们 用 方 向 键 把 反 白 移 至 ext2 这 行 , 之 後 按 键 。 选 择 ext2 档 案 系 统 後 , 接 著 又 询 问 我 们 是 否 要 真 的 执 行 建 造 动 作 ( 相 当 於 DOS 的 格 式 化 动 作 ) , 假 如 这 是 我 们 第 一 次 安 装 , 很 可 能 我 要 就 要 选 择 Format 或 Check , 但 是 如 果 确 定 以 前 已 经 做 过 , 这 里 也 可 以 选 择 No 。 至 於 Format 与 Check 的 不 同 , Check 除 了 做 Format 动 作 外 , 还 额 外 检 测 硬 碟 是 否 有 坏 轨 。 以 上 连 续 几 个 动 作 已 经 成 功 的 指 定 某 一 个 分 割 区 作 为 系 统 的 / (root) 档 案 系 统 , 以 下 画 面 则 是 要 选 择 Mount Point, 这 个 就 是 说 把 C: 磁 碟 挂 在 系 统 的 哪 里, 注 意, Linux/Unix 没 有 C: 磁 碟 观 念, 我 们 可 以 设 立 比 方 说 /msdos 目 录, 之 後 把 C: 所 在 的 分 割 区, 挂 在 这 /msdos 目 录 下, 这 样 就 可 以 很 方 便 存 取 该 C: 内 的DOS档 案 。 以 下, 我 就 指 定 /msdos 为 这 个 挂 点 (Mount Point)。 下 面 画 面 问 我 们 要 不 要 进 一 步 接 著 进 行 「 指 定 安 装 来 源 」 作 业, 若 回 答 Yes, 则 立 刻 接 续 到 之 後 的 操 作, 若 No, 则 回 到 最 外 层 画 面 。 指 定 安 装 来 源 (Source) 接 下 来 我 们 要 指 定 用 什 麽 方 式 安 装, 以 下 画 面 就 是 询 问 用 什 麽 方 法 来 安 装, 其 实 也 就 是 说 说 存 放 媒 体 是 什 说C w碟 安 装 後, 我 们 进 一 步 要 指 定 分 割 区 所 在 。 下 面 画 面 中, 由 於 我 Slackware Linux 软 体 放 在 第 一 个 硬 碟 的 第 一 个 分 割 区, 我 回 答 /dev/hda1。 假 如 您 不 清 楚 哪 一 个 分 割 区, 可 以 光 按 键, 这 可 以 浏 览 您 硬 碟 内 所 有 的 分 割 区 。 接 下 来 画 面 我 们 要 回 答 路 径 所 在, 这 里 我 回 答 /slakware, 这 路 径 实 际 上 是 C:\SLAKWARE。 接 下 来 还 要 指 定 档 案 属 性, 由 於 是 DOS C: 磁 碟, 我 选 1 。 Install 实 际 安 装 前 面 罗 哩 罗 唆 的 介 绍 四 种 安 装 方 法, 读 者 请 根 据 您 的 设 定 及 条 件, 选 择 其 中 之 一 就 可 以, 之 後, 进 入 到 这 一 节, 这 里 我 们 要 来 选 择 究 竟 安 装 哪 些 软 体, 或 许 哪 些 可 以 省 略 。以 下 就 是 第 一 个 选 择 画 面, 有 关 於 选 择 方 法, 先 移 动 上 下 方 向 键, 之 後, 使 用 空 白 键 把 想 安 装 的 部 份 标 示 起 来, 底 下 画 面 A 左 天 已 经 标 示, 这 是 内 键 情 况 。 再 之 後 的 画 面, 才 是 笔 者 所 选 择 的 。 以 下 选 项 就 是 Slackware Linux 系 列 编 号 软 体, 其 中 第 一 选 向 是 用 来 安 装 非 标 准 Slackware Linux软 体, 这 里 我 们 没 有 用 到 。 底 下 画 面 我 统 统 标 示 起 来, 意 思 是 要 安 装 一 个 最 完 整 的 Linux作 业 系 统 。 下 面 画 面 问 说, 我 们 要 不 要 接 著 立 即 进 行 安 装, 到 这 里, 几 乎 万 事 已 经 具 备 。 Install 实 际 安 装 经 过 以 上 前 置 作 业 後, 我 们 已 经 指 定 了 安 装 的 来 源 与 去 处, 且 对 於 软 体 的 安 装 □ 酗] 已 经 指 定 好, 现 在 我 们 真 的 要 把 Linux 系 统 安 装 到 硬 碟 里 面 。 下 面 画 面 的 反 白 停 在 第 一 个 选 项, 这 是 内 定 方 式, 不 熟 的 朋 友 这 里 按, 采 用 内 定 方 法 即 可 。 系 统 设 定 刚 刚 完 成 的 安 装 工 作, 所 花 时 间 可 能 会 用 掉 一 两 个 小 时 之 间, 假 如 想 更 快 些, 在 後 面 我 会 示 □ 快 速 自 动 安 装 法 。 下 面 画 面 是 刚 刚 安 装 过 程 最 後 的 一 个 画 面, 也 就 是 在 安 装 完 成 时, 安 装 程 式 会 立 刻 询 问 我 们 要 不 要 接 著 进 行 系 统 设 定, 我 们 按 选 择 Yes。 制 作 一 张 系 统 启 动 磁 片 。 设 定 数 据 机 以 下 询 问 是 有 配 备 有 数 据 机 (Modem)? 有 数 据 机 则 直 接 按 键, 若 没 有, 使 用 或 左 右 方 向 键 把 反 白 移 到 , 再 按 薄C 若 有 数 据 机, 则 进 一 步 选 择 数 据 机 所 在 之 串 列 埠 。 设 定 滑 鼠 装 置 以 下 询 问 有 没 有 滑 鼠 装 置? 设 定 唯 独 光 碟 机 设 定 数 据 机 速 度 以 下 设 定 数 据 机 速 度, 一 般 14.4K v.32bis/v.42bis 数 据 机 不 妨 指 定 最 高 速 的 38400。 设 定 LILO 以 下 进 行 到 最 重 要 的, 设 定 LILO 开 机 选 择 程 式 。 LILO 是 一 个 相 当 优 秀 的 系 统 工 具, 读 这 若 漏 装 了 这 软 体, 将 非 常 可 惜 。 有 了 LILO, 您 不 需 要 任 何 其 他 开 机 选 择 程 式 。 设 定 LILO 以 下 进 行 到 最 重 要 的, 设 定 LILO 开 机 选 择 程 式 。 LILO 是 一 个 相 当 优 秀 的 系 统 工 具, 读 这 若 漏 装 了 这 软 体, 将 非 常 可 惜 。 有 了 LILO, 您 不 需 要 任 何 其 他 开 机 选 噩{ 式 。 假 如 我 们 电 脑 内 只 有 Linux 系 统, 没 有 其 他 作 业 系 统, 这 时 只 需 执 行 以 下 Begin 及 Linux 两 个 程 序, 假 如 说 硬 碟 内 有 DOS, 而 我 们 也 想 开 机 时 可 以 选 择DOS或 Linux, 这 样 子 也 把 以 下 DOS选 项 也 一 并 执 行, 当 确 定 设 定 无 误 後, 执 行 Install程 序 。 以 下 我 再 分 别 简 单 说 明 各 步 骤 之 作 用: Begin: 设 定 LILO 安 装 模 式, 比 方 安 装 在 硬 碟 MBR、 Superblock 或 者 软 碟, 要 不 要 LILO 稍 作 延 迟 等 等 细 节 。 Linux: 设 定 把 Linux包 含 进 开 机 选 择 。 DOS : 设 定 把 DOS 包 含 进 开 机 选 择 。 Install: 实 际 安 装 动 作 以 下 画 面 中, 我 们 就 把 反 白 移 到 Begin 选 项 上 。 底 下 我 们 就 □ □ □} 机 模 式 。 以 下 有 三 个 选 项, 我 分 别 解 释 如 下: MBR: MBR是 位 在 第 一 颗 硬 碟 、 第 一sylinder内 的 第 一 个sector, 电 脑 一 启 动 电 源 後, 会 先 读 取 这 区 域, 来 决 定 开 机 。 Root: 这 是 所 谓 superblock, 就 是 把 LILO 装 在 Linux 所 在 的 分 割 区 。 Floppy: 指 定 把LILO安 装 在 软 碟 上, 这 样 可 以 软 碟 开 机 。 以 上 MBR 与 Floppy可 能 比 较 常 用, 第 一 次 安 装 Linux的 生 手, 笔 者 尤 其 推 荐 用 软 碟 开 机, 等 熟 悉 後, 最 好 把 也 同 时 设 定 MBR, 这 样 万 一 其 中 一 个 坏 掉, 还 可 以 用 另 外 一 个 方 式 开 机 。 以 下 询 问 要 不 要 开 机 时, 让 LILO停 顿 一 下, 若 选 择 None, 则 开 机 时, 除 非 按 住 或 键,这 样 会 迫 使 LILO停 下 来, 否 则 LILO 不 会 停 下 来 。 照 笔 者 的 习 惯, 我 习 惯 设 定 停 顿 五 秒 钟 以 上 已 经 指 定 好 LILO 的 运 作 方 式 了, 接 下 来 我 们 就 要 把 我 们 硬 碟 里 现 的 OS, 全 部 加 入 LILO 的 开 机 选 单 中 。 底 下 先 把 反 白 移 道 第 二 行 。 底 下 侦 测 到 一 共 有 两 个 Linux属 性 的 分 割 区, 我 们 在 空 白 内 填 入 想 要 LILO 开 机 启 动 的 分 割 区 。 以 下 填 入 一 个 代 号, 这 样 在 开 机 时 LILO 提 示 符 号 下, 键 入 该 代 号, 就 可 以 启 动 进 入 这 代 号 所 代 表 的 作 业 系 统 。 把 Linux 分 割 区 加 入 开 机 选 单 後, 以 下 我 们 要 回 到 LILO 的 主 服 务 画 面 。 底 下 我 想 把 我 /dev/hda1 的 DOS 分 割 区 也 加 入 选 单, 以 U选 择 DOS。 以 下 安 装 程 式 侦 测 到 /dev/hda1 有 DOS分 割 区, 我 们 就 回 答 该 分 割 区 作 为 启 动 之 用 。 同 样 的, 以 下 我 们 也 给 这DOS分 割 区 取 一 个 代 码, 这 里 我 们 取 名 为 dos (大 小 写 无 关 系)。 又 回 到 这 画 面, 现 在 我 们 就 可 以 把 反 白 移 动 到 Install 这 一 行, 真 正 执 行 LILO Install。 设 定 网 路 紧 接 著 设 定 LILO 之 後, 我 们 要 进 行 网 路 的 设 定 。 以 下 首 先 回 答 您 这 部 Linux的 主 机 名 称, 在 这 里, 笔 者 将 之 取 名 为 linux3, 以 下 回 答 该 机 器 所 在 网 路 之 domain name, 下 面 询 问 是 否 是 单 机 网 路, 也 就 是 说 假 如 该 机 器 没 配 备 有 网 路 卡, 也 没 有 透 过 串 列 通 讯 界 面 (比 方SLIP/PPP) 或 平 有q 讯 界 面 (PLIP) 连 接 网 路, 底 下 就 回 答 Yes, 假 如 想 上 网 路, 则 回 答 No。 假 如 上 一 个 画 面 回 答 No, 您 接 著 就 会 看 到 以 下 画 面 。 以 下 回 答 该 机 器 的 IP 地 址 假 如 有 Gateway的 话, 填 到 底 下 。 底 下 填 入 Netmask。 以 下 询 问 是 否 有 nameserver, 内 部 私 有 网 路 可 以 回 答 No, 至 於 想 上 Internet的 机 器, 则 一 定 要 有 。 Internet 上 负 责 把 IP 转 Domain name (或 反 过 来) 的 服 务, 就 是 由 nameserver负 责, 以 下 把 距 您 最 近 的 一 部 nameserver的 IP 填 入 。 以 上, 基 本 网 路 设 定 已 经 妥 当 。 接 下 来, 我 们 要 设 定 电 子 邮 件 服 务 系 统 (sendmail), 以 下 主 要 有 三 个 选 择, 假 如 您 琐 □ 嗽\ 在 直 接 Internet连 线, 这 时 您 可 以 选 择 SMTP+BIND, 假 如 内 部 TCP/IP 网 路, 可 以 选 用SMTP , 至 於 想 透 过 UUCP通 讯, 则 选 择 UUCP。 最 後 填 入 时 区, 读 者 在 台 湾 的 话, 移 动 往 下 方 向 键, 一 直 到 ROC, 按 键 。 以 上 终 於 大 公 告 成, 恭 喜 您, 您 就 此 拥 有 一 部 完 整 的 多 工 多 使 用 者 作 业 系 统, 而 且 支 援 完 整 的 TCP/IP 网 路 功 能 。 最 後, 回 到 主 服 务 画 面, 底 下 我 们 可 以 离 开, 之 後 用 reboot 指 令 重 新 开 机其 实 您 只 须 将 游 标 移 至 第 5 项 , 按 enter 则 它 会 从 5 - 10 依 序 执 行 不 用 您 操 心 喔 !
选 ADDSWAP 按 enter 後 , 则 出 现 Do you wish to install this as your swap partition?
如 您 确 定 device 无 误 则 YES 继 续 , 接 下 来 是 MKSWAP WARNING 可 不 理 它 按 enter 继 续 , USE MKSWAP 也 是 选 YES 过 关 , ACTIVATE SWAP SPACE ? 这 项 也 请 选 YES 让 系 统 帮 您 规 划 swap , SWAP SPACE CONFIGURED 设 为 开 机 即 挂 上 swap 区 , 下 一 页 您 该 不 会 灰 心 了 按 No 离 开 吧 ?
Using this partition for Linux 只 是 让 您 再 次 确 定 罢 了 . 接 下 来 的 FORMAT PARTITION 建 议 您 选 Check 项 , 虽 稍 慢 点 不 过 保 险 一 点 喔 ..
下 一 项 为 SELECT INODE DENSITY 用 DEFAULT 即 可 , 再 按 个 enter 您 就 可 选 择 来 源 媒 体 , 再 来 因 来 源 不 同 请 自 行 设 定 .
接 著 介 绍 Pick your installation method 选 择 安 装 方 式 , 选 custom .
再 来 是 您 得 告 诉 它 来 源 目 录 , 例 /linux/slack ; 接 著 是 SERIES SELECTION 选 择 您 想 安 装 的 套 件 , 我 是 除 了 CUS 没 选 外 其 馀 全 选 , 选 完 後 是 SELECT PROMPTING MODE 选 择 安 装 提 示 模 式 , 我 选 None 自 动 安 装 别 来 烦 我 . 接 著 您 可 以 休 息 一 下 下 了 等 它 装 完 再 继 续 罗 !

接 下 来 是 设 定 您 的 系 统 罗 !
如 您 须 要 制 作 boot disk 请 您 选 YES , 这 里 的 BOOT DISK 是 此 版 的 正 式 可 开 机 磁 片 而 不 是 安 装 系 统 用 的 boot disk 别 弄 错 了 喔 ..
接 著 是 modem & mouse 您 接 那 个 port 别 设 错 了 ,
SCREEN FONT CONFIGURATION 字 形 您 想 更 改 的 话 请 选 yes ;
FTAPE 请 选 NO 假 如 没 磁 带 机 的 话 ,
modem speed 38400 这 是 此 地 能 设 的 最 高 速 的 了

接 下 来 是 设 定 lilo 多 重 开 机 程 式 . 程 序 是 Begin -> Linux -> Install .
再 来 设 定 NETWORK , Enter Hostname 如 您 是 内 部 网 路 使 用 您 可 任 意 设 , 如 有 连 InterNet 的 那 就 设 您 注 册 的 HOST name 即 可 , DOMAINNAME 也 同 上 . LOOPBACK ONLY ? 如 有 正 式 的 class c ip 此 项 请 选 no , 如 玩 玩 的 选 YES 就 很 好 用 了 . 如 选 no 的 您 还 须 设 定 下 列 东 东 . local ip address , gateway ip address , netmask , nameserver ip.
接 下 来是 GPM CONFIGURATION 这 是 一 个 滑 鼠 剪 贴 功 能 , 随 您 用 不 用 罗 !
sendmail configuration 请 选 SMTP + BIND , TIMEZONE 请 选 ROC .
您 系 统 现 在 是不 是 又 回 到 setup menu 了 , 那 恭 喜 您 ! 您 可 以 按 ctrl+alt+del 重新开机罗..
如此您已经完成 Linux 系统的安装工作了....
重新开机後如一切正常那您可以进行下一步骤 : 更新 Linux 核心

6. 最後系统设定 (Configuration)


-->Linux使用技巧集-->深入Linux的LILO

深入Linux的LILO
姓名 ：江永忠
Email：
地址 ：
转摘 ：http://linux.wuxi.net.cn/

    Linux的引导可以采用多种方式，其加载器LILO(Linux Loader)是一个灵活的引导加载程序，与其他常用的引导加载程序相比，LILO引导方式显得更具有艺术性，对其深入的理解，将有助于我们方便地处理多重系统、网络引导、大硬盘及大内存等诸多棘手的问题。

    一、 LILO的引导机制

    众所周知，计算机的最初启动是由BIOS控制的，在对一些硬件（如：内存、键盘等）初始化之后，它会试图加载硬盘的主引导记录（MBR）或软盘的引导扇区。

    MBR可通过两种方式运行，其一是定位到活动分区并加载相应的引导扇区，然后由引导扇区完成该分区内操作系统的基本组件的加载；其二是直接从一指定分区中加载信息，并通过它装入任一分区的操作系统，诸如LILO、OS/2 boot loader及Partition Magic等引导加载程序都可以配置成这种方式。

    软盘的引导扇区相当于硬盘活动分区的引导扇区，它通常用于装入软盘上的操作系统。

    由此可见，只要把LILO安装在MBR、活动分区或者引导软盘上，就能接管计算机的控制权，然后由LILO完成后继的引导过程。LILO中建有一个引导表地址编码，借此它的引导程序就能定位到Linux的内核文件，这种地址编码既可以按照柱面/磁头/扇区(CHS)模式，又可以采用LBA的线性块号模式，因此，即使对某些SCSI控制程序LILO也能运转良好。

    当LILO定位到配置文件后，经过预引导过程，就显示提示符：

    LILO boot:

    此时，系统允许选择引导不同的操作系统或者不同的内核配置，按Tab键显示可选项列表，然后输入可选项或者直接回车选择缺省配置，如果选择了引导Linux，还可以直接传递参数到系统内核。

    和其他系统的引导加载程序相比，LILO具有更大的灵活性，其引导方式也更丰富多彩。

    ● 当LILO被安装在硬盘的MBR、活动分区或引导软盘上时，作为原引导程序的替身，它能引导任一硬盘任一分区上的Linux和其他操作系统；

    ● 除了引导扇区，它没有任何隐含文件，也不需要使用特定的分区，它的配置文件可以在任何分区、甚至是存放在与Linux毫不相干的DOS分区的某个子目录下；

    ● 它能引导几个不同的内核配置，甚至是几个不同的内核；

    ● 它能引导同一机程序上的多个Linux版本；

    ● 它能从网络上引导Linux。

    LILO的灵活性使得其配置变得相当复杂，当有多个系统共存时，建议先安装其他操作系统，最后再装Linux，这样，设置LILO对其他系统的引导会相对简单一些。

    二、几个重要的LILO引导参数

    LILO的引导参数有很多，在此只对一些比较重要的参数作一介绍。

    1. “boot=”

    此参数指明包含引导扇区的设备名（如：/dev/had），若此项忽略，则从当前的根分区中读取引导扇区。

    2. “root=”

    此参数告诉内核启动时以哪个设备作为根文件系统使用，其设定值为构造内核时根文件系统的设备名，可用的设备名有：

    (1)/dev/hdaN~/dev/hddN：ST-506兼容硬盘，a到d上的N个分区

    (2)/dev/sdaN~/dev/sdeN：SCSI兼容硬盘，a到e上的N个分区

    (3)/dev/xdaN~/dev/xdbN：XT兼容硬盘，a到b上的N个分区

    (4)/dev/fdN：软盘，A：（N=0）或B：（N=1）

    (5)/dev/nfs：由网络取得根文件系统的标志

    3. “nfsroot=”

    若需通过NFS提供根文件系统来引导无盘工作站，此参数为内核指定了网络根文件系统所在的机程序、目录及NFS，其格式为：nfsroot=（〈server_ip〉:）〈root_dir〉（,nfs_options〉）

    4. “nfsaddrs=”

    设定网络通讯所需的各种网络界面地址，如无此参数，则内核会试图用反向地址解析协定(RARP)或启动协定(BOOTP)找出这些参数，其格式为：

    nfsaddrs=〈客户端IP〉:〈服务端IP〉:〈网关IP〉:〈子网屏蔽〉:〈客户端名称〉:〈网络设备名　〉:〈auto〉

    5. “image=”

    指定Linux的内核文件。

    6. “delay=”

    设定引导第一个映像前的等待时间。

    7. “disk=”

    此参数为某一特殊的硬盘定义非标准参数。

    8. “append=”

    为内核传递一个可选的参数行，其典型的应用是为不能完全由系统自动识别的硬盘指定参数，如： append = "hd=64,32,202"

    9. “label=”

    此参数为每个映像指定一个名字，以供引导时选择。

    10. “read-only”

    设定以只读方式挂入根文件系统，用于文件系统一致性检查（fsck）。

    11. “install=”

    安装一个指定文件作为新的引导扇区，缺省为/boot/boot.b。

    12. “loader=”

    说明所使用的链加载程序(chain loader)，缺省为/boot/chain.b，如果不是从首硬盘或软盘启动，那么，此选项必须说明。

    13. “table=”

    说明包含分区表的设备名，如果此参数忽略，引导加载程序将不能传递分区信息到已引导的操作系统。当此参数指向的分区表被修改时，必须重新运行/sbin/lilo。

    14. “init=”

    内核初始化时执行的程序，通常过程为init、getty、rc和sh，版本1.3.43以来的Linux内核能够执行/sbin/init说明的命令行，若在引导过程中出现问题，则可设置init=/bin/sh直接跳到Shell。

    15. “ramdisk_start=”

    由于内核不能放在压缩的内存文件系统映像内，为使内核映像能够和压缩的内存映像放在一张软盘内，加入“ramdisk_start=〈offset〉”，这样内核才能开始执行。

    16. “mem=”

    此参数的目的之一是为Linux指定使用的内存数量：如mem=96MB，目的之二是指定mem=nopentium告诉内核不要使用４MB分页表。

    17. “vga=”

    设置显示模式，如80×50、132×44等。

    三、LILO典型配置方法

    通常情况下，Linux的安装程序自身就可以完成LILO的安装配置，从而较好地解决多重系统的引导问题，如果系统不能自动完成这种配置，则可以通过手工修改配置文件/etc/lilo.conf来实现不同条件下的引导。

    1. 当系统能自动完成配置时

    对于这种情况只有一个建议：将LILO安装到Linux分区的根上，而不是MBR这个多事地带。假设当前hda1中装有DOS/Windows，hda2中安装了Linux，则/etc/lilo.conf的内容大致如下：

boot=/dev/hda2 ＃指定引导位置
compact
delay=50 ＃延时５秒
root=current ＃根在当前分区
image=/boot/vmlinuz ＃指定linux的内核文件
label=linux ＃用linux为代表名称
other=/dev/hda1 ＃其他操作系统所在的分区
table=/dev/hda ＃指定包含分区表的硬盘
label=dos ＃用dos为代表名称

    2. 当系统无法自动完成配置时

    系统无法自动完成配置的情况不外乎两种：

    （1）BIOS不能直接看到Linux的根分区；

    （2）BIOS只能读写标准IDE硬盘的前504MB。

    这时，必须遵循一个最基本的原则：建立一个BIOS能存取的较小的Linux分区，其中包含内核文件、映射文件及链加载程序等必要内容，而根则可以是另外一个独立的分区。至于配置上的其他细节，我们通过以下实例来进行说明。

    例１：主硬盘为IDE接口，第二硬盘为SCSI接口，根文件在SCSI上。

    对策：在IDE硬盘上划分一个较小的Linux分区（/dev/hda2），其中包含基本文件，挂接到/u2下，其配置文件/etc/lilo.conf的主要内容为：

boot=/dev/hda ＃lilo装在主ide的mbr
install=/u2/etc/lilo/boot.b ＃从boot.b安装lilo引导记录
map=/u2/etc/lilo/map ＃安装程序建立此映射文件，告诉引导载入程序内核块的位置
compact
timeout=50
image=/u2/vmlinuz ＃内核文件应事先拷贝到/u2下
label=linux
root=/dev/sda1 ＃告诉内核根系统在scsi硬盘上
read-only
other=/dev/hda1
loader=/u2/etc/lilo/chain.b ＃指明加载程序
label=dos

    例２：一个标准的IDE大硬盘需安装Linux和DOS/Windows。

    对于大硬盘问题，很多人只知道低于1024个柱面的限制，而不知为什么标准的IDE硬盘只能认前504MB。

    其实，BIOS的int13调用是采用三个位元组的CHS编码，10位为柱面号，8位为磁头号，6位为扇区号。可能的柱面号码是0～1023，可能的磁头号码是0～255，而磁道上可能的扇区号码是1～63，以这24位最多可以定址8455716864个位元组(7.875GB)。

    但不幸的是，标准的IDE介面容许256个扇区／磁道、 65536个柱面及16个磁头。它自己本身可以存取2３７= 137438953472(128 GB)，但是加上BIOS方面 63个扇区与1024 个柱面的限制后只剩528482304(504 MB)可以定址得到。

    对策：在硬盘的前500MB中划分350MB(/dev/hda1)给DOS，150MB(/dev/hda2)给Linux，在相应的配置文件中应说明硬盘的参数。

    boot=/dev/hda

    ... ...

    disk=/dev/hda

    bios=0x80

    sectors=63

    heads=16

    cylinders=2100

    image=/vmlunuz

    append="hd=2100,16,23"

    root=/dev/hda2

    label=linux

    四、LILO的卸载

    当LILO覆盖了引导扇区时，它会保留一个引导扇区的备份在/boot/boot.xxyy中，其中xxyy是16进制的设备主／次号码（major/minor numbers），利用命令“ls -l /dev/device”就可获得硬盘或分区的主／次号码。如果这些备份文件已经存在，那么，当你重新安装LILO或重构内核时，它将不再生成此文件，这就保证了此备份文件是最原始的引导扇区。

    若要卸载LILO，你只需恢复初始的引导扇区就可以了。例如：LILO安装在/dev/had，对应的备份文件为/boot/boot.0300，简单地使用下面的命令即可：

    dd if=/boot/boot.0300 of=/dev/had bs=446 count=1

    当然，若想完全卸掉Linux，必须用Linux的fdisk对Linux分区进行破坏，因为DOS的fdisk无法移去非DOS分区。

    关于LILO值得探讨的问题还有很多，但只要懂得了其内部机制，对更复杂的实际情况也能较圆满地解决。


-->Linux使用技巧集-->Linux开机程序之研讨

Linux开机程序之研讨
姓名 ：许景华
Email：
地址 ：
转摘 ：http://linux.wuxi.net.cn/

各位是否曾经对电脑整个开机的流程感到好奇呢 ? 这一次 , 我们所要讨论的
主题 , 就是 Linux 从开机的一瞬间到 login 为止 , 到底发生了什麽事情 ?
想必各位都知道 , 在刚开机时 , 由於 80x86 的特性 , CS ( Code Segment )
这个暂存器中全部都放著 1 , 而 IP ( Instruction Pointer ) 这个暂存器
中全部都放著 0 , 换句话说 , CS=FFFF 而 IP=0000 , 此时 , CPU 就依据
CS 及 IP 的值 , 到 FFFF0H 去执行那个地方所放的指令 . 这时候 , 由於
FFFF0H 已经到了高位址的顶端 , 所以 , FFFF0H 这个地方 , 总是会放一个
JMP 指令 , 跳到比较低的位址 . 接著 , ROM BIOS 就会作一些检查的动作
像记忆体 , 键盘 等...... 并在我们俗称的 UMB ( Upper Memory Block )
之中扫描 , 看看是否有合法的 ROM 存在 ( 比如 SCSI 卡上的 ROM ) .
假如有 , 就到里面去执行一些东西 , 执行完之後再继续刚才的行程 . 到了
最後 , 读取磁碟机上的第一个 sector . 在这里 , 我假设各位由硬碟启动
因此 , 就硬碟的构造而言 , 它的第一个 sector 称为 MBR ( Master Boot
Record ) . 因为一个 sector 是 512 bytes , 而 MBR 这 512 bytes 可分
为两个部份 , 第一个部份为 Pre-Boot 区 , 占了 446 bytes ; 第二部份
是 Partition Table , 占了 66 bytes . Pre-Boot 区的作用之一 , 就是
去看看那个 Partition 被标成 Active , 然後去读那个 Partition 的 Boot
区 .
在 Linux 的启动方面 , 一般人最常把 LILO 放在 MBR 或 Superblock
假如你把 LILO 放在 MBR , 那很明显的 , 当读取到 MBR 的时候 , LILO
就被执行 , 此时 , 你的萤幕上会出现 boot: 接著 , 就进行 Load Kernel
的动作 . 在另一方面来说 , 假如你把 LILO 安装在 Superblock , 通常你
还会有一个管理开机的程式 , 也许是住在 MBR ( 像 OSBS ) 或者是放在一
个单独的 Partition ( 像 OS/2 的 Boot Manager ) . 再由这个管理开机
的程式去读取 LILO , 进而做 Load Kernel 的动作 .
好了 , 到了目前为止 , 我们已经讲到 Load Kernel 的动作 . Kernel 被
load 到 memory 中之後 , 接著进行一连串 probe 周边的动作 , 像串联埠
并联埠 , 软碟 , 音效卡 , 硬碟 , 光碟机 等 ...... 接著 mount root
partition . 在这之後 , kernel 会起动 init 这个 process . init 这
个 process 的 PID 为 1 , 它是所有 process 的祖先 .
接下来呢 ? 系统就开始执行 /rc.d/rc.S , 在这里 , 我们暂时打住 ,
先对大概的 initialization script 执行的顺序作一个浏览 , 请看下面
的流程 :
init[1]
rc.S begin <--- 目前我们已经讲到这里
rc.serial begin
rc.serial end
rc.S end
init[1] enter runlevel 5
rc.M begin
rc.inet1 begin
rc.inet1 end
rc.inet2 begin
rc.inet2 end
rc.font begin
rc.font end
rc.local begin
rc.local end
rc.M end
login
上面的流程清楚的指出 , 在 rc.S 这个 shell script 中 , 会去执行 rc.serial
接著再执行 rc.M , rc.M 中又包含了 rc.inet1 , rc.inet2 , rc.font , rc.local
最後执行 login . 在下面的内容中 , 将为各位介绍这几个 shell script
从下面开始 , 凡是每一列之前有一个 # 的 , 为原来 shell script 中的注解
有两个 # 的 , 为笔者加上的注解 , 当然啦 , 没有任何 # 的为 shell script
的内容 , 而对命令或内容的解释 , 一律都写在命令或内容的前面 .
首先由 rc.S 开始 :
***************************** rc.S **********************************
#!/bin/sh
#
# /etc/rc
#
# These commands are executed at boot time by init(8).
# User customization should go in /etc/rc.local.
echo '======== rc.S is running ! System Initializing Now !!! ========'
PATH=/sbin:/usr/sbin:/bin:/usr/bin
## 打开所有 swap ! 下面 /sbin/swapon -a 的意思是 : 使得 /etc/fstab 中被记录
## 成 swap 的 device 全部启动 .
/sbin/swapon -a

## 喔 ! 下面这个指令 update 就很重要了 , 它负责每隔一段固定的时间 , 就将
## buffer 中的资料 , 利用 sync 写回磁碟机上 , 并将 superblock 做 update
## 的动作 . 使用 ps 这个指令看看有那些 process , 就可看到 update 还有一个
## bdflush , 这两个 process 都是必然要存在的 , 可不要随便砍掉 , 要不然 ,
## 万一系统 crash 了 , 那磁碟机里面的资料就不是最新的了 ......
/sbin/update &

## 利用 echo -n >> 制造一个档案 , 并用 rm -f 这个档案来测试 root partition
## 是不是 read-only 或者是可读写
READWRITE=no
if echo -n >> "Testing filesystem status"; then
rm -f "Testing filesystem status"
READWRITE=yes
fi

## 假如 root partition 是 read-only 就作 fsck 的动作 , 假如不是 read-only
## 而是 read-write 的话 , 就做下面 else 之後的动作
if [ ! $READWRITE = yes ]; then
## 利用 fsck 做检查及修复档案系统的工作 , 後面接的两个参数 -A , -a .
## -A 的意思是 : fsck 会依据 /etc/fstab 中的记录 , 去检查所有的档案
## 系统 ; 而 -a 就是 auto 的意思 , 当 fsck 有修复的动作时 , 它不会问
## 你问题 , 而直接修复 .
/sbin/fsck -A -a

## 假如 fsck 有 error , [ $? -gt 1 ] 括号里面的意思是 : 若上个命令的
## 传回值大於 1 , 而上个命令就是 fsck . 让我们看看 fsck 的传回值 :
## 0 - No errors
## 1 - File system errors corrected
## 2 - File system errors corrected, system should
## be rebooted if file system was mounted
## 4 - File system errors left uncorrected
## 8 - Operational error
## 16 - Usage or syntax error
## 128 - Shared library error
## 很明显的 , 若有任何错误产生的话 , 那 fsck 的传回值都大於 1 . 其实
## 就我的观点认为 , 应该写成 if [ $? -ge 1 ] 比较好 . 既然有错呢 , 系统
## 应该就要跳至单人模式 , 在单人模式中主要就是 /etc/rc.d/rc.K
## 中的两件事 : 关掉 swap 及 卸下所有的档案系统 , 而最後重新 login .
## 一般正常的情况下 , if 下面这一大段是不会执行的 , 而会跳至下面
## 标有 ************************* Normal 1 ************************* 处
if [ $? -gt 1 ] ; then
echo
echo
echo "**************************************"
echo "fsck returned error code - REBOOT NOW!"
echo "**************************************"
echo
echo
/bin/login
fi
## ****************************** Normal 1 **************************
## 当 fsck 检查没有错误之後 , 就把 root partition 重新 mount 上来
## 下面指令的参数有三个 , -w 代表mount 成可读写 , -n 代表把一个 file-
## system mount 上来 , 但不会把记录写到 /etc/mtab 中 , 在上次对 /etc/mtab
## 介绍时有提到 , 当我们使用 mount 这个指令把一个 filesystem mount 上来
## 的时候 , /etc/mtab 就会记录 ! 利用 -n 这个 option 可使得做 mount 的动
## 作 , 却不会记录 . -o 後面可以接许多的选项 , 在这里 , 我们给它的选项是
## remount . remount 的意思是 : 重新 mount 一个已经被 mount 的 filesystem
## 这个选项通常被用来改变该 filesystem 的读写旗号 ,尤其是把 filesystem
## 从 read-only 的状态 , 改变成 read-write 的状态 .
echo "Remounting root device with read-write enabled."
/sbin/mount -w -n -o remount /

## 在前面的情况中 , 都是 root partition 为 read-only 的状态下 , 所做的一些
## 工作 , 到了最後一个指令 /sbin/mount -w -n -o remount / , 才把 root
## partition mount 成 read-write . 各位有没有看到前面那行 :
## if [ ! $READWRITE = yes ]; then ..... 下面这个 else 就是与这个 if 对应
## 也就是说 , 前面那个 if 的区块中 , 所作的工作都是在 root partition 为
## read-only 的条件成立下所作的事 , 那很明显的 , 下面这个 else 就是 root
## partition 为 read-write 的条件下所作的工作 . 假如你的 root partition
## 为 read-writeable 的话 , 那麽系统就会显示下面的讯息 . cat << EOF 所作的
## 事 , 就是把 EOF 之前的讯息全部显示在萤幕上 :
## 我想 , 下面的讯息写得很明显了 , 它说 : 你的 root partition 被 mount 成
## read-write , 没有办法检查 , 要使检查的动作能够顺利的进行 , 你必须把
## root partition mount 成 read-only ! 那要怎麽做呢 ? 很容易 , 只要利用
## rdev -R /<your_kernel_name> 1 就可以了 ......
else
cat << EOF
*** Root partition has already been mounted read-write. Cannot check!
For filesystem checking to work properly, your system must initially mount
the root partition as read only. Please modify your kernel with 'rdev' so
that
it does this. If you're booting with LILO, type:
rdev -R /vmlinuz 1
(^^^^^^^^ ... or whatever your kernel name is.)
If you boot from a kernel on a floppy disk, put it in the drive and type:
rdev -R /dev/fd0 1
This will fix the problem *AND* eliminate this annoying message. :^)
EOF

## 下面这个指令没什麽好说的 , 就是暂停 10 秒钟 , 让 user 能够有充足的
## 时间看完上面的讯息
sleep 10
fi

## 删除 /etc/mtab /etc/nologin /etc/utmp
/bin/rm -f /etc/mtab* /etc/nologin /etc/utmp

## 制造 /etc/utmp , 这是一个很典型制造空档案的写法 . /dev/null 这个 node
## 蛮有趣的 , 在某一方面来说 , 它有点像是一个 " 黑洞 " . 怎麽说呢 ?
## 各位可以试试看下面的指令 ls >> /dev/null , 当你使用这个指令之後会
## 发生什麽事呢 ? 什麽也没发生 , 而且 ls 的输出就好像被丢到黑洞里 , 无
## 影无踪了 . 那也许你会想 : 那这有什麽用 ? 我的回答是 : 的确没有什麽
## 很大的用处 , 但当你想抑制输出的讯息时 , 你就会用得到了 .
cat /dev/null >> /etc/utmp

## 依据 fstab ( filesystem table ) 中的描述 , 自动的挂上档案系统
## 但此时因为 TCP/IP 还没有设定 , 故不用 NFS
echo 'Mount Filesystem !!!'
/sbin/mount -avt nonfs

## 设定系统的时钟 . 下面这几行所做的事就是 : 看看 /sbin/clock 这个档案是
## 不是可执行的 , 假如可以执行 , 就把 CMOS 中的时间设定为系统的时间 .
if [ -x /sbin/clock ]; then
echo 'Set System Clock'
/sbin/clock -s
fi

## 下面的四行若没有 mark , 则每次开机 issue 及 motd 都会被改变 , 这应该
## 可算是 FAQ 级的问题了 ...... 因为我有自己设计的 issue 及 motd , 所以
## 下面的四行前面都有 # , 被当成注解 .
## 假如你要有自己的设定 , 下面一定都要 mark 起来
#echo > /etc/issue
#echo Welcome to Linux /bin/uname -a | /bin/cut -d\ -f3. >> /etc/issue
#echo >> /etc/issue
#echo "/bin/uname -a | /bin/cut -d\ -f1,3. (Posix)." > /etc/motd

## 接下来 , 将执行 rc.serial , 顾名思义 , rc.serial 是作串连埠设定的工作
## 在 rc.serial 中 , 内容虽然也是很简单 , 但并不像 rc.S 那样直接 . 换句话
## 说 , 读者至少要 " 稍微 " 懂一点 shell programming , 所以说呢 , 假如
## 还不会 shell programming 的读者呢 , 都应该赶快去找一本书来看一下 , 在
## 这篇文章的结尾 , 我会提出一些书单 , 各位可以去找找这几本书 ......
/bin/sh /etc/rc.d/rc.serial
echo '================= rc.S is finish NOW !!! ========================='

到了这里 , rc.S 的最後一步 , 是去执行 rc.serial . 大家可以看一看
/rc.d/rc.serial . 好像很长的样子 , 但实际上呢 , 各位必然发现到了 , 这个
shell script 大部份指令的前面都有一个 '#' 号 , 这代表著 , 这些指令完全
不会被执行 . 所以呢 , 真正有用的只不过寥寥十几行吧 ! 在另一方面来说 ,
假如你是用网路卡连上网路 , 那 rc.serial 对你并没有什麽大用处 .

**************************** rc.serial ******************************
#!/bin/sh
#
# /etc/rc.serial
# Initializes the serial ports on your system
#
# Version 2.01
echo '======================= rc.serial is begin !!! ====================='
cd /dev
## 下面三行中的前两行是设定一些变数 , 由於在这个 shell script 中 , 须要
## 用到 /bin/setserial -b 这个指令 , 或是须要用到所有以 cua 开头的 node
## 的次数太多了 , 因此 , 把它们设定为一个变数 , 是一个不错的方法 . 尤其
## PORTS=`echo cua? cua??` 这是一个聪明的写法 , 那为什麽不写成 PORT=
## `echo cua*` 呢 ? 各位可以在 /dev 下分别使用这两个指令 , 观察输出到底
## 有什麽不同 ......
SETSERIAL="/bin/setserial -b"
PORTS=`echo cua? cua??`
echo -n "Configuring serial ports...."

## 下面这行 , 没有学过 shell programming 的人很可能会看不懂 , 不过没有
## 关系 , 这行中的 ${SETSERIAL} 会被换成 /bin/setserial -b , 而 ${PORTS}
## 会被换成 cua0 cua1 cua2 ....... cua31 , 所以整句翻译就是 :
## /bin/setserial -b -W cua0 cua1 cua2 cua3 cua4 cua5 cua6 ...... cua31
## 那这行指令到底在做什麽呢 ? 其实只是在做中断侦测的工作 .
${SETSERIAL} -W ${PORTS}

## 各位看到下面原来的注解了吧 . 当你有一些特殊的卡时 , 你可以把相对应部
## 份前面的 '#' 去掉 , 以便能做自动设定的工作 . 其实呢 , 这种情况实在
## 不多 , 大部份人的设备都差不了多少 , 说到关於串连埠 , 差异就更少了 .
#
# AUTOMATIC CONFIGURATION
#
# Uncomment the appropriate lines below to enable auto-configuration
# of a particular board. Or comment them out to disable them....
#

## 好了 , 这下我们又多了一个变数 : AUTO_IRQ , 这在下面会用到 .
AUTO_IRQ=auto_irq

## 下面几行非常整齐 , 它们可以分别被换成 :
## /bin/setserial -b /dev/cua? auto_irq skip_test autoconfig
## setserial 说穿了也没什麽 , 这个指令可以让你对 serial port 做设定及回报
## 的动作 , 像 IRQ , I/O port 啦等等的事情 . 一般的情况下 , 大家的电脑中
## 通常只有 COM1-COM4 , 但假如你想增加新的 port , 那 setserial 就派上用
## 场了 .
# These are the standard COM1 through COM4 devices
#
# If you have an internal modeme with a Rockwell Chipset, add a "skip_test"
# to the /dev/cua3 line below. (It's not added by default because it will
# screw up people with 8514 displays).
#
${SETSERIAL} /dev/cua0 ${AUTO_IRQ} skip_test autoconfig
${SETSERIAL} /dev/cua1 ${AUTO_IRQ} skip_test autoconfig
${SETSERIAL} /dev/cua2 ${AUTO_IRQ} skip_test autoconfig
${SETSERIAL} /dev/cua3 ${AUTO_IRQ} autoconfig
# These are for the first AST Fourport board (base address 0x1A0)
#
${SETSERIAL} /dev/cua4 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua5 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua6 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua7 ${AUTO_IRQ} autoconfig
# These are for the second AST Fourport board (base address 0x2A0)
#
${SETSERIAL} /dev/cua8 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua9 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua10 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua11 ${AUTO_IRQ} autoconfig

## 从这里以下 , 我省略了一大段 , 因为这一大段都是支援特殊的卡
# These are the 3rd and 4th ports on the Accent Async board.
#
#${SETSERIAL} /dev/cua12 ${AUTO_IRQ} autoconfig
#${SETSERIAL} /dev/cua13 ${AUTO_IRQ} autoconfig
#

.
.
.
.
.
.
.

## 好了 , 我们跳掉了一大段 , 直到这里 . 各位看到下面的注解了 .
## 假如你想用手动的方法指定 IRQ , I/O port , 及指定 chip 的型别
## 那你可以拿掉下面对应那行前面的 '#' 并作适当的修改 , 比如说
## 你用的是比较新的 16550 或 16550A , 而不是 16450 , 那你就可以
## 在下面用手动的方法指定 . 实际上 , 用 autoconfig 及 autoirq
## 的选项就可以了 , 没有必要用手动的方式 . 除非侦测不到 .
###############################################################
#
# MANUAL CONFIGURATION
#
# If you want to do manual configuration of one or more of your
# serial ports, uncomment and modify the relevant lines.
#
###############################################################
# These are the standard COM1 through COM4 devices
#
#${SETSERIAL} /dev/cua0 uart 16450 port 0x3F8 irq 4
#${SETSERIAL} /dev/cua1 uart 16450 port 0x2F8 irq 3
#${SETSERIAL} /dev/cua2 uart 16450 port 0x3E8 irq 4
#${SETSERIAL} /dev/cua3 uart 16450 port 0x2E8 irq 3
.
.
.
.
.
.
.
.
## Ok , 到此 , rc.S 及 rc.serial 已经结束 , 因为截稿时间的关系 , rc.M
## rc.inet1 , rc.inet2 , rc.font , rc.local 将在以後为各位介绍 .
echo "done."
${SETSERIAL} -bg ${PORTS}
echo ' ====================== rc.serial is complete !!! ==================='

* 关於 Shell Programming 的书单 :
Title: The Unix C Shell Field Guide
Authors: Gail Anderson and Paul Anderson
Publisher: Prentice Hall
Edition: 1986
ISBN: 0-13-937468-X
这本是 C-Shell 的 Bible , 想学 C-Shell 的人 , 可以去看这本书 .

Title: Unix Shell Programming
Authors: Stephen Kochan and Patrick Wood
Publisher: Hayden
Edition: 1990
ISBN: 0-672-48448-X
喔 ! 这本书以 Bourne Shell 为主 , 内容深入浅出 , 读者很容易就可以了解
这本书的内容 , 进而掌握 Bourne Shell 的精髓 . 此外 , 这本书也有提到
Korn Shell , 大体上来说 , 是一本值得看的好书 .

*如何连络作者 :
E-Mail Address : jhhsu@csie.nctu.edu.tw
u8217017@cc.nctu.edu.tw
Dormitory : 交通大学十舍 317R
..

Linux 开机程序之研讨
CCCA 资工86 许景华
在上次的介绍中 , 我们已经看完了 rc.S 及 rc.serial 这两个 shell script .
现在 , 我们将把剩下的 shell script 再作一个介绍 .
首先还是看看全部的流程 :

init[1]
rc.S begin
rc.serial begin
rc.serial end
rc.S end <-- 上一次我们说明到这里
init[1] enter runlevel 5
rc.M begin
rc.inet1 begin
rc.inet1 end
rc.inet2 begin
rc.inet2 end
rc.font begin
rc.font end
rc.local begin
rc.local end
rc.M end
login

这次主要的部份可分为两项 : 因为 init 将会去读取 inittab , 所以 inittab
将被列为第一部份的重点 , 而第二部份就是 rc.M , rc.font , rc.local
这几个 shell script 的说明 . ( rc.inet1 , rc.inet2 这两个关於网路的
shell script 将在以後单独说明 )
好了 , 我们先从 inittab 看起吧 ! 看看上面的流程 , 在第一行 : init[1]
也就是 init 这个 process 被启动之後 , 它会去读取 /etc/inittab 这个档案
以完成系统的启动 . 从这里 , 我们看到了 LINUX 的确融合了 SVR4 及 SunOS
的一些特性 , inittab 这个档案 , 在 SunOS 系统中是不存在的 , 但是它却是
SVR4 典型的档案 . init 这个 process 会依据 /etc/inittab 中所记载的内容
进入不同的 run-level 并启动不同的 process . 所以 inittab 的重要性
可见一斑 . 那什麽叫 run-level 呢 ? 所谓 run-level 就是系统中定义了许多
不同的 level , 而系统会随著 level 的不同而去启动不同的资源 .
现在就让我们来看一下 /etc/inittab 中的内容 :
在 /etc/inittab 这个档案中 , 每一列是一个进入点 , 假如我们仔细观察每一列
的话 , 那我们就会很容易的发现 , /etc/inittab 的每一列可以被 " : " 这个
字元分成好几个栏位 . 这几个栏位的格式如下 :
id:runlevels:action:process
而它们代表的意义分别如下 :
id : 由两个独特的字元所组成的辨示符号 , 在比较新的 UNIX 系统中 , 已不
受只能有两个字元的限制 .
runlevels : 指出下面一个栏位中的 action 以及 下下个栏位中的 process
会在那些 runlevel 中被执行 . 这一栏的合法值有 0,1,2...6
s 以及 S . 而在正常的启动程序之後 , Superuser 可以使用
telinit 这个指令来改变系统的 runlevel . 又因为在 LINUX 中
, runlevel 的预设值是 5 ( 等一下就会看到 ) 所以 , 只有
那些每一列中 runlevel 那栏有 5 这个值的 , 後面的 process
才会被启动 . 所以 , 我们就可以想像的到 : " 由於系统的
runlevel 不同 , 所起动的 process 也不尽相同 , 所以系统
起动的资源在每个不同的 runlevel 就会有差异存在 .
action : 这个栏位有一点复杂 , 在这个栏位中记录著 init 在启动相对应的
process 时 , 对 process 所采取的动作 , 而合法的动作有下面几项:
initdefault : 指出系统在启动时 , 预设进入的 run-level 值 ,
比如说 , 我们可以在 /etc/inittab 中找到下面这
一列 : id:5:initdefault:
很明显的 , 系统将在启动时 , 进入 runlevel 为 5
的模式 . 当然 , 你可以把 5 改成 6 试试看 , 如
果你改成了 6 , 那将会执行 /etc/rc.d/rc.6 , 也
就是 run xdm . xdm 在以後有机会的话 , 将为各
位介绍 ......
sysinit : 在系统起动时 , 这个 process 会被执行 . 而所有 process
前的 action 中有 boot 及 bootwait 的 process , 必
须等到这些 action 为 sysinit 的 process 执行完之後
它们才能够执行 .
wait : 在起动一个 process 之後 , 若要再起动另一个 process , 则
必需等到这个 process 结束之後才能继续 .
respawn : 代表这个 process 即使在结束之後 , 也会重新被启动 ,
最典型的例子就是 getty ( 在 LINUX 中为 agetty ) .
看看下面的循环 :
-- getty --> login --> shell --> logout --
^ |
-------------------
北极星书库||http://www.ebook007.com
即使在 getty 结束之後 , 它也会重新被启动 .
ctrlaltdel : 想必有人会以键盘上的 Ctrl , Alt , 及 Del 这三个
键来达到使系统 shutdown 的目的 , 现在我们果然在
/etc/inittab 中看到了这一列 :
ca::ctrlaltdel:/sbin/shutdown -t3 -rf now
所以说 , 当我们按下这三个键的时候 , init 会收到
SIGINT 这个 signal , 接著就执行 shutdown 的动作
不过 , 我们最好不要养成按 Ctrl-Alt-Del 来使系统
shutdown 的习惯 , 尤其在单人多工的作业系统 , 像
OS/2 , 甚至 Windows 95 , shutdown 几乎都是标准
的关机程序了 , 更何况是多人多工的 LINUX , 所以 ,
shutdown 这个指令是一定要熟悉的 .
除了上面的几个 action 之外 , 另外还有一些合法的 action , 但这
些 action 并不需要太注意 , 要用的时候再利用 man init 去查询就
可以了 .
process : 这一栏中可以是 shell script 或是可执行的程式 .
好了 , 当我们了解 /etc/inittab 中每一栏的意义之後 , 要看懂 /etc/inittab
就是一件轻松愉快的工作了 . 在 /etc/inittab 档中 , 我们可以看到下面这一段
c1:12345:respawn:/sbin/agetty 38400 tty1
c2:12345:respawn:/sbin/agetty 38400 tty2
c3:45:respawn:/sbin/agetty 38400 tty3
c4:45:respawn:/sbin/agetty 38400 tty4
c5:45:respawn:/sbin/agetty 38400 tty5
c6:456:respawn:/sbin/agetty 38400 tty6
简单来说 , 系统在起动之後会制造出六个虚拟的 console . 我想大家应该有试过
用 Ctrl-Alt + F1 - F6 可在这六个 console 之间切换 ; 若你使用 XWindows 时
想暂时回到 console 下时 , 可用 Ctrl-Alt + F1 - F6 这三个键来选择 , 若想
回到 XWindows 下时 , 只要以 Ctrl-Alt-F7 就可以回到 XWindows 下了 . 基本
上 , 对於 memory 比较少的人 , 可以不要开那麽多的虚拟 console , 那麽就可
以去掉上面的几列 . 还有 , 在前面我们也提过 , 可以把预设的 runlevel 从 5
改成 6 , 对於 beginner 来说 , 系统一启动完就直接进入 XWindows 也许是一个
不错的设定方法 ......
介绍完 /etc/inittab 之後 , 我们接著看 rc.M ! 由前面的流程当中 , 我们看到
rc.M 中又包含了四个 shell script , 其中 rc.inet1 及 rc.inet2 是有关於网路
的设定 ; rc.font 是作字型的设定 , 而 rc.local 中可以放一些想要起动的
daemon .
我们现在就来看看 rc.M , 依照往例 , 前面有两个 "#" 的为加上去的注解 .
只有一个 "#" 的为原来的注解 :
#!/bin/sh
#
# rc.M This file is executed by init(8) when the system is being
# initialized for one of the "multi user" run levels (i.e.
# levels 1 through 6). It usually does mounting of file
# systems et al.
#
# Version: @(#)/etc/rc.d/rc.M 2.02 02/26/93
#
# Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
## 显示进入多人模式
echo "Going multiuser..."

## 下面一列的意思是 : 假如你在文字模式的 console 下 , 在15分钟内都没有动作
## 的话 , 萤幕就会自动暗下来 , 简单的说 , 就是 screen saver 的功能 .
/bin/setterm -blank 15

## 执行 crond 这个 daemon . 不用说 , crond 在系统中扮演了很重要的角色 ,
## 它负责每过一段时间後 , 就去看看 /var/spool/cron/crontabs 中有那些 file
## 要 run , 这些 file 往往有一个固定的时间 , 比如说 : 每个月的 1 号 , 每
## 天凌晨等 ...... 我们可以用平常的编辑器编好一个档案 , 里面的格式如下 :
##
## 分 时 日 月 星期 命令
##
## 举例来说 , 59 23 31 12 * /etc/wall happy_new_year
## 在每年的 12 月 31 号晚上 11 点 59 分 会对每个系统上的 user 送出
## happy_new_year 中的内容
##
## 接著我们可以利用 crontab <档案名> 这个指令来把此档案放到
## /var/spool/cron/crontabs中□. 我们可以看看 /var/spool/cron/crontab 下
## 有一个 root 的档案 , 看看里面的内容 :
##
## 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
##
## 所以各位看到了 , 在前两期提到的 at 命令是五分钟才被 run 一次的
##
## 再举一个简单的例子好了 : 我们先用一般的文书编辑器造出一个名为 crontest
## 的档案 , 内容如下 :
##
## 5 * * * * ls -la ~/ >> ~/hehehaha
##
## 接著 , 我们键入下面的命令 : crontab crontest
## 此时 , 从内容得知 , 每五分钟 crond 就会执行 ls -la , 把你 home directory
## 的内容加入 hehehaha 这个档案中 .
##
## 当然啦 ! 这个例子简直是毫无意义可言 :) 但是 , 大家既然知道了基本原理 ,
## 利用 crontab , at 这些指令 , 就可以简化一些系统管理的动作 , 同时在执行
## 一些工作时 , 也会比较有弹性 .
/usr/sbin/crond -l10 >>/var/adm/cron 2>&1

## 假如 /etc/HOSTNAME 不能读取的话 , 就把 darkstar.frop.org 当成 HOSTNAME
## 中的内容 . 老实说 , 下面这三列去掉也不打紧 ......
if [ ! -r /etc/HOSTNAME ]; then
echo "darkstar.frop.org" > /etc/HOSTNAME
fi

## 下面从 if 到 fi 夹起来的部份 , 主要就是在执行 rc.inet1 , rc.inet2 . 这
## 些都是网路设定的工作 , 尤其是 rc.inet2 , 启动了一大堆 daemon , 这部份
## 要牵扯到的东西太多了 . 像 subnet 与 netmask 等 ...... 类似这种观念 ,
## 都不是三言两语就可以玩完的 , 所以就留待以後再说 .
if [ -x /etc/rc.d/rc.inet1 ];
then
/bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`
/bin/sh /etc/rc.d/rc.inet1
/bin/sh /etc/rc.d/rc.inet2
else
/sbin/hostname_notcp `cat /etc/HOSTNAME | cut -f1 -d .`
/usr/sbin/syslogd
/usr/sbin/klogd
/usr/sbin/lpd
fi

## 在某些资源独占的情况下 , 一些应用程式往往会制造出 lock 档 . 假如这些
## lock 档在重新开机以後还是存在的话 , 那就很不好了 . 所以 , 下面就是在
## 作这些删除 lock 档的动作 , 并把一些输出的讯息丢到 /dev/null 去 .
## 在上一期的内容中 , 我们就有提到 /dev/null 了 , 也有提到抑制讯息输出的
## 方法 . 现在我们果然看到了一个实例 ......
/bin/rm -f /var/spool/locks/* /var/spool/uucp/LCK..* /tmp/.X*lock 1> /dev/null 2> /dev/null

## 假如你有玩 hunt 这个 game 的话 , 那在 /tmp 下会有一个 socket 型态的档案
## 我们要把它删除之後才能开始另一个 game ......
if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then
echo "Removing your stale hunt sockets from /tmp..."
/bin/rm -f /tmp/hunt*
fi

## 设定 share library 的 link 及 cache . 这个指令只有 Superuser 才能使用
## 的 , 它也相当的重要 . 万一你的 /etc/ld.so.cache 很不幸的 corrupt 了 ,
## 那我们也可以利用这个指令来让它重新 link , 先删除 /etc/ld.so.cache ,
## 再以 ldconfig -v 重新制造就可以了 .
/sbin/ldconfig

## 起动 sendmail daemon , 并且让它 15 分钟就去看一看 spool , 处理收发信件
if [ -x /usr/sbin/sendmail ]; then
echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)..."
/usr/sbin/sendmail -bd -q 15m
fi

## 假如 /etc/rc.d/rc.font 是可读的话 , 就执行 rc.font 这个 shell script ,
## 而这个 shell script 主要是设定 text mode 下萤幕的字型
if [ -r /etc/rc.d/rc.font ]; then
/etc/rc.d/rc.font
fi

## 在系统管理中 , 我们常常把一些 local 的东西另外放在一个地方 , 这样才不
## 会与原来的东西混淆 . 同时 , 因为 local 的东西更新版本的速度总是也比较
## 快 , 在这种情况下 , 常常会变动的东西也可以放在 local 的区域中 , 这样
## 管理起来比较方便 . 也许各位也注意到了 : 为什麽会有 /usr/bin 及
## /usr/local/bin 之分 . 就个人认为 , 像自己 compile 出来的东西 , 假如
## 觉得还不错 , 就可以把它放在 /usr/local/bin , 因为它是新增的 , 所以我
## 把它放在 /usr/local/bin . 当然啦 , 这只是个人喜好罢了 , 你要放那里
## 都是可以的 , 只要找得到 , 易於使用及管理就好 .
## 同样的 , 若我们要起动一些新增的 daemon 或 shell script , 那放在
## 是不错的选择 .
## 下面一列就是去执行 rc.local 中的设定 , 通常是一些 daemon 或是 shell
## script
/etc/rc.d/rc.local

# All done.

到这里 , rc.M 已经结束了 , 我们来看看从 rc.M 之中执行的 rc.font 及
rc.local ......
下面是 rc.font 的内容 :
#!/bin/sh
#
# This selects your default screen font from among the ones in
# /usr/lib/kbd/consolefonts.
#
## 我想下面这一列的命令非常明显了 , 就是设定 console 中的字型 , 你可以
## 改成自己喜欢的字 . 或者你也可以利用 fontconfig 这个指令来改变 .
setfont /usr/lib/kbd/consolefonts/default8x16

看完了 rc.font 後 , 我们来看看 rc.local 的内容 . 我所要说的是 : rc.local
毕竟是自己设定的区域 , 所以每个人的可能都不一样 , 就我而言 , 因为我多 run
了一些 daemon , 所以与大家的可能不太相同 . 所以 , rc.local 作参考就可以了.
下面是我的 rc.local :
#! /bin/sh
# Put any local setup commands in here
# Running selection

## lpd 是控制印表机的 daemon , 要想在 LINUX 下用印表机 , 这个 daemon 必需
## 要被起动 , 此外还要修改 /etc/printcap . 详细的情况要去看 PRINT-HOWTO
echo -n "lpd"
/etc/lpd

## httpd 就是 WWW server 的 daemon . 想必大家都用过 Mosaic , Netscape 等
## 的浏览器 . 但假如我们想建立自己的 WWW server , httpd 必须要执行 .
echo -n " httpd"
/usr/local/etc/httpd/src/httpd

## 在 WWW 的时代还没来临以前 , gopher 可说是具有最方便的资料索引功能 , 即使
## 到了现在 , gopher 仍然占有一席之地 , 在这里 , 因为我有建立自己的 gopher
## server , 所以 gopherd 必需被起动 .
echo -n " gopherd"
/usr/local/sbin/gopherd -u nobody

## 下面这个指令是 mouse 在 console 下做 cut & paste
echo -n "Running selection..."
selection -t ms &
echo '


北极星书库-->Linux使用技巧集(佚名)

北极星书库 〉 操作系统书籍

Linux使用技巧集

作者：佚名

安装“红帽子” | 《一步一步安装Turbo Linux 》
如 何 在 Linux 下 拨 号 上 Internet 网 | Linux 下 的 VC 集 成 开 发 环 境
Linux DOS2Linux mini-HOWTO | Linux运行环境
跟我学用Linux命令 | 在RedHat 5.0中配置News Server
在xteam linux下上网冲浪 | 在linux下设置WWW Server
用linux下的php3发E-MAIL | PHP4.03在linux下的安装
inittab的重要意义 | 用比较法学Linux基本命令
标题： 从NT引导程序来启动LINUX | 在Linux机器上设置pop3代理
实现LINUX与WINDOWS95文件共享 | 如何在Linux上建立DNS服务器
用FIPS为LINUX分区 | 在RedHat5.0中配置News Server
定制Linux内核，发挥Linux潜能 | (LILO配置文件) 手册
Linux中的字型(FONTS)设定 | Linux中IP隧道的分析与建议
如何在Linux服务器上设置DNS? | LINUX的引导过程
Linux部分命令简介 | Linux下即插即用设备的安装
RedHatLinux用户管理经验点滴 | 如何编译Linux的内核
对RedHat系统的一些概括性描述 | Linux系统的简介及安装过程
深入Linux的LILO | Linux开机程序之研讨
剖析Linux 的开机 | 在Win95和Linux之间建立直接电缆连接
oracle 8.05 的简明安装和操作说明 |