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

Vok*_*iba 232 debian debian-lenny aptitude

我的似乎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]
Run Code Online (Sandbox Code Playgroud)

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

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

我怎么才能aptitude重新上班?

我可能找到了 aptitude 段错误的根本原因。这是我如何重现它:

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

use*_*307 380

$ man apt-get | grep reinsta -A2
       --reinstall
           Re-Install packages that are already installed and at the newest
           version. Configuration Item: APT::Get::ReInstall.
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get install --reinstall aptitude
Run Code Online (Sandbox Code Playgroud)

  • 男人grep | grep -- "-A" (99认同)
  • 那是什么`-`你在grepping? (38认同)
  • `-A5` 显示匹配的行加上以下 5 行。`--` 停止解析选项,从而将后面的任何内容解释为位置参数,避免必须转义表达式 `-A` 中的破折号,否则会被解释为 grep 本身的选项。 (36认同)
  • `man getopt`,查看`PARSING` (19认同)
  • 你正在搜索的那个`-A5`是什么? (18认同)
  • @jjmontes 所以从技术上讲,`"-A"` 周围的引号不是必需的:`man grep | grep -- -A` (2认同)
  • @DimitryK 是的,`grep -- "-A"` 与 `grep -- -A` 完全一样。引号*由 shell* 解释,并且“grep”始终将第二个参数视为“-A”。显然,在此之前需要“--”以确保它被解释为查询而不是标志“-A”。 (Windows 程序员会有不同的体验,因为 `cmd` 的智能程度比 UNIX shell 低得多。) (2认同)

小智 144

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

当包有很多反向依赖时,这会很方便。

  • @DavidSpillett,我强烈不同意。手册页通常写得很差,对新手非常不友好。例如,“--reinstall”选项的段落没有提到您必须将它与“install”参数一起使用。新手可能会问“为什么我必须告诉它安装和重新安装?” 告诉某人使用 RTFM 的答案是最糟糕的答案,看到它获得最多票数让我很痛苦,尤其是当一个完整且实际有用的答案接近底部时。 (53认同)
  • 感谢您是唯一正确、完整、非刻薄的答案。 (12认同)
  • @Cerin:我不会认为其他答案过于尖刻:即使是“阅读手册页”实际上也给出了答案以及如何找到它。 (6认同)
  • 您也可以使用 apt 代替 apt-get : sudo apt install --reinstall packagename (2认同)

and*_*wan 31

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

sudo apt-get install --reinstall xxxx

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

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

sudo dpkg -r xxxx //to remove that xxxx package
sudo dpkg -P xxxx //to purge all related files
Run Code Online (Sandbox Code Playgroud)

然后

sudo apt-get install xxxx
Run Code Online (Sandbox Code Playgroud)

  • 如果您只需要恢复配置文件,在某些情况下(如果它们由 ucf 管理),您应该使用 `UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]`。 (6认同)
  • 这个答案值得大赞。当您想“完全重新安装”一个软件包时,这就是您所需要的。例如,简单的 --reinstall 的 vsftpd 不会重新创建配置文件,即使该文件不再存在。“删除+清除+(重新)安装”代替了这项工作。 (2认同)

Dav*_*ett 14

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

在执行上述任一操作之前,我建议进行完整的文件系统和坏块检查,以防出现导致问题的问题(取决于问题,如果存在,进一步的活动可能会使事情变得更糟)。此外,请确保您在继续之前查看将在删除/清除步骤中删除的内容(如果由于删除那个包而导致任何额外更改,它应该暂停以征求许可),以仔细检查我的想法是安全的。

  • 您可以使用 `tune2fs` 将文件系统标记为已安装的次数超过其设置限制,这将强制在下次启动时进行检查。假设文件系统是 ext2/3/4:`tune2fs -C 99 <device>`,或者如果你关闭了基于挂载计数的检查,同时使用类似 `tune2fs -c 17 -C 99 的东西打开它<设备>`。 (2认同)
  • 触摸/forcefsck;重新启动 (2认同)