Debian参考手册
LYOO 翻译 转自 www.linuxsir.com
Debian参考手册
概述
Debian参考手册旨在为运行Debian的用户提供全面的指导。书中提供了大量shell-command实例,它们涵盖系统管理的方方面面,包括的主题有:Debian的基本概念、系统安装提示、Debian软件包管理、Debian中的Linux内核、系统微调、建立网关、文本编辑器、CVS、程序设计、面向非开发者的GnuPG等,每个主题都包括基础指南、实用技巧和其它相关信息。
版权声明
Copyright ? 2001–2002 by Osamu Aoki <osamu@debian.org>.
Copyright
(Chapter 2) ? 1996–2001 by Software in the Public Interest.
本文档版权适用于GNU General Public License version 2 或更高版本的相关条款。
在遵守并包含本文档版权声明的前提下,制作和发布本文档的完整拷贝是允许的。并且,所有这些拷贝均受到本许可声明的保护。
在遵守上述完整拷贝版本有关版权声明的前提下,拷贝和发布基于本文档完整拷贝的修改版本是允许的,并且,发布所有通过修改本文档而得到的工作成果,须使用与本文档的许可声明一致的许可声明。
在遵守上述修改版本版权声明的前提下,拷贝和发布本文档其它语言的翻译版本是允许的,如果本许可声明有经自由软件基金会(Free Software Foundation)核准的当地化译本,则遵循当地化译本。
目录
●1. 序
○1.1 官方文档
○1.2 文档约定
○1.3 脚本样例
○1.4 基本设置
○1.5
Debian发行版(distributions)基本概念
●2. Debian基础
○2.1 Debian文件
·2.1.1 目录结构
·2.1.2 Debian发行版
·2.1.3 stable发行版
·2.1.4 testing发行版
·2.1.5 unstable发行版
·2.1.6
frozen发行版
·2.1.7 Debian发布版代号
·2.1.8 已用过的发布版代号
·2.1.9 发布版代号来源
·2.1.10 pool目录
·2.1.11 sid的诞生记
·2.1.12 上载到incoming中的软件包
·2.1.13
找回旧软件包
·2.1.14 发布源目录结构
·2.1.15 源代码
○2.2 Debian软件包管理系统
·2.2.1
Debian软件包概述
·2.2.2 Debian软件包格式
·2.2.3 Debian软件包命名约定
·2.2.4 保存本地设置
·2.2.5 Debian系统维护脚本
·2.2.6 软件包优先级
·2.2.7 虚拟软件包
·2.2.8 软件包关联性
·2.2.9 何为“pre-depends”
·2.2.10 软件包状态
·2.2.11 阻止软件包升级
·2.2.12 源码包
·2.2.13 编译源码包
·2.2.14 新建Debian软件包
○2.3 Debian系统升级
·2.3.1 系统升级方法
·2.3.2 软件包管理工具概述
·2.3.3 dpkg
·2.3.4 APT
·2.3.5 dselect
·2.3.6 不停机系统升级
·2.3.7 下载.deb文件
·2.3.8 升级记录
○2.4 Debian系统引导进程
·2.4.1 init程序
·2.4.2 运行级别
·2.4.3 自定义系统引导进程
○2.5 多样性支持
○2.6
国际化
○2.7 Debian和系统内核
·2.7.1 编译非Debian源码包内核代码
·2.7.2 自定义内核创建工具
·2.7.3 多系统引导器
·2.7.4 制做引导软盘
·2.7.5 模块加载规定
·2.7.6
De-installing旧版内核软件包
●3.Debian系统安装提示
○3.1 常规Linux安装提示
·3.1.1 硬件兼容性
·3.1.2 确定PC硬件和芯片组
·3.1.3 在Debian下确定PC硬件
·3.1.4 在其它OS下确定PC硬件
·3.1.5 Lilo神话
·3.1.6
GRUB
·3.1.7 选择引导软盘
·3.1.8 安装系统
·3.1.9 网络所需的主机名和IP地址
·3.1.10 用户帐号
·3.1.11 创建文件系统
·3.1.12 DRAM内存指导
·3.1.13 Swap空间
○3.2 Bash设置
○3.3 鼠标设置
·3.3.1 PS/2鼠标
·3.3.2 USB鼠标
○3.4 NFS设置
○3.5 Samba设置
○3.6 打印机设置
·3.6.1 lpr/lpd
·3.6.2 CUPS
○3.7 其它主机安装提示
·3.7.1
初始化安装
·3.7.2 模块
·3.7.3 CD-RW基本步骤
·3.7.4 多内存和自动关机
·3.7.5 某此站点
·3.7.6 PPP拔号设置
·3.7.7 /etc中的其它配置文件
●4. Debian指南
○4.1 信息资源
○4.2 Linux控制台
·4.2.1 登录
·4.2.2 添加用户
·4.2.3 如何关机
·4.2.4 命令行编辑
·4.2.5 需要牢记的基本命令
·4.2.6 X Window系统
·4.2.7 重要键盘命令
○4.3 午夜指挥官(Midnight Commander)
·4.3.1 安装MC
·4.3.2
启动MC
·4.3.3 文件管理器
·4.3.4 命令行技巧
·4.3.5 编辑器
·4.3.6 阅读器
·4.3.7
自启动特性
·4.3.8 FTP虚拟文件系统
○4.4 进一步学习
●5. 发布版升级
○5.1 迁移准备工作(从“stable”到“testing”)
○5.2 升级到“testing”
·5.2.1 最好使用dselect升级
·5.2.2 最好别用apt-get升级
○5.3 配置Woody
○5.4
优化sources.list
●6. Debian软件包管理
○6.1 概述
·6.1.1 主要工具
·6.1.2 方便的工具
○6.2
Debian生存工具
·6.2.1 使用tasksel安装任务
·6.2.2 使用APT安装系统
·6.2.3 使用APT升级系统
·6.2.4 检测程序错误寻求帮助
·6.2.5 APT升级错误及解决方法
·6.2.6 使用dpkg救助
·6.2.7
/var被删除后如何恢复系统
·6.2.8 为无法启动的系统安装软件包
·6.2.9 如果dpkg命令出错该怎么办
○6.3
Debian必杀技
·6.3.1 文件信息
·6.3.2 软件包信息
·6.3.3 使用APT进行全自动系统安装
·6.3.4
配置已安装软件包
·6.3.5 删除软件包
·6.3.6 挂起旧软件包
·6.3.7
stable/testing/unstable混合系统
·6.3.8 dselect——全面配置
·6.3.9 删除缓存包文件
·6.3.10 记录/拷贝系统配置
·6.3.11 向stable系统引入软件包
·6.3.12 本地软件包文件
·6.3.13
转化或安装外来软件包
·6.3.14 校验已安装软件包
○6.4 其它Debian特性
·6.4.1 dpkg-divert命令
·6.4.2 equivs软件包
·6.4.3 可选命令
·6.4.4 System-V init文件和运行级别
·6.4.5
停止daemon服务
●7. Debian下的Linux内核
○7.1 内核编译
·7.1.1 Debian标准方式
·7.1.2 经典方式
·7.1.3 内核头文件
○7.2 模块化2.4内核
·7.2.1 PCMCIA
·7.2.2 SCSI
·7.2.3
网络功能
·7.2.4 EXT3文件系统(>2.4.17)
·7.2.5 对Realtek RTL-8139的支持
·7.2.6
并行端口支持
·7.2.7 打开了太多文件
●8. Debian技巧
○8.1 启动系统
○8.2 活动记录
○8.3 拷贝及创建子目录
·8.3.1
拷贝整个子目录的基本命令
·8.3.2 cp
·8.3.3 tar
·8.3.4 pax
·8.3.5 cpio
·8.3.6 afio
○8.4 差异备份与数据同步
·8.4.1 使用rdiff进行差异备份
·8.4.2
使用RCS进行定期差异备份
○8.5 系统冻结恢复
·8.5.1 中止一个进程
·8.5.2 ALT-SysRq
○8.6
记住这些可爱的小命令
·8.6.1 Pager
·8.6.2 Free
·8.6.3 设定时间(BIOS)
·8.6.4
设定时间(NTP)
·8.6.5 如何禁用屏幕保护程序
·8.6.6 搜索管理数据库
·8.6.7 禁用声音(响铃)
·8.6.8 控制台上的错误信息
·8.6.9 正确设置控制台类型
·8.6.10 恢复控制台的健壮性
·8.6.11
将DOS下的文本文件转换为Unix类型
·8.6.12 正则表达式的置换
·8.6.13 提取源文件修改部分合并到更新包
·8.6.14
分割大文件
·8.6.15 精巧的管道命令辅助脚本
·8.6.16 从网页上获取文本或邮件列表文档
·8.6.17 打印网页
·8.6.18 打印帮助页面
·8.6.19 合并两个Postscript或PDF文件
·8.6.20 执行命令计时
·8.6.21 nice命令
·8.6.22 日程安排(cron,at)
·8.6.23 用screen来定制控制台
·8.6.24 网络测试基础
·8.6.25 Flush mail from local spool
·8.6.26 Remove
frozen mail form local spool
·8.6.27 再分发mbox中的信件
·8.6.28 清空文件内容
·8.6.29 空文件
·8.6.30 chroot
·8.6.31 怎样检查硬链接
·8.6.32 mount硬盘上的镜像文件
·8.6.33 Samba
●9. Debian系统微调
○9.1 系统初始化提示
·9.1.1 自定义init脚本
·9.1.2 自定义系统日志
·9.1.3 硬件存取优化
○9.2 访问权限控制
·9.2.1 使用PAM和系统登录
·9.2.2 “为什么GNU
su命令不支持wheel组”
·9.2.3 各种用户组的含义
·9.2.4 sudo——一个安全的工作环境
·9.2.5
daemon程序的访问权限控制
·9.2.6 轻便目录访问控制协议(LDAP)
○9.3 刻录机
·9.3.1 概述
·9.3.2 方法一:modules+lilo
·9.3.3 方法二:重编译内核
·9.3.4 配置步骤
·9.3.5
光盘镜像文件(可引导)
·9.3.6 刻录光盘(R,R/W)
·9.3.7 制作光盘镜像文件
·9.3.8 Debian安装盘镜像
·9.3.9 将系统备份到光盘
·9.3.10 刻录音乐CD
○9.4 X程序
·9.4.1 X系统软件包
·9.4.2
X服务器的硬件侦测包
·9.4.3 X服务器
·9.4.4 X客户端
·9.4.5 X会话
·9.4.6 X的TCP/IP联接
·9.4.7 X远程联接:xhost
·9.4.8 X远程联接:ssh
·9.4.9 xterm
·9.4.10 X资源数据库
·9.4.11 X下获取root权限
·9.4.12 X下的TrueType字体
·9.4.13 网页浏览器(图形化)
○9.5
SSH
·9.5.1 基础
·9.5.2 发送端口——SMTP/POP3微调
·9.5.3 用更少的密码建立联接
·9.5.4
其它平台的SSH客户端
·9.5.5 SSH代理
·9.5.6 问题解决
○9.6 邮件程序
·9.6.1
邮件传输代理(Exim)
·9.6.2 邮件工具(Fetchmail)
·9.6.3 邮件工具(Procmail)
·9.6.4
邮件用户代理(Mutt)
○9.7 本地化及国家语言支持
·9.7.1 定制基础
·9.7.2 地区
·9.7.3
激活地区支持能力
·9.7.4 激活特定地区
·9.7.5 ISO 8601日期格式
·9.7.6 US(ISO-8859-1)例子
·9.7.7 带euro符号的France(ISO-8859-15)例子
·9.7.8 双语系统的例子(日本语EUCT和ISO-8859-1)
·9.7.9 X下UTF-8的例子
·9.7.10 FB控制台下UTF-8的例子
·9.7.11 超越地区
●10. 使用Debian系统架设网关
○10.1 网络配置
·10.1.1 网关主机设置
·10.1.2 网络设置检查
○10.2 网络过滤器设置
·10.2.1 网络过滤器基础
·10.2.2 过滤表(Netfilter table)
·10.2.3 过滤目标(Netfilter target)
·10.2.4 网络过滤器命令
·10.2.5 IP伪装
·10.2.6 重定向SMTP联接
○10.3 管理多重网络联接
●11. 编辑器
○11.1 流行的编辑器
○11.2 应急的编辑器
○11.3 Emacs和Vim
·11.3.1
Vim提示
·11.3.2 Emacs提示
·11.3.3 打开编辑器
·11.3.4 编辑器命令总汇(Emacs,Vim)
·11.3.5 Vim设置
·11.3.6 语法上色(Ctags)
·11.3.7 将高亮显示的屏显转化为HTML文件
·11.3.8 用vim分割屏显
●12. 系统版本控制
○12.1 CVS
·12.1.1 安装CVS服务器
·12.1.2 CVS会话例子
·12.1.3 CVS问题解决
·12.1.4 CVS命令
○12.2 Subversion
·12.2.1
安装Subversion服务器
·12.2.2 将CVS仓库移入Subversion
·12.2.3 Subversion用法样例
●13. 编程
○13.1 从哪儿开始
○13.2 Shell
·13.2.1 Bash——GNU标准交互shell
·13.2.2 POSIX shell
·13.2.3 Shell参数
·13.2.4 Shell重定向
·13.2.5
Shell条件
·13.2.6 命令行处理
○13.3 Awk
○13.4 Perl
○13.5 Python
○13.6 Make
○13.7 C
·13.7.1 简单C编程(gcc)
·13.7.2 调试
·13.7.3
Flex——更好的Lex
·13.7.4 Bison——更好的Yacc
·13.7.5 Autoconf
○13.8 准备文档
·13.8.1 roff排版
·13.8.2 SGML
○13.9 打包
·13.9.1 单个二进制文件打包
·13.9.2 使用工具打包
●14. GnuPG
○14.1 安装GnuPG
○14.2 使用GnuPG
○14.3 管理GnuPG
○14.4
在应用程序中使用GnuPG
·14.4.1 在Mutt中使用GnuPG
·14.4.2 在Vim中使用GnuPG
●15. Debian技术支持
○15.1 参考资料
○15.2 查词意
○15.3 查找流行的Debian软件包
○15.4 Debian错误跟踪系统
○15.5 邮件列表
○15.6 IRC
○15.7 搜索引擎
○15.8 网站
●A. 附录
○A.1 作者
○A.2 保证
○A.3 反馈
○A.4 文档格式
○A.5 Debian迷宫
○A.6 Debian引言
Debian参考手册 第一章 序
Debian参考手册
~~~~~
第一章 序
~~~~~
Debian参考手册旨在为运行Debian的用户提供全面的指导。我们假设本文档的读者愿意阅读shell脚本,并且在阅读文档前已具有类Unix系统操作的基础技能。
我并不打算在文中解释所有的细节,因为你可以在manual页面、info页面或HOWTO文档中获得这些。我希望为读者提供些更直接实用的信息而非名词解释,这信息包含在文中列出确切的命令行序列和examples/(http://www.debian.org/doc/manuals/reference/examples/)目录下的脚本样例中。
文中大量的技巧提示均引述自权威参考文献,在〖15.1 参考书目〗 中列出这些参考书目。这也是本文档最初称为“快速参考”的原因之一。
言简意赅(Keep it short and simple 缩写为KISS)是本文写作的主导思想。
如果你在寻找系统紧急救助方面的帮助,请直接阅读〖6.2 Debian生存命令〗。
1.1 官方文档
============
本文档的最新官方文档包含在名为debian-reference的软件包中,你也可在http://www.debian.org/doc/manuals/debian-reference/
上访问到它。
本文档最新开发版本位于http://qref.sourceforge.net/Debian/。该文档项目位于http://qref.sourceforge.net/ ,在那可以下载本文档的纯文本格式,HTML格式、PDF格式、SGML格式和PostScript格式。
1.2 文档约定
============
文中许多信息通过简短的Bash shell命令给出,以下是其排版格式约定:
# command in root account root用户命令
$ command in user account 普通用户命令
... description of action 命令动作描述
更多信息参见〖13.2.1 Bash-GNU标准交互式shell〗。
参考:
·bash(1)表示Unix manual页面信息。
·info libc表示GNU TEXINFO页面信息。
·The C
Programming Language表示参考书目。
·http://www.debian.org/doc/manuals/debian-reference表示URL。
·/usr/share/doc/Debian/reference表示文件。
文中用到了下列缩写:
LDP:Linux Documentation Project(http://www.tldp.org/)
DDPebian
Documentation Project(http://www.debian.org/doc/)
文中只提供了LDP文档的URLs,这些文档还可以以软件包的形式获得,它们安装在/usr/share/doc/HOWTO/。参阅〖15.1 Debian参考〗。
1.3 脚本样例
============
脚本样例可以esamples子目录下找到;其中隐藏文件文件名前的“.”转化为下划线“_”,可选脚本样例给出了扩展名。
1.4 基本设置
============
如果你的系统是最小安装,请执行下面的命令安装必需的软件包和关键文档。
# apt-get install info man-db doc-base dhelp apt apt-utils auto-apt \
dpkg less mc ssh nano-tiny elvis-tiny vim sash \
kernel-package \
manpages manpages-dev doc-debian doc-linux-text \
debian-policy
developers-reference maint-guide \
apt-howto harden-doc install-doc \
libpam-doc glibc-doc samba-doc exim-doc cvsbook \
gnupg-doc
#
apt-get install debian-reference # for Sarge, do this too
1.5 Debian发行版(distributions)基本概念
=========================================
Debian发行版有3种“风格”:
stable:适用于架设产品化服务器,不适用于工作站用户(workstation 缩写WS)。参阅〖2.1.3 stable发布版〗。
testing:适用于工作站用户。参阅〖2.1.4 testing发布版〗。
unstable:千万别盲目使用。参阅〖2.1.5
unstable发布版〗。
有关Debian的版本更新情况请阅读最新的相关邮件列表debian-devel-announce@lists.debian.org。
在2002年3月时,这三个发行版对应为potato(产品化品质),woody(beta-test,非常稳定即将发布),和sid(alpha-test)。到2002年8月,也就是woody刚刚发布,三个发行版对应为woody(产品化品质),sarge(beta-test,有时运行不够稳定),和sid(总处于alpha-test)。如果unstable发行版中的软件包不再出现Release Critical(RC)错误,一周后将自动升级到testing发行版。参阅〖2.1 Debian文件〗。
理论上,获得运行软件的最新版本的有两种方法。
·〖6.2.2 使用APT安装系统〗(主要用于工作站)
·〖6.3.11 向stable系统引入软件包〗(主要用于服务器)
在〖2.
Debian基础〗中我们将讲解有关Debian发行版的一些基本概念,之后,我将向你介绍一些基本信息以帮助你与最新软件快乐相处,并从testing和unstable发布版中获益。心急的读者可以直接翻到〖6.2
Debian生存命令〗。
祝你升级愉快!
Debian参考手册 第二章 Debian基础
Debian参考手册
~~~~~~~~~
第二章 Debian基础
~~~~~~~~~
本章讲述非开发人员需要掌握的Debian系统基础知识。有关知识的权威参考,请参阅:
·Debian政策手册 (Debian Policy Manual)
·Debian软件包包装手册(Potato) (Debian
Packaging Manual(Potato))
·Debian开发者参考 (Debian Developer's Referecne)
·Debian维护新手指南 (Debian New Maintainers'Guide)
列表见〖15.1 参考书目〗
如果你想查阅简要的“how-to”解释文档,可直接跳到〖6. Debian软件包管理〗或其它相关章节。
本章的内容取自“Debian FAQ”,经过较大的改编,以适于普通Debian系统管理者上手。
2.1 Debian文件
==============
2.1.1 目录结构
--------------
Debian软件包位于Debian镜像站点的目录树中。
下列目录存在于任何Debian镜像站点的/debian/目录下:
/dists/:
本目录包含“发行版”(distributions),此处是获得Debian发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径。有些旧软件包及packages.gz文件仍在其中。
/pool/:
所有Debian发布版及已发布版的软件包的新的物理地址。
/tools/:
一些DOS下的小工具,用于创建启动盘、硬盘分区、压缩/解压缩和启动Linux。
/doc/:
Debian的基本文档,如FAQ、错误报告系统使用说明等。
/indices/:
维护人员文件和重载文件。
/project/:
大部分为开发人员的资源,如:
project/experimental/:
本目录包含了处于开发中的软件包和工具,它们均处于alpha测试阶段。用户不应使用这些软件,因为即使是经验丰富的用户也会被搞得一团糟。
/project/orphaned/:
已不再有人维护的软件包,它们已从发行版中孤立出来。
2.1.2 Debian发行版
------------------
通常在dists目录下有三个Debian发行版。它们是“stable”发行版,“testing”发行版,和“unstable”发行版。有时还有一个“frozen”发行版。每个发行版均定义成一个符号链接指向该目录相应的代号目录。
2.1.3 stable发行版
------------------
stable发行版软件包入口,Debian
Woody(3.0r0)被登记到stable目录(符号链接指向Woody目录):
·stable/main/:本目录包含的软件包均是最新Debian系统发布版的正式组成部分。
这些软件包均遵循“Debian自由软件包指导”(Debian Free Software Guidelines,它位于/usr/share/doc/debian/social-contract.txt,须安装debian-doc),它们均可以自由使用和再发行。
·stable/non-free/:本目录包含的软件包受到一定限制,发行者需遵循特殊版权要求。
例如,有些软件包的许可证禁止其用于商业发行的。有些虽可以再发行,但本身是共享软件而非自由软件。以任何方式再发行这些软件包时(例如写入光盘)必须认真阅读有关的许可证或与所有者协商。
·stable/contrib/:本目录包含的软件包均遵循DFSG-free原则,本身也是自由发布的,但这些软件包的关联包不具有自由发行的属性,它们位于non-free目录。
除了上述的目录,新上载的软件包的物理存储位置为pool目录(〖2.1.10 pool目录〗)。
现阶段stable发行版错误报告位于Stable Problems页面。
2.1.4 testing发行版
-------------------
testing发行版软件包入口,处于unstable版本的Debian
Sarge通过级别测试后登记到testing目录(符号链接指向Sarge目录)。现在,除了上述目录,新上载的软件包的物理存储位置为pool目录(〖2.1.10
pool目录〗)。在testing下同样有main,contrib和non-free子目录,它们的作用与stable中的一样。
这些软件包必须可同时运行于所有架构,并且没有关联性问题影响到其安装。比起在unstable中的相应版本,它们有更少的release-critical错误。我们将testing作为更佳发布候选版本。有关testing版本的更多信息见于http://ftp-master.debian.org/testing/。
testing发行版的最新消息发布在下列站点:
·更新理由 http://ftp-master.debian.org/testin...te_excuses.html
·问题测试
http://ftp-master.debian.org/testing/testing_probs.html
·阻碍发布的错误
http://bugs.debian.org/release-critical/
·基本系统错误 http://base.debian.net/
·标准软件包和任务包错误 http://standard.debian.net/
·其它错误记录 http://bugs.debian.net/
2.1.5 unstable发行版
--------------------
unstable发行版软件包入口,sid被登记到unstable目录(符号链接指向sid),上载的软件包在被移至testing目录前一直呆在这儿。新上载的软件包的物理存储位置为pool目录(〖2.1.10
pool目录〗)。在testing下同样有main,contrib和non-free子目录,它们的作用与stable中的一样。
unstable发行版反映了系统的最新开发进展。欢迎广大用户使用并测试这些软件包,同时也提醒你们这些软件包还不完善。使用unstable发行版的好处就是你可以获得Debian项目的最新更新——不过新东西也会出新问题,你得好坏兼收:-)
unstable发行版的最新错误报告见于http://ftp-master.debian.org/testin...able_probs.html页面。
2.1.6 frozen发行版
------------------
当testing发行版足够成熟了,它成为frozen发行版,表示这个版本不再加入新代码,只进行除错工作。同时,dists目录中会建立新的testing发行版目录树,并命名新的版本代号。frozen发行版再经过几个月的测试、更新、再冻结也称之为“循环测试”。(新近的woody发布进程没有创建frozen符号链接,所以frozen并不算发行版,仅仅是testing发行版的一个开发阶段。)
我们将frozen发行版中可能延迟软件包或整个版本发布的错误都记录在案,一但错误总数低于可接受的最大值,frozen发行版就晋升成stable,新版本发布了,先前发布的版本成为过期版(obsolete)(并被移于相应的目录)。
2.1.7 Debian发布版代号
----------------------
存在于dists目录下的物理目录名,例如Woody和Sarge,就是“版本代号(codenames)”。当某个Debian发行版处于开发阶段,它并没有版本号,取而代之的是版本代号。使用版本代号的目的在于简化建立Debian发行版镜像的工作(如果真实目录例如unstable突然改名为stable,许多文件都没必要再次下载)。
当前,stable是一个指向Woody的符号链接,testing是指向Sarge的符号链接。也就是说Woody是当前的stable发行版,Sarge是当前的testing发行版。
unstable发行版是指向sid的永久符号链接,即unstable发行版总称为sid。
2.1.8 已用过的发布版代号
------------------------
已使用过的发行版代号有:buzz for release
1.1,rex for release 1.2,bo for releases 1.3.x,hamm for release 2.0,slink for
release 2.1和potato for release 2.2。
2.1.9 发布版代号来源
--------------------
到目前为止它们均出自Pixar的电影“玩具总动员(Toy
Story)”
·Buzz(Buzz Lightyear)是个宇航员,
·Rex是只暴龙,
·Bo(Bo Peep)是个放羊的女孩,
·Hamm是个小猪攒钱罐,
·Slink(Slinky Dog)是只玩具狗,
·Sarge是位绿色塑料玩具士兵首领,
·Potato当然就是Potato Head先生,
·Woody是个牛仔,
·Sid是隔壁的男孩,那个玩具终结者。
2.1.10 pool目录
---------------
过去,软件包均放在dists目录下相应发行版的子目录中。这种做法产生了许多问题,当镜像站点进行新版本发布时大量带宽被消耗。
现在软件包均放进一个巨大的“池子(pool)”,按照源码包名称分类存放。为了方便管理,pool目录下按属性再分类(main,contrib和non-free),分类下面再按源码包名称的首字母归档。这些目录包含的文件有:运行于各种系统架构的二进制软件包,生成这些二进制软件包的源码包。
你可以执行命令apt-cache showsrc mypackagename,查看“Directory:”行获知每个软件包的存放位置。例如:apache软件包存放在pool/main/a/apache/目录中。由于lib*软件包数量巨大,它们以特殊的方式归档:例如,libpaper软件包存放在pool/main/libp/libpaper/。
诸如apt等命令访问的索引文件仍位于dists目录中,直到本文写作之时,旧发行版的软件包还没转到pool目录,所以你将看到路径的“Filename”域中包含有发行版名称如potato或woody。
通常,你大可不必注意这些,新版的apt和旧版dpkg-ftp(参阅〖2.3.1 Debian系统升级方法〗)会自动处理它们。想了解更多信息,参阅〖Debian Package Pools FAQ〗 http://people.debian.org/~joeyh/poolfaq。
2.1.11 sid诞生记
------------------
过去sid并不存在,Debian文件组织只有一个主要的工作流程:假设当前unstable发行版中创建了某个软件开发项目,当unstable成为新的stable版之时,便是它的发布之日。由于软件包一但发布就需要移动到新的stable目录,当众多软件开发项目移动目录时大量带宽会被吞噬掉,这个流程就显得很不切实际,因而许多软件开发项目并没有按这个方法行事。
经过几年的研究摸索,文档管理员提出一个方案,将未获准发布的二进制文档存入名为sid的特定目录。由于这些软件尚未发布,从那时起,它们就被加入到unstable目录树。当它们首次发布时,将会建立一个从当前stable指向sid的链接。这个方案用户听起来的确有些晕头。
有了软件包储藏池,在woody发行版开发过程中,二进制软件包均按一定规范存放于pool目录,而与发行版无直接关系,当发布新版本时,就不会再出现大量带宽被消耗的问题。(不过,大量带宽还是被开发进程消耗了)。
2.1.12 上载到incoming中的软件包
-------------------------------
上载的软件包首先存放于http://incoming.debian.org/经过检收,确定它们是由Debian开发者上载的(对于那些属于无维护者上载(Non-Maintainer
Upload 缩写 NMU)的软件包则放入DELAYED子目录)。会有一天,它们将从incoming移入unstable。
在紧急情况下,你可能会等不及它们移入unstable而直接从incoming中下载安装。
2.1.13 找回旧软件包
-------------------
最新的Debian发行版存放在任何一个Debian镜像站点的debian目录下。旧版本的Debian如Slink存放在http://archive.debian.org/或Debian镜像站点的debian-archive目录下。
旧的testing和unstable软件包存放在http://snapshot.debian.net/。
2.1.14 发布源目录结构
---------------------
在每个主目录树下(dists/stable/main,dists/stable/contrib,dists/stable/non-free,dists/unstable/main/,等)按芯片架构又分了子目录,每个子目录中存放着在该芯片架构下编译的二进制软件包。
·binary-all/,存放与芯片架构无关的软件包,如Perl脚本、纯文档等。
·binary-platform/,存放运行于该平台的二进制软件包。
请注意,testing和unstable发行版的二进制软件包实际并没存放在这些目录中,它们存放在上一级pool目录中。目录中仍保留有索引文件(Packages和Packages.gz)是为了向下兼容。
要获得有关二进制架构技术支持,参阅各发行版的发布手记(Release Notes),可以访问发布手记站点http://www.debian.org/releases/stable/releasenotes和http://www.debian.org/releases/testing/releasenotes。
2.1.15 源代码
-------------
Debian系统中的一切程序都有源代码,不仅如此,许可证条款规定系统中所有的程序必须和其源代码一起发行,或提供源代码出售。
通常源代码存放在source目录,同时处于多个架构目录(参阅〖2.1.10 pool目录〗)。对于不太熟悉Debian归档目录结构的用户想获得源代码可以试试apt-get source mypackagename命令。
有些软件包,如著名的pine,由于许可证限制,只提供源码包。(最近,pine-tracker软件包提供了一个简易的安装版)安装源码包的方法可参阅〖6.3.11 向stable系统引入软件包〗,〖13.9 封装〗教你如何手工创建一个软件包。
contrib和non-free目录中的软件包可能不提供源代码,因为它们没有正式加入Debian系统。
2.2 Debian软件包管理系统
========================
2.2.1 Debian软件包概述
----------------------
软件包通常包含了实现一系列相关命令或特性所必须的所有的文件。有两种类型的Debian软件包:
·二进制软件包(Binary packages),它包含可执行文件、配置文件、man/info页面、版权声明和其它文档。这些软件包以Debian特定的格式发布(参阅〖2.2.2 Debian软件包格式〗);它们通常使用.deb的扩展名以示区别。这种二进制软件包可使用Debian工具dpkg解包,详情见有关帮助页面。
·源码包(Source packages),包含一个.dsc文件它用于描述源码包(包括下列文件的名称),一个.orig.tar.gz文件它是未经修改的原始源代码压缩文件,以及一个.diff.gz文件它包含了该软件包Debian化时所做的修改。dpkg-source工具可用于打包/解包Debian源码包,详情可参阅有关帮助页面。
软件包管理系统安装的软件包时需要读取那些由软件包维护者精心设计的关联信息,这些关联信息记录在每个软件包的control文件中。例如,包含GNU C编译器(gcc)依赖于binutils软件包。如果用户试图在没有安装binutils情况下安装gcc,软件包管理系统(dpkg)就会发送一条错误信息,告诉你需要安装binutils,并停止安装gcc。(不过,倔强的用户可以对这个信息视而不见,参阅dpkg(8)。)更多信息,参阅下面的章节〖2.2.8 软件包关联性〗。
Debian软件包管理工具可用于:
·操作和管理软件包或软件包的局部内容,
·帮助那些使用有限容量载体如软盘传输的用户分割软件包,
·帮助开发者将开发文件打包成软件包,
·帮助用户从远程Debian文档站点安装软件包。
2.2.2 Debian软件包格式
----------------------
Debian“软件包”,或称之为Debian包文件(Debian archive
file),包含了可执行文件、库文件、和相关程序的文档。通常Debian文件的文件名以.deb结尾。
Debian二进制软件包内部格式描述见deb(5)帮助页面。由于这种内部格式会改变的(特别对于Debian的新旧发布版),所以要操作.deb文件请参阅dpkg-deb(8)。
即便在Woody发行版中,如果有Debian文件使用dpkg命令操作无效,还可用标准的Unix命令ar和tar来操作。
2.2.3 Debian软件包命名约定
--------------------------
Debian软件包命名遵循下列约定:
foo_VersionNumber-DebianRevisionNumber.deb
其中foo代表软件包名称。确定某个特定Debian包文件(.deb文件)的软件包名称有两种方法:
·在Debian包文件站点的软件包存放目录下查看“Packages”文件。该文件有一个段落包含了各个软件包的描述内容;其中第一个域列出了软件包正式名称。
·使用命令dpkg --info foo_VVV-RRR.deb(其中VVV和RRR分别表示该软件包的版本号和修订版号)。屏幕上会显示该软件包解包后的软件包名称。
VVV字段代表该软件开发者制定的版本号。由于没有统一的版本号标准,所以它们的格式会各不相同例如“19990531”和“1.3.8pre1”。
RRR字段代表Debian修订版本号,它是由Debian开发者(或个人用户,假如他选择自己创建软件包的话)制定的。该版本号按照Debian软件包修订标准来制定;一个新的修订版通常表示对下列文件做了修改:Debian makefile(debian/rules),Debian管理文件(debian/control),安装或卸载脚本(debian/p*),或软件包配置文件。
2.2.4 保存本地设置
------------------
Debian的“conffiles”机制,可保存用户配置文件。用户的配置文件(通常位于/etc)由Debian软件包管理系统登记到conffiles。当软件包升级后,软件包管理系统确保这些文件不被覆盖。
如果不需修改各种软件包配置文件就能完成系统配置,那就别去修改它们,即使它们已登记到conffiles。这样做能保证快速平滑的升级操作。
想准确了解哪些文件在升级过程中受到保护,运行:
dpkg --status package
看看“Conffiles”下的文件名列表。
有关Debian conffiles文件的详细内容,可参阅〖Debian Policy Manual〗的11.7节(参阅〖15.1 参考资料〗)
2.2.5 Debian维护脚本
--------------------
Debian维护脚本是一种可执行脚本,它在软件包安装之前或之后自动运行。它和一个名叫control的文件一起组成Debian包文件的“管理”部分。
这些文件是:
preinst
在Debian包文件解包之前,运行这个脚本。许多“preinst”脚本的任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。
postinst
该脚本的任务是完成Debian包文件解包文件的配置工作。通常,“postinst”脚本等待用户输入,或提醒用户,如果他接受当前默认值,要记得软件包安装完后返回重新配置。许多“postinst”脚本负责执行有关命令为新安装或升级的软件重启服务。
prerm
该脚本负责停止与软件包关联的daemon服务。它在删除软件包关联文件之前执行。
postrm
该脚本负责修改软件包链接或文件关联,或删除由它创建的文件。(参阅〖2.2.7 虚拟包〗)
当前,所有的管理文件都存放在/var/lib/dpkg/info目录。与foo软件包相关的文件,名字以“foo”打头,以“preinst”、“postinst”等为扩展名。目录中的foo.list文件列出了foo软件包安装的所有文件。(注意这些文件的位置在由dpkg来确定,可能会因Debina版本而异)
2.2.6 软件包优先级
------------------
每个Debian软件包均被发布者指点了一个优先级,软件包管理系统
优先级是:
·Required 该级别软件包是保证系统正常运行必须的。
包含所有必要的系统修补工具。不要删除这些软件包,否则整个系统将受到损坏,甚至无法使用dpkg恢复。只安装Required级软件包的系统不可能满足所有的用途,但它可以启动起来,让系统管理员安装想要的软件。
·Important 在任何类Unix系统上均安装有该级别软件包。
系统若缺少这类软件,会运行困难或不好操作。该级别软件包并不包括Emacs或X11或TeX或其它大型应用程序,它们只是一些实现系统底层功能的程序。
·Standard 该级别软件包是任何Linux系统的标准件,它们组成一个小而精的字符模式的系统。
系统的默认安装就包括了它们。“Standard”级软件包不包括许多大型应用程序,但它包括Emacs(它比其它应用程序更底层)和Tex及LaTeX的精巧版(不支持X)。
·Optional 该级别软件包包括那些你可能想安装的软件,即使对它们并不熟悉。
它们包括X11,TeX完整发布版和许多应用程序。
·Extra 该级别软件包可能与其它高级别软件包冲突,仅当你知道其用途时才会使用它们,或者有运行它们有专门要求,这些都使它们不适合定为“Optional”级。
2.2.7 虚拟软件包
----------------
虚拟软件包是一个统称,用来指一组具有相近功能的软件包。举个例子,tin和trn都是新闻组阅读软件,当系统中某个程序需要调用新闻阅读器工作时就会产会一个关联关系,它们必须满足这个关联,我们也称之为它们提供了一个叫做news-reader的“虚拟软件包”。
又如,exim和sendmail都提供邮件传输代理的功能。也可称之为提供“邮件传输代理”虚拟包,如果安装了两者之一,那么任何与mail-transport-agent有关联关系的程序发出调用命令时,都会通过这个虚拟包实现调用。
Debian有个机制,如果系统中提供同种虚拟包的软件包安装了多个,系统管理员可以指定一个为首选软件。相关的命令是update-alternatives,更详细的描述参阅〖6.4.3 激活命令〗
2.2.8 软件包关联性
------------------
Debian软件包管理系统有一套软件包“依赖性”定义(用一个标志)用来描述独立运行程序A与现存系统中程序B的存在之间的关系疏密程度:
·软件包A依赖(depends)软件包B:要运行A必须安装B。在有些情况下,A不仅依赖B,还要求B的特定版本。版本依赖通常有最低版限制,A更依赖于B的最新版而非某个特定版本。
·软件包A推荐(recommends)软件包B:软件包维护者认为所有用户都不会喜欢缺少某些功能的A,而这些功能需要B来提供。
·软件包A建议(suggests)软件包B:B中某些文件与A的功能相关(通常能增强其功能)。
·软件包A与软件包B冲突(conflicts):如果系统中安装了B那么A无法运行。多数情况下,冲突是由于A中包含了B中文件的改进版。“Conflicts”常和“replaces”同时出现。
·软件包A替换(replaces)软件包B:B安装的文件被A中的文件移除和覆盖了。
·软件包A提供(provides)软件包B:A中包含了B中的所有文件和功能。这种机制为那些受限于磁盘空间的用户提供了一个途径,只安装A中他们直正需要的部分。
上述术语使用方法的更详细的信息参阅〖Packaging Manual〗和〖Policy Manual〗。
注意,dselect可以对recommend和suggests类软件包进行细操作,apt-get只会简单的下载安装depends类软件包而不管recommends和suggests类软件包。这两个程序均正式使用APT作为其后台。
2.2.9 何为“pre-depends”
-------------------------
“pre-depends”是一种特殊关联关系。对于一个普通软件包,不管系统中是否存在它的关联文件,dpkg都会将它解包。解包主要指dpkg从软件包中取出安装文件。如果系统中不存在这些软件包依赖的软件包,dpkg会拒绝完成安装(通过执行它的“configure”动作)直至安装完所需的软件包。
然而,对有些软件包,dpkg会拒绝解包,除非关联问题被解决。这种软件包就称为“pre-depend”于其它软件包。Debina提供这种机制是为了支持系统从a.out格式向ELF格式安全升级,在这种情况下执行解包操作是非常危险的。对于某些重在升级这种机制也很有用,例如对那些“required”级并有libc关联的软件包。
再次,更多详细信息参阅〖Packaging Manual〗。
2.2.10 软件包状态
-----------------
软件包有各种状态:“unknown”,“install”,“remove”,“purge”和“hold”。这些“希望”标记描述了用户打算如何操作这些软件包(既可以使用dselect的“Select”菜单,也可以直接调用dpkg)。
它们的意思是:
·unknown - 用户并没描述他想对软件包进行什么操作。
·install - 用户希望对软件包进行安装或升级。
·remove -
用户希望删除软件包,但不想删除任何配置文件。
·purge - 用户希望完全删除软件包,包括配置文件。
·hold -
用户希望软件包保持现状,例如,用户希望保持当前的版本,当前的状态,当前的一切。
2.2.11 阻止软件包升级
---------------------
有两种方法阻止软件包升级,使用dpkg,或者在Woody中使用APT。
使用dpkg,首先导出软件包选择列表:
dpkg --get-selections \* > selections.txt
接着编辑文件selections.txt,修改想要恢复的软件所在的行,例如libc6,则将:
libc6 install
改为:
libc6 hold
保存文件,将它装入dpkg数据库:
dpkg --set-selections < selections.txt
或者,如果你知道要恢复的软件包名称,执行:
echo libc6 hold | dpkg --set-selections
这个命令将在每个软件包安装过程中保持该软件包不变。
使用dselect也可以达到同样的效果。进入[S]elect屏幕,找到想阻止其升级的软件包,按“=”键(或者“H”)。更改在你退出[Select]屏幕后立即生效。
Woody中的APT系统有一个新机制来阻止软件包升级,在下载升级档进程中使用Pin-Priority。参阅帮助页面apt-preferecnes(5),或阅读http://www.debian.org/doc/manuals/apt-howto/。
2.2.12 源码包
-------------
源码包发布在source目录中,既可以手工下载可以使用
apt-get source foo
获取它们(参阅apt-get(8)帮助页面)。
2.2.13 编译源码包
-----------------
对于foo软件包,从源码编译需要foo_*.dsc,foo_*.tar.gz,foo_*.diff.gz文件(注意,对于由Debian开发的软件包,没有.diff.gz文件)。
当你得全了这些文件,如果你这安装了dpkg-dev软件包,运行:
$ dpkg-source -x foo_version-revision.dsc
它将软件包解压到一个名为foo-version的目录。
使用下列命令创建二进制软件包:
$ cd foo-version
$ su -c "apt-get update ; apt-get install fakeroot"
$ dpkg-buildpackage -rfakeroot -us -uc
然后,
# su -c "dpkg -i ../foo_version-revision_arch.deb"
安装新编译的软件包。参阅〖6.3.11 向stable系统引入软件包〗。
2.2.14 新建Debian软件包
-----------------------
创建新软件包的详细信息,参阅〖New
Maintainer's
Guide〗,该文档在maint-guide包中,或浏览http://www.debian.org/doc/manuals/maint-guide/。
2.3 Debian系统升级
==================
Debian的设计目标之一就是提供一个一致的升级途径和安全的升级过程,我们致力于旧版本的平滑升级,软件包在升级过程中会将重要信息反馈给用户,并提供一个可能的解决方案。
你也应该阅读发布手记(Release Notes),该文档描述了升级的详细情况,它存在于所有的Debian光盘中,也可以通过互联网访问http://www.debian.org/releases/stable/releasenotes或http://www.debian.org/release/testing/releasenotes。
〖6. Debian软件包管理〗提供了升级的实用指南,本节只作基础细节的介绍。
2.3.1 系统升级方法
------------------
你可以简单的执行匿名FTP或用wget查找想安装的Debian包文件,然后下载,用dpkg装上。(注意dpkg随时随地都能安装升级文件,甚至是正在运行的系统上)然而,有时安装修订包需要先安装其它软件包的新版本,这时安装就会停止,直到所需的软件包被安装好。
许多人觉得这种手工安装太费时,加上Debian软件包升级是那样频繁——通常,每周会上载十几个新软件包。在新版本发布前期更新量更是加倍。为了跟上更新速度,许多用户更乐意使用自动化升级工具。基于此目的出现了几种专门的软件包管理工具。
2.3.2 软件包管理工具概述
------------------------
Debian软件包管理系统有两个设计目标:实现对软件包文件和包中文件的操作。APT和dselect完成前者,dpkg完成后者。
2.3.3 dpkg
----------
它是操作软件包文件的主要工具;参阅dpkg(8)获得完整信息。
dpkg由几个原始的辅助程序演化而来。
·dpkg-deb:操作.deb文件。dpkg-deb(1)
·dpkg-ftp:一个旧的软件包获取命令。dpkg-ftp(1)
·dpkg-mountable:一个旧的软件包获取命令。dpkg-mountable(1)
·dpkg-split:将大软件包分割成小包。dpkg-split(1)
dpkg-ftp和dpkg-mountable已被新的APT系统取代。
2.3.4 APT
---------
APT(the Advanced Packaging
Tool)是Debian软件包管理系统的高级界面,由几个名字以“apt-”打头的程序组成。apt-get、apt-cache、apt-cdrom是处理软件包的命令行工具,它们也是其它用户前台程序的后端,如dselect和aptitude。
更多信息,可安装apt软件包后阅读apt-get(8)、apt-cache(8)、apt-cdrom(8)、apt.conf(5)、sources.list(5)、apt_preferences(5)(woody)以及/usr/share/doc/apt/guide.html/index.html。
另一个资源是〖APT HOWTO〗(http://www.debian.org/doc/manuals/apt-howto/),如果安装了apt-howto包,可在/usr/share/doc/Debian/apt-howto/中找到它。
apt-get upgrade和apt-get dist-upgrade只获取“Depends”类软件包,它忽略“Recommend”和“Suggests”类软件包,不想这样的话,可使用dselect。
2.3.5 dselect
-------------
这个程序是Debian软件包管理系统中菜单驱动的用户界面。特别适用于首次安装和大面积升级。参阅〖6.3.8 dselect——全面配置〗。
更多信息,可安装install-doc包后阅读/usr/share/doc/install-doc/dselect-beginner.en.html或〖dselect Documentation for Beginners〗(http://www.debian.org/releases/wood...select-beginner)。
2.3.6 不停机系统升级
--------------------
Debian系统的内核(文件系统)支持替换使用中文件。
我们还提供了一个程序start-stop-daemon用来在系统启动时开启daemons或内核运行级别(runlevel)改变时停止daemons(例如:从multi-user级转到single-user级或关机)。当安装新软件包时如果该软件包中包含daemon安装,安装脚本会调用这个程序,停止运行中的daemons,然后在合适的时候重启它们。
注意,Debian系统不要求用户在single-user模式下进行不停机升级。
2.3.7 下载和缓存.deb文件
------------------------
如果你手工下载包文件到硬盘(这完全没有必要,请阅读上面有关dpkg-ftp或APT的内容),当你完成软件包安装工作后,可以从系统中删除.deb文件。
如果是使用APT,这些文件会缓存在/var/cache/apt/archives/目录中。你可以在完成安装后删除它们(apt-get clean)或者将它们拷贝到另一个机器的/var/cache/apt/archives/目录中以备以后的安装。
2.3.8 升级记录
--------------
dpkg会对软件包的解包、配置、删除、完全删除进行记录,但不能(目前是这样)记录在包操作的过程中活跃终端的行为。
最简单的解决方法是在运行dpkg、dselect、apt-get等工具的会话中加入script(1)程序。
2.4 Debian系统引导进程
======================
2.4.1 init程序
--------------
同所有的Unix一样,Debian启动要执行init程序。init的配置文件(/etc/inittab)中指定的第一个执行脚本应该是/etc/init.d/rcS。该脚本跟据/etc/rcS.d目录中各脚本的扩展名回溯或分流子进程完成诸如检查并挂载文件系统、装载内核模块、启动网络服务、设定时钟等系统初始化工作。接着,为了兼容性考虑,它运行/etc/rc.boot目录下的文件(除了那些文件名中包含“.”的文件),目录中的脚本通常是供系统管理员使用的,用于有兼容性问题的软件包。更多信息参见〖9.1
系统初始化提示〗。
2.4.2 运行级别
--------------
完成系统启动进程后,init执行默认运行级别(该运行级别由/etc/inittab中的id给出)指定的所有的启动脚本。同所有System
V兼容Unix一样,Linux有7个运行级别:
·0(关闭系统),
·1(单用户模式 single-user mode),
·2到5(各种多用户模式 multi-user modes),
·6(重启系统)。
Debian系统运行id=2,它表示进入多用户模式时默认运行级别为2,所以将运行/etc/rc2.d中的脚本。
实际上,任意目录/etc/rcN.d中的脚本都是指向/etc/init.d/的符号链接。然而,每个/etc/rcN.d目录中文件的名称用来指定/etc/init.d相应脚本的运行方式。特别是,在进入任何运行级别之前,所有名称以“K”打头的脚本均被运行,这些脚本的工作是中止进程。然后,所有名称以“S”打头的脚本被运行,这些脚本的工作是启动进程。名称中跟在“K”或“S”后的两位数规定了脚本运行的先后次序,数字小的脚本先运行。采用这种工作方式是因为/etc/init.d/中的脚本均有一个参数规定脚本“start”、“stop”、“reload”、“restart”或“force-reload”,脚本按各自参数的赋值执行任务。这些脚本甚至可以在系统启动后用来控制多进程。
例如,使用带“reload”参数的命令
# /etc/init.d/sendmail reload
发给sendmail daemon进程一个信号,要它重读配置文件。
2.4.3 自定义系统引导进程
------------------------
Debian没有使用BSD风格的rc.local目录来自定义系统引导进程;它提供自己的自定义机制。
假设系统要在启动时运行foo脚本,或进入指定的(System V)运行级别。那系统管理员可以这样:
1.将foo脚本加入/etc/init.d/目录。
2.使用合适的参数运行Debian命令update-rc.d,这样就在(命令行指定的)rc?.d目录和/etc/init.d/foo之间建立了链接,这里?是0到6中的一个数字,对应于System V的各个运行级别。
3.重启系统。
update-rc.d命令会建立rc?.d目录中文件与/etc/init.d/目录中脚本的链接,每个链接名会以“S”或“K”打头,接下来是一个数字,再就是脚本名。/etc/rcN.d/中以“S”打头的脚本在系统进入运行级别N时被执行。以“K”打头的脚本在离开运行级别N时被执行。
还可以这样来做,将脚本放在/etc/init.d/下然后使用update-rc.d foo default 19建立链接,让foo脚本在系统启动期间执行。参数defaults指默认运行级别,它可以是2到5中某个值。参数19确保foo在其它参数大于20的脚本之前执行。
2.5 多样性支持
==============
Debian提供几种途径,在不破坏系统的前提下满足系统管理员各种要求。
·dpkg-divert,参阅〖6.4.1 dpkg-divert命令〗。
·equivs,参阅〖6.4.2 equivs软件包〗。
·update-alternative,参阅〖6.4.3 可选命令〗。
·make-kpkg可以支持多启动引导。参阅make-kpkg(1)和〖7.1.1 Debian标准方法〗。
/usr/local目录下的所有文件均属于系统管理员,Debian不会改动它们。/etc下的大部分(或全部)文件属于conffiles,Debian不会在升级后覆盖它们,除非系统管理员明确要求覆盖。
2.6 国际化
==========
Debian系统是国际化产品,不论是在控制台下还是在X下,它都提供多种语言的字符显示和输入支持。许多文档、帮助页面以及系统消息都被翻译成各种语言。在安装过程中,Debian提示用户选择安装语言(有时是当地语言变量)。
如果你安装的系统提供的语言特性支持不能满足你的需要,或者你要改变当前语言或安装别的键盘方案以适应你的语言,参阅〖9.7 本地化及国家语言支持〗。
2.7 Debian和系统内核
====================
参阅〖7. Debian下的Linux内核〗。
2.7.1 编译非Debian源码包内核代码
--------------------------------
首先你必须了解Debian
policy有关头文件的规定。
Debian C libraries是依据内核头文件最新稳定发布版创建的。
例如,Debian 1.2发布版使用版本号为5.4.13的头文件。它基于所有Linux FTP文件站点发布的Linux内核源码包,这些源码包使用了最新的头文件。跟随内核源码发布的内核头文件位于/usr/include/linux/include/。
如果你编译某个程序所用的内核头文件比lib6-dev提供的头文件还新,在编译时你必须在命令行中加上-I /usr/src/linux/include/。这些情况是存在的,例如,对于automounter daemon(amd)软件包而言,当新内核改变了对NFS的内部操作方式,amd需要知道这些改变。这时就需要引用新的内核头文件。
2.7.2 自定义内核创建工具
------------------------
对于希望(或必须)使用自定义内核的用户,推荐下载kernel-package软件包。该软件包包含了创建内核包的脚本。有了它,新建Debian内核镜像包只需在内核源码目录的一级目录运行
# make-kpkg kernel_image
执行下述命令可获得有关帮助
# make-kpkg --help
或阅读make-kpkg(8)帮助页面以及〖7. Debian下的Linux内核〗。
如果所需的kernel-source-version(version代表内核版本号)包不存在,用户就得从Linux文件站点分别下载最新的(或需要的)内核源码。Debian的initrd启动脚本需要一个专门的内核路径调用initrd;参阅http://bugs.debian.org/149236。
有关kernel-package包的用法详述见于/usr/doc/kernel-package/README。
2.7.3 多系统引导器
------------------
要使用多系统引导器如grub或loadlin,请将编译好的Linux内核bzimage拷贝到相应的地方(例如/boot/grub或MS-DOS分区)。
2.7.4 制做引导软盘
------------------
Debian的boot-floppies软件包可以帮你制作一张自定义启动软盘,该软件包通常位于Debian
FTP包文件站点的admin分类。软件包中的Shell脚本按syslinux格式制作启动软盘。对于那些使用MS-DOS格式化的软盘,其主引导扇区的记录将被修改为直接引导Linux(或是其它在盘中syslinux.cfg文件里的操作系统)。该软件包中的其它脚本可制作急救盘甚至重建基本系统。
安装该软件包后,阅读/usr/doc/boot-floppies/README文件可获得更多信息。
2.7.5 模块加载规定
------------------
Debian的modconf软件包提供了一个shell脚本,它可以用来自定义内核模块配置。该脚本使用菜单界面,用户通过它给出系统中可挂载设备驱动的有关细节,它再将这些细节信息生成/etc/modules.conf文件(其中列出了别名aliases和其它参数,用于连接各种模块),该配置文件用来加载/etc/modutils/目录下和/etc/modules(其中列出了需要在系统启动时加载的模块)目录的相关模块。
新版的配置帮助文件可为构造自定义内核提供帮助,同样,modconf软件包中也有一系列帮助文件(位于/usr/lib/modules_help/目录下),告诉你如何对模块设定合适的参数。参阅〖7.2 模块化的2.4内核〗中的例子。
2.7.6 卸载旧内核
----------------
kernel-image-NNN.prerm脚本可用来检查当前运行的内核版本,以确定是否与你打算卸载的内核版本相同。因此你可以使用如下命令删除不想要的内核镜像包:
dpkg --purge --force-remove-essential kernel-image-NNN
(当然,要将NNN替换成你的内核版本号和修订版号。)
Debian参考手册 第三章 Debian系统安装提示
Debian参考手册
第三章 Debian系统安装提示
安装Debian的官方文档位于http://www.debian.org/releases/stable/,以及http://www.debian.org/releases/stable/installmanual。
开发版文档位于http://www.debian.org/releases/testing/,以及http://www.debian.org/releases/testing/installmanual(处于写作中,有时可能无法访问)。
尽管“Debian参考手册”写于Potato发布期间,但其中的绝大部分内部均更新至Debian Woody(3.0r0)和Debian Sarge。
3.1 常规Linux安装提示
=====================
为将使用“testing”和“unstable”软件包造成的风险减至最小,可将你的Linux系统设置为双引导,其中包含一个小巧且稳定的Linux系统。
3.1.1 硬件兼容性
----------------
Linux兼容绝大多数PC硬件,而且几乎可以安装在任何系统架构上。对我而言它的安装过程和Windwos
95/98/Me一样简单。可兼容的硬件列表也在不断增加。
如果你有一部笔记本电脑,可以去http://www.linux-laptop.net/查找对应品牌和型号的安装指导。
我推荐的台式机硬件通常“比较保守”:
·用于工作目的时最好选SCSI而不选IDE,IDE/ATAPI HD适于个人使用。
·IDE/ATAPI CD-ROM (或CD-RW)。
·最好选PCI而不选ISA, 特别是网卡(NIC)。
·选用便宜的NIC。Tulip for PCI、NE2000 for ISA都不错。
·初学Linux安装时避免使用PCMCIA (笔记本电脑)。
·别使用USB键盘、鼠标......除非你想证明自己的实力。
如果你的机器特别慢,最好把硬盘插到另一个速度快些的机器上安装。
3.1.2 确定PC硬件和芯片组
------------------------
在安装过程中,可能会要你确定电脑的硬件或芯片组等。有时了解这些信息并非易事,这儿有个方法:
1.打开机箱亲自看看。
2.记下显卡芯片、网卡芯片、串口和IDE端口周围的芯片上印的数字。
3.记下印在PCI和ISA插卡背面的名称。
3.1.3 在Debian下确定PC硬件
--------------------------
在Linux系统中使用下列命令,可获得机器当前使用的硬件及配置的相关信息。
$ /sbin/lspci -v |pager
$ pager /proc/pci
$ pager /proc/interrupts
$ pager /proc/ioports
在安装过程中按ALT-F2进入控制台,可运行这些命令获得帮助。
3.1.4 在其它OS下确定PC硬件
--------------------------
还可从其它操作系统中获取硬件信息。
安装其它商业版Linux,当前它们在硬件侦测方面做得比Debian好,不过一但Sarge中加入了debian-installer,情况就会改变。
安装Windows。用鼠标右键点“我的电脑”在菜单中选属性/设备管理,可获得硬件配置信息。记下所有的资源信息如IRQ、I/O端口地址和DMA。有些旧的ISA卡可能要在DOS下配置。
3.1.5 Lilo神话
--------------
加载Lilo受限于1024柱面。——错!
Debian Potato之后使用的新版lilo支持lba32。只要主板的BIOS版本支持lba32,lilo就可以冲破1024柱面的限制。
如果你使用的是旧版lilo.conf,请确定在你的lilo.conf文件开头的某处加了一行命令指示系统读取“lba32”。参阅/usr/share/doc/lilo/Manual.txt.gz。
3.1.6 GRUB
----------
GNU HURD项目组提供的新的系统引导工具grub可使用于Debian Woody系统。
# apt-get update
# apt-get install grub-doc
# mc
/usr/share/doc/grub-doc/html/
... read contents
# apt-get install grub
# pager /usr/share/doc/grub/README.Debian
... read it :)
要编辑GRUB选单,可编辑/boot/grub/menu.1st文件。参阅〖8.1.6 该如何设置启动参数(GRUB)〗获取有关启动参数设置信息,它和lilo的设置方法不太一样。
3.1.7 选择引导软盘
------------------
Potato时期,在进行普通台式机安装时我喜欢用IDEPCI磁盘套件。到了Woody,我爱用bf2.4启动盘套件。两者都使用同一版本的boot-floppies来创建引导软盘。
如果你有一张PCMCIA网卡,你就得使用标准启动盘套件(使用的软盘数最多,但可用的驱动模块最全)并在PCMCIA设置中配置NIC;别在标准网络设置对话框中设置网卡。
对于特殊系统,需要创建一张自制急救盘,可以用别的机器上编译好的内核压缩镜像替换Debian急救盘中名为“linux”的内核镜像。详情参阅急救盘中的readme.txt文件。急救盘使用MS-DOS文件系统,所以你可以在任何系统下编辑它。这将为那些使用特殊网卡的人造福。
到了Sarge,可用debian-installer或pgi来创建引导软盘。
3.1.8 安装系统
--------------
这方面的官方文档见于http://www.debian.org/releases/stable/installmanual或http://www.debian.org/releases/testing/installmanual(处于写作中,有时可能无法访问)
如果你是用引导软盘安装testing发行版,你需要在安装过程中按ALT-F2打开一个控制台,手工编辑/etc/sources.list文件,将软件包下载入口从stable改为testing。
在安装/dev/hda的mbr时,我喜欢将lilo装在诸如/dev/hda3的位置,这样做可以减小引导信息被覆盖的风险。
下面是我在安装过程中所做的选择。
·MD5 passwords "yes"
·shadow passwords "yes"
·Install "advanced"
(dselect **) and select
·取消emacs (如果它被选中了), nvi, tex, telnet, talk(d);
·选上mc, vim,nano-tiny或elvis-tiny任选一个。
参阅〖6.3.8
dselect——全面配置〗。即使你是个Emacs迷也不要在安装阶段使用它,nano可满足你的需要。也不要安装其它庞大的软件包如TEX(Potato曾在此阶段设置它为默认安装)。参阅〖11.2
应急编辑器〗了解此时安装nano-tiny或elvis-tiny的原因。
·在每个软件包安装对话框中,回答所有的配置提问均=“y”(替换当前值)
·exim:选第2项,因为我使用ISP的SMTP服务器发送邮件。
有关dselect的更多信息,参阅〖6.3.8 dselect——全面配置〗
3.1.9 网络所需的主机名和IP地址
------------------------------
LAN配置的例子(C subnet:
192.168.1.0/24):
Internet
|
+--- 外部ISP提供POP服务(使用fetchmail访问)
|
Access point
ISP提供DHCP服务和SMTP中继服务
| :
Cable modem (Dial-up)
| :
LAN网关外部端口:
eth0 (IP由ISP的DHCP提供)
使用老式笔记本电脑(IBM Thinkpad, 486 DX2 50 MHz, 20 MB RAM)
运行Linux 2.4内核,提供ext3文件系统支持
运行"ipmasq"软件包(安装它的NAT和firewall加强包)
运行"dhcp-client"软件包配置eth0 (覆盖DNS的设定)
运行"dhcp"软件包配置eth1
运行"exim"作为smarthost (mode 2)
运行"fetchmail"设一个较长的时间值(fallback)
运行"bind" 作为高速域名服务器,在从LAN连入Internet时
作为认证域名服务器,在从LAN中连入网中某个域时
运行"ssh"使用端口22和8080(从任何地点连接)
运行"squid"作为缓存服务器连接Debian包文档服务器(APT需要连接它)
LAN网关内部端口: eth1 (IP = 192.168.1.1, 固定)
|
+--- LAN Switch (10 base T)
---+
| |
LAN中一些固定IP客户端 LAN中一些DHCP客户端
(IP = 192.168.1.2-127, 固定) (IP
= 192.168.1.128-200, 动态)
参阅〖10. 使用Debian系统架设网关〗了解更多LAN网关服务器设置方面的信息。
3.1.10 用户帐号
---------------
为了让机器访问起来有一致的感觉,我的系统中开头几个帐号通常是不变的。
我首先创建的用户帐号名是“admin”(uid=100)。我通过该帐号转发所有的root email。该帐号加入到adm用户组(参阅〖9.2.2 “为什么GNU su命令不支持wheel组”〗),这个用户组为成员提供大量root特权的命令,通过su或sudo命令就能使用PAM。详情参阅〖4.2.2 添加用户帐号〗。
3.1.11 创建文件系统
-------------------
3.1.11.1 硬盘分区
^^^^^^^^^^^^^^^^^
我更喜欢将不同的目录树分别装在不同的分区下,这样可以将系统崩溃造成的损失减到最小。例如:
/ == (/ + /boot + /bin + /sbin)
== 50MB+
/tmp == 100MB+
/var ==
100MB+
/home == 100MB+
/usr == 700MB+ with X
/usr/local == 100MB
/usr目录的尺寸很大程度上取决于X-window应用程序和文档的数目。如果只运行控制台终端/usr可以小到300MB,但如果你装了大量Gnome应用程序2GB-3GB也很正常。当/usr增长得太大,将/usr/share移到别的分区是最有效的解救方法。对新的Linux2.4内核包,/目录的大小可能要超过200MB。
例如,当前我的Internet网关服务器的硬盘使用情况如下(由df -h命令输出):
Filesystem Size Used Avail Use% Mounted on
/dev/hda3 300M 106M 179M 38% /
/dev/hda7 100M 12M 82M 13% /home
/dev/hda8 596M 53M 513M 10% /var
/dev/hda6 100M 834k 94M 1% /var/lib/cvs
/dev/hda9 596M 222M 343M 40%
/usr
/dev/hda10 596M 130M 436M 23% /var/cache/apt/archives
/dev/hda11
1.5G 204M 1.2G 14% /var/spool/squid
(有块大空间留给/var/spool/squid作为下载软件包时代理服务器的缓冲区)
下面的fdisk -l输出提供了一个分区分配方案:
# fdisk -l /dev/hda # comment
/dev/hda1 1 41 309928+ 6 FAT16 # DOS
/dev/hda2 42 84 325080 83 Linux #
(not used)
/dev/hda3 * 85 126 317520 83 Linux # Main
/dev/hda4 127 629
3802680 5 Extended
/dev/hda5 127 143 128488+ 82 Linux swap
/dev/hda6 144
157 105808+ 83 Linux
/dev/hda7 158 171 105808+ 83 Linux
/dev/hda8 172
253 619888+ 83 Linux
/dev/hda9 254 335 619888+ 83 Linux
/dev/hda10 336
417 619888+ 83 Linux
/dev/hda11 418 629 1602688+ 83 Linux
里面有一个未使用的分区。留作安装第二个Linux或为增长的目录树提供扩充余地。
3.1.11.2 挂载文件系统
^^^^^^^^^^^^^^^^^^^^^
下面的/etc/fstab文件可完成上述分区的挂载工作:
# /etc/fstab: static file system information.
#
# file system mount
point type options dump pass
/dev/hda3 / ext2 defaults,errors=remount-ro 0 1
/dev/hda5 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0
/floppy auto defaults,user,noauto 0 0
/dev/cdrom /cdrom iso9660
defaults,ro,user,noauto 0 0
#
# keep partition separate
/dev/hda7
/home ext2 rw 0 2
/dev/hda8 /var ext2 rw 0 2
/dev/hda6 /var/lib/cvs ext2
rw 0 2
/dev/hda9 /usr ext2 rw 0 2
/dev/hda10 /var/cache/apt/archives
ext2 rw 0 2
# very big partition for proxy cache
/dev/hda11 /var/spool/squid ext2 rw
0 2
# backup bootable DOS
/dev/hda1 /mnt/dos vfat rw,noauto 0 0
# backup
bootable Linux system (not done)
/dev/hda2 /mnt/linux ext2 rw,noauto 0 0
#
# nfs mounts
mickey:/ /mnt/mickey nfs ro,noauto,intr 0 0
goofy:/ /mnt/goofy nfs ro,noauto,intr 0 0
# minnie:/ /mnt/minnie smbfs
ro,soft,intr,credentials={filename} 0 2
对于NFS,我使用noauto、intr以及默认的hard项。如果有死连接,挂载进程可能会死掉,可以使用Control-C恢复。
对于使用Samba连接的Windows机器(smbfs),rw,auto,soft,intr是个好方案,参阅〖3.5 配置Samba〗。
对于软驱,使用noauto,rw,sync,user,exec可以防止因退盘前未执行卸载命令而造成文件损坏,但它会降低写盘速度。
3.1.11.3 自动挂载
^^^^^^^^^^^^^^^^^
自动挂载的要点:
·加载vfat模块,从而/etc/auto.misc可使用-fstype=auto参数:
# modprobe vfat # prior to the floppy access attempt
... or to automate
this settings,
# cat >>/etc/modules
vfat
^D
... 重启系统。
·设置/etc/auto.misc如下:
floppy -fstype=auto,sync,nodev,nosuid,gid=100,umask=000 :/dev/fd0
...
此处gid=100表示“users”。
·在/home/usrer中创建链接文件cdrom和floppy,分别指向/var/autofs/misc/cdrom和/var/autofs/misc/floppy。
·将user加入“users”用户组。
3.1.11.4 挂载NFS
^^^^^^^^^^^^^^^^
外部Linux
NFS服务器(goofy)处于防火墙(gateway)之后。在我的LAN内部,安全策略非常宽松,因为只有我自己一个用户。为了访问NFS,NFS服务器端要按如下方式加上/etc/exports:
# /etc/exports: the access control list for file systems which may be
#
exported to NFS clients. See exports(5).
/ (rw,no_root_squash)
除安装和激活NFS服务器及客户机外,这一步对激活NFS服务器也是必要的。
我通常创建一个单独的2GB分区,有时想玩玩别的Linux系统,就可以装在这儿。两个系统可共享swap和/tmp分区。多分区方案很难满足这种需求。如果只想装一个运行简单控制台模式的系统,分区留500MB就绰绰有余了。
3.1.12 DRAM内存指导
-------------------
下列是有关DRAM的简单指导
4 MB: Linux内核运行的最低配置。
16 MB: 控制台系统运行的最低配置。
32 MB: 简单X系统运行的最低配置。
64 MB: GNOME/KDE系统运行最低配置。
128 MB: 流畅运行GNOME/KDE。
256+MB:
如果你银子充裕干嘛不呢?DRAM很便宜了。
使用启动选项mem=4m(或lilo append="mem=4m")可以看看只用4MB内存时系统如何运行。如果机器的BIOS比较旧且内存数大于64MB启动时就得加lilo启动参数。
3.1.13 Swap空间
---------------
我按下面的指导原则来划分swap空间:
·每个swap分区均<128MB(使用旧版2.0内核),<2GB(使用最新内核)
·总容量=(机器内存大小的1到2倍)或(128MB到2GB之间)
·将它们分散于不同的硬盘,在/etc/fstab中可使用sw,pri=1选项挂载它们。这样可确保内核以RAID方式使用swap分区,最大限度地发挥swap的性能。
·如果可能,使用硬盘中间的扇区。
尽管你不一定真的需要,但为系统设置多一些swap空间(128MB)总要好点,至少运行有内存漏洞的坏程序,系统会先慢下来而不是马上死机。
3.2 Bash设置
============
我按自己的喜好修改shell启动脚本:
/etc/bash.bashrc 换成你的喜好
/etc/profile 保持发布版设定 ( \w -> \W)
/etc/skel/.bashrc 换成你的喜好
/etc/skel/.profile 换成你的喜好
/etc/skel/.bash_profile 换成你的喜好
~/.bashrc 换成你的喜好,会改变所有用户的设置
~/.profile 换成你的喜好,会改变所有用户的设置
~/.bash_profile 换成你的喜好,会改变所有用户的设置
可以参考我提供的脚本样例。我喜欢系统看起来清清楚楚,所以将umask设为002或022。
PATH依次由以下配置文件设定:
/etc/login.defs - 在shell之前设定PATH
/etc/profile (会调用/etc/bash.bashrc)
~/.bash_profile (会调用~/.bashrc)
3.3 鼠标设置
============
3.3.1 PS/2鼠标
--------------
对于ATX主板上使用PS/2接口的鼠标,信号通路如下:
mouse -> /dev/psaux -> gpm -> /dev/gpmdata = /dev/mouse -> X
这里,创建指向/dev/gpmdata的符号链接/dev/mouse,有助于简化配置操作。(例如,如果你决定不再使用gpm daemon,只需在删掉gpm daemon后,将符号链接/dev/mouse指向/dev/psaux。)
信号通路使得对键盘和鼠标插拔操作,只要重启gpm就可以生效,不必重启X!
处于gpm输出与X输入之间的信号通路协议有两种执行方式,“ms3”(使用Microsoft 3-button serial mouse协议)和“raw”(对于已连接的鼠标使用相同的协议),此处选择的协议将决定X配置中使用的协议。
下面我将示范一下如何配置Logitech 3-button(传统Unix风格的鼠标)PS/2鼠标:
如果新版X4不支持你的显卡则需要使用旧版X3(如某些ATI 64位卡),请配置/etc/X11/X86Config而不是/etc/X11/X86Config-4,下面的示例中使用的是X4:
3.3.1.1 使用ms3协议方式
^^^^^^^^^^^^^^^^^^^^^^^
/etc/gpm.conf |
/etc/X11/X86Config-4
=========================+======================================
device=/dev/psaux | Section "InputDevice"
responsiveness= | Identifier
"Configured Mouse"
repeat_type=ms3 | Driver "mouse"
type=autops2 |
Option "CorePointer"
append="" | Option "Device" "/dev/mouse"
sample_rate= | Option "Protocol" "IntelliMouse"
| EndSection
如果使用这种方式,设置鼠标类型只需编辑gpm.conf,X的设置将保持不变。参阅我的样例脚本。
3.3.1.2 使用raw协议方式
^^^^^^^^^^^^^^^^^^^^^^^
/etc/gpm.conf |
/etc/X11/X86Config-4
=========================+======================================
device=/dev/psaux | Section "InputDevice"
responsiveness= | Identifier
"Configured Mouse"
repeat_type=raw | Driver "mouse"
type=autops2 |
Option "CorePointer"
append="" | Option "Device" "/dev/mouse"
sample_rate= | Option "Protocol" "MouseManPlusPS/2"
| EndSection
如果使用这种方式,设置鼠标类型可编辑gpm.conf,同时也会改变X的设置。
3.3.1.3 如何设置不同的鼠标
^^^^^^^^^^^^^^^^^^^^^^^^^^
gpm的设备类型autops2可以自动检测出市面上大多数PS/2鼠标。不幸的是它也不是万能的,而且Woody之前的发布版中并不包括它,这时可在gpm.conf中试试ps2,或者imps2。想看看gpm支持哪些类型的鼠标可输入:gpm
-t help。参阅gpm(8)。
如果使用的是2键PS/2鼠标,可选上X协议的Emulate3Buttons项。协议中2键鼠标和3键鼠标的区别在于每次按下中间键时,是自动检测还是自动模拟信号传给gpm。
对于在X协议使用raw协议方式或不使用gpm,可使用下面的设置:
·IntelliMouse: 串口鼠标(gpm转换器使用"ms3")
·PS/2: PS/2鼠标(通常首先试试这项)
·IMPS/2:
任何PS/2鼠标(2键、3键或滚轴鼠标)
·MouseManPlusPS/2: Logitech PS/2鼠标
更多信息可浏览http://www.xfree86.org/current/mouse.html。
对于典型的Microsoft滚轴鼠标,有报导说这样设置最好:
/etc/gpm.conf | /etc/X11/X86Config-4
=========================+======================================
device=/dev/psaux | Section "InputDevice"
responsiveness= | Identifier
"Configured Mouse"
repeat_type=raw | Driver "mouse"
type=autops2 |
Option "CorePointer"
append="" | Option "Device" "/dev/mouse"
sample_rate= | Option "Protocol" "IMPS/2"
| Option "Buttons" "5"
|
Option "ZAxisMapping" "4 5"
| EndSection
对于某些最新的Toshiba超薄笔记本,在System-V init脚本中设置gpm先于PCMCIA激活可防止系统锁死。听起来古怪不过是真的。
3.3.2 USB鼠标
-------------
请确定你完成了:
·在内核中打开了“Input Core Support”和“Input Core Support/Mouse Support”或作为模块加载。
·在内核中打开了“Support for USB”、“Preliminary USB device filesystem”、“UHCI or
OHCI”和“USB HID Support”或作为模块加载。
如果你没使用devfs,则需按下面的方法创建一个设备节点/dev/input/mice:
# cd /dev
# mkdir input
# mknod input/mice c 13 63
对于典型的3键USB鼠标,配置如下:
/etc/gpm.conf | /etc/X11/X86Config-4
=========================+======================================
device=/dev/input/mice | Section "InputDevice"
responsiveness= |
Identifier "Generic Mouse"
repeat_type=raw | Driver "mouse"
type=autops2
| Option "SendCoreEvents" "true"
append="" | Option "Device"
"/dev/input/mice"
sample_rate= | Option "Protocol" "IMPS/2"
| Option
"Buttons" "5"
| Option "ZAxisMapping" "4 5"
| EndSection
更多信息可浏览http://www.linux-usb.org/。
3.4 NFS设置
===========
安装NFS要设置/etc/exprots。
# echo "/ *.domainname-for-lan-hosts(rw,no_root_squash,nohide)" \
>> /etc/exports
详情见我的样例脚本。
3.5 Samba设置
=============
参考资料:
·http://www.samba.org/
·samba-doc package
以“share”方式安装Samba比较容易,因为安装过程会创建WfW-type共享驱动器。但最好使用“user”模式来配置它。
可以用debconf或vi来设置Samba:
# dpkg-reconfigure --priority=low samba # in Woody
# vi
/etc/samba/smb.conf
详情参阅我的脚本样例。
可通过smbpasswd向smbpasswd文件添加一个新用户:
$su -c "smbpasswd -a username"
确保使用的加密密码有恰当的兼容性。
按下表中相应的值设定os level(数字越大,服务器的优先级越高)
0: Samba with a loose attitude (will never become a master browser)
1:
Wfw 3.1, Win95, Win98, Win/me?
16: Win NT WS 3.51
17: Win NT WS 4.0
32: Win NT SVR 3.51
33: Win NT SVR 4.0
255: Samba with mighty power
确认用户是共享目录所有组的成员,and that the directory path has its execution bit set to access. (该句何意?望高手指导。译者注)
3.6 打印机设置
==============
传统打印方法是lpr/lpd。新的CUPS系统(Common UNIX Pinting
System)提供了另一方法PDQ,详情参阅〖Linux Pringing HOWTO〗
http://www.tldp.org/HOWTO/Printing-HOWTO.html。
3.6.1 lpr/lpd
-------------
对于lpr/lpd的打印缓冲池(type
spoolers)(lpr,lprng和gnulpr),如果它们连接的是PostScript或text-only打印机(最基本的打印机)可按如下方式设置/etc/printcap:
lp|alias:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:sh:\
:lp=/dev/lp0:
上述各行的意思是:
·Head line: lp — spool名称, alias = alias
·mx#0 — 不限最大文件尺寸
·sh — 不打印页眉
·lp=/dev/lp0 — 本地机印机,或port@host远程打印机
如果连接的是台PostScript打印机,上述设置就够用了。如果是Windows机器通过Samba打印,上述设置也适用于任何Windows支持的打印机(不支持双向通信)。你必须在Windows环境中对打印机做相应的配置。
如果你没有PostScript打印机,就得用gs安装过滤系统。有很多自动配置工具可用于配置/etc/printcap,可选择下列任何一组:
·gnulpr, (lpr-ppd)和printtool — 我用这种
·lpr和apsfilter
·lpr和magicfilter
·lprng和lprngtool
·lprng和apsfilter
·lprng和magicfilter
想运行GUI配置工具如printtool,需要root权限,参阅〖9.4.11 X下获取root权限〗。printtool可创建打印缓冲池,它使用gs模拟PostScript打印机,所以要使用PostScript打印驱动来访问它们。在Windows端,“Apple LaserWriter”是标准件。
3.6.2 CUPS
----------
首先安装Common UNIX Printing System(或CUPS):
# apt-get install cupsys cupsomatic-ppd
# apt-get install cupsys-bsd
cupsys-driver-gimpprint
接着用浏览器来配置系统:
$ mybrowser http://localhost:631
举个例子,将你的打印机联接到可访问打印机列表中:
·在主页面上点击“Printers”,然后点“Add Printer”,
·输入用户名和密码,进入“root”,
·按提示添加打印机,
·返回“Printers”页面,点“Configure Printer”,
·设定打印纸尺寸、分辨率和其它参数。
更多信息可浏览http://localhost:631/documentation.html和http://www.cups.org/cups-help.html。
对于2.4内核,参见〖7.2.6 并行端口支持〗。
3.7 其它主机安装提示
====================
3.7.1 初始化安装完成后再装些什么
--------------------------------
到现在,你已经拥有一个小巧但功能颇强的Debian系统。接下来,可以安装那些较大的软件包了。
·运行tasksel。参阅〖6.2.1 使用tasksel安装任务〗。
可按需选择
·End-user — X window system
·Development — C and C++
·Development — Python
·Development — Tcl/Tk
·Miscellaneous —
TeX/LaTeX environment
·For others — 我把tasksel作为安装指导,查看<Task
Info>了解有关任务的安装列表 然后用dselect来选择安装。
·运行dselect。
在此,你最想做的事就是选择钟爱的编辑器和其它需要的程序。你可以同时安装Emacs的多个变种。参阅〖6.3.8 dselect——全面配置〗和〖11.1 流行的编辑器〗。
你也可以将某些默认的软件包替换成特定版本。
·lynx-ssh (而不是lynx)
·...
·...
我通常会编辑/etc/inittab简化关机步骤。
...
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
...
3.7.2 模块
----------
在初始安装期间可进行设备驱动模块配置。以后还可使用modconf进行配置,它是基于菜单界面的工具,可用来配置那些在初始安装时未曾配置的模块或完成新内核安装后的配置工作。
所有预加载(preloading)模块的名称要加入到/etc/modules列表。也可以使用lsmod和depmod进行手工操控。
对于2.4版内核别忘了在/etc/modules中加上几行来处理IP伪装(ftp等)。参阅〖7.2 模块化的2.4内核〗,特别是〖7.2.3 网络功能〗。
3.7.3 CD-RW基本步骤
-------------------
编辑下列文件:
/etc/lilo.conf (添加append="hdc=ide-scsi ignore=hdc",
执行lilo激活)
/dev/cdrom (创建链接# cd /dev; ln -sf scd0 cdrom)
/etc/modules
(添加"ide-scsi"和"sg"。如果需要可再加上"sr"。)
详情参阅〖9.3 刻录机〗。
3.7.4 多内存和关机自动断电
--------------------------
编辑/etc/lilo.conf,设置启动提示参数如下,实现识别大内存(适用于2.2版内核)和关机自动断电(适用于APM):
append="mem=128M apm=on apm=power-off noapic"
执行lilo完成上述设置。对称多处理器内核(SMP-kernel)需要apm=power-off,而对我那堆糟糕的SMP硬件而言noapic几乎没什么用处。系统启动时,在启动提示符后直接输入这些参数效果也一样。参阅〖8.1.5 启动提示符使用技巧〗。
在Debian的2.4版内核中apm是作为模块编译的,对于这种情况,可在系统启动后运行# insmod apm power_off=1或设置/etc/modules:
# echo "apm power_off=1" >>/etc/modules
还可以这样:编译新版内核时加入ACPI支持可达到同样的效果,而且这种方式更适合SMP(只有较新的主板才支持ACPI)。对于较新的主板2.4版内核可以直接检测到大内存。
CONFIG_PM=y
CONFIG_ACPI=y
...
CONFIG_ACPI_BUSMGR=m
CONFIG_ACPI_SYS=m
在/etc/modules中按如下顺序添加参数:
ospm_busmgr
ospm_system
或者重新编译内核,在配置时将上述内核选项均设为“y”。总之,有了ACPI支持就不再需要任何启动提示参数。
3.7.5 无法访问某此站点的怪问题
------------------------------
新的Linux内核默认开启ECN,对于某些使用劣质路由器的站点,会出现无法访问的问题。检查ECN状态可使用:
# cat /proc/sys/net/ipv4/tcp_ecn
... 或
# sysctl net.ipv4.tcp_ecn
将它关闭:
# echo "0" > /proc/sys/net/ipv4/tcp_ecn
... 或
# sysctl -w
net.ipv4.tcp_ecn=0
每次启动时禁止TCP ECN,可编辑/etc/sysctl.conf,加上:
net.ipv4.tcp_ecn = 0
3.7.6 PPP拔号设置
-----------------
安装pppconfig软件包,设置PPP拨号访问。
# apt-get install pppconfig
# pppconfig
... 按提示配置PPP拨号
# adduser
user_name dip
... 允许user_name进行PPP拨号访问
用户(user_name)进行PPP拨号访问:
$ pon ISP_name #开始PPP访问,接通你的ISP
... 享受Internet
$ poff ISP_name
#停止PPP访问, ISP_name可选
另外,wvdial软件包可以用来设置PPP拨号访问。
3.7.7 /etc中的其它配置文件
--------------------------
Debian标准安装不包含/etc/cron.deny文件,想添加可拷贝/etc/at.deny。
Debian参考手册 第四章 Debian指南
Debian参考手册
第四章 Debian指南
本章为那些初涉Linux世界的新手指出了基本方向。如果你接触Linux已有一段时间,可以当成是一次实战测验。
4.1 信息资源
============
到http://www.debian.org/doc/(Debian
Documentation Project
(DDP))看看,那儿有最权威的Debian参考资料。其中的许多文档都安装在/usr/share/doc/下。还可以到/usr/share/doc-base看看,那儿有这些文档的打印文件。在~/.bash_profile中添加export
CDPATH=.:/usr/share/doc:/usr/src/local,这样更容易访问这些文档目录。
到http://www.tldp.org/(Linux Documentation Project (LDP))看看,那儿有最权威的通用Linux参考资料。LDP资料通常安装在/usr/share/doc/HOWTO/目录下。
浏览本地或远程FTP站点的文档,可在Midnight Commander中按下F9(参阅〖4.3 午夜指挥官(Midnight Commander)〗)。
4.2 Linux控制台
===============
4.2.1 登录
----------
在普通Linux系统中,有6个独立的伪终端(pseudo-terminals)。同时按下Left-Alt键和F1-F6键可在这些伪终端间切换。每个伪终端均需单独登录。多用户环境是Unix最鲜明的特征,而且一用就上瘾。
我通常使用一个普通用户帐号,在其中可使用sudo、super或su -c来获得有限的root访问权限。
4.2.2 添加用户
--------------
系统安装完毕,我通常会添加一个普通用户帐号,如果用户名为“penguin”,
# adduser penguin
就会创建一个这样帐号。
使用vigr命令编辑/etc/group:
src:x:40:admin, debian, ...
staff:x:50:admin
...
对于那些执行系统管理任务并且独享su特权、CVS src特权的用户,我将它们纳入staff用户组(参阅〖9.2.2 “为什么GNU su命令不支持wheel组”〗)。
在系统默认安装状态下,staff用户组属于/home,用来存放那些完成用户帐号维护工作的用户,而src用户组属于/usr/src,用来存放那些完成内核编译等工作的用户。
用adduser,addgroup,vipw,vipw -s,vigr,以及vigr -s检查一下用户及用户组是否配置得当。
4.2.3 如何关机
--------------
和其它现代操作系统一样,系统的工作文件均缓存于内存,所以在切断电源之前Linux需要完成特别的关机程序。下面就是多用户模式下使用的关机命令:
# shutdown -h now
这是单用户模式下使用的关机命令:
# poweroff -i -f
等待屏幕上显示“System halted”字样之后切断电源。如果在BIOS和Linux中开启了apm,系统会自动切断电源。详情参阅〖3.7.4 多内存和自动关机〗。
4.2.4 命令行编辑
----------------
bash是默认shell,它能记住使用过的命令。只需按up-arrow键就能进入记忆模式,使用上下箭头找你想输入的命令。其它需要牢记的重要击键有:
Ctrl-C: 中止程序
Ctrl-D: 中止输入
Ctrl-S: 停止屏幕输出
Ctrl-Q: 恢复屏幕输出
Ctrl-Alt-Del: 重启/关闭系统(参阅/etc/inittab)
Lt-click-and-drag-mouse:
选择并拷贝到剪贴板(gpm)
Ctrl-click-mouse: 将剪贴板内容粘贴到光标处(gpm)
对于常规Linux系统控制台,上述命令中通常指的是左边的Ctrl和Alt键。
4.2.5 需要牢记的基本命令
------------------------
下列是最基本的Unix命令:
ls, ls -al, ls -d, pwd, cd, cd ~user, cd -,
cat /etc/passwd, less, bg,
fg, kill, killall,
uname -a, type commandname, sync, netstat,
ping,
traceroute, top, vi, ps aux, tar, zcat,
grep, ifconfig, ...
在命令提示符后输入man或info加相关命令名,可查看该命令的意思。许多Linux命令可使用下列调用获得简要帮助信息:
$ commandname --help
$ commandname -h
whatis commandname可以显示任何命令的单行概述,这些内容来自于相关帮助文件的开头。
4.2.6 X Window系统
------------------
从控制台启动X Window系统:
# exec startx
右键点击root窗口可以唤出选择菜单。
4.2.7 重要键盘命令
------------------
可在Linux控制台中使用的重要击键:
Alt-F1 thru F6: 切换到其它伪终端
Ctrl-Alt-F1 thru F6: 切换到其它伪终端
(在X-window、DOSEMU等运行环境中)
Alt-F7: 切换回X-window
Ctrl-Alt-minus:
降低X-window的显示分辩率
Ctrl-Alt-plus: 提高X-window的显示分辩率
Ctrl-Alt-Backspace:
中止X-windows
Alt-X, Alt-C, Alt-V: 通用的Windows/Mac剪切、拷贝、粘贴键
在某些程序如Netscape
Composer中,组合键中的Ctrl键换成了Alt键
4.3 午夜指挥官(Midnight Commander)
===================================
午夜指挥官是Linux控制台和其它终端环境中的GNU“瑞士军刀”。
4.3.1 安装MC
------------
# apt-get install mc
接着在~/.bashrc(或/etc/bash.bashrc,.bashrc会调用它)中加上函数:
mc ()
{
mkdir -p ~/.mc/tmp 2> /dev/null
chmod 700 ~/.mc/tmp
MC=~/.mc/tmp/mc-$$
/usr/bin/mc -P "$@" > "$MC"
cd "$(cat $MC)"
rm -f "$MC"
unset MC;
}
该函数使MC可以改变工作目录直至退出。
如果处于kon或Kterm for Japanese等使用某些图形特性的终端,MC运行会出一些问题,可在MC命令行中加上-a加以预防。
4.3.2 启动MC
------------
$ mc
在MC中用户可轻而易举使用菜单完成所有的文件操作。
4.3.3 文件管理器
----------------
默认状态下,所有文件列于两个目录面板。一种实用的方式是将右边窗口设定为“information”,用来查看文件访问权限等信息。下面是一些基本的击键。如果gpm
daemon在运行,你还可以使用鼠标。(在MC中进行剪切和粘贴操作时另忘了按下shift键。)
·F1: 帮助菜单
·F3: 内置文件阅读器
·F4: 内置编辑器
·F9: 激活折叠菜单
·F10: 退出MC
·Tab: 在两个窗口间移动
·Insert: 为多文件操作生成文件如拷贝
·Del: 删除文件(小心——请设置MC为安装删除模式)
·Cursor keys: 与各自的名字一致
4.3.4 命令行技巧
----------------
·cd命令可改变焦点屏幕中的目录位置。
·Cnotrol-Enter或Alt-Enter可以将文件名拷贝到命令行。在编辑命令行时可与cp或mv命令结合使用。
·Alt-Tab
显示shell命令名供用户选择。
·可指定MC两个目录窗口的起始目录;例如mc /etc /root。
·Esc + numberkey ==
Fn (例如Esc + 1 = F1, etc;Esc + 0 = F10)
·Esc key == Alt key (= Meta,
M-);例如Esc + c等价于Alt-c。
4.3.5 编辑器
------------
内置编辑器的剪切-粘贴方式很有意思。按F3在起始处做标记,再次按F3在终止处做标记,这时中间的选中部分会高亮显示。然后你可以移动光标到某处按下F6,被选中部分就会移到该处。如果你按下的是F5,选中部分就会拷贝到该处。F2用来存盘,F10退出,所有方向键的作为和它们的名字一样直观。
该编辑器可直接打开某个文件:
$ mc -e filename_to_edit
$ mcedit filename_to_edit
虽然它不是多窗口编辑器,但你可利用Linux多控制台的特性达到相同的效果。要在窗口间进行拷贝操作,可使用Alt-Fn切换虚拟控制台,然后使用“File->Instert file”或“File->Copy to file”将一个文件中的内容拷贝到另一个文件。
可指定任何外部编辑器作为内置编辑器。
许多程序使用环境变量EDITOR或VISUAL来决定使用哪个编辑器。如果你用不惯vim,可在~/.bashrc中加上几行来指定新的mcedit:
...
export EDITOR=mcedit
export VISUAL=mcedit
...
我强烈推荐将它们设定为vim。在Linux/Unix世界里就该使用vi(m)命令。
4.3.6 阅读器
------------
非常精巧的阅读器。它是在文档中搜索单词的利器。在/usr/share/doc目录下我总是用它,面对大量的Linux资料用它浏览是最快的方法。阅读器可以直接找开文件:
$ mc -v filename_to_view
(注意,有些不规范的软件包仍将它们的文档放在/usr/doc目录下。)
4.3.7 自动启动特性
------------------
在文件上按Enter,会激活相关的程序操作该文件。这是MC的一个极方便的特点。
executable: 执行命令
man, html file: 将文件内容传入阅读器程序
tar, gz, rpm file:
象浏览子目录一要浏览它的内容
为了使这些文件特性生效,不要将可阅读文件设成可执行文件。可在MC文件菜单中改变文件属性或使用chmod命令。
4.3.8 FTP虚拟文件系统
---------------------
MC可通过FTP访问文件。按F9转到菜单栏,输入p激活FTP虚拟文件系统。按username:passwd@hostname.domainname格式输入URL,远程文件目录就会以本地目录的方式显示出来。
4.4 进一步学习
--------------
许多Unix入门级参考书出自在O'Reilly,在计算机的各个领域,想买到优秀的指导书,O'Reilly不会让你失望。LDP的文档Tips-HOWTO(http://www.tldp.org/HOWTO/Tips-HOWTO.html)是另一个极好的资源。更多资源参阅〖15.
Debian技术支持〗
Debian参考手册 第五章 发行版升级
Debian参考手册
第五章 发布版升级
升级的官方发布通知位于http://www.debian.org/releases/stable/releasenotes和http://www.debian.org/releases/testing/releasenotes(不断更新中)
5.1 迁移准备工作(从“stable”到“testing”)
============================================
下面的操作可实现通过网络升级到“testing”(亦可执行样例目录中的go-woody脚本):
# cd /etc/apt
# cp -f sources.list sources.old
# :>sources.list
# cd /
# apt-setup noprobe
... select http or ftp
# cd /etc/apt
# grep -e "^deb " sources.list >sources.deb
# grep -e "^deb-"
sources.list >sources.src
# sed -e "s/^d/#d/" \
/usr/share/doc/apt/examples/sources.list >sources.list
# sed -e
"s/stable/testing/" \
sources.deb >>sources.list
# apt-get update
# apt-get install apt apt-utils
# cat >preferences <<EOF
Package: *
Pin: release a=testing
Pin-Priority: 700
Package: *
Pin: release a=unstable
Pin-Priority: 70
EOF
# sed -e "s/stable/unstable/" sources.deb \
>>sources.list
# sed -e "s/stable/unstable/" sources.src | \
sed -e "s/^deb-/#deb-/"
>>sources.list
下面是/etc/apt/preferences有关说明(参阅apt_preferences(5))
track stable: 将testing的Pin-Priority改为80
track testing:
保持当前值(从/unstable安装unstable发行版)
track testing(unstable):
将unstable的Pin-Priority改为600
track unstable(testing):
将unstable的Pin-Priority改为800
有关如何选定Pin-Priority的说明:在上表中,从上而下代表了某个版本 从上个版本刚刚发布之后到下一版进入冻结期之前这段时间经历的各个阶段。
样例目录中的preferences.testing和preferences.unstable脚本演示了如何设置/etc/apt/preferences文件,以锁定某些关键包的较成熟版本和其它非关键包的不太成熟版本。另一方面,preferences.stable强迫所有的软件包降级到“stable”。
如果有必要的话,可让APT使用代理。请设定http_proxy环境变量或在/etc/apt/apt.conf文件中设定http的值。
本节只讨论了APT升级和极少量软件包关联问题。
5.2 升级到“testing”
=====================
完成了上述准备,就可以开始系统升级了。
5.2.1 最好使用dselect升级
-------------------------
如果系统在许多软件包都包含了-dev等软件包,推荐使用下面的dselect操作方法进行软件包细操作(fine-grained package
control)。
# dselect update # 升级前请先完成这步
# dselect select #
在“suggests”和“recommends”中选择软件包
# dselect install
dselect就是这么干的:)
5.2.2 最好别用apt-get升级
-------------------------
下面描述了apt-get非常广泛的用途,但建议不要用它来进行系统升级。如果你不想用dselect对Woody进行升级,请考虑aptitudes或其它工具。
如果系统中的软件包不多,或Debian包文件没有进行重大修改,下述操作就能胜任(有时是这样)。
# apt-get update # 升级前请先完成这步
... 升级系统包括“depends”类软件包:
# apt-get
upgrade # 升级前请先完成这步
... 升级整个系统包括“depends”类软件包:
# apt-get -u dist-upgrade
... 或按当前dselect的设置进行升级(new, better):
# apt-get -u dselect-upgrade #
使用dselect进行后期处理
使用apt-get方式升级将无法对recommends和suggests类软件包进行操控。参阅〖2.2.8 软件包关联性〗。
5.3 配置Woody
=============
对于新装的Woody系统,请按上述方法编辑/etc/apt/sources.list,/etc/apt/apt.conf和/etc/apt/preferences文件。
Potato中的APT不包含apt_preferences(5)所描述功能。
5.4 优化sources.list
====================
下述命令可自动创建sources.list文件,所耗时间取决于响应时间和带宽。
# apt-get install apt-spy
# cd /etc/apt ; mv sources.list
sources.list.org
# apt-spy -d testing -l sources.apt
netselect-apt与apt-spy非常相似,它用更先进的方法搜索最快的镜像源(比较ping时间),创建的sources.list也更完整。手工为sources.list选定镜像源可使用apt-setup,在apt-spy升级之前它是最好的方法。
这些优化处理对我而言并没有明显的效果,用apt-setup选定较近的站点就足够了。
Debian参考手册 第六章 Debian软件包管理
Debian参考手册
第六章 Debian软件包管理
使用ATP下载软件包时,请确保使用了squid设置本地HTTP代理,这样可极大的改善网络升级的性能,特别是对局域网中多台Debian机器同时升级。本章基于Woody系统撰写的,但大部分信息均适用于Potato系统(除了apt_preferences(5)和/etc/preferences的相关主题)。
6.1 概述
========
如果你没精力阅读所有的开发文档,那么先看看本章的内容,开始体验Debian
testing/unstable的威力吧:-)
6.1.1 主要工具
--------------
dselect — 使用菜单界面的软件包管理工具(最上层的包管理工具)
dpkg — 安装软件包(管理软件包中的文件)
apt-get — 安装软件包(管理软件包,CLI APT)
tasksel —
安装任务套件(管理面向某方面任务的一套软件包)
aptitude — 安装软件包(管理软件包和任务套件,ncurses APT)
deity —
另一种ncurses APT
synaptic, gsynaptic — 另一种GUI APT
它们不是同级的工具。dselect运行于APT(命令行命令是apt-get)和dpkg之上。
APT使用/var/lib/apt/lists/*来跟踪可用的软件包,而dpkg使用的是/var/lib/dpkg/available。如果直接用apt-get或同类工具如aptitude等来安装软件包,千万别忘了更新/var/lib/dpkg/available文件,可以使用dselect的[U]pdate选项或在运行dselect select、tasksel或dpkg -l前执行shell命令行“dselect update”。
它们处理关联软件包的方式也不同,apt-get会自动搜索下载depends类软件包,但不会理睬recommends和suggests类软件包,dselect在软件包选择方面提供了更多细操作(fine-grained control),默认状态它会搜索下载depends和recommends类软件包。参阅〖2.2.8 软件包关联性〗。
6.1.2 方便的工具
----------------
apt-cache - 在本地缓冲区检查包文件
dpkg-reconfigure - 重新配置已安装的软件包(如果它是使用debconf进行配置的)
dpkg-source - 管理源码包
dpkg-buildpackage - 自动生成包文件
...
6.2 Debian生存工具
==================
掌握了这些知识,就能让你的系统“青春永驻”了:-)
亦可参阅〖3. Debian系统安装提示〗,〖5. 发布版升级〗和〖11.2 应急的编辑器〗。
6.2.1 使用tasksel安装任务
-------------------------
tasksel是Debian的任务安装器,系统安装过程中它为用户提供了一种简易软件包选择方式。
如果你希望完装的某项常规功能包含了许多软件包,最好的办法就是使用它来安装。运行如下命令:
# dselect update
# tasksel
6.2.2 使用APT安装系统
---------------------
对于新版的apt-get(>
Woody),编辑/etc/apt/sources.list文件,添加unstable和testing镜像源,就可以从不同镜像源有选择地安装软件包。例如在testing发行版中指定某些包升级到unstable,某些包降级到stable。
对testing发行版进行有选择性的升级,可以设置/etc/apt/preferences如下:
Package: *
Pin: release a=stable
Pin-Priority: 500
Package: *
Pin: release a=testing
Pin-Priority: 600
Package: *
Pin: release a=unstable
Pin-Priority: 50
下面的方式可获得同样的效果
# echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf
假设当前系统环境为testing发行版:
·apt-get upgrade
跟踪升级系统安装的所有属于testing发行版的软件包。
·apt-get install package
从testing发行版中安装软件包,其关联包亦使用testing发行版中的版本。
·apt-get install package/unstable
从unstable发行版中安装软件包时,其关联包使用testing发行版中的版本。
·apt-get install -t unstable package
从unstable发行版中安装软件包时,其关联包亦使用unstable发行版中的版本。
如果跟踪的是stable发行版,可在上例的/etc/apt/preferences中将testing的Pin-Priority下调到60,也可使用命令:
# echo 'APT::Default-Release "stable";' >> /etc/apt/apt.conf
其它可使用的命令:
# apt-cache policy libc6 libc6-dev locales # check status
# apt-get
install libc6=2.2.4-1 libc6-dev=2.2.4-1 locales=2.2.4-1
# apt-get -u install
interesting-new-package remove-package-
# apt-get remove useless-old-package
# apt-get remove --purge really-useless-old-package
将所有的软件包降级到stable,可编辑/etc/apt/preferences:
Package: *
Pin: release a=stable
Pin-Priority: 1001
然后运行“apt-get upgrade”,由于Pin-priority > 1000,系统会被强制降级。注意,可能会出现少量关联性问题。
6.2.3 使用APT升级系统
---------------------
使用APT进行系统升级:
# apt-get update
... 接着下列任何一条命令:
# apt-get -u upgrade # 下载并升级所有的关联包
# apt-get -u dist-upgrade # 下载并升级所有的关联包和新增的关联包
# apt-get -u
dselect-upgrade # 按dselect中的选择进行升级
下面的设置将-u选项设定为默认行为:
$ cat >> /etc/apt/apt.conf << .
// 总是显示软件包升级(-u)
APT::Get::Show-Upgraded "true";
.
使用-s选项可进行模拟升级(实际上并没有升级)。
dselect提供了一个菜单式的APT前端。deity和aptitude是dselect替换方案。
6.2.4 检测程序错误寻求帮助
--------------------------
如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点(lynx、links和w3m同样好用):
$ lynx http://bugs.debian.org/
$ lynx http://bugs.debian.org/package-name
# 如果你知道软件包名称
$ lynx http://bugs.debian.org/bugnumber # 如果你知道错误序号
在Google(www.google.com)中使用关键字“site:debian.org”搜索。
如有疑问,可阅读帮助文件。设置CDPATH如下:
export CDPATH=.:/usr/local:/usr/share/doc
然后输入
$ cd packagename
$ mc
更多技术支持资源列在〖15. Debian技术支持〗。
6.2.5 APT升级错误及解决方法
---------------------------
从unstable/testing进行升级时可能出现软件包关联问题。多数情况下,是因为升级的软件包所需的新增的关联包没有安装。可使用如下方法解决:
# apt-get dist-upgrade
如果这招无效,可以重复下面的方法至到问题解决:
# apt-get upgrade -f # continue upgrade even after error
... 或
#
apt-get dist-upgrade -f # continue dist-upgrade even after error
一些的确存在问题的升级脚本会引起持续出错。最好的解决方法是检查该软件包的安装脚本/var/lib/dpkg/info/packagename.{post-,pre-}{install,removal}然后运行:
# dpkg --configure -a # 配置所有未完成安装的软件包
如果脚本报告缺少配置文件,查看一下/etc中相关的配置文件。如果配置文件有.new扩展名(或其它类似的扩展名),去掉(mv)它的扩展名。
从unstable/testing进行升级时可能出现软件包关联问题。可用这个方法智取:
# apt-get install -f package # 重载坏关联
还可以用equivs包来解决此类问题。
参阅/usr/share/doc/equivs/README.Debian和〖6.4.2
equivs软件包〗。
6.2.6 使用dpkg救助
------------------
如果系统的dselect(APT)受损无法完成安装,可使用dpkg来恢复:
# cd /var/cache/apt/archives
# dpkg -i libc6* libdb2* perl*
# dpkg -i
apt* dpkg* debconf*
# dpkg -i * # 直至不再出错
如果软件包丢失,用下述方法从镜像源下载:
# mc # use "FTP link" pointing to Debian FTP server
现在,在HTTP/FTP服务器上,软件包的真正位置不再是传统的/dist目录而是新的/pool目录。(参阅〖2.1.10 pool目录〗)
然后开始安装:
# dpkg -i /var/cache/apt/archives/packagefile.deb
对于坏关联,可这样解决:
# dpkg --ignore-depends=package1,... -i packagefile.deb
# dpkg
--force-depends -i packagefile.deb
# dpkg --force-depends --purge package
# dpkg --force-confmiss -i packagefile.deb # 安装丢失的conffile
6.2.7 /var被删除后如何恢复系统
------------------------------
如果/var目录的所有文件都被删了,只要你做了/var/lib/dpkg/status的备份,就可用下面的方法恢复:
# cd /
# install -d /var/cache/apt/archives
# install -d
/var/cache/apt/archives/partial
# install -d /var/lib/dpkg/
# cp
status-old /var/lib/dpkg/status
# apt-cache gencaches
可以在/var/lib/dpkg/status-old或/var/backups/dpkg.status.*中查找旧的/var/lib/dpkg/status文件。
将/var/backups/放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据。
6.2.8 为无法启动的系统安装软件包
--------------------------------
使用Debian急救软盘/CD或从多启动Linux系统其它分区启动,将无法启动的系统挂载到/target并使用dpkg的chroot安装模式进行安装。
# dpkg --root /target -i packagefile.deb
接下来就可以着手配置并解决问题。
如是只是由于lilo损坏而造系统无法启动,可使用标准Debian急救盘启动。假设你的root分区位于/dev/hda12且想使用runlevel 3,在启动提示符输入:
boot: rescue root=/dev/hda12 3
这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)
6.2.9 如果dpkg命令出错该怎么办
------------------------------
如果dpkg损坏就不能安装任何.deb文件。下面的操作可帮助你修复这种状况。(在第一行,你可将“links”替换成你喜欢的浏览器。)
$ links http://http.us.debian.org/debian/pool/main/d/dpkg/
...
下载完好的dpkg_version_arch.deb
$ ar x dpkg_version_arch.deb
$ su
password: *****
# mv data.tar.gz /data.tar.gz
# cd /
# tar xzfv
data.tar.gz
对i386,亦可用http://packages.debian.org/dpkg作为URL。
6.3 Debian必杀技
================
有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到Debian天堂。:-)
6.3.1 文件信息
--------------
查找特定文件所属的软件包:
$ dpkg {-S|--search} pattern # search for pattern in installed packages
$
zgrep -e pattern /local/copy/of/debian/woody/Contents-i386.gz
# find
filename-pattern of files in the debian archive
或使用专门的软件包命令:
# apt-get install dlocate
# conflicts with slocate (secure version of
locate)
$ dlocate filename # fast alternative to dpkg -L and dpkg -S
...
# apt-get install auto-apt # on-demand package installation tool
#
auto-apt update # create db file for auto-apt
$ auto-apt search pattern
# search for pattern in all packages, installed or not
6.3.2 软件包信息
----------------
搜索并显示包文件的信息。编辑/etc/apt/sources.list,让APT指向正确的包文件。如果想了解testing/unstable中的相应软件包与当前系统安装的软件包有何差别,使用apt-cache
policy更好。
# apt-get check # 更新缓冲区并检查损坏的软件包
$ apt-cache search pattern # 按文本描述搜索软件包
$ apt-cache policy package # 软件包的priority/dists信息
$ apt-cache show -a
package # 显示所有dists中软件包描述信息
$ apt-cache showsrc package # 显示相应源码包的信息
$
apt-cache showpkg package # 软件包调试信息
# dpkg --audit|-C # 搜索未完成安装的软件包
$
dpkg {-s|--status} package ... # 已安装软件包描述
$ dpkg -l package ... #
已安装软件包的状态(每个占一行)
$ dpkg -L package ... # 列出软件包安装的文件的名称
Woody发布版没有为apt-cache showsrc建档,但该命令可用:)
你也这可这样查看软件包信息(我用mc浏览):
/var/lib/apt/lists/*
/var/lib/dpkg/available
比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。
/var/lib/dpkg/status
/var/backups/dpkg.status*
6.3.3 使用APT进行全自动系统安装
-------------------------------
进行全自动安装,要在/etc/apt/apt.conf中加上一行:
Dpkg::Options {"--force-confold";}
另一种等阶的方法是运行apt-get -q -y packagename。这种方法可能产生严重的负作用,所以使用起来要小心。参阅apt.conf(5)和dpkg(1)。
安装完毕以后,可以用〖6.3.4 配置已安装软件包〗中的方法配置特定的软件包。
6.3.4 重新配置已安装软件包
--------------------------
使用下列方法重新配置已安装软件包。
# dpkg-reconfigure --priority=medium package [...]
# dpkg-reconfigure
--all # 重新配置所有的软件包
# dpkg-reconfigure locales # 生成别的locales
#
dpkg-reconfigure --p=low xserver-xfree86 # 重新配置X服务器
如果你想永久改变debconf对话框模式,可这么做。
某些程序用于生成特殊的配置脚本。
apt-setup - 创建/etc/sources.list
install-mbr - 安装主引导(Master Boot
Record)管理器
tzconfig - 设定本地时间
gpmconfig - 设置gpm鼠标daemon
sambaconfig -
在Potato中配置Samba(Woody使用debconf来配置)
eximconfig - 配置Exim (MTA)
texconfig -
配置teTeX
apacheconfig - 配置Apache (httpd)
cvsconfig - 配置CVS
sndconfig
- 配置声音系统
...
update-alternatives - 设定默认启动命令,例如设定vi启动vim
update-rc.d
- System-V init脚本管理工具
update-menus - Debian菜单系统
...
6.3.5 删除软件包
----------------
删除软件包但保留其配置文件:
# apt-get remove package ...
# dpkg --remove package ...
删除软件包并删除配置文件:
# apt-get remove --purge package ...
# dpkg --purge package ...
6.3.6 阻止旧软件包升级
----------------------
举个例子,要阻止libc6和libc6-dev通过dselect或使用apt-get -u upgrade package命令升级,可执行:
# echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections
这种方法不影响apt-get -u install package命令操作。要阻止apt-get -u upgrade package或apt-get -u dist-upgrade命令对软件包执行的强制自动降级行为,可在/etc/apt/preferences中加上:
Package: libc6
Pin: release a=stable
Pin-Priority: 2000
这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与glibc源码包相关的二进制包的版本同步,可以明确的列出它们。
该命令可以显示处于“阻止”状态的软件包:
dpkg --get-selections "*"|grep -e "hold$"
6.3.7 stable/testing/unstable混合系统
-------------------------------------
apt-show-versions可以列出发行版中可用软件包的版本。
$ apt-show-versions | fgrep /testing | wc
... 你有多少testing软件包
$
apt-show-versions -u
... 列出可升级的软件包
$ apt-get install `apt-show-versions
-u -b | fgrep /unstable`
... 将所有unstable软件包升级到最新版本
6.3.8 dselect——全面配置
-------------------------
在/etc/dpkg/dselect.cfg中加上一行包含“expert”选项以减少干扰。
启动程序,dselect会自动选上所有“Required”、“Important”和“Standard”类软件包,在Potato系统中,某些大型应用程序如TeX和Emacs处于这些分类中,在初次安装系统时最好手工取消对它们的选择(输入“_”)。在Woody中,这些大型应用程序被移入“Optional”类软件包。
dselect的用户界面有点怪。有4个相似命令(注意是大写字母):
Key-stroke Action
Q 退出。确认当前的选择然后退出。
(override dependencies)
R
恢复!我放弃我做出的选择
D 不管它!我不管dselect有什么建议,照我说的做!
U 照系统的建议做
使用D和Q,你要自负风险,所以使用这些命令要小心。对于速度慢的机器,请在其它速度快的机器上运行dselect选好软件包,然后用apt-get install安装它们。apt-get dselect-upgrade会完全按dselect的选择行事。
6.3.9 删除缓存包文件
--------------------
使用APT安装软件包会在/var/cache/apt/archives目录留下缓存文件,要清除这些文件可使用:
# apt-get autoclean # removes only useless package files
# apt-get clean
# removes all cached package files
6.3.10 记录/拷贝系统配置
------------------------
对软件包选择情况进行本地备份:
$ dpkg --get-selections "*" >myselections # or use \*
“*”使myselections包含那些被指定“完全删除(purge)”的文件。
你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。
# dselect update
# dpkg --set-selections <myselections
# apt-get
-u dselect-upgrade # or dselect install
6.3.11 向stable系统引入软件包
-----------------------------
对stable系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,加入下列镜像源入口:
deb-src http://http.us.debian.org/debian testing \
main contrib non-free
deb-src http://non-us.debian.org/debian-non-US testing/non-US \
main
contrib non-free
deb-src http://http.us.debian.org/debian unstable \
main contrib non-free
deb-src http://non-us.debian.org/debian-non-US
unstable/non-US \
main contrib non-free
由于屏幕输出的限制,上述每条命令均分成了2行,实际上在sources.list中它们均为单行。
然后下载源码并在本地生成软件包:
$ apt-get source package/unstable
$ dpkg-source -x package.dsc
$ cd
package-version
... 查找需要的软件包(编译所需的关联包列在.dsc文件中)并安装它们,
你还需要“fakerroot”软件包。
$ dpkg-buildpackage -rfakeroot
...or (no sig)
$ dpkg-buildpackage -rfakeroot -us -uc # use "debsign"
later if needed
...Then to install
$ su -c "dpkg -i packagefile.deb"
通常,需要安装一些带“-dev”后缀的软件包以满足关联关系。debsign在devscripts软件包中。auto-apt可以轻松解决这些关联问题。请使用fakeroot,如是没有必要,就别使用root帐号。
在Woody中,这些关联问题已被简化。例如,编译pine源码包:
# apt-get build-dep pine
# apt-get source -b pine
6.3.12 本地软件包文件
---------------------
为了创建与APT和dselect系统兼容的本地软件包文件,需要创建软件包(Packages),包中文件要放在特定的目录树中。
Debian官方包文件喜欢存放于本地deb仓库,下面就来创建仓库:
# apt-get install dpkg-dev
# cd /usr/local
# install -d pool #
软件包存放的物理地址
# install -d dists/unstable/main/binary-i386
# ls -1 pool |
sed 's/_.*$/ extra BOGUS/' | uniq > override
# editor override # adjust
BOGUS
# dpkg-scanpackages pool override /usr/local/ \
>
dists/unstable/main/binary-i386/Packages
# cat >
dists/unstable/main/Release << EOF
Archive: unstable
Version: 3.0
Component: main
Origin: Local
Label: Local
Architecture: i386
EOF
# echo "deb file:/usr/local unstable main" \
>>
/etc/apt/sources.list
还可以这样快速创建一个本地deb仓库:
# apt-get install dpkg-dev
# mkdir /usr/local/debian
# mv
/some/where/package.deb /usr/local/debian
# dpkg-scanpackages
/usr/local/debian /dev/null | \
gzip - > /usr/local/debian/Packages.gz
# echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list
在/etc/apt/sources.list中设置相应镜像源入口地址,就可以通过HTTP或FTP方式远程访问存放在其中的包文件了。
6.3.13 转化或安装外来软件包
---------------------------
alien可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发行版中的软件包,可使用alien将它转化成系统首选的软件包格式后安装。alien还支持LSB的软件包。
6.3.14 校验已安装软件包
-----------------------
debsums可以校验已安装软件包的MD5编码,对某些软件包没有可用的MD5编码,系统管理员可使用一个临时的解决办法:
# cat >>/etc/apt/apt.conf.d/90debsums
DPkg::Post-Install-Pkgs
{"xargs /usr/bin/debsums -sg";};
^D
per Joerg Wendland <joergland@debian.org> (untested).
6.4 其它Debian特性
==================
6.4.1 dpkg-divert命令
---------------------
使用文件转移(diversions)的方法可以强令dpkg将文件安装到转移目录而非默认目录。对于某个引起冲突的文件,可以在Debian软件包脚本中使用diversions将它安装到别的目录。系统管理员还可以使用diversion来重载软件包配置文件,或者用来保留某些旧配置文件(这些文件没有在conffiles中登记)当安装新版软件时这些文件会被覆盖。(参阅〖2.2.4
保存本地设置〗)
# dpkg-divert [--add] filename # add "diversion"
# dpkg-divert --remove
filename # remove "diversion"
记住,不到万不得已不要使用dpkg-divert。
6.4.2 equivs软件包
------------------
如果你从源码编译程序,最好将它做成本地Debian化软件包(*.deb)。最新的方法是使用equivs。
Package: equivs
Priority: extra
Section: admin
Description:
Circumventing Debian package dependencies
This is a dummy package which can
be used to create Debian
packages, which only contain dependency
information.
6.4.3 自选命令
--------------
想用vi命令启动vim,可使用update-alternatives来定义:
# update-alternatives --display vi
...
# update-alternatives --config
vi
Selection Command
-----------------------------------------------
1 /usr/bin/elvis-tiny
2 /usr/bin/vim
*+ 3 /usr/bin/nvi
Enter to keep the default[*], or type selection number: 2
Debian自选命令设定系统中的这些项目,都是/etc/alternatives下的链接文件。
想设置你喜爱的X window环境,执行update-alternatives来指定/usr/bin/x-session-manager和/usr/bin/x-window-manager。详情参阅〖9.4.5.1 自定义X会话〗。
/bin/sh是指向/bin/bash或/bin/dash的链接。想兼容旧的Bash脚本,使用/bin/bash比较保险,但更好还是使用/bin/dash,因为它更符合POSIX标准。升级到2.4版Linux内核,系统一般将它设置为/bin/dash。
6.4.4 System-V init文件和运行级别
---------------------------------
可在/etc/inittab中设定系统启动的默认运行级别(runlevel)。
不同于其它的发行版,Debian将运行级别的管理职责完全赋予系统管理员。Debian更倾向于使用update-rc.d脚本来管理它那System-V风格的init。
下面的命令表示,按优先级数字20(normal)所指定的次序,分别在runlevel 1、2、3中启动/etc/init.d/name,在runlevel 4、5中停止它们:
# update-rc.d name start 20 1 2 3 . stop 20 4 5 .
要删除init.d脚本中存在的符号链接可执行:
# update-rc.d -f name remove
要编辑运行级别,我通常在mc中用Alt-Enter拷贝链接名,然后在shell提示符下使用mv命令手工编辑,例如:
# mv S99xdm K99xdm # 禁用xdm (X display manager)
有时为了进行临时调试,我甚至在init.d脚本的开头加入exit 0来禁用一个daemon,反正它们都在conffiles登记过。
6.4.5 停止daemon服务
--------------------
Debian发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在了第二位,许多daemon服务都定位在最高安全级别,因而,默认安装状态下系统只启动最少的(甚至没有)可用的服务。
如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*和/etc/inetd.conf下的内容,还可以使用〖9.2.1 使用PAM和系统登录〗中提到的方法检查/etc/hosts.deny。pidof命令也很有用(参阅pidof(8))
在新版的Debian中,默认状态下X11不允许TCP/IP(远程)连接。参阅〖9.4.6 X的TCP/IP连接〗,使用SSH进行X传送也是禁用的,参阅〖9.4.8 X远程连接:ssh〗。
Debian参考手册 第七章 Debian下的Linux内核
Debian参考手册
~~~~~~~~~~~~~
第七章 Debian下的Linux内核
~~~~~~~~~~~~~
Debian运用自己的方式来编译内核及相关模块。参阅〖2.7 Debian和系统内核〗。
7.1 内核编译
============
Debian
unstable发行版中的gcc、binutils和modutils可用来编译最新的Linux内核。这方面的官方信息,参阅/usr/share/doc/kerenl-package/README.gz文件的后半部分。
内核编译是个很困难的议题,由于目标在不断的变化,即使是最受人尊敬的开发者也会有不同的见解:
Manoj Srivastava写到:
--initrd需要Debian专用cramfs补丁。
Herbert Xu写到:
不,它不需要,想使用除CRAMFS以外的文件系统只需在/etc/mkinitrd/mkinitrd.conf中设置MKIMAGE。
按照Manoj和Kent撰写的/usr/share/doc/kernel-package/README.gz的指导小心行事,如果要编译最新版本的内核请确认安装了最新unstable版kernel-package软件包。
对于单机内核编译,initrd不是必须的。我用它是希望我新编译的内核与相应的内核镜像一模一样。如果使用initrd,请先阅读一下mkinitrd(8)和mkinitrd.conf(5)。亦可参阅http://bugs.debian.org/149236。
7.1.1 Debian标准方式
--------------------
关心一下有关kernel-package、gcc、binutils和modutils的错误报告。如果有必要应使用最的版本。
在Debian系统中用源码编译自定义内核要特别小心。用make-kpkg的--append_to_version选项来创建多重内核镜像比较安全。
# apt-get install debhelper modutils kernel-package libncurses5-dev
#
apt-get install kernel-source-2.4.18 # 使用最新版本
# apt-get install fakeroot
# vi /etc/kernel-pkg.conf # 输入我的名字和email
$ cd /usr/src # 创建目录
$ tar
--bzip2 -xvf kernel-source-2.4.18.tar.bz2
$ cd kernel-source-2.4.18 #
如果这是你的内核源码
$ cp /boot/config-2.4.18-386 .config # 将当前配置设定为默认配置
$ make
menuconfig # 按自己的喜好来定制
$ make-kpkg clean # 必须执行这步(per: man make-kpkg)
$
fakeroot make-kpkg --append_to_version -486 --initrd \
--revision=rev.01
kernel_image \
modules_image # modules_image可以是pcmcia-cs*等。
$ cd ..
# dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安装
make-kpkg kernel_image实际上执行了make oldconfig和make dep。如果没使用initrd就不要使用--initrd选项。
如果想加载pcmcia-cs模块或没有pcmcia,应该在make menuconfig后选“General setup -->”进入“PCMCIA/CardBus support -->”,配置“<>PCMCIA/CardBus support”选项(例如,取消复选项)。
对于SMP机器,参照kernel-pkg.conf(5)的说明设置CONCURRENCY_LEVEL。
7.1.2 经典方式
--------------
从下列地址获得干净的源代码:
·Linux: http://www.kernel.org/
·pcmcia-cs:
http://pcmcia-cs.sourceforge.net/
或使用Debian所附的等价的源代码:
# cd /usr/src
# tar xfvz linux-whatever.tar.gz
# rm -rf linux
#
ln -s linux-whatever linux
# tar xfvz pcmcia-cs-whatever.tar.gz
# ln -s
pcmcia-cs-whatever pcmcia
# cd linux
# make menuconfig
... 配置内核选项
...
# make dep
# make bzImage
... 编辑lilo/grub ...
...
移动/usr/src/linux/arch/i386/boot/bzImage到boot ...
... /sbin/lilo or whatever
you do for grub
# make modules; make modules_install
# cd ../pcmcia
# make config
# make all
# make install
...
添加需要的模块名称到/etc/modules
# shutdown -r now
... 启动到新内核 ...
7.1.3 内核头文件
----------------
绝大多数“普通”程序不需要内核头文件,事实上如果直接引用它们会出错。这些程序应该引用那些编译glibc所用的头文件,它们位于Debian系统的/usr/include/linux和/usr/include/asm目录下。
故不要在/usr/src/linux目录中创建指向/usr/include/linux和/usr/include/asm的链接,一些过时的文档曾建议创建它们。
如果某些内核类应用程序需要特定的内核头文件,可修改Makefile(s),使其包含指向“特定内核头文件目录/include/linux”和“特定内核头文件目录/include/asm”的路径。
7.2 模块化的2.4内核
===================
kerntl-mage-2.4.NN提供了新版的Debian
2.4内核,该版内核模块化程度极高。你必须激活相关的模块才能获得想要的内核功能。
尽管在接下来的部分中提供了许多通过配置/etc/modules来解决问题的样例,但据说,在/etc/modutils/中用一个文件来提供所有的设备别名,就可解决这类有关模块问题,当前的内核有足够多的别名供你使用。
参阅Linux内核源码目录中的Documentation/*.txt获取详细信息。
7.2.1 PCMCIA
------------
要使用PCMCIA,需在/etc/modules中包含下列内容:
# ISA PnP driver
isa-pnp
# Low level PCMCIA driver
# yenta_socket
# 我的机器上似乎不需要
剩下的工作就由PCMCIA脚本(来自pcmcia-cs软件包)、depmod和kmod负责了。我需要isa-pnp因为我的笔记本电脑使用的是旧ISA-PCMCIA。较新的笔记本电脑使用CardBus/PCMCIA,不再需要它。
慷慨的Miquel van Smoorenburg(miquels@cistron.nl)说:
“我将笔记中所有有关pcmcia的东西包括cardmgr等一鼓脑全删了,只装了支持cardbus的2.4版内核和woody中新的hotplug软件包。
只要你使用的是32-bit卡,你就不需要pcmcia软件包;2.4内置了cardservices。标准的tulip驱动亦可在dlink卡上正常工作。
——Mike。”
7.2.2 SCSI
----------
[没有测试过]想要SCSI工作,请在/etc/modules中包含如下内容:
# SCSI core
scsi_mod
# SCSI generic driver
sg
# SCSI disk
sd_mod
# All other needed HW modules
...
可用depmod来操作上述某些模块。
7.2.3 网络功能
--------------
/etc/modules中需要包含如下内容以扩充网络功能:
# net/ipv-4
ip_gre
ipip
# net/ipv-4/netfilter
# iptable (in order)
ip_tables
ip_conntrack
ip_conntrack_ftp
iptable_nat
iptable_filter
iptable_mangle
#
ip_nat_ftp
ip_queue
#
ipt_LOG
ipt_MARK
ipt_MASQUERADE
ipt_MIRROR
ipt_REDIRECT
ipt_REJECT
ipt_TCPMSS
ipt_TOS
ipt_limit
ipt_mac
ipt_mark
ipt_multiport
ipt_owner
ipt_state
ipt_tcpmss
ipt_tos
ipt_unclean
#
#ipchains
#ipfwadm
上述内容并没有进行优化。可用depmod来操作上述某些模块。
7.2.4 EXT3文件系统(>2.4.17)
----------------------------
对预编译内核镜像包(> 2.4.17)执行下述操作可激活EXT3日志文件系统。
# cd /etc; mv fstab fstab.old
# sed 's/ext2/ext3,ext2/g' <fstab.old
>fstab
# vi /etc/fstab
... 将root文件系统类型设置成“auto”而非“ext3,ext2”
# cd
/etc/mkinitrd
# echo jbd >>modules
# echo ext3 >>modules
# echo ext2 >>modules
# cd /
# apt-get update; apt-get install
kernel-image-2.4.17-686-smp
... 安装最新内核并配置boot(lilo从这儿运行)
# tune2fs -j -i
0 /dev/hda1
# tune2fs -j -i 0 /dev/hda2
... 将所有EXT2 FS转化成EXT3
#
shutdown -r now
现在就可使用EXT3日志文件系统了。在fstab的“type”中使用ex3、ext2的是为了保险起见,如果内核不支持非root分区采用EXT3还可退回到EXT2。
如果你已安装了2.4版内核并且不想再次重装,执行上述步骤中apt-get命令之前的步骤就行了。接着:
# mkinitrd -o /boot/initrd.img-2.4.17-686-smp /lib/modules/2.4.17-686-smp
# lilo
# tune2fs -j -i 0 /dev/hda1
# tune2fs -j -i 0 /dev/hda2
... 将所有EXT2 FS转化成EXT3
# shutdown -r now
现在EXT3日志文件系统已生效。
如果没有设置/etc/mkinitrd/modules就mkinitrd运行,最好在系统启动时加载一些模块:
... 当initrd提示获取shell时(5秒钟),输入RETURN
# insmod jbd
# insmod ext3 #
modprobe ext3会负责一切
# insmod ext2
# ^D
... 继续启动
在系统启动屏幕(dmesg)中,会出现“cramfs: wrong magic”,别担心这没有什么害处。在Sarge(2002/10)中已解决了这个问题。参阅http://bugs.debian.org/135537和http://www.symonds.net/~rajesh/howto/ext3/index.html,或者是/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz获得有关详情。
激活EXT3功能会造成某些系统发生严重内核死锁的情况,不过我没遇到过这种问题(我的内核是2.4.17)。
7.2.5 对Realtek RTL-8139的支持
------------------------------
不知何故,RTL-8139支持模块已不再叫rtl8139,现在它叫8139too。从2.2版内核升级到2.4版时,请记得在/etc/modules中做相应修改。
7.2.6 并行端口支持
------------------
对于kernel-image-2.4.*,并行端口支持已被模块化,要激活可执行:
# modprobe lp
# echo lp >> /etc/modules
参阅Linux内核源码目录中的Documentation/parport.txt。
7.2.7 打开了太多文件
--------------------
Linux内核有时会报告“Too many open
files”,起因是file-max默认值太小。要解决这个问题,可以root身份执行下列命令(或将它们加入/etc/rcS.d/*下的init脚本。)
# echo "65536" >/proc/sys/fs/file-max # 适用于2.2和2.4版内核
# echo "131072"
>/proc/sys/fs/inode-max # 仅适用于2.2版内核
其它内核参数操作实例参阅/etc/init.d/networking和〖3.7.5 无法访问某此站点的怪问题〗。
Debian参考手册 第八章 Debian技巧
Debian参考手册
~~~~~~~~~
第八章 Debian技巧
~~~~~~~~~
8.1 启动系统
============
参阅LDP
BootPrompt-HOWTO(http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html)获得有关系统提示的详细信息。
8.1.1“我忘了root密码!”(1)
----------------------------
只要能访问控制台键盘,不需要root密码就可以启动系统登录到root帐号。(假设BIOS或lilo之类的启动引导器在启动时不需要密码。)
整个过程不需要另外的启动盘或对BIOS设置进行修改。在此,“Linux”仅是一个标签,它代表启动Debian默认安装的Linux内核。
在lilo启动屏幕中,一但出现boot:(对某些系统而言,必须按下shift键以阻止自动启动),就输入:
boot: Linux init=/bin/sh
它会指示系统启动内核后运行/bin/sh而不是init。现在你已获得root特权和root shell。由于当前/是以只读方式挂载,而其它的硬盘分区均未挂载,故你必须完成下列步骤才能获得一个有适当功能的系统。
init-2.03# mount -n -o remount,rw /
init-2.03# mount -avt
nonfs,noproc,nosmbfs
init-2.03# cd /etc
init-2.03# vi passwd
init-2.03# vi shadow
(如果在/etc/passwd文件中所有用户的第二个域的数据为“x”,就表明系统使用了影子密码(shadow passwords),必须编辑/etc/shadow。)要删除root密码,请编辑密码文件中第二个数据域,将它设置为空白。重启系统不用密码就能登录到root。当系统启动进入runlevel 1时,Debian(至少是Potato以后的版本)需要密码,一些较老的版本则不需要。
在/bin下装一个小编辑器是个好习惯,因为有时/usr是无法访问的(参阅〖11.2 应急的编辑器〗)。
如果安装sash软件包,当系统无法启动时,还可执行:
boot: Linux init=/bin/sash
当/bin/sh不可用时,sash可作为sh的交互式替代品,它是静态链接,内建了许多标准工具(在系统提示符下输入“help”可获得参考列表)。
8.1.2“我忘了root密码!”(2)
----------------------------
从急救盘启动系统。假设/dev/hda3是原始root分区,可用下面的方法编辑密码文件,与上述方法一样容易。
# mkdir fixit
# mount /dev/hda3 fixit
# cd fixit/etc
# vi shadow
# vi passwd
与上面的方法相比,该方法的好处在于不需要知道lilo密码(如果有的话)。但如果系统没有预先设置为从软盘或CD启动,就需要访问BIOS的权限。
8.1.3 无法启动系统
------------------
没在安装过程中制作启动盘?没关系。如果lilo损坏了,从Debian安装套件中拿出启动盘,用它来启动系统。假设你的root分区在/dev/hda12,你想进入runlevel
3,在启动提示符后输入:
boot: rescue root=/dev/hda12 3
接下来,系统使用软盘上的内核启动,你可登录到一个几乎拥有全部功能的系统了。(可能有少量特性或模块不可用。)
如果想做张自定义启动盘,参阅急救盘中的readme.txt文档。
8.1.4 “我不想直接启动到X!”
-----------------------------
玩unstable/sid很有趣,但在启动进程中执行不稳定的xdm、gdm、kdm和wdm会让你焦头烂额。
首先,在启动提示符后输入如下指令获得root shell:
boot: Linux vga=normal s
其中,Linux代表你要启动的内核镜像,“vga=normal”告诉lilo在普通VGA屏幕下运行,“s”(或“S”)是传给init的参数,告诉它进入单用户模式。在提示符后输入root密码。
有多种方法禁用X启动deaemons:
·run update-rc.d ?dm stop 99 1 2 3 4 5 6
·insert "exit 0" at the start of all /etc/init.d/?dm files.
·rename all /etc/rc2.d/S99?dm files to /etc/rc2.d/K99?dm.
·remove all /etc/rc2.d/S99?dm files.
·run :>/etc/X11/default-display-manager
其中,rc2.d必须与/etc/inittab中指定的runlevel一致。?dm表示所有的xdm、gdm、kdm和wdm。
在Debian下只有第一种方法“最正确”。最后一种方法比较简单但只适用于Debian,而且还需要使用dpkg-reconfigure重新设置一次。其它方法都是通用的中止daemons的方法。
你仍可在任何控制台shell中输入startx启动X。
8.1.5 其它用于启动提示符的技巧
------------------------------
使用lilo启动提示符,可指定系统启动到特定的runlevel和配置。详情参阅BootPrompt-HOWTO(LDP
http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html)。
如果希望系统启动到runlevel 4,可以lilo启动提示符后输入:
boot: Linux 4
如果希望系统启动到正常功能的单用户模式,而且你知道root密码,可在lilo启动提示符后输入下列任一参数。
boot: Linux S
boot: Linux 1
boot: Linux -s
如果希望系统以少于实际内存数的内存启动(也就是说机器有64MB内存,只分配48MB给系统使用),在lilo启动提示符后输入:
boot: Linux mem=48M
注意,不要指定大于实际内存数的内存,否则内核会崩溃。如果你有多于64MB的内存,如128MB,应在系统启动时执行mem=128或在/etc/lilo.conf中添加类似的命令行,否则旧内核或使用旧BIOS的主板将无法使用大于64MB的内存。
8.1.6 如何设置启动参数(GRUB)
-----------------------------
GRUB是Hurd项目开发的新型启动管理器,比Lilo更灵活,不过启动参数也与之稍有不同。
grub> find /vmlinuz
grub> root (hd0,0)
grub> kernel /vmlinuz
root=/dev/hda1
grub> initrd /initrd
grub> boot
请注意Hurd中的设备名:
HURD/GRUB Linux MSDOS/Windows
(fd0) /dev/fd0 A:
(hd0,1) /dev/hda1 C:
(usually)
(hd0,4) /dev/hda4 F: (usually)
(hd1,4) /dev/hdb4 ?
详情参阅/usr/share/doc/grub/README.Debian和/usr/share/doc/grub-doc/html/。
8.2 活动记录
============
8.2.1 记录shell活动
比起普通的个人电脑环境,Unix环境的系统管理包含了更多细致的任务。必须掌握所有基本的配置方法以便进行系统故障恢复。基于X的GUI配置工具看上去又好又方便,但不适用于紧急状况。
记录shell活动是个好习惯,特别是root用户。
Emacs:使用M-x shell在缓冲区中开始记录,使用C-x C-w将缓冲区中的记录写入文件。
Shell:使用screen命令和“^A H”,参阅〖8.6.23 用screen来定制控制台〗或脚本命令:
$ script
Script started, file is typescript
... do whatever ...
Control-D
$ col -bx <typescript >savefile
$ vi savefile
还可使用下面的方法:
$ bash -i 2>&1 | tee typescript
8.2.2 记录X活动
---------------
如果需要X应用程序的活动记录图,包括xterm屏显,可使用gimp(GUI)。它可以对每个窗口或整个屏幕进行拍照。还可以使用xwd(xbase-clients)、import(imagemagick)或scrot(scrot)。
8.3 拷贝及创建子目录
====================
8.3.1 拷贝整个子目录的基本命令
------------------------------
如果想重新整理文件组织结构,可使用下面的方法移动文件及文件链接:
标准方法:
# cp -a /source/directory /dest/directory # requires GNU cp
#
(cd /source/directory && tar cf - . ) | \
(cd /dest/directory
&& tar xvfp - )
如果包含硬链接,则需要更严谨的方法:
# cd /path/to/old/directory
# find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory
如果是远程操作:
# (cd /source/directory && tar cf - . ) | \
ssh
user@host.dom (cd /dest/directory && tar xvfp - )
如果没有链接文件:
#
scp -pr user1@host1.dom:/source/directory \
user2@host2.dom:/dest/directory
其中,scp <==> rcp,ssh <==> rsh。
下面的有关拷贝整个子目录的信息由Manoj Srivastava<srivasta@debian.org>发表于debian-user@lists.debian.org。
8.3.2 cp
--------
传统上,cp并不能真正完成这个任务,因为它既没对符号链接进行区别对待,又不能保存硬链接。另一件需要注意的事就是稀疏文件(有洞的文件)。
GNU cp克服了这缺陷,然而对于非GNU系统,cp仍存在问题。而且使用cp无法生成小巧轻便的文档包。
% cp -a . newdir
8.3.3 tar
---------
Tar克服了cp在处理符号链接时出现的问题,然而,cpio可以处理特殊文件,传统的tar却不行。
对于某个有多重硬链接的文件,tar的处理方法是只将其中一个链接拷贝到磁带上,所以日后你只能找回拷贝中所保留那个的链接所指的文件;cpio会为每个链接做一个拷贝,日后你可以找回任意一个链接所指的文件。
在Potato和Woody中,操作.bz2文件的tar命令参数有所变化,所以请在脚本中使用--bzip2而不要简写为-I(Potato)或-j(Woody)。
8.3.4 pax
---------
全新的,符合POSIX(IEEE Std 1003.2-1992,pages 380–388
(section 4.48) and pages 936–940 (section
E.4.48))标准的,众望所归的,轻便的文档包交互工具。pax可以读、写以及列出文档包的成员,并能拷贝文件目录层次。pax的操作独立于特定的文档包格式,支持各种各样不同的文档包格式。
pax工具刚刚成形,还很新。
# apt-get install pax
$ pax -rw -p e . newdir
或
$ find . -depth |
pax -rw -p e newdir
8.3.5 cpio
----------
从cpio或tar文档包提取/放入文件。该文档包可以是硬盘上的另一个文件,也可以是磁带或管道。
$ find . -depth -print0 | cpio --null --sparse -pvd new-dir
8.3.6 afio
----------
afio更善于处理cpio格式的文档包。通常它比cpio要快,且提供了更多磁带选项,并且能更友好的处理有讹误的输入数据。它支持交互式处理多卷文档包。用afio制作压缩文档包比压缩tar或cpio文档包更安全。在备份处理脚本中afio是更佳的“文档处理引擎”。
$ find . -depth -print0 | afio -px -0a new-dir
对所有的磁带备份我都使用afio。
8.4 差异备份与数据同步
======================
要进行差异备份和数据同步可使用下列几种方法:
·rcs:备份并进行历史记录,只支持文本。
·rdiff-backup: 备份并进行历史记录。支持链接。
·rsync:单路同步
·unison:双路同步
·cvs:多路同步服务器备份并进行历史记录,只支持文本,技术成熟。参阅〖12.1 CVS〗。
·arch:多路同步服务器备份并进行历史记录,但包括“处于工作中的目录”。
·subversion:多路同步服务器备份并进行历史记录,专用于Apache。
有关将这些方法与文档包操作结合应用的讨论参阅〖8.3 拷贝及创建子目录〗,有关自动进行备份的讨论参阅〖8.6.22 日程安排(cron,at)〗。
我只讲解两个较容易使用的工具。
8.4.1 使用rdiff进行差异备份
---------------------------
rdiff-backup提供了简单好用的方法对任何文件包括链接进行历史差异备份。例如要对~/ to /mnt/backup目录下的所有文件做备份:
$ rdiff-backup --include ~/tmp/keep --exclude ~/tmp ~/ /mnt/backup
从该文档包中取出3天前的旧数据恢复到~/old目录:
$ rdiff-backup -r 3D /mnt/backup ~/old
参阅rdiff-backup(1)。
8.4.2 使用RCS进行定期差异备份
-----------------------------
changetrack会定期对RCS文档包中基于文本格式的配置文件的变化进行记录。参阅changetrack(1)。
# apt-get install changetrack
# vi changetrack.conf
8.5 系统冻结恢复
================
8.5.1 中止一个进程
------------------
运行top看看什么进程的活动有异常。按“P”以cpu使用率排序,“M”以内存使用率排序,“k”可以中止一个进程。还有一种方法,使用BSD风格的ps
aux | less或System V风格的ps -efH | less。System V风格的排列会显示父进程ID
PPID,这对中止出错的(死掉的)子进程十分有用。
知道了进程的ID,就可使用kill中止(或发信号给)某个进程,killall的作用正如其名一样。经常使用的信号有:
1: HUP,重启daemon
15: TERM,普通中止
9: KILL,强令中止
8.5.2 ALT-SysRq
---------------
内核编译选项“Magic SysRq
key”提供系统强心针。在i386机器上按下ALT-SysRq组合键后,试试按下列各键r 0 k e i s u b,奇迹产生了:
Un'r'aw让键盘从X崩溃中重生。将控制台loglevel改为'0'以减少错误信息。sa'k'(system attention key)中止当前虚拟控制台的所有进程。t'e'rminate中止当前终端除init外的所有进程。k'i'll中止除init外的所有进程。
'S'ync,'u'mount和re'b'oot帮你逃离真正的险境。
本文写作之时,Debian默认安装的内核并未将该选项编译进去,需要重新编译内核激活该功能。详情参阅/usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz或/usr/src/kernel-version/Documentation/sysrq.txt.gz。
8.6 记住这些可爱的小命令
========================
8.6.1 Pager
-----------
less就是pager(文件内容浏览器)。按“h”可获得帮助。它比more更有用。在shell启动脚本中运行eval $(lesspipe)或eval
$(lessfile)可让less活力四射。详情参阅/usr/share/doc/lessf/LESSOPEN。使用-R选项可输出生癖字符and enables
ANSI color escape sequences.参阅less(1)。
对于某些编码系统(EUC)w3m可能是更好的选择。
8.6.2 释放内存
--------------
free和top能让你了解内存资源的许多有用信息。别担心“Mem:”行中“used”的大小,看看它下面的数字(本例的数字是38792)。
$ free -k # for 256MB machine
total used free shared buffers cached
Mem: 257136 230456 26680 45736 116136 75528
-/+ buffers/cache: 38792
218344
Swap: 264996 0 264996
物理内存的准确大小可通过grep '^Memory' /var/log/dmesg得到,本例将显示“Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)”。
Total = 262144k = 256M (1k=1024, 1M=1024k)
Free to dmesg = 256984k =
Total - kernel - reserved - data - init
Free to shell = 257136k = Total -
kernel - reserved - data
约有5MB内存系统不能使用,因为内核需要它。
8.6.3 设定时间(BIOS)
---------------------
# date MMDDhhmmCCYY
#
hwclock --utc
# hwclock --systohc
# hwclock --show
设定系统时间和硬件时间为MM/DD hh:mm, CCYY。显示时间为本地时间而硬件时间使用UTC。
8.6.4 设定时间(NTP)
--------------------
参考:Managing Accurate Date and
Time HOWTO。(http://www.tldp.org/HOWTO/TimePrecision-HOWTO/index.html)
8.6.4.1 拥有永久Internet连接的系统设置时间
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
设置系统时钟通过远程服务器自动对时:
# ntpdate server
如果你的系统拥有永久的Internet连接,应该将该命令加入/etc/cron.daily。
8.6.4.2 偶尔进行Internet连接的系统设置时间
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
使用chrony软件包。
8.6.5 如何禁用屏幕保护程序
--------------------------
对于Linux控制台:
# setterm -powersave off
启动kon2(kanji)控制台可执行:
# kon -SaveTime 0
运行X可执行:
# xset s off
或
# xset -dpms
或
# xscreensaver-command -prefs
参阅相关的帮助页面。
8.6.6 搜索系统管理数据库
------------------------
Glibc提供了getent(1)搜索管理数据库的各类项目。例如passwd、group、hosts、services、protocols或networks。
getent database [key ...]
8.6.7 禁用声音(响铃)
---------------------
最直接的方法是拔掉PC喇叭;-),对于Bash
shell可执行:
echo "set bell-style none">> ~/.inputrc
8.6.8 控制台上的错误信息
------------------------
不想看屏幕显示的错误信息,首选的方法是检查/etc/init.d/klogd,在该脚本中设置KLOGD="-c
3"然后运行/etc/init.d/klogd restart。另一种方法是执行dmesg -n3。
这儿是各种错误级别的含义:
·0: KERN_EMERG, 系统不可用
·1: KERN_ALERT, 必须立即执行
·2: KERN_CRIT, 紧急状态
·3: KERN_ERR, 错误状态
·4: KERN_WARNING, 警告状态
·5: KERN_NOTICE, 正常状态且十分重要
·6: KERN_INFO, 报告
·7: KERN_DEBUG, debug-level信息
如果你很厌恶详细而无用的错误信息,可以试试这个小补丁shutup-abit-bp6(位于样例脚本子目录)。
另一个该看看的地方是/etc/syslog.conf,检查一下是否有信息记录被发送到了控制台设备。
8.6.9 正确设置控制台类型
------------------------
在类Unix系统中,访问控制台屏幕通常要调用库例程,这就为用户提供了一种独立于终端的方式来优化字符的屏幕更新过程。参阅ncurses(3X)和terminfo(5)。
在Debian系统中,有大量预定义项目:
$ toe | less # 所有项目
$ toe /etc/terminfo/ | less # 用户可再配置的项目
你的选择可导出到环境变量TERM。
当登录到远程Debian系统时,如果xterm的terminfo项目在非Debian的xterm中失效,请将终端类型改为支持较少特性的版本如“xterm-r6”。
参阅/usr/share/doc/libncurses5/FAQ。“dumb”是terminfo的最小公分母。
8.6.10 恢复控制台的健壮性
-------------------------
如果执行$ cat
some-binary-file后屏幕一片混乱(命令的返回值与你的输入大相径庭):
$ reset
8.6.11 将DOS下的文本文件转换为Unix类型
--------------------------------------
将DOS文本文件(行尾=^M^J)转换成Unix文本文件(行尾=^J)。
# apt-get install sysutils
$ dos2unix dosfile
8.6.12 正规表达式的置换
-----------------------
将所有文件FILES...中的所有FROM_REGEX字段替换成TO_REGEX字段。
$ perl -i -p -e 's/FROM_REGEX/TO_REGEX/g;' FILES ...
-i表示“就地编辑”,-p表示“在FILES...各文件中循环”。如果置换很复杂,应使用参数-i.bak而非-i,这有助于出错恢复;它会将每个原始文件保存为以.bak为后缀的备份文件。
8.6.13 提取源文件修改部分合并到更新包
-------------------------------------
下面的操作将根据文件位置,提取源文件的修改部分并创建统一的diff文件file.patch0或file.patch1:
$ diff -u file.old file.new1 > file.patch0
$ diff -u old/file
new1/file > file.patch1
diff文件(也称补丁文件)通常用于发送程序更新。收到的补丁文件可使用下面的方法更新另一个文件:
$ patch -p0 file < file.patch0
$ patch -p1 file < file.patch1
如果有3个版本的源代码,使用diff3来合并效率更高:
$ diff3 -m file.mine file.old file.yours > file
8.6.14 分割大文件
-----------------
$ split -b 650m file #
将大文件分块成多个650MB的小文件
$ cat x* >largefile # 将所有小文件合并成一个大文件
8.6.15 精巧的管道命令辅助脚本
-----------------------------
下列脚本做为管道的一部分十分有用。
find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
# find all files in
/usr excluding some files
xargs -n 1 command # run command for all items
from stdin
xargs -n 1 echo| # split white-space-separated items into lines
grep -e pattern| # extract lines containing pattern
cut -d: -f3 -| #
extract third field separated by :
# (passwd file etc.)
col -bx | #
remove backspace and expand tabs to spaces
expand -| # expand tabs
sort
-u| # sort and remove duplicates
tr '\n' ' '| # concatenate lines into one
line
tr '\r' ''| # remove CR
tr 'A-Z' 'a-z'| # convert uppercase to
lowercase
sed 's/^/# /'| # make each line a comment
sed 's/\.ext//g'| #
remove .ext
sed -n -e 2p| # print the second line
h