使用ATP下载软件包时,请确保使用了squid
设置本地HTTP代理,如果有可能,请设置http_proxy环境变量或在/etc/apt/apt.conf
http值,这样可极大的改善网络升级的性能,特别是在局域网中多台Debian机器同时升级时。
尽管apt_preferences(5)
的pin功能十分强大,但它并不能解决所有关联问题,因为关联需求总倾向于更新其它基础程序包。
chroot
, 第 8.6.33
节中所描述的使用方法非常适于
将系统的稳定性和可使用大量新版软件两个优点结合在一起。
本章基于Woody系统撰写的,但大部分信息均适用于Potato系统(除了apt_preferences(5)
和/etc/apt/preferences
的相关主题)。
如果你没精力阅读所有的开发文档,那么先看看本章的内容,开始体验Debian testing/unstable的威力吧 :-)
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
update、tasksel或dpkg
-l前执行shell命令行“dselect update”。
在处理关联软件包的方式上,apt-get
会自动搜索下载depends类软件包,但不会理睬recommends和suggests类软件包,而dselect
在软件包的选择方面采用菜单方式操作,对depends、recommends和suggests三类相关软件包均给出提示。aptitude
则提供了选项下载安装所有depends、recommends和suggests类软件包。
参阅软件包关联性, 第 2.2.8 节。
apt-cache - 在本地缓冲区检查包文件 dpkg-reconfigure - 重新配置已安装的软件包(如果它是使用debconf进行配置的) dpkg-source - 管理源码包 dpkg-buildpackage - 自动生成包文件 ...
成套地安装软件包称之为task,还可以使用软件包管理工具逐个地安装软件包或升级系统。 亦可参阅Debian系统安装提示, 第 3 章、发行版升级, 第 5 章和应急的编辑器, 第 11.2 节。
tasksel
或aptitude
进行task安装
tasksel
是Debian的任务安装器,系统安装过程中它为用户提供了一种简易软件包选择方式。
如果你希望完装的某项常规功能包含了许多软件包,最好的办法就是使用它来安装。运行如下命令:
# dselect update # tasksel
aptitude
亦可访问task。用它不仅可以选择tasks还可以对task选项菜单中的软件包进行逐个取舍。
使用testing发布版的用户,有时需要对系统进行有选择性地升级,这时可按将APT升级到Woody版本, 第 5.1
节中描述的方法设置APT系统(>Woody),使用其apt_preferences(5)
功能。
首先,在/etc/apt/sources.list
中添加stable、testing和unstable镜像源,接着编辑/etc/apt/preferences
,设置合适的Pin-Priority。
[1]
Package: * Pin: release a=stable Pin-Priority: 500 Package: * Pin: release a=testing Pin-Priority: 600 Package: * Pin: release a=unstable Pin-Priority: 50
dselect
启动程序,dselect
会自动选上所有“Required”、“Important”和“Standard”类软件包,在Potato系统中,某些大型应用程序如TeX和Emacs处于这些分类中,在初次安装系统时最好手工取消对它们的选择(输入“_”)。在Woody中,这些大型应用程序被移入“Optional”类软件包。
dselect
的用户界面有点怪。有4个相似命令(注意是大写字母!):
Key-stroke Action Q 退出。确认当前的选择然后退出。 (override dependencies) R 恢复!我放弃我做出的选择 D 不管它!我不管dselect有什么建议,照我说的做! U 照系统的建议做
使用D和Q可以选择有冲突的选项,你要自负风险,所以使用这些命令要小心。当前dselect
是一款成熟的菜单驱动式工具,在对suggests和recommends类软件包的选择控制方面,它提供相当棒的微操作能力。
在/etc/dpkg/dselect.cfg
中加上一行包含“expert”选项以减少干扰。对于速度慢的机器,请在其它速度快的机器上运行dselect
选好软件包,然后用apt-get
install安装它们。
对于没有定义Pin-Priority的软件包,dselect
不会访问它们。
aptitude
aptitude
是一款新的菜单驱动式软件包安装工具,与dselect
很相似。它亦可作为命令行工具apt-get
的替代品。参阅aptitude(1)
。
aptitude
可接受单字符命令,通常是小写字母。
Key-stroke Action F10 菜单 ? 键盘命令帮助 u 更新软件包信息 g 下载并安装选定的软件包 q 保存修改并退出当前屏幕 x 放弃修改并退出当前屏幕 Enter 浏览某软件包的相关信息
aptitude
提供了选项可自动选取所有depends、recommends和suggests类软件包。可在F10
-> Options -> Dependency handling菜单中设置它。
通过aptitude
可访问某软件包的所有版本。
apt-cache
和apt-get
命令还是以上面使用testing发布版的用户为例,可使用下列命令管理系统:
跟踪testing发布版的更新情况,对系统上所有软件包进行升级并从testing处安装关联软件包。
跟踪testing发布版的更新情况,对系统上所有软件包进行升级并从testing处重新分析关联关系并安装关联包。
跟踪testing发布版的更新情况,对系统上所有在dselect
中选定了的软件包进行升级。
从testing处安装package及其关联包。
从unstable处安装package并从testing处安装关联包。
从unstable处安装package及其关联包。注意须设置unstable的Pin-Priority为990。
检查foo bar ...软件包的状态。
查看foo bar ...软件包的有关信息。
安装foo软件包的特定版本2.2.4-1。
安装foo软件包并删除bar软件包。
删除bar软件包,但保留其配置文件。
删除bar软件包及其配置文件。
在上面的例子中使用-u选项的作用是在实际升级之前将所有将要升级的软件包列出,并提示用户确认。下面的操作可将-u设置为默认行为:
$ cat >> /etc/apt/apt.conf << . // Always show packages to be upgraded (-u) APT::Get::Show-Upgraded "true"; .
使用-s可进行模拟升级,并不进行真正的升级行为。
根据个人的喜好,选择要跟踪的Debian发行版,然后修改设置APT系统, 第 6.2.2
节的样例文件/etc/apt/preferences
:
track stable: 将testing的Pin-Priority改为50 track testing: 保持上面的设置不变 track testing(unstable): 将unstable的Pin-Priority改为500 track unstable(testing): 将unstable的Pin-Priority改为800
有关如何选定Pin-Priority的说明:在上表中,从上而下代表了某个版本 从上个版本刚刚发布之后到下一版进入冻结期之前这段时间经历的各个阶段。
请注意,跟踪testing发行版的Debian有一个负面影响,安全补丁的更新很慢。
请注意,如果将Debian各版本混合,例如将testing混入stable或将unstable混入stable,这会造成众多关键软件包不自觉地从testing处或unstable处获得,结果引起许多麻烦。
如何对/etc/apt/preferences
进行设置,将某些关键包锁定在成熟版本,而让其它非关键包跟踪不太成熟的新版本,可参考样例目录
中的preferences.testing
和preferences.unstable
文件。另一方面,preferences.stable
强制所有软件包降级到“stable”。
要将所有软件包降级到stable,可按下面的方法编辑/etc/apt/preferences
:
Package: * Pin: release a=stable Pin-Priority: 1001
然后运行“apt-get upgrade”,由于Pin-priority > 1000而引起强制降级。注意,该操作可能会在关联性方面发生一点问题。
/etc/apt/preferences
概述
设置APT系统, 第 6.2.2
节中展示的/etc/apt/preferences
样例文件里,首行Package:
*表示该段落指令作用于所有软件包。可以通过指定软件包名称来为某个特定的软件包设置指定的Pin-Priority。
接下来的一行是Pin: release
a=stable表示apt-get
从包含Archive:
stable节的Release
文件所在的目录获得Packages.gz
文件。
最后一行Pin-Priority: 500指定Pin-Priority为500。
如果多个软件包同名,系统通常会安装拥有最高Pin-Priority的软件包。
在此,Pin-Priority表示:
Pin-Priority处于该范围的软件包允许降级操作。
不允许降级。几个key Pin-Priority的值:
apt-get(8)
-t选项设置的优先级。
按下面的方法设置/etc/apt/apt.conf
可获得与--target-release一样的效果:
# echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf
命令行选项--target-release和/etc/apt/apt.conf
中的设置会顶替/etc/apt/preferences
的设置。在玩/etc/apt/preferences
的时候小心两者冲突。
掌握了这些知识,就能让你的系统“青春永驻”了:-)
如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点(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 $ pager README.Debian # if this exists $ mc
更多技术支持资源列在Debian技术支持, 第 15 章。
从unstable/testing进行升级时可能出现升级Debian系统, 第 5.3 节中提到的软件包关联问题。多数情况下,是因为升级的软件包所需的新增的关联包没有安装。可使用如下方法解决:
# 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
and equivs
软件包, 第 6.5.2 节。
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
目录。(参阅pool目录, 第 2.1.10 节)
然后开始安装:
# 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 # Install missing conffile
如果/var/lib/dpkg/status
因为某种原因坏掉了,Debian系统将会完全丢失软件包选择状态的数据。赶快到/var/lib/dpkg/status-old
或/var/backups/dpkg.status.*
下找找旧的/var/lib/dpkg/status
文件。
将/var/backups/
放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据。
如果旧的/var/lib/dpkg/status
文件也坏了,仍可以从/usr/share/doc/
下的目录进行恢复这些信息。
# ls /usr/share/doc | \ grep -v [A-Z] | \ grep -v '^texmf$' | \ grep -v '^debian$' | \ awk '{print $1 " install"}' | \ dpkg --set-selections # dselect --expert # reinstall system, de-select as needed
/var
被删除后如何恢复系统
/var
目录包含着定时更新的数据如mail,它们很容易遭破坏。将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建/var
目录来挽救Debian系统。
从相同或旧版本的最简Debian系统中取得/var
目录的内容框架,例如var.tar.gz
,然后它放入受损系统的root目录,接着
# cd / # mv var var-old # 如果剩有有用内容 # tar xvzf var.tar.gz # 使用Woody框架文件 # aptitude # 或用dselect
上述步骤可使系统恢复工作。使用恢复软件包选择状态的数据, 第 6.3.4 节中描述的技术加速软件包选择数据的恢复。 ([FIXME]:该过程需要更多的实践来检验)
使用Debian急救软盘/CD或从多启动Linux系统其它分区启动。 See 启动系统, 第 8.1 节.
将无法启动的系统挂载到/target
并使用dpkg
的chroot安装模式。
# dpkg --root /target -i packagefile.deb
接下来就可以着手配置并解决问题。
如是只是由于lilo
损坏而造系统无法启动,可使用标准Debian急救盘启动。假设你的root分区位于/dev/hda12
且想使用runlevel
3,在启动提示符输入:
boot: rescue root=/dev/hda12 3
这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)
dpkg
命令出错该怎么办
如果dpkg
损坏就不能安装任何.deb文件。下面的操作可帮助你修复这种状况。(在第一行,你可将“links”替换成你喜欢的浏览器。)
$ links http://http.us.debian.org/debian/pool/main/d/dpkg/ ... 下载完好的dpkg_version_arch.deb $ su password: ***** # ar x dpkg_version_arch.deb # mv data.tar.gz /data.tar.gz # cd / # tar xzfv data.tar.gz
对i386,亦可用http://packages.debian.org/dpkg作为URL。
有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到Debian天堂。 :-)
查找特定文件所属的软件包:
$ 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
搜索并显示包文件的信息。编辑/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*
进行全自动安装,要在/etc/apt/apt.conf
中加上一行:
Dpkg::Options {"--force-confold";}
另一种等阶的方法是运行apt-get -q -y
packagename。这种方法可能产生严重的负作用,所以使用起来要小心。参阅apt.conf(5)
和dpkg(1)
。
安装完毕以后,可以用重新配置已安装软件包, 第 6.4.4 节中的方法配置特定的软件包。
使用下列方法重新配置已安装软件包。
# dpkg-reconfigure --priority=medium package [...] # dpkg-reconfigure --all # 重新配置所有的软件包 # dpkg-reconfigure locales # 生成别的locales # dpkg-reconfigure --p=low xserver-xfree86 # 重新配置X服务器
如果你想永久改变debconf
对话框模式,可这么做。
某些程序用于生成特殊的配置脚本。
apt-setup - 创建/etc/apt/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菜单系统 ...
删除软件包但保留其配置文件:
# apt-get remove package ... # dpkg --remove package ...
删除软件包并删除配置文件:
# apt-get remove --purge package ... # dpkg --purge package ...
举个例子,要阻止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$"
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软件包升级到最新版本
使用APT安装软件包会在/var/cache/apt/archives
目录留下缓存文件,要清除这些文件可使用:
# apt-get autoclean # removes only useless package files # apt-get clean # removes all cached package files
对软件包选择情况进行本地备份:
$ dpkg --get-selections "*" >myselections # or use \*
“*”使myselections包含那些被指定“完全删除(purge)”的文件。
你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。
# dselect update # dpkg --set-selections <myselections # apt-get -u dselect-upgrade # or dselect install
对stable系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入/etc/apt/sources.list
:
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
由于屏幕输出的限制,上述每条deb-src命令均分成了2行,实际上在sources.list
中它们均为单行。
然后下载源码并在本地生成软件包:
$ apt-get source package $ 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
为了创建与APT和dselect系统兼容的本地软件包文件,需要创建Packages
(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/_.*$/ priority section/' | uniq > override # editor override # adjust priority and section # 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方式远程访问存放在其中的包文件了。
alien
可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发行版中的软件包,可使用alien
将它转化成系统首选的软件包格式后安装。alien
还支持LSB的软件包。
debsums
可以校验已安装软件包的MD5编码,对某些软件包没有可用的MD5编码,系统管理员可使用一个临时的解决办法:
# cat >>/etc/apt/apt.conf.d/90debsums DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";}; ^D
per Joerg Wendland <[email protected]> (untested).
sources.list
简而言之,我尝试过用各种优化方法来创建sources.list
,但任何一种方法对我这个住在美国的人来说都没有明显的改善。最后我还是用apt-setup
手工选择近一点的站点。
apt-spy
会根据站点回应时间和带宽自动创建sources.list
。netselect-apt
会创建一个更完整的sources.list
文件,但它使用更落后的方法来选择镜像站点(比较ping
time)。
# apt-get install apt-spy # cd /etc/apt ; mv sources.list sources.list.org # apt-spy -d testing -l sources.apt
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
。
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.
想用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
。详情参阅自定义X会话, 第 9.4.5.1 节。
/bin/sh
是指向/bin/bash
或/bin/dash
的链接。想兼容旧的Bash脚本,使用/bin/bash
比较保险,但更好还是使用/bin/dash
,因为它更符合POSIX标准。升级到2.4版Linux内核,系统一般将它设置为/bin/dash
。
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登记过。
Debian发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在了第二位,许多daemon服务都定位在最高安全级别,因而,默认安装状态下系统只启动最少的(甚至没有)可用的服务。
如果拿不定把握(有关Exim、DHCP...),可执行ps
aux或检查/etc/init.d/*
和/etc/inetd.conf
下的内容,还可以使用通过PAM和login实现访问权限管理, 第 9.2.1
节中提到的方法检查/etc/hosts.deny
。pidof
命令也很有用(参阅pidof(8)
)
在新版的Debian中,默认状态下X11不允许TCP/IP(远程)连接。参阅X的TCP/IP连接, 第 9.4.6
节,使用SSH进行X传送也是禁用的,参阅X远程联接:ssh
, 第 9.4.8 节。
Debian 参考手册
CVS, 星期二 八月 17 00:35:13 UTC 2004[email protected]
[email protected]