linux怎么卸载用 make install 编译安装的软件
怎么卸载用 make install 编译安装的软件?
如果必须要用源码包安装,请在安装的时候指定--prefix安装目录,另外安装的时候请使用
make >& LOG_make &
make install >& LOG_install &
事先记得记录'make install'的所有输出日志,'make install &> |tee make.log'。然后在日志里能够看得到到底安装了那些文件到那些位置,通常会使用'cp'或者'install'命令拷贝文件。
#安装auto-apt和checkinstall
apt install auto-apt checkinstall
#在源码目录中
auto-apt run ./configure
make
checkinstall
这样会生成一个deb包,卸载和重新安装就非常方便了
#完全卸载 (packagename具体的名字在checkintall完成之后会有提示)
dpkg -r packagename
#用生成的deb包重新安装
dpkg -i ***.deb
更多实用的命令
# 列出包中安装的文件位置
dpkg -L packagename
# 检查是否安装成功
dpkg -l | grep packagename
# 同上
apt list --installed | grep packagename]
一般来说,make install完了目录下会有一个install_mainfest.txt的文件记录了安装的所有内容,
然后xargs rm < install_manifest.txt就可以了。
如果没有这个文件,可以自己重新make install,从log中过滤出install信息了。
如果编译时设置了--prefix到一个单独的文件夹,就删除那个文件夹即可,但如果编译安装到了类似/usr这种地方,就没有特别简单的办法删除干净了。
所以各个发行版提供了各种包管理,就是为了干这种事情的。
装目录,rm -rf 把这些目录都删除,应该能删除干净,如whereis python
python: /usr/bin/python2.6-config /usr/bin/python2.6 /usr/bin/python /usr/lib/python2.6 /usr/lib64/python2.6 /usr/local/bin/python3.3m-config /usr/local/bin/python3.3m /usr/local/bin/python3.3 /usr/local/bin/python3.3-config /usr/local/lib/python3.3 /usr/include/python2.6 /usr/share/man/man1/python.1.gz
万一安装了,就用 find / -name '*XXX* 找出所有文件,一一删掉
找一个临时目录重新安装一遍。比如
./configure --prefix=/tmp/to_remove && make install
然后遍历/tmp/to_remove里的文件,把你原来安装位置的文件都删除。
这样的坏处是有些文件夹还可能删除不了(分不清是系统的还是安装上的)
- make install时会生成文件.installed.list
- 选择清理.installed.list中说明的文件(如果有多个版本时需要特别小心)
- 案例:ruby2.4切换为ruby2.3,思路直接删除所有ruby软件,然后重新make install 2.3
其实类比下windows也很好理解。就像在window下如果直接删除掉Program Files文件夹下安装的软件肯定会留下一大堆例如注册表中的垃圾。所以软件通常都会提供uninstall的程序来执行卸载操作。而linux下在这一点确实做的不够好,依赖管理非常复杂。对于小白来说简直噩梦。但是如果是以docker这样服务的形式来提供软件功能就可以解决uninstall的噩梦。所以,这个就看你怎么权衡自己的架构了。
# 也许是 INSTALL_PREFIX, PREFIX 之类的
# 反正有一颗目录文件树就好办
# 如果是 /usr 的话你也许需要在 xargs 之前加一点东西
cd xxx; find . -type f | cut -c 2- | xargs rm -f
目录暂时没有非常非常简单的方法。