Debian生存工具
来源:互联网 发布:虚拟展厅制作软件 编辑:程序博客网 时间:2024/05/01 02:08
Debian生存工具
掌握了这些知识,就能让你的系统“青春永驻”了:-)
3.3.1 检测程序错误寻求帮助
如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点(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
3.3.2 APT升级错误及解决方法
从unstable/testing进行升级时可能出现升级Debian系统, 第 2.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
。
3.3.3 使用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
目录。
然后开始安装:
# 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
3.3.4 恢复软件包选择状态的数据
如果/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
3.3.5 /var
被删除后如何恢复系统
/var
目录包含着定时更新的数据如mail,它们很容易遭破坏。将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建/var
目录来挽救Debian系统。
从相同或旧版本的最简Debian系统中取得/var
目录的内容框架,例如var.tar.gz
,然后它放入受损系统的root目录,接着
# cd / # mv var var-old # 如果剩有有用内容 # tar xvzf var.tar.gz # 使用Woody框架文件 # aptitude # 或用dselect
上述步骤可使系统恢复工作。使用恢复软件包选择状态的数据, 第 3.3.4 节中描述的技术加速软件包选择数据的恢复。([FIXME]:该过程需要更多的实践来检验)
3.3.6 为无法启动的系统安装软件包
使用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
这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)
3.3.7 如果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。
3.4 Debian必杀技
有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到Debian天堂。 :-)
3.4.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
3.4.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*
3.4.3 使用APT进行全自动系统安装
进行全自动安装,要在/etc/apt/apt.conf
中加上一行:
Dpkg::Options {"--force-confold";}
另一种等阶的方法是运行apt-get -q -y packagename。这种方法可能产生严重的负作用,所以使用起来要小心。参阅apt.conf(5)
和dpkg(1)
。
安装完毕以后,可以用重新配置已安装软件包, 第 3.4.4 节中的方法配置特定的软件包。
3.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菜单系统 ...
3.4.5 删除软件包
删除软件包但保留其配置文件:
# apt-get remove package ... # dpkg --remove package ...
删除软件包并删除配置文件:
# apt-get remove --purge package ... # dpkg --purge package ...
3.4.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___FCKpd___28quot;
3.4.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软件包升级到最新版本
3.4.8 删除缓存包文件
使用APT安装软件包会在/var/cache/apt/archives
目录留下缓存文件,要清除这些文件可使用:
# apt-get autoclean # removes only useless package files # apt-get clean # removes all cached package files
3.4.9 记录/拷贝系统配置
对软件包选择情况进行本地备份:
$ dpkg --get-selections "*" >myselections # or use /*
“*”使myselections包含那些被指定“完全删除(purge)”的文件。
你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。
# dselect update # dpkg --set-selections <myselections # apt-get -u dselect-upgrade # or dselect install
3.4.10 向stable系统引入软件包
对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
3.4.11 本地软件包文件
为了创建与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方式远程访问存放在其中的包文件了。
3.4.12 转化或安装外来二进制软件包
alien
可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发行版中的软件包,可使用alien
将它转化成系统首选的软件包格式后安装。alien
还支持LSB的软件包。
3.4.13 校验已安装软件包
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).
3.5 其它Debian特性
3.5.1 dpkg-divert
命令
使用文件转移(diversions)的方法可以强令dpkg
将文件安装到转移目录而非默认目录。对于某个引起冲突的文件,可以在Debian软件包脚本中使用Diversions将它安装到别的目录。系统管理员还可以使用diversion来重载软件包配置文件,或者用来保留某些旧配置文件(这些文件没有在conffiles中登记)当安装新版软件时这些文件会被覆盖。。
# dpkg-divert [--add] filename # add "diversion" # dpkg-divert --remove filename # remove "diversion"
记住,不到万不得已不要使用dpkg-divert
。
3.5.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.
3.5.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
。
/bin/sh
是指向/bin/bash
或/bin/dash
的链接。想兼容旧的Bash脚本,使用/bin/bash
比较保险,但更好还是使用/bin/dash
,因为它更符合POSIX标准。升级到2.4版Linux内核,系统一般将它设置为/bin/dash
。
3.5.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登记过。
3.5.5 停止daemon服务
Debian发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在了第二位,许多daemon服务都定位在最高安全级别,因而,默认安装状态下系统只启动最少的(甚至没有)可用的服务。
如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*
和/etc/inetd.conf
下的内容,还可以检查/etc/hosts.deny
。pidof
命令也很有用(参阅pidof(8)
)
在新版的Debian中,默认状态下X11不允许TCP/IP(远程)连接。使用SSH进行X传送也是禁用的,
| / grep -v '^debian3.3.5 /var
被删除后如何恢复系统
/var
目录包含着定时更新的数据如mail,它们很容易遭破坏。将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建/var
目录来挽救Debian系统。
从相同或旧版本的最简Debian系统中取得/var
目录的内容框架,例如var.tar.gz
,然后它放入受损系统的root目录,接着
___FCKpd___12
上述步骤可使系统恢复工作。使用恢复软件包选择状态的数据, 第 3.3.4 节中描述的技术加速软件包选择数据的恢复。([FIXME]:该过程需要更多的实践来检验)
3.3.6 为无法启动的系统安装软件包
使用Debian急救软盘/CD或从多启动Linux系统其它分区启动。将无法启动的系统挂载到/target
并使用dpkg
的chroot安装模式。
___FCKpd___13
接下来就可以着手配置并解决问题。
如是只是由于lilo
损坏而造系统无法启动,可使用标准Debian急救盘启动。假设你的root分区位于/dev/hda12
且想使用runlevel 3,在启动提示符输入:
___FCKpd___14
这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)
3.3.7 如果dpkg
命令出错该怎么办
如果dpkg
损坏就不能安装任何.deb文件。下面的操作可帮助你修复这种状况。(在第一行,你可将“links”替换成你喜欢的浏览器。)
___FCKpd___15
对i386,亦可用http://packages.debian.org/dpkg作为URL。
3.4 Debian必杀技
有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到Debian天堂。 :-)
3.4.1 文件信息
查找特定文件所属的软件包:
___FCKpd___16
或使用专门的软件包命令:
___FCKpd___17
3.4.2 软件包信息
搜索并显示包文件的信息。编辑/etc/apt/sources.list
,让APT指向正确的包文件。如果想了解testing/unstable中的相应软件包与当前系统安装的软件包有何差别,使用apt-cache policy—更好。
___FCKpd___18
Woody发布版没有为apt-cache showsrc建档,但该命令可用:)
你也这可这样查看软件包信息(我用mc浏览):
___FCKpd___19
比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。
___FCKpd___20
3.4.3 使用APT进行全自动系统安装
进行全自动安装,要在/etc/apt/apt.conf
中加上一行:
___FCKpd___21
另一种等阶的方法是运行apt-get -q -y packagename。这种方法可能产生严重的负作用,所以使用起来要小心。参阅apt.conf(5)
和dpkg(1)
。
安装完毕以后,可以用重新配置已安装软件包, 第 3.4.4 节中的方法配置特定的软件包。
3.4.4 重新配置已安装软件包
使用下列方法重新配置已安装软件包。
___FCKpd___22
如果你想永久改变debconf
对话框模式,可这么做。
某些程序用于生成特殊的配置脚本。
___FCKpd___23
3.4.5 删除软件包
删除软件包但保留其配置文件:
___FCKpd___24
删除软件包并删除配置文件:
___FCKpd___25
3.4.6 阻止旧软件包升级
举个例子,要阻止libc6
和libc6-dev
通过dselect
或使用apt-get -u upgrade package命令升级,可执行:
___FCKpd___26
这种方法不影响apt-get -u install package命令操作。要阻止apt-get -u upgrade package或apt-get -u dist-upgrade命令对软件包执行的强制自动降级行为,可在/etc/apt/preferences
中加上:
___FCKpd___27
这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与glibc
源码包相关的二进制包的版本同步,可以明确的列出它们。
该命令可以显示处于“阻止”状态的软件包:
___FCKpd___28
3.4.7 stable/testing/unstable混合系统
apt-show-versions
可以列出发行版中可用软件包的版本。
___FCKpd___29
3.4.8 删除缓存包文件
使用APT安装软件包会在/var/cache/apt/archives
目录留下缓存文件,要清除这些文件可使用:
___FCKpd___30
3.4.9 记录/拷贝系统配置
对软件包选择情况进行本地备份:
___FCKpd___31
“*”使myselections包含那些被指定“完全删除(purge)”的文件。
你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。
___FCKpd___32
3.4.10 向stable系统引入软件包
对stable系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入/etc/apt/sources.list
:
___FCKpd___33
由于屏幕输出的限制,上述每条deb-src命令均分成了2行,实际上在sources.list
中它们均为单行。
然后下载源码并在本地生成软件包:
___FCKpd___34
通常,需要安装一些带“-dev”后缀的软件包以满足关联关系。debsign
在devscripts
软件包中。auto-apt
可以轻松解决这些关联问题。请使用fakeroot
,如是没有必要,就别使用root帐号。
在Woody中,这些关联问题已被简化。例如,编译pine
源码包:
___FCKpd___35
3.4.11 本地软件包文件
为了创建与APT和dselect系统兼容的本地软件包文件,需要创建Packages
(Packages),包中文件要放在特定的目录树中。
Debian官方包文件喜欢存放于本地deb仓库,下面就来创建仓库:
___FCKpd___36
还可以这样快速创建一个本地deb仓库:
___FCKpd___37
在/etc/apt/sources.list
中设置相应镜像源入口地址,就可以通过HTTP或FTP方式远程访问存放在其中的包文件了。
3.4.12 转化或安装外来二进制软件包
alien
可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发行版中的软件包,可使用alien
将它转化成系统首选的软件包格式后安装。alien
还支持LSB的软件包。
3.4.13 校验已安装软件包
debsums
可以校验已安装软件包的MD5编码,对某些软件包没有可用的MD5编码,系统管理员可使用一个临时的解决办法:
___FCKpd___38
per Joerg Wendland <joergland@debian.org> (untested).
3.5 其它Debian特性
3.5.1 dpkg-divert
命令
使用文件转移(diversions)的方法可以强令dpkg
将文件安装到转移目录而非默认目录。对于某个引起冲突的文件,可以在Debian软件包脚本中使用Diversions将它安装到别的目录。系统管理员还可以使用diversion来重载软件包配置文件,或者用来保留某些旧配置文件(这些文件没有在conffiles中登记)当安装新版软件时这些文件会被覆盖。。
___FCKpd___39
记住,不到万不得已不要使用dpkg-divert
。
3.5.2 equivs
软件包
如果你从源码编译程序,最好将它做成本地Debian化软件包(*.deb)。最新的方法是使用equivs。
___FCKpd___40
3.5.3 自选命令
想用vi
命令启动vim
,可使用update-alternatives
来定义:
___FCKpd___41
Debian自选命令设定系统中的这些项目,都是/etc/alternatives
下的链接文件。
想设置你喜爱的X window环境,执行update-alternatives
来指定/usr/bin/x-session-manager
和/usr/bin/x-window-manager
。
/bin/sh
是指向/bin/bash
或/bin/dash
的链接。想兼容旧的Bash脚本,使用/bin/bash
比较保险,但更好还是使用/bin/dash
,因为它更符合POSIX标准。升级到2.4版Linux内核,系统一般将它设置为/bin/dash
。
3.5.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中停止它们:
___FCKpd___42
要删除init.d
脚本中存在的符号链接可执行:
___FCKpd___43
要编辑运行级别,我通常在mc
中用Alt-Enter拷贝链接名,然后在shell提示符下使用mv
命令手工编辑,例如:
___FCKpd___44
有时为了进行临时调试,我甚至在init.d
脚本的开头加入exit 0来禁用一个daemon,反正它们都在conffiles登记过。
3.5.5 停止daemon服务
Debian发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在了第二位,许多daemon服务都定位在最高安全级别,因而,默认安装状态下系统只启动最少的(甚至没有)可用的服务。
如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*
和/etc/inetd.conf
下的内容,还可以检查/etc/hosts.deny
。pidof
命令也很有用(参阅pidof(8)
)
在新版的Debian中,默认状态下X11不允许TCP/IP(远程)连接。使用SSH进行X传送也是禁用的,
| / awk '{print $1 " install"}' | / dpkg --set-selections # dselect --expert # reinstall system, de-select as needed3.3.5 /var
被删除后如何恢复系统
/var
目录包含着定时更新的数据如mail,它们很容易遭破坏。将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建/var
目录来挽救Debian系统。
从相同或旧版本的最简Debian系统中取得/var
目录的内容框架,例如var.tar.gz
,然后它放入受损系统的root目录,接着
___FCKpd___12
上述步骤可使系统恢复工作。使用恢复软件包选择状态的数据, 第 3.3.4 节中描述的技术加速软件包选择数据的恢复。([FIXME]:该过程需要更多的实践来检验)
3.3.6 为无法启动的系统安装软件包
使用Debian急救软盘/CD或从多启动Linux系统其它分区启动。将无法启动的系统挂载到/target
并使用dpkg
的chroot安装模式。
___FCKpd___13
接下来就可以着手配置并解决问题。
如是只是由于lilo
损坏而造系统无法启动,可使用标准Debian急救盘启动。假设你的root分区位于/dev/hda12
且想使用runlevel 3,在启动提示符输入:
___FCKpd___14
这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)
3.3.7 如果dpkg
命令出错该怎么办
如果dpkg
损坏就不能安装任何.deb文件。下面的操作可帮助你修复这种状况。(在第一行,你可将“links”替换成你喜欢的浏览器。)
___FCKpd___15
对i386,亦可用http://packages.debian.org/dpkg作为URL。
3.4 Debian必杀技
有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到Debian天堂。 :-)
3.4.1 文件信息
查找特定文件所属的软件包:
___FCKpd___16
或使用专门的软件包命令:
___FCKpd___17
3.4.2 软件包信息
搜索并显示包文件的信息。编辑/etc/apt/sources.list
,让APT指向正确的包文件。如果想了解testing/unstable中的相应软件包与当前系统安装的软件包有何差别,使用apt-cache policy—更好。
___FCKpd___18
Woody发布版没有为apt-cache showsrc建档,但该命令可用:)
你也这可这样查看软件包信息(我用mc浏览):
___FCKpd___19
比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。
___FCKpd___20
3.4.3 使用APT进行全自动系统安装
进行全自动安装,要在/etc/apt/apt.conf
中加上一行:
___FCKpd___21
另一种等阶的方法是运行apt-get -q -y packagename。这种方法可能产生严重的负作用,所以使用起来要小心。参阅apt.conf(5)
和dpkg(1)
。
安装完毕以后,可以用重新配置已安装软件包, 第 3.4.4 节中的方法配置特定的软件包。
3.4.4 重新配置已安装软件包
使用下列方法重新配置已安装软件包。
___FCKpd___22
如果你想永久改变debconf
对话框模式,可这么做。
某些程序用于生成特殊的配置脚本。
___FCKpd___23
3.4.5 删除软件包
删除软件包但保留其配置文件:
___FCKpd___24
删除软件包并删除配置文件:
___FCKpd___25
3.4.6 阻止旧软件包升级
举个例子,要阻止libc6
和libc6-dev
通过dselect
或使用apt-get -u upgrade package命令升级,可执行:
___FCKpd___26
这种方法不影响apt-get -u install package命令操作。要阻止apt-get -u upgrade package或apt-get -u dist-upgrade命令对软件包执行的强制自动降级行为,可在/etc/apt/preferences
中加上:
___FCKpd___27
这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与glibc
源码包相关的二进制包的版本同步,可以明确的列出它们。
该命令可以显示处于“阻止”状态的软件包:
___FCKpd___28
3.4.7 stable/testing/unstable混合系统
apt-show-versions
可以列出发行版中可用软件包的版本。
___FCKpd___29
3.4.8 删除缓存包文件
使用APT安装软件包会在/var/cache/apt/archives
目录留下缓存文件,要清除这些文件可使用:
___FCKpd___30
3.4.9 记录/拷贝系统配置
对软件包选择情况进行本地备份:
___FCKpd___31
“*”使myselections包含那些被指定“完全删除(purge)”的文件。
你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。
___FCKpd___32
3.4.10 向stable系统引入软件包
对stable系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入/etc/apt/sources.list
:
___FCKpd___33
由于屏幕输出的限制,上述每条deb-src命令均分成了2行,实际上在sources.list
中它们均为单行。
然后下载源码并在本地生成软件包:
___FCKpd___34
通常,需要安装一些带“-dev”后缀的软件包以满足关联关系。debsign
在devscripts
软件包中。auto-apt
可以轻松解决这些关联问题。请使用fakeroot
,如是没有必要,就别使用root帐号。
在Woody中,这些关联问题已被简化。例如,编译pine
源码包:
___FCKpd___35
3.4.11 本地软件包文件
为了创建与APT和dselect系统兼容的本地软件包文件,需要创建Packages
(Packages),包中文件要放在特定的目录树中。
Debian官方包文件喜欢存放于本地deb仓库,下面就来创建仓库:
___FCKpd___36
还可以这样快速创建一个本地deb仓库:
___FCKpd___37
在/etc/apt/sources.list
中设置相应镜像源入口地址,就可以通过HTTP或FTP方式远程访问存放在其中的包文件了。
3.4.12 转化或安装外来二进制软件包
alien
可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发行版中的软件包,可使用alien
将它转化成系统首选的软件包格式后安装。alien
还支持LSB的软件包。
3.4.13 校验已安装软件包
debsums
可以校验已安装软件包的MD5编码,对某些软件包没有可用的MD5编码,系统管理员可使用一个临时的解决办法:
___FCKpd___38
per Joerg Wendland <joergland@debian.org> (untested).
3.5 其它Debian特性
3.5.1 dpkg-divert
命令
使用文件转移(diversions)的方法可以强令dpkg
将文件安装到转移目录而非默认目录。对于某个引起冲突的文件,可以在Debian软件包脚本中使用Diversions将它安装到别的目录。系统管理员还可以使用diversion来重载软件包配置文件,或者用来保留某些旧配置文件(这些文件没有在conffiles中登记)当安装新版软件时这些文件会被覆盖。。
___FCKpd___39
记住,不到万不得已不要使用dpkg-divert
。
3.5.2 equivs
软件包
如果你从源码编译程序,最好将它做成本地Debian化软件包(*.deb)。最新的方法是使用equivs。
___FCKpd___40
3.5.3 自选命令
想用vi
命令启动vim
,可使用update-alternatives
来定义:
___FCKpd___41
Debian自选命令设定系统中的这些项目,都是/etc/alternatives
下的链接文件。
想设置你喜爱的X window环境,执行update-alternatives
来指定/usr/bin/x-session-manager
和/usr/bin/x-window-manager
。
/bin/sh
是指向/bin/bash
或/bin/dash
的链接。想兼容旧的Bash脚本,使用/bin/bash
比较保险,但更好还是使用/bin/dash
,因为它更符合POSIX标准。升级到2.4版Linux内核,系统一般将它设置为/bin/dash
。
3.5.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中停止它们:
___FCKpd___42
要删除init.d
脚本中存在的符号链接可执行:
___FCKpd___43
要编辑运行级别,我通常在mc
中用Alt-Enter拷贝链接名,然后在shell提示符下使用mv
命令手工编辑,例如:
___FCKpd___44
有时为了进行临时调试,我甚至在init.d
脚本的开头加入exit 0来禁用一个daemon,反正它们都在conffiles登记过。
3.5.5 停止daemon服务
Debian发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在了第二位,许多daemon服务都定位在最高安全级别,因而,默认安装状态下系统只启动最少的(甚至没有)可用的服务。
如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*
和/etc/inetd.conf
下的内容,还可以检查/etc/hosts.deny
。pidof
命令也很有用(参阅pidof(8)
)
在新版的Debian中,默认状态下X11不允许TCP/IP(远程)连接。使用SSH进行X传送也是禁用的,
- Debian生存工具
- Debian系统配制工具
- Debian系统配制工具
- (转)Debian系统配置工具
- debian打包工具
- Debian系统配制工具
- Debian下的工具
- Debian系统配制工具
- Debian 音量调节工具
- DEBIAN的dpkg-系列工具
- Debian维护工具之APT
- Debian 维护工具之 APT
- Debian 维护工具之 Dpkg
- Debian 维护工具之 APT
- Debian 维护工具之 Dpkg
- Debian下安装sqlplus 工具
- Linux(debian)fail2ban防御工具
- 工具类APP的生存之道
- 正式开始使用这个blog了
- 无线传感器网络研究平台TinyOS下载、配置与开发步骤
- JavaScript实际应用:innerHTMl和确认提示的使用
- Lucene 分词原理
- 如何使一个div背景在不同分辨率情况下都能全高度显示
- Debian生存工具
- 动态表单
- AOP(Aspect-Oriented Programming)重要吗?
- rome的一个小例子,读取rss数据
- TOJ 1032 等式问题 Accepted
- [SMS开发总结]短信开发技术总结--开发篇
- C#设计模式(1)
- C#设计模式(2)
- C#设计模式(3)