如何使用“ apt-get”重新安装软件包?


186

看来我aptitude的名字有些破损:

sudo aptitude update
0% [Working]Segmentation fault

dmesg
[223282.616599] aptitude[30972]: segfault at 67707f ip 7f954dcfae5d sp 7ffff5a5f950 error 4 in libapt-pkg-libc6.7-6.so.4.6.0[7f954dca5000+bd000]

所以我想aptitude使用重新安装apt-get

不幸的是,它似乎apt-get没有重新安装的选项。

我怎样才能aptitude再次上班?

我有可能找到了aptitude segfault的根本原因。这是我如何复制它:

  1. 通过Cygwin的rxvt终端(来自Windows 7 64位德语版)“ ssh”远程登录Debian机器。
  2. 放大rxvt窗口,使其跨两个监视器(是的,我有两个监视器)
  3. 运行aptitude update。注意:当我将rxvt终端的大小调整为正常大小时,则没有这些分段错误!

Answers:


319
$ man apt-get | grep reinsta -A2
       --reinstall
           Re-Install packages that are already installed and at the newest
           version. Configuration Item: APT::Get::ReInstall.

因此,要使用它重新安装,请aptitude使用:

sudo apt-get install --reinstall aptitude

14
那是什么-A5你grepping?
Vokuhila-Oliba,2010年

86
man grep |
grep-

34
那是什么--你grepping?
Desty

13
man getopt,看下PARSING
Tino

28
-A5显示匹配的行以及以下5行。--停止对选项的解析,从而将其后的任何内容解释为位置参数,避免必须转义表达式中的破折号,-A否则该破折号将被解释为grep本身的选项。
jjmontes 2014年

114

您可以使用重新安装软件包sudo apt-get install --reinstall packagename。这将完全删除软件包(但不会删除依赖它的软件包),然后重新安装该软件包。

当程序包具有许多反向依赖性时,这可能很方便。


10
感谢您是唯一正确,完整,不言而喻的答案。
Cerin 2013年

6
@Cerin:我不会称呼其他答案过于刻板:甚至“阅读手册页”实际上也给出了答案以及如何找到答案。
David Spillett

45
@DavidSpillett,我非常不同意。手册页通常写得很差,对新手也不友好。例如,“-reinstall”选项上的段落没有提到您必须将其与“ install”参数一起使用。一个新手可能会正确地问“为什么我必须告诉它安装并重新安装?” 告诉某人使用RTFM的答案是最糟糕的一种,让我看到投票得最多的答案让我很痛苦,尤其是当一个完整且实际有用的答案接近最低点时。
Cerin 2013年

20

有时您也需要还原配置文件!不只是重新安装。

sudo apt-get install --reinstall xxxx

重新安装该应用程序,保留配置文件。

这可能会有所帮助,但有时您需要重新开始,所以我使用的是:

sudo dpkg -r xxxx //to remove that xxxx package
sudo dpkg -P xxxx //to purge all related files

然后

sudo apt-get install xxxx

6
而且,如果仅需要还原配置文件,则在某些情况下(如果它们由ucf管理),则应使用UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]
Skippy le Grand Gourou 2015年

2
这个答案值得大赞。这是您要“完全重新安装”软件包时需要的。例如,简单的--vsftpd重新安装不会重新创建配置文件,即使该文件不再存在。而是执行“删除+清除+(重新)安装”。
Kar.ma

13

您应该安全删除aptitude并重新安装,因为这不会影响其他apt实用程序。因此:apt-get remove aptitude之后是apt-get install aptitude,如果仍然失败,请尝试apt-get purge aptitude之后apt-get install aptitude

在执行上述任一操作之前,我建议您对文件系统进行完整的检查,并进行坏块检查,以防万一出现问题导致问题(取决于问题,如果有问题,进一步的活动可能会使情况更糟)。另外,请确保您在继续进行操作之前先检查将在“删除/清除”步骤中删除的内容(如果由于删除该程序包而进行了其他更改,则应暂停一下以寻求许可),再次检查我的想法是是安全的。


非常感谢!apt-get remove其次apt-get install是把戏!
Vokuhila-Oliba 2010年

很久以前,我做过类似a full filesystem check或类似的事情。您能给我一个简短的提示怎么做吗?
Vokuhila-Oliba 2010年

1
fsck -f <block_device>fsck /dev/sda1。此时将需要卸载文件系统或将其只读安装,因为这很可能是您的根文件系统,因此您应该重新引导至单用户模式或从其他功能(如实时CD)引导。
David Spillett

2
您可以tune2fs将文件系统标记为已挂载次数超过其设置的限制,这将强制检查下一次引导。假设文件系统为ext2 / 3/4:,tune2fs -C 99 <device>或者如果您已关闭基于装载计数的检查,请使用来同时将其打开tune2fs -c 17 -C 99 <device>
David Spillett

2
触摸/ forcefsck;重新启动
user23307'1

1
sudo apt remove --purge package
sudo apt install package

就像您以前从未安装过该软件包一样。我经常用动作之类的东西来做这个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.