不是所有的程序都可以在官方或者第三方库中找到,因此你不能使用常规的包管理来安装它们。有时你不得不从源代码中手动构建这些程序。就如你已经知道的一样,当你从源代码中安装一个程序的时候,这个软件包所包含的文件将会复制到本地的多个位置,例如 /usr/local/bin、/usr/local/etc/。如果从源代码中安装的程序没有内置的卸载程序,当你不再需要这个程序的时候,卸载它就会很麻烦。你可能会花费双倍(甚至更多)的时间找出这些文件然后手动删除它们。我以前一直是这样做的,直到我发现了 GNU Stow。谢天谢地,Stow 有一个很棒的方法可以轻松管理从源代码安装的程序。

引用官方网站里的一段介绍,

GNU Stow 是一个符号链接归集管理器,它可以收集文件系统上不同目录中的不同软件和/或数据包,使它们看起来像是一个整体。

简单来说,Stow 帮助你把这些程序文件以一种容易管理的方式组织在了一起。在这个方法中,文件将不会被复制到多个位置。所有的这些文件都会被保存在一个特定的文件夹中,通常是以程序名命名的,然后 Stow 会在一个合适的位置为所有的程序文件创建符号连接。比如 /usr/local/bin 中会包含 /usr/local/stow/vim/bin、/usr/local/stow/python/bin 中文件的符号链接。并且同样递归地用于其他的任何的子目录,例如 …/share、…/man,等等。在这篇教程中,我将会举例教你如何轻松地使用 Stow 管理从源中安装的程序。

安装 GNU Stow
GNU Stow 在流行 Linux 操作系统的默认库中都可用。

在 Arch Linux 及它的衍生版本中,运行下面的命令安装 Stow。

$ sudo pacman -S stow
在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt install stow
在 Fedora 上:

$ sudo dnf install stow
在 RHEL/CentOS 上:

$ sudo yum install epel-release
$ sudo yum install stow
在 Linux 上轻松移除从源代码安装的程序
就像我之前提到的,所有包的程序文件都将被保存在位于 /usr/local/stow/ 的一个根文件夹。在这个根文件夹或者父目录之下,每个包都将保存在对应的子目录中。例如,如果我们从源代码中安装了 Vim 编辑器,所有关联到 Vim 的程序文件和目录都将保存在 /usr/local/stow/vim 文件夹之下。如果你从源代码中安装了 Python,所有关联到 python 的文件都会保存在 /usr/local/stow/python 之下。

我现在从源代码中来安装一个叫做 hello 的程序。

首先下载 hello 程序的压缩包。

$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
使用下面的命令解压压缩包:

$ tar -zxvf hello-2.10.tar.gz
上面的命令将会在当前工作目录下创建一个叫做 hello-2.10 的目录,并且提取压缩包中的所有内容到其中去。

切换到这个目录当中:

$ cd hello-2.10/
运行下面的命令,并且添加 -prefix 选项。

$ ./configure --prefix=/usr/local/stow/hello
上面的命令将会保存构建文件到一个指定位置,在这个例子中是 /usr/local/stow/hello。

最后,使用下面的命令构建并安装 hello 这个程序:

$ make
$ sudo make install
就这样。hello 这个程序就已经安装在 /usr/local/stow/hello/ 这个位置了。你可以使用下面的 ls 命令确认一下。

$ ls /usr/local/stow/hello/
bin share
最后,进入 /usr/local/stow/ 目录,运行下面的命令来生成必要的符号链接。

$ cd /usr/local/stow/
$ sudo stow hello
大功告成!

刚才那一步是将包含在 hello 这个程序中的所有文件或者目录创建了链接到 /usr/local/ 目录中。换一种说法, /usr/local/stow/hello/bin 链接到 /usr/local/share,以及 /usr/local/stow/hello/share/man 链接到 /usr/local/share,还有 /usr/local/stow/hello/share/man 链接到 /usr/local/share/man。

你可以使用 ls 命令来确认一下:

$ ls /usr/local/bin/
hello
可以使用下面的命令来确认 hello 这个程序是否可以正常工作了:

$ hello
Hello, world!
很好,它已经开始工作了!!

类似地,你可以像上面描述的那样安装程序到它对应的子目录下。

下面是 Stow 根目录包含的内容:

$ tree /usr/local/stow/

看,hello 这个程序已经安装在 /usr/local/stow/hello/ 下。同样地,所有的包都将保存在它们对应的目录之下。

下面进入主要环节,移除 hello 这个程序。首先进入 /usr/local/stow/ 目录:

$ cd /usr/local/stow/
然后运行下面的命令:

$ sudo stow --delete hello
hello 这个程序就会被移除了。你可以使用下面的命令确认它是否真的被移除了:

$ hello
-bash: /usr/local/bin/hello: No such file or directory

看, Hello 已经被移除了!

请注意 Stow 仅仅只移除了符号链接。所有与 hello 这个程序相关的文件或者目录还保存在 /usr/local/stow/hello 目录下。所以你无需再次下载源文件就可以再次安装 hello 这个程序。如果你不再需要它了,直接删除这个文件夹即可。

