在Linux上卸载程序


30

在过去的5年中,我一直在使用Windows和Mac OS,现在我正在考虑每天使用Linux。我已经在虚拟机上安装了Ubuntu,并试图了解如何在日常工作中使用Linux(作为js程序员/网页设计师)。

抱歉,对于新手问题,但是对我而言,有时候我通过make config&安装程序时,make install它以无法轻松还原的方式更改了我的系统。在Windows中,当您安装程序时,可以将其卸载,并希望它能如本书所言,不会在文件系统或注册表中留下任何程序的痕迹。在Mac OS中,您只需删除文件之类的App。

但是在Linux中有apt-get然后有make。我不太了解如何保持Linux安装的整洁。感觉任何新安装的应用程序都可能破坏我的系统。但是,Linux拥有非常强大的声誉,因此对于应用程序的安装和卸载如何影响系统,我肯定有些不了解。谁能对此有所启发?


更新: 安装应用程序时,其文件可以真正散布到任何地方(包管理器解决了部分问题),但是有一个很酷的技巧:使用Docker来安装应用程序并将其保存在沙箱中,特别是如果您不想经常使用它们。也可以完全在Docker“沙盒”中运行 Firefox之类的GUI应用程序


11
作为一个简单的用户,您应该使用apt-get而不是make安装软件。make install当您需要从源代码构建软件的最新版本(可能不稳定)时,可使用该软件包,而该软件包尚未提供。
德米特里·格里戈里耶夫

@DmitryGrigoryev与使用相比,使用apt更简单,并且提供了更好的调整apt-get
2015年

3
当我使用OS X时,我经常发现删除*.app文件不足,因为应用程序安装经常乱丢到其他地方(例如,内存中的Library目录)。另外,如果您使用手动在Ubuntu中从源代码构建make install,请checkinstall改用,以便轻松删除。
Sparhawk

1
不要用这种./configure ; make ; make install方式。您所需要的只是学习神话般的fpm工具。
鹿猎人

什么是fpm工具?
AlexStack

Answers:


28

安装很少会破坏系统(除非您做奇怪的事情,例如混合源代码和二进制代码)。

如果在Ubuntu中使用预编译的二进制文件,则可以删除它们,而不必担心破坏系统,因为二进制文件列出运行所需的文件,而程序包管理器将列出依赖该程序的程序供您查看。

使用source时,您需要格外小心,以免删除关键内容(例如glib)。从源代码卸载时,没有警告或其他任何信息。这意味着您可以完全破坏机器。

如果要使用进行卸载,apt-get则将apt-get remove package按照前面所述使用。依赖该软件包的所有程序也将被卸载,您将有机会对其进行复习。

如果您要卸载,则通常该过程为make uninstall。没有警告(如我上面所述)。

make config不会改变您的系统,但是make install会。

作为一个初学者,我建议使用apt-get二进制软件包的发行版。它使事情保持井然有序,除非您真正想要这样做,否则不会破坏系统。

希望这可以清除一切。


3
对于无痕卸载,您当然可以将其--purgeapt-get
Hagen von Eitzen

16

从理论上讲,make uninstall应该删除make install添加的内容,并且您的系统不会堆积碎片。当然,问题在于并非所有的makefile都创建相同。

有些人可能会忽略该uninstall规则,而留给您去了解该install规则的作用。更糟糕的是,如果安装规则覆盖了链接库,那么笨拙的uninstall例程可能会破坏其他程序的依赖关系。

源安装的最佳解决方案是使用与系统打包管理器安装的软件包不同的前缀。Apt安装文件以/usr/使/usr/local/源安装使用层次结构。这使得跟踪哪些文件属于哪些软件包和卸载变得容易得多,不会破坏系统。

./configure --prefix=/usr/local适用于许多配置脚本。如果没有,您可以手动编辑Makefile。或者只是手动复制文件。

Apt和其他打包管理器跟踪已安装的文件及其反向依赖性,因此可以安全地使用其卸载功能。


15

我建议您使用apt-get installlinux和apt-get remove(软件包名称)或apt-get purge(软件包名称)安装任何软件包,它们不仅会删除您要卸载的主软件包,还会删除在安装过程中安装的所有相关软件包或依赖项。

