Debian - 安装缺少的手册页?

Debian - 安装缺少的手册页?

我跑树莓BMC- 一个基于的发行版树莓派,这是一个定制的最小 Debian树莓派

如果我没记错的话,man默认情况下,该实用程序并未随 RaspBMC 安装(尽管我可能是错误的)。

问题是,在安装实际man实用程序之前安装的软件包不会安装其手册页。这包括系统预安装的软件包。

示例:我尝试使用 udisks-glue (已预装)

$ man udisks-glue
No manual entry for udisks-glue

重新安装该软件包后,手册页就出现了。

$ apt-get remove udisks-glue
$ apt-get install udisks-glue
$ man udisks-glue
[Man page gets displayed]

问题是:我可以以某种方式安装全部很容易丢失手册页吗?

据我所知,安装手册页是为每个apt-get install命令运行的一个步骤:

Unpacking udisks-glue (from .../udisks-glue_1.3.4-1_armhf.deb) ...
Processing triggers for man-db ...
[...]

使用分治法,我认为这可以通过以下方式获得:

  1. 获取所有已安装软件包的列表 ( dpkg -l | grep ??? | cut ??? | ???)
  2. 找到一种方法告诉 apt-get 重新安装软件包而不弄乱配置(有点remove + install符合要求,但我认为它与依赖项配合得不好)
    编辑:这应该可以做到:
    sudo apt-get install --reinstall packagename
  3. 对 1 中的每个项目运行 2.

这是(最简单的)方法吗?

更新

我记得我曾经做过一次,所以我想确保重新安装时软件包不会升级到较新的版本(默认情况apt-get upgrade下似乎是这样。apt-get install --reinstall

答案1

从 @derobert 的回答开始,我努力准确地获取所有要重新安装的软件包的当前版本。

简洁版本:

sudo dpkg -l | grep '^ii ' | sed 's/  */\t/g' |cut -f 2,3 | sed 's/\t/=/' | xargs apt-get install --reinstall -y --ignore-missing

解释:

关键实际上是指定每个包所需的版本。

一般命令是:

apt-get install --reinstall <package>=<version>

分解长命令行:

$ dpkg -l

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                                        Version                            Architecture Description
+++-===========================================================-==================================-============-========================================================================
ii  adduser                                                     3.113+nmu3                         all          add and remove users and groups
ii  apt                                                         0.9.7.8+rpi1                       armhf        commandline package manager
ii  apt-utils                                                   0.9.7.8+rpi1                       armhf        package managment related utility programs
ii  aptitude-common                                             0.6.8.2-1                          all          architecture indepedent files for the aptitude package manager
ii  atmel-firmware                                              1.3-4                              all          Firmware for Atmel at76c50x wireless networking chips.

$ dpkg -l | grep '^ii '

...摆脱标题行和一些状态为“ hold”的包(标记为hi而不是ii

$ dpkg -l | grep '^ii ' | sed 's/  */\t/g'

...将任意数量的空格转换为单个制表符,为cut.
(顺便说一句:为什么,哦为什么,不sed支持x+“字符 x,一次或多次”的正则表达式?它可以用xx*- 意思是“x”一次,后跟“x”零次或多次来模拟)

输出如下所示:

ii      adduser 3.113+nmu3      all     add     and     remove  users   and     groups
ii      apt     0.9.7.8+rpi1    armhf   commandline     package manager
ii      apt-utils       0.9.7.8+rpi1    armhf   package managment       related utility programs
ii      aptitude-common 0.6.8.2-1       all     architecture    indepedent      files   for     the     aptitude        package manager
ii      atmel-firmware  1.3-4   all     Firmware        for     Atmel   at76c50x        wireless        networking      chips.

下一个:

$ dpkg -l | grep '^ii ' | sed 's/  */\t/g' | cut -f 2,3 | sed 's/\t/=/'

...得到名字和版本每个包的(第二个和第三个字段),并用“=”替换分隔它们的制表符

adduser=3.113+nmu3
apt=0.9.7.8+rpi1
apt-utils=0.9.7.8+rpi1
aptitude-common=0.6.8.2-1
atmel-firmware=1.3-4

最后,使用 . 将上述每个内容作为一长串参数通过管道传递给 apt-get xargs

请注意参数--ignore-missing- 此命令作为“尽力而为”运行 - 我不希望更新停止,因为某些软件包无法重新安装(这些软件包将保持不变)

$ dpkg -l | grep '^ii ' | sed 's/  */\t/g' |cut -f 2,3 | sed 's/\t/=/' | xargs apt-get install --reinstall --ignore-missing

在测试时,我还--dry-run为 apt-get 添加了一个参数。

答案2

听起来是一个相当简单的方法。获取包列表及其状态的命令是dpkg --get-selections,因此您可以执行以下操作:

dpkg --get-selections | grep '\<install$' | cut -f1 | xargs apt-get install --reinstall

相关内容