如何在 Linux 上删除“update-alternatives”链接

use*_*490 11 linux debian centos symbolic-link

很抱歉提出这个问题,但我几个小时无法解决这么简单的问题:

我犯了一个错字错误

update-alternatives --install /usr/lib64/R/lib/libRblapack.so libRblapack.so /usr/lib64/R/lib/libRblapack_native.so 100
Run Code Online (Sandbox Code Playgroud)

它应该是 libRlapack.so 而不是 libRblapack。问题是,如果发出正确的命令行,即

update-alternatives --install /usr/lib64/R/lib/libRlapack.so libRlapack.so /usr/lib64/R/lib/libRlapack_native.so 100
Run Code Online (Sandbox Code Playgroud)

它返回一个错误:

libRlapack.so 的主链接必须是 /usr/lib64/R/lib/libRblapack.so

我试过

update-alternatives --remove libRblapack.so /usr/lib64/R/lib/libRblapack.so
Run Code Online (Sandbox Code Playgroud)

但它不起作用 - 输入正确的命令时返回相同的错误。

我怎样才能把它修好?

谢谢!

use*_*517 8

我会尝试手动清理它。我从来没有这样做过,所以请确保事先备份。

  • 从 /etc/alternatives 中删除链接
  • 从 admin 目录中删除相关文件
    • ubuntu 上的 /var/lib/dpkg/alternatives/(debian 可能相同,但请查看 FILES 部分下的手册页)
    • CentOS 6&7 上的 /var/lib/alternatives/


xqu*_*ilt 8

在我的例子中,手动删除它们会导致... is already managed by ...错误。除此之外,手动删除也无法扩展,因为我已经为集中符号链接添加了多个替代方案。这只是一团糟。
当涉及到 或update-alternativesalternatives,它们都提供--remove--remove-all标志。对于前一个标志,它仅删除链接组的一个替代项。例如

$ update-alternatives --list python3
/usr/bin/python3.8
/usr/bin/python3.9

$ sudo update-alternatives --remove python3 /usr/bin/python3.9

$ update-alternatives --list python3
/usr/bin/python3.8
Run Code Online (Sandbox Code Playgroud)

旗帜的形状--remove经过 update-alternatives --remove symlink-generic-name /path/to/one/executable/alternative

但是,如果您想一次性彻底删除通用名称及其所有相关替代名称,那么--remove-all就是正确的方法。

$ update-alternatives --list python3
/usr/bin/python3.8
/usr/bin/python3.9

$ sudo update-alternatives --remove-all python3

$ update-alternatives --list python3
update-alternatives: error: no alternatives for python3

$ update-alternatives --query python3
update-alternatives: error: no alternatives for python3
Run Code Online (Sandbox Code Playgroud)