现在,为了保持系统清洁,建议您使用apt-get clean https://askubuntu.com/questions/144222/how-do-apt-get-clean-and-apt-get-clean-all-differ#144224(这篇文章对此很有趣),它将删除在安装过程中下载但不再需要的所有文件。

如果您想删除系统中已安装但在卸载时并未删除的所有依赖项,那么另一个有用的命令是apt-get autoremove

如果您通过make进行安装并进行make install,则您将负责自己进行卸载(下载的软件包中可能包含一个README文件,告诉您如何操作)以及尝试卸载与之相关的所有依赖项。 。这就是为什么始终建议在发行版的软件包管理器提供的Linux中安装软件包的原因,如果以这种方式进行安装,则可以确保您的软件包已经过足够的测试,可以与您使用的发行版(Linux的版本)一起使用。并且不太可能破坏您的系统。另外,您可以确保您的软件包会在需要时进行更新,而如果您自己安装,则有责任执行所有这些操作。

我希望这有帮助 :)


11

在Linux下管理已安装应用程序的通常方法是使用软件包管理器。包管理器的选择是区分发行版的主要内容之一。Ubuntu,像Debian(基于它)一样,使用dpkgAPT;在大多数情况下,您只需要与APT的界面之一进行交互,例如apt-get(命令行),智能性(命令行或文本模式)或Synaptic(GUI)。

程序包管理器跟踪哪些文件属于哪个已安装程序。与在Windows上一样,程序可以在安装或卸载过程中执行任意代码,但通常行为规范,不会破坏其他程序。此外,(卸载)安装代码是由软件包维护者而不是上游作者(对于主发行版中的软件包)编写的。与Windows不同,有一个用于安装,升级和卸载的统一界面:程序包管理器。您无需搜索卸载程序(如果有),只需单击图形软件包管理器中的“卸载”图标,或运行即可apt-get remove PACKAGENAME

如果需要“外来”软件,则可能需要解压缩存档文件或从源代码进行编译,以手动安装它。以可执行程序形式出现的安装程序在Linux世界中很少见。运行make install往往在几个目录(扩频每个程序/usr/local/bin/usr/local/man/usr/local/lib等)。为了使事情保持分类,我建议使用“穷人的包裹管理器”,例如stow。使用stow,每个软件包都安装在其自己的目录中,该stow实用程序负责创建符号链接,以便由软件包安装的命令位于命令搜索路径中,依此类推。有关更多详细信息,请参见跟踪程序


这个“外来软件”可以被任何人写对吗?这个“异国情调的软件”如何在发行版中正式可用?是否有人逐行查看其源代码?例如,Ubuntu如何决定在其APT-GET命令中包含一个软件而忽略另一个软件?
AlexStack

1
@AlexStack大多数发行版都是由志愿者制作的。Ubuntu是由Canonical赞助的,该公司支付了一些钱,但是软件包的大部分维护工作还是由志愿者完成的。因此,最准确的答案是Ubuntu包含志愿者决定包括的任何软件。更准确地说,Ubuntu中的大多数软件都来自Debian,因此Debian开发人员必须确定值得使用该软件包,并且该软件必须符合该策略(可接受的许可证,不要太过漏洞)。
吉尔斯(Gilles)'所以

@AlexStack不能保证任何人都逐行审核了特定软件,即使该软件在Ubuntu存储库中可用(即通过默认安装apt-get或类似的软件提供)也是如此。但是他们只在存储库中放入相当流行的程序,那些程序具有足够的用户可以确信他们基本上可以完成应做的事情。
David Z

8

几乎每个发行版都有自己的软件包管理器选择,有几种流行的软件包管理器。pacman,apt,rpm,emerge,...基于debian的发行版使用apt。

该文档看起来让人望而生畏,但是使.debs本地使用实际上并不那么困难,只需继续执行任务即可。


8

如果可能,您应该尝试使用软件包管理器(apt-get,aptitude,synaptic或aptdcon,软件中心,mintinstall等)。使用make任务进行安装是很原始的,不能保证有一个uninstall对应的任务,也不能保证在系统的其余部分都能正常运行(这只是与make的构建系统绑定的脚本-与经过审核的软件包不同,make任务可以包含任何可执行代码,可能是恶意软件)。

