如何在 Linux 中卸载程序?

如何在 Linux 中卸载程序?

我尝试卸载我安装的 PCL 1.7.2手动(没有 sudo apt-get),但是当我尝试使用apt-get remove 命令,终端向我显示这些文件无法卸载,因为它们根本没有安装。

  1. 如果我使用以下方式安装文件,如何检查文件是否安装正确cmake

  2. 如何卸载使用手动安装的文件cmake

  3. apt-get使用vs安装的文件有何cmake不同?

注意-类似的问题,但使用 apt-get remove:如何才能彻底删除一个包?

答案1

查看安装说明,它使用cmakemake。要卸载,您应该能够:

terminal...

  • cd folder_of_original_source_code# 执行 cmake 的文件夹
  • sudo make uninstall# 卸载

答案2

执行摘要/TL;DR

从运行和 的构建目录运行make uninstall(或者sudo make uninstall,如果必须运行) 。在使用 CMake 配置的构建中,构建目录通常不是顶级源目录。但除此之外,卸载使用 CMake 配置构建的程序或库与卸载从源代码构建的其他程序或库没有什么不同。sudo make installmakemake install

有些软件支持make install但不支持make uninstall,在这种情况下,您可能需要调查make install运行时采取了哪些步骤,或者查阅软件的文档以查看它是否指定了将哪些文件放在何处。但是,聚己内酯似乎支持通过以下方式卸载make uninstall

使用和进行安装和cmake卸载make

CMake 是一个用于配置构建的系统。配置完成后,通常必须使用某些构建系统进行构建。在类 Unix 操作系统(如 Ubuntu)上,使用 CMake 配置的构建几乎总是使用 Make 构建系统。

大多数使用 CMake 的软件都要求您创建一个单独的构建目录(通常称为),buildcmake从该目录运行命令。构建目录中填充了执行构建所需的文件。然后您make在该目录中运行。您应该build根据所构建软件的说明建议的放置目录来创建目录。通常它将是源代码树的顶级目录(当您解压源代码 tarball 或调用版本控制系统(如git或 )bzr下载代码时创建的最高级别目录)的子目录。

当您运行 时make,它会查找并读取 makefile(通常称为Makefile),其中包含目标列表、构建目标的说明以及目标之间的相互依赖关系。通常,默认目标(您不必指定)会构建软件,而install您必须指定的目标会安装软件。

许多 makefile 包含其他目标。最常见的是:

  • 测试已构建的软件的或目标。或check可能在之前运行,通常建议这样做。testmake checkmake testmake install
  • uninstall通过删除运行所创建的文件来卸载软件的目标。make install(有时make uninstall也有其他行为,例如撤消make install复制文件以外的操作,但通常只是删除文件。)并非所有软件都有目标uninstall,但如今大多数软件都有。
  • clean删除源文件或构建目录中在构建过程中创建的文件的目标。几乎所有 makefile 都有这个目标。

还有一些其他相对常见的目标,例如distcleanrealclean,与 CMake 关系不大。但是,如果您通过运行配置脚本()而不是 CMake 来配置构建./configure,那么通常可以通过运行来删除配置,这一点很有用make distclean

使用 CMake 的开发人员必须编写代码来生成uninstall目标——CMake 不会自动执行此操作。然而,和许多开发商一样,PCL 的开发者完成了这个应该make uninstall可以正常工作。有关详细信息,请参阅下一节(“分步示例”)。

要卸载 makefile 支持uninstall目标的软件:

  • make install您运行(或)的目录sudo make install是您必须返回到的目录,以便运行make uninstall(或sudo make uninstall)。对于不使用 CMake 的软件,这通常是源代码树的顶级目录。但对于使用 CMake,通常不是——相反,它通常是一个单独的构建目录。
  • 从源代码手动安装软件时,最好保留源代码和构建期间创建的所有文件,以便轻松卸载软件。因此,一旦运行make install,最好不要再运行make clean(也不要手动删除任何文件)。
  • 但是,如果你做过运行make clean或删除软件的源代码或构建目录,通常仍然可以成功卸载。只需按照相同的构建步骤,使用完全相同版本的软件,使用相同的选项(如果您未对其进行自定义,则无需配置)进行配置和构建,即可运行make uninstall(或sudo make uninstall)。对于某些软件,您实际上甚至可能必须make install先再次运行,这通常会覆盖上次构建的文件。然后照常运行make uninstall(或)。sudo make uninstall

当没有uninstall目标并且您需要卸载软件时,您必须检查它创建了哪些文件。您可以运行make -n install以向您展示 采取了哪些操作make install。你做不是需要运行make -n installsudo假设初始make不需要sudo)。当make传递-n标志时,它会执行一次试运行,这通常不会改变任何东西,因此不需要做任何需要提升权限的事情。

分步示例:PCL 1.7.2

举个例子很有用,我不妨使用您实际尝试卸载的软件作为该示例。PCL 1.7.2似乎用来在 makefile 中cmake生成目标uninstall,因此应该支持make uninstall

除了检查 之外uninstall_target.cmake.in,我还验证了生成的Makefile包含uninstall64 位 Ubuntu 16.04 测试系统上的目标。但是,我还没有完成 PCL 的构建,因此我可以安装它然后测试sudo make uninstall。(我的测试机器非常慢,而且 PCL 很大。)我计划在构建完成后的某个时间,有机会时用其他信息更新它。