$ sudo rm -fr /usr/local/stow/hello/
想了解更多 Stow 的细节,请参阅 man 手册。

$ man stow
Stow 可以像安装程序一样轻松地帮你移除它。如果你想知道如何高效的管理很多从源代码中安装的程序,GNU Stow 就是一个使得这个任务更加轻松的一个选择,尝试一下,你一定不会失望的。

这就是所有的内容了,希望对你有所帮助。还有更多干活即将到来,可以期待一下的!

祝近祺!

via: https://www.ostechnix.com/an-easy-way-to-remove-programs-installed-from-source-in-linux/

作者:SK 选题:lujun9972 译者:dianbanjiu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在 Linux 中移除从源代码安装的程序的一种简单的方法相关推荐

  1. GNU Stow 是ds6000com19908836661在 Linux 中移除

    不是所有的程序都可以在官方或者第三方库中找到,因此你不能使用常规的包管理来安装它们.有时你不得不从源代码中手动构建这些程序.就如你已经知道的一样,当你从源代码中安装一个程序的时候,这个软件包所包含的文 ...

  2. linux中实现pxe的自动安装

    linux中实现pxe的自动安装 什么是PXE PXE(preboot execute environment)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站 ...

  3. 在linux中,我为什么不能安装VMware Tools?

    在linux中,我为什么不能安装VMware Tools? 应该是操作不正确导致,以下为linux安装VMware Tools的方法. 1.在安装Linux的虚拟机中,单击"虚拟机" ...

  4. Linux中Docker的介绍、安装与卸载

    1.介绍 Docker是一个开源的应用容器引擎,诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名为Docker Inc).Docker可以让开发者打包他们的应用以及依赖包到一个轻 ...

  5. Linux中查看某个软件的安装路径

    Linux中查看某个软件的安装路径(地址)有时显得非常重要.比如某个文件的快速启动项被删除,或者你要建立快速启动项,或者想删除.添加安装文件等等,很多地方都要用到查案文件安装路径的命令. 这里给大家介 ...

  6. Linux中rar压缩软件的安装

    Linux中rar压缩软件的安装 第一.RAR的下载地址(试用版): windows下载地址: http://www.rarsoft.com/download.htm 32位Linux系统使用wget ...

  7. 在Linux中Realplay 10.0 的安装和使用(转)

    在Linux中Realplay 10.0 的安装和使用(转)[@more@]一.什么是RealPlay : Realplay 在Windows大家经常用,不必介绍:呵... ... 在一两年前,如果说 ...

  8. Linux中一行命令查看网卡流量、统计网络流量的各种实现方法

    Linux中一行命令查看网卡流量.统计网络流量的各种实现方法. 方法一.nload工具 源码包路径: wget http://heanet.dl.sourceforge.net/project/nlo ...

  9. Linux中的基本命令无法使用,报Command not found的错误的解决方法

    Linux中的基本命令无法使用,报Command not found的错误的解决方法 参考文章: (1)Linux中的基本命令无法使用,报Command not found的错误的解决方法 (2)ht ...

最新文章

  1. ASIHTTPRequest取消异步请求
  2. 牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph
  3. 安川变频器跳os_变频器常见故障代码及处理实例(经典,建议收藏)
  4. 【1】Keras复习之模型,层,训练,评估与预测
  5. 新概念英语(1-95)Tickets,please!
  6. 贝塞尔曲线的css实现——淘宝加入购物车基础动画
  7. ARM 中断状态和SVC状态的堆栈切换 (异常)【转】
  8. BSText - YY大神的富文本框架 YYText 的 Swift 版本
  9. 在PreferenceScreen加入自定义布局
  10. 全屏网页时钟屏保flipclock-beautify,简约风格,电脑手机均支持访问
  11. 难解次级债内乱 美国众议院反咬中国金融开放
  12. 同步光网络(SONET,Synchronous Optical Networking)简介
  13. Python安装火狐浏览器驱动
  14. 用公式编辑器将数学公式转为LaTeX代码
  15. 学习了m脚本,代数方程求解(P104)
  16. 计算机的击键方法教学教案,初中七年级信息技术上册教案:键盘操作与练习
  17. mysql运行sql文件不成功,圆我大厂梦!
  18. [NLP学习笔记-Task10] Transformer + BERT
  19. wpf mvc_使用BabySmash学习WPF-MVC或MVP以及设计者的好处
  20. 使用GPS模拟信号检查Klein3000的定位信号是否正常

热门文章

  1. 吃透设计模式第六篇-装饰者模式
  2. 新手入门启动光盘制作最详细的教程
  3. 记录Maven和Mybatis整合时打包漏掉mapper的xml文件及其它资源
  4. 华为荣耀3c获取root权限
  5. VMware开机假死-VMware无法关机 虚拟机繁忙-vmware-vmx.exe进程无法结束(拒绝访问)-解决方法
  6. MTK81系列 OTA更新升级路径转换
  7. 从“做事用人”到“用人做事”
  8. window.open新打开窗口与新开标签页
  9. 与开发票相关的一种信息化应用
  10. NDIS LWF网络过滤驱动开发(一):LWF简介及数据结构说明