如果找不到所需的打包版本,则可能会有用checkinstallcheckinstall make install)。


3

我不是专家,也不太了解从源代码安装软件,但是使用时apt-get,您可以使用删除已安装的软件apt-get remove package-name。要也删除所有配置文件,请使用apt-get purge package-name。保持Linux安装整洁的最安全方法是仅使用官方存储库中的软件包。当需要不在官方存储库中的软件包时,通常可以在PPA中找到该软件包(因为您使用的是Ubuntu)。


apt-get是到OP没有用谁一直在使用configuremake install
roaima

3

就像其他答案所说的那样,如今通常使用发行版的软件包管理器来安装绝大多数软件。这非常方便,以至于您回到Windows时可能会错过它!从某种意义上说,各种“市场”和“商店”也都朝着商用OS的方向发展。

话虽如此,我记得当我第一次开始学习Linux时,我对通常的软件安装方式感到困惑。在Windows上,所有文件都位于一个目录下c:\Programs,传统的“ unix方式”是将它们分散在“标准位置”(详细信息尚未标准化,[请参阅LSB以获得更多信息] [1] ),例如/usr/local/bin可执行文件,/usr/local/doc文档等。

从某种意义上说,Windows“不知道”可执行文件在哪里。它知道它们位于“下的某处c:\Program Files”,但仅此而已。扫描所有这些目录以找到它们非常昂贵,或者曾经非常昂贵。因此,指向可执行文件的链接将被明确地放置在已知位置(开始菜单),这就是您要用来启动它的地方。

在Unix / Linux上,您的外壳程序以及与此相关的大多数其他程序将自动在一组已知的位置中查找可执行文件或其他资源。因此,只需将文件复制到适当的目录中,即可自动“查看”它们,而无需在任何地方“注册”它们以使用户了解它们。

两种机制都有其优缺点,但是您会发现Unix方法通常更灵活。

请记住,有很多例外情况和细节使图片不像我所描述的那样清晰明了,但是我认为这种介绍对于新手至少了解其背后的基本逻辑很有用。


谢谢@unclezeif。“文件到处散落”的问题确实困扰着我,因为我不理解。您说过,Unix方法通常更灵活。你能详细说明一下吗?
AlexStack

例如,文档全部放在一个地方,图标全部放在一个地方,等等,在某些情况下,这真的很不错!更加灵活的意思是,基于所有路径,您可以执行以下操作:生成一个环境变量已更改的新外壳,以便仅在特定目录中看到可执行文件,从而限制(或扩展)您的选择。所有这些都非常“简单”,因为您仅使用文件和环境变量来实现很大程度的自定义。
UncleZeiv

另一个示例是:原则上,您可以在主目录中安装一个程序,例如/ home / foo / bin,而只需将/ home / foo / bin添加到您的路径环境中,而无需使用共享系统。
UncleZeiv 2015年

3

我认为最好的建议就是在此论坛帖子中。这是您的选择(实际上,2和3在效果上大致相同):

  1. 使用程序包管理器和存储库。这意味着您将获得更新,官方版本,已签名版本等等等。
  2. 如果您不能使用存储库中的软件包,请为该软件构建一个软件包,然后使用软件包管理器进行安装。上面的链接中提供了在基于Debian的系统上执行此操作的详细说明。起初看起来很吓人,但实际上非常简单,尤其是在Debian中,有很多脚本可以为您完成所有艰苦的工作。
  3. 如果您无法使用该方法,请checkinstall按照其他人的建议使用。这是进行安装的非常简单的直接替换:

    $ ./configure
    $ make
    $ sudo checkinstall
    

    这应该按正常方式构建软件,然后make install在能够跟踪其运行状况的受限环境中运行,并构建可以完全完成这些任务的软件包。然后它将与您的程序包管理器一起安装该程序包。然后删除就如同删除其他任何软件包一样,就像在(2)中一样。

  4. 好吧,如果您不能使用或不使用包管理器,那么请使用make install。并希望软件维护人员维护一个卸载例程。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.