我安装了一个库,从源代码编译,通过make install
现在/usr/local/
我发现这是一个坏主意(冲突文件等),并且想逆转该操作。该包不提供make uninstall
。是否可以在不重新安装整个操作系统的情况下实现?当前运行操作系统 Tumbleweed。
答案1
是的,有几种方法(如果您的操作系统用于/usr/local
其自身目的,则可能会更复杂(例如 *BSD 确实用作/usr/local
其软件包或端口的目标),并且您的安装实际上破坏了供应商提供的文件而不是取代供应商文件位于/usr
...)
- 深入挖掘
/usr/local
与库安装的已知文件具有或多或少相同修改时间的文件。 - 重新运行
make install
记录哪些文件被骚扰的东西,例如strace -o installlog -e trace=file -ff make install
然后可以将找到的文件移到一边(最有可能的是lib
bin
和include
目录下的文件);如果您make install
更改或替换了任何供应商提供的文件,则可能需要重新安装特定的软件包才能恢复这些原始文件。
(如果您要安装大量自定义版本的软件,那么学习如何使用供应商管理空间之外的软件库(例如在您的主目录下)可能会很有帮助。)
答案2
你们的软件用吗autotools
?如果是这样,您可以将安装设置为标准目标位置以外的其他位置,例如
./configure --prefix=/somewhere/else/than/usr/local
为了获得最佳结果,请使用为此目的而创建的最初为空的目录。这将显示您已安装的所有文件,您可以浏览列表并从内部删除相应的文件/usr/local
。如果有很多这样的文件,这个过程可以通过脚本自动化。
如果没有,您仍然可以使用软件 Makefile 做类似的事情,只要目标不是硬编码的。
autotools
通常会提供make uninstall
可用的,因此您的软件可能不使用autotools
.
一般来说,本地安装可能会出现问题,部分原因是您已经发现的 - 本地安装可能很难跟踪并且可能会覆盖现有文件。始终寻找适合您的操作系统或发行版的二进制包。进行本地安装应被视为最后的手段。而且对于简单的软件来说,生成二进制包并不难;并且有一些工具可以帮助您做到这一点。