当您安装 PCL 1.7.2 时,您可能会执行如下操作:

cd /usr/local/src
wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.7.2.tar.gz
tar xf pcl-1.7.2.tar.gz
cd pcl-pcl-1.7.2
mkdir build
cd build
cmake ..
make -j2
sudo make -j2 install

这是(大致)基于官方说明,但当然可能不是你所做的。具体来说,我下载并解压pcl-1.7.2.tar.gz在 中/usr/local/src。如果你把它放在其他地方,那么你必须用你/usr/local/src放置它的地方替换它。

如果有必要进行更改/usr/local/src,您应该可以通过运行以下命令来卸载该软件:

cd /usr/local/src/pcl-pcl-1.7.2/build
sudo make uninstall

即使您运行make -j2 install以允许多个操作同时进行,也不必-j2在运行时传递标志make uninstall

答案3

安装 PCL 时,实际上执行了两个步骤:

  • 您编译了该软件,任何用户都可以在自己的主目录中进行此操作
  • 你安装了系统范围内的软件,只有 root 才能执行此操作

安装本身(sudo make -j 2 install在您的情况下是赞扬)是由 PCL 作者编写的脚本。无法知道这个脚本对你的系统做了什么,除了阅读脚本源代码之外。这里没有标准化,脚本可以对您的机器做任何它想做的事情,包括删除重要文件,或者以标准 Ubuntu 软件无法预料的方式修改配置。

由于无法告知安装脚本对您的系统做了什么,因此其他程序(例如APT)无法撤消已完成的更改。在这种情况下,最好的办法是保存安装脚本的输出(稍后读取并手动撤消更改),或者恢复系统备份。

软件包deb则不同。软件包的作者在自己的机器上执行了编译阶段,检查了生成的文件并将它们按正确的 Ubuntu 系统上的顺序排列。然后,他或她将它们放在一个 zip 文件中,这就是软件包deb。作者还编写了安装和卸载脚本,以防软件在安装时需要进行其他修改。作者还编写了所有必要的元数据,特别是这个软件包运行时依赖哪些其他软件包(例如共享库)。

当 APT 安装软件包时,它会跟踪提取的文件,以便稍后删除它们。

现在,回答你的问题:

Q1. 除非您保存了 PCL 安装脚本的输出(假设此输出包含所有已完成操作的完整且真实的详细信息),或者您将硬盘驱动器的内容与您在安装 PCL 之前执行的备份进行比较,否则无法知道文件是否已正确安装。您能做的最好的事情就是运行该软件并查看它是否运行正常。

Q2. PCL 的创建者可能编写了卸载脚本,运行这些脚本也许sudo make uninstall会很有用。您必须查阅 PCL 的文档。否则,您必须手动逐个删除文件。

Q3. 安装的文件本身并没有什么不同。不同之处在于用于在系统目录中复制它们的程序。apt-get 会跟踪从deb文件安装的内容并可以将其删除。cmake 以自己的方式执行此操作,APT 对此并不知情。

答案4

apt-get 的简要概述

apt-get 安装已专门打包的程序。apt 配置包含有关软件包所有组件的安装位置的详细信息。它还存储有关已将哪些文件添加到系统的信息。这些信息包括文件的删除步骤。

当您决定使用 apt-get 删除文件时,它会使用此信息安全地删除已添加到计算机的文件。

CMake

Cmake 是一个用于编译和安装程序的实用程序。包括您在内的个人都可以创建一个简单的应用程序(如“Hello World”),然后使用 Cmake 编译并将程序放置在您决定放置的任何地方。

apt-get实用程序不会知道您决定在计算机上放置的所有程序。如果作者希望通过该程序进行安装,apt-get他们会对其进行配置,并.deb为安装程序提供一个包。

删除未使用安装的程序apt-get

要删除手动安装的程序,您必须遵循作者的删除规定。构建命令以及制作命令具有配置文件,允许您指定诸如 、 、 和 之类的内容buildinstall这些install with special conditions功能uninstall由程序开发人员决定。

许多程序都附带安装和卸载步骤(readme.txt 文件)。您必须查看软件包内容才能查看作者提供了哪些内容。如果没有提供卸载步骤,您必须通过查找程序添加到您计算机的实际文件来手动删除它。

检查开发人员是否提供了以下uninstall目标:

$ cmake uninstall

从程序中查找文件:

查找install_manifest.txt安装后可能创建的文件。这将向您显示文件的位置。

从程序中查找文件的另一种方法是研究CMake列表.txt文件。查找引用的目录输出。它通常会指定二进制文件和库的放置位置。

您还可以使用 来找出系统中添加了哪些文件find。指定执行安装时的一个窗口,您将获得文件列表。此命令有一些变体。

您可以按照以下步骤查找在窗口中创建的文件1 月 18 日午夜1 月 19 日午夜。您可以指定具体的小时和分钟,而不是使用零。

为时间框架的开始创建时间戳文件:

 $ touch -t 201701180000 starttime

为时间范围的结束创建时间戳文件:

 $ touch -t 201701190000 starttime

格式为:YYYYMMDDHHMM

然后运行:

$ find ~/ -mount -newer starttime ! -newer endtime > find.out

现在检查find.out文本文件,您将看到在该时间窗口中创建的所有文件。您可以自动删除许多文件,例如主目录中的文件。这样您就可以主要查看二进制文件。

相关内容