关于在linux系统下卸载软件的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于在linux系统下卸载软件的问题相关的知识,希望对你有一定的参考价值。
参考技术A 分类: 电脑/网络 >> 操作系统/系统故障问题描述:
在linux系统下安装了某个软件如果软件出了问题怎么卸载它呢?例如我装了Realplayer播放器,现在这个播放器出了问题我该怎么去卸载它呢?请高手指点,请说出详细的解决办法,谢谢!您可以直接联系我(QQ:***********,加我QQ时请在请求验证中输入一个"Z"字,谢谢).
解析:
Linux软件的安装和卸载一直是困扰许多新用户的难题。在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程序”来实现。与其相类似,在Linux下有一个功能强大的软件安装卸载工具,名为RPM。它可以用来建立、安装、查询、更新、卸载软件。该工具是在命令行下使用的。在Shell的提示符后输入rpm,就可获得该命令的帮助信息。
软件的卸载
1.软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:
#rpm -q -a
即可查询到当前系统中安装的所有的软件包。
2.确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入如下命令即可卸载软件:
#rpm -e [package name]
参数e的作用是使rpm进入卸载模式。对名为[package name]的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm将给予提示并停止卸载。你可以使用如下的命令来忽略依赖关系,直接开始卸载:
#rpm -e [package name] -nodeps
忽略依赖关系的卸载可能会导致系统中其它的一些软件无法使用。
补充:
如果是以.bin结尾的二进制软件,可以用以下方法安装(以so-6_0-beta-bin-linux-zh-Tw1.bin为例):
在so-6_0-beta-bin-linux-zh-Tw1.bin所在文件夹下运行模拟终端
输入:
./so-6_0-beta-bin-linux-zh-Tw1.bin
并按回车!
当然也可以输入:
./so 再用[Tab]键补全
(./表示当前目录,如果终端不在该软件所在目录下打开,则在软件名前尚需输入相应的路径。)
如果在图形界面,也可直接单击(或双击,视具体的鼠标设置而定)运行反安装程序就可以了!
Linux 的软件管理 - 安装卸载升级 和 依赖管理
1. 对比:Windows 和 Linux 上软件的安装与卸载
就像在 Windows 下,很多软件也有安装版与免安装版一样,在 Linux 下也有这样的差别。
Windows 下的安装版软件在安装时需要管理员权限,它会在系统的注册表中添加关于自己的信息,也可能会在系统的某些某些地方添加一些文件。一般而言,这样的软件都会在安装目录下提供一个名为uninstall.exe
的文件,它会逆向执行安装操作。(这里存在的问题是,这个 uninstall.exe 真的能把软件卸载干净么?于是就产生了各种问题。)
相对的,Linux 的包管理工具,(常见的有apt-get/dpkg yum/rpm)也需要 root权限,安装时会将软件的依赖、安装位置等信息写入某个地方,在卸载时会执行安装的逆向操作,不过一般只卸载软件本身,而不会卸载依赖。使用 apt-get 的话,需要用 autoremove 选项,这样卸载时,也会自动卸载依赖。(从软件仓库在线安装和下载 deb rpm 离线安装都属此类)
而免安装软件呢,Windows 和 Linux 都差不多。只需要将软件解压(下载好的软件应该是 tar.gz 或 zip 格式,需要解压),就能直接用了。Linux 的启动方式应该是 bin 目录下的启动脚本之类,而 Windows 上,一般就是安装目录下与软件同名的 exe 程序。
免安装软件需要用户自己记住安装位置,要删除的时候,直接删除掉解压出来的文件夹就行了。(如果使用程序时,它没执行过其他操作的话。)
Windows 的用户群大,安装版软件最流行,这种方式能方便用户管理自己安装的软件。而且 Windows 软件体系的兼容性做得特别好,十年前在 Xp 上编译的软件,很可能仍然能在最新的 Win10 流畅运行。(这也是形势所迫吧,在 Windows 上,让普通用户去从源码编译几乎是不可能的,因此开发者别无选择,只能发布 exe 格式。)
而 Linux 是开源操作系统,因此默认不能包含任何非开源的软件。如果需要这类非开源的软件,用户只能自行安装。Linux 系的软件有如下特色:
- Linux 系的开源软件,如果是用户群少的或者更新很快的,可能只会发布源码tarball,需要自行编译安装,不会发布各平台的编译版。即使有编译版,也可能只会提供 deb rpm 这样用户群大的,还可能不会及时更新。(Linux 社区崇尚开源,这和 WIndows 截然不同。不过这也使 Linux 的软件安装过程受人诟病)
- 用户群大的商业软件,如 Jetbrains 系,只发布通用的二进制 tar.gz 包,也就是免安装版,而 Oracle JDK 则只发布 tar.gz 和 rpm.(大概考虑到很多 CentOS 服务器有用 JDK 吧)
- 用户群大的开源软件,一般会提供 tar.gz 的源码和 binary.tar.gz.
总结一下就是,Linux 方面,通用的免安装包好像很流行,而安装包只能用于特定发行版,不太讨喜。
使用 Linux 的大部分都是程序员,因此源码版也很受欢迎。从源码安装有更大的自由度,编译出的程序也可以特定于自己的电脑,省去很多兼容性的东西。简单的说就是更快更爽。
那下面就分这三种情况,分别讨论软件的安装、卸载。
2. 免安装二进制tarball
这种包一般是 tar.gz 或 tar.xz 格式,解压后,cd 到 bin 目录,里面会有一个与软件同名的脚本或可执行文件,直接运行它就启动软件了。而且这种包貌似是能在各发型版上通用的(eg. pycharm nodejs jdk etc.)
一般我们在 Linux 上安装了软件后,都希望能够在 shell 里直接启动它。要做到这个,需要先了解 Linux 的 shell 环境变量配置文件
- 全局环境
- /etc/profile 系统的 shell 环境配置文件(仅每个用户登录时加载一次,不建议修改)
- /etc/bash.bashrc 系统的 bash shell 环境配置文件(每次开启一个新 bash,都会加载。如果需要对所有用户都生效的 bash 环境,就修改这个)
- 用户环境
- ~/.profile [也可能是 ~/.bash_profile] 用户个人的 shell 环境配置文件,相当于 /etc/profile 的个人 patch。一般来说它设定一些用户个人的环境变量,然后执行 ~/.bashrc。
- ~/.bashrc 用户个人的 bash shell 配置文件(同样每次开新 bash 都会加载)
- source :在当前 shell 中执行指定的 shell 脚本。常用于环境设定档。(这样做,运行后的变量会存在于当前shell,也就完成了所谓的环境设定。而如果是普通的直接运行的话,会启用新shell来运行该脚本,运行结束环境就销毁了。)
由上述配置文件引申,用户安装二进制 tarball 时,通常有两种做法:
一种就是将该软体的 bin 目录添加进PATH中(这会使该 bin 目录中的所有可执行文件都被加入到 PATH,如果你不想这样,请考虑第二种方法),也就是将相关命令写入 shell 配置文件中。至于应该添加到哪里,看了上面的说明,你应该已经懂了。
举例来说,安装一个软件时,如果该软件大家都要用,就应该写入系统配置里,然后如果你基本只用 bash,写 bashrc 里更方便(修改可立即生效),否则选profile。
而若只有你个人需要该软件,肯定要放用户配置里,再考虑你是不是用其他 shell。一般来说放 bashrc 里总没问题,而放 profile 里,有时会需要手动source /etc/profile
一下才能用。第二种呢,就是向PATH默认就会包含的那些目录中(例如 /usr/local/bin),添加启动脚本。(使用 python 或 shell 编写)Jetbrains 家的软件在检测到该软件的 bin 目录未添加进 PATH 时,就会提示你这么干。(idea 会向 /usr/local/bin 添加名为 idea 的 python 启动脚本)
而如果是 JDK 这种需要在配置环境变量的软件,这之后你还需要手动配置 JAVA_HOME、CLASSPATH等。
3.使用安装包安装
这种方式就和 Windows 的安装包类似,但是该安装包只能用于特定的发行版,因为不同的发行版使用不同的包机制。最常见的是dpkg 和 rpm,它们也存在对应的在线安装机制,就是apt-get 和 yum.
待续
4. 从源码编译安装
从源码编译安装好处已经说了,自由度更高,兼容问题更少,性能更高等。缺点就是编译比较麻烦,而且安装好的软件也不好管理。
gcc 编译套件(编译 + 链接)
说到编译,一般都是 c/c++ 源码,那在详细说明之前,这里有些目录需要先介绍。
- /lib、/lib64:共享链接库,包括静态链接库 *.a,和动态链接库 *.so. 使用 gcc 编译时,默认会从这里查询需要的链接库。不在此列的链接库需要用
-l单个链接库
或-L/链接库所在文件夹
来指定。 - /usr/include:系统头文件的保存处,使用 gcc 编译时,默认会从这里查询需要的系统头文件。不在此列的头文件目录需要使用
-I/头文件所在文件夹
来指定(是大写的 i)
make 软件构建工具
在软件变得庞大时,如果还手动地一次次调用 gcc,就变得不太现实了。这个时候为了让计算机自动化地处理这种项目的编译构建过程,make 诞生了,它依赖 Makefile。(如果项目变得更庞大,即使是手写Makefile也变得很困难,这时出现了cmake。cmake是用来自动生成Makefile的,它依赖于 CMakeList.txt)
不过流行的开源软件,makefile.txt 的生成规则早就已经写在 configure 里了,你需要做的只是
./configure
make
sudo make install
如果使用的是cmake,那就用cmake .
替换掉./configure
就行。(有时为了隔离编译相关文件和源码,会先创建一个build文件夹,再在该文件夹内运行cmake ..
)
话虽如此,还是需要先安装好编译需要的依赖,才能正常编译,否则在./configure
这一步就会报错。要从源码安装一个软件,最痛苦的不是在make,而是在处理依赖。要是这依赖的安装也能自动化就好了。。。
源码安装软件的删除
从源码安装的软件虽有诸多好处,但是软件的管理就有点麻烦。首先很多的软件作者都不会提供相应的make uninstall
命令,因此这么卸载软件并不通用。
在使用 make install
安装好软件后,一定要记得备份安装生成的install_manifast.txt
,再删除掉源码。(这个文件一般会有写保护)
这之后,如果需要卸载,直接xargs rm < install_manifest.txt
就行了
可以创建一个备份目录,专门备份和系统有关的的资料,/etc 和 上述的 install_manifest.txt(建议改名为「软件名_install_manifest.txt」)都可以算作此类。
参考
以上是关于关于在linux系统下卸载软件的问题的主要内容,如果未能解决你的问题,请参考以下文章