linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux基础建设 >

如何在 Linux 上安装/卸载一个文件中列出的软件包?

时间:2019-06-11  来源:未知  作者:admin666

在某些情况下,你可能想要将一个服务器上的软件包列表安装到另一个服务器上。例如,你已经在服务器 A 上安装了 15 个软件包并且这些软件包也需要被安装到服务器 B、服务器 C 上等等。

我们可以手动去安装这些软件但是这将花费大量的时间。你可以手动安装一俩个服务器,但是试想如果你有大概十个服务器呢。在这种情况下你无法手动完成工作,那么怎样才能解决问题呢?

不要担心我们可以帮你摆脱这样的情况和场景。我们在这篇文章中增加了四种方法来克服困难。

我希望这可以帮你解决问题。我已经在 CentOS7 和 Ubuntu 18.04 上测试了这些命令。

我也希望这可以在其他发行版上工作。这仅仅需要使用该发行版的官方包管理器命令替代本文中的包管理器命令就行了。

如果想要 检查 Linux 系统上已安装的软件包列表,请点击链接。

例如,如果你想要在基于 RHEL 系统上创建软件包列表请使用以下步骤。其他发行版也一样。

  1. # rpm -qa --last|head-15| awk '{print $1}'>/tmp/pack1.txt
  2. #cat/tmp/pack1.txt
  3. mariadb-server-5.5.60-1.el7_5.x86_64
  4. perl-DBI-1.627-4.el7.x86_64
  5. perl-DBD-MySQL-4.023-6.el7.x86_64
  6. perl-PlRPC-0.2020-14.el7.noarch
  7. perl-Net-Daemon-0.48-5.el7.noarch
  8. perl-IO-Compress-2.061-2.el7.noarch
  9. perl-Compress-Raw-Zlib-2.061-4.el7.x86_64
  10. mariadb-5.5.60-1.el7_5.x86_64
  11. perl-Data-Dumper-2.145-3.el7.x86_64
  12. perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64
  13. httpd-2.4.6-88.el7.centos.x86_64
  14. mailcap-2.1.41-2.el7.noarch
  15. httpd-tools-2.4.6-88.el7.centos.x86_64
  16. apr-util-1.5.2-6.el7.x86_64
  17. apr-1.4.8-3.el7_4.1.x86_64

方法一:如何在 Linux 上使用 cat 命令安装文件中列出的包?

为实现这个目标,我将使用简单明了的第一种方法。为此,创建一个文件并添加上你想要安装的包列表。

出于测试的目的,我们将只添加以下的三个软件包名到文件中。

  1. #cat/tmp/pack1.txt
  2. apache2
  3. mariadb-server
  4. nano

只要简单的运行 apt 命令 就能在 Ubuntu/Debian 系统上一次性安装所有的软件包。

  1. # apt -y install $(cat/tmp/pack1.txt)
  2. Readingpackage lists...Done
  3. Building dependency tree
  4. Reading state information...Done
  5. The following packages were automatically installed and are no longer required:
  6. libopts25 sntp
  7. Use'sudo apt autoremove' to remove them.
  8. Suggested packages:
  9. apache2-doc apache2-suexec-pristine | apache2-suexec-custom spell
  10. The following NEW packages will be installed:
  11. apache2 mariadb-server nano
  12. 0 upgraded,3 newly installed,0 to remove and24not upgraded.
  13. Need to get339 kB of archives.
  14. Afterthis operation,1,377 kB of additional disk space will be used.
  15. Get:1 http://in.archive.ubuntu.com/ubuntu bionic-updates/main amd64 apache2 amd64 2.4.29-1ubuntu4.6 [95.1 kB]
  16. Get:2 http://in.archive.ubuntu.com/ubuntu bionic/main amd64 nano amd64 2.9.3-2 [231 kB]
  17. Get:3 http://in.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 mariadb-server all 1:10.1.38-0ubuntu0.18.04.1 [12.9 kB]
  18. Fetched339 kB in19s(18.0 kB/s)
  19. Selecting previously unselected package apache2.
  20. (Reading database ...290926 files and directories currently installed.)
  21. Preparing to unpack .../apache2_2.4.29-1ubuntu4.6_amd64.deb ...
  22. Unpacking apache2 (2.4.29-1ubuntu4.6)...
  23. Selecting previously unselected packagenano.
  24. Preparing to unpack .../nano_2.9.3-2_amd64.deb ...
  25. Unpackingnano(2.9.3-2)...
  26. Selecting previously unselected package mariadb-server.
  27. Preparing to unpack .../mariadb-server_1%3a10.1.38-0ubuntu0.18.04.1_all.deb ...
  28. Unpacking mariadb-server (1:10.1.38-0ubuntu0.18.04.1)...
  29. Processing triggers for ufw (0.36-0ubuntu0.18.04.1)...
  30. Setting up apache2 (2.4.29-1ubuntu4.6)...
  31. Processing triggers for ureadahead (0.100.0-20)...
  32. Processing triggers for install-info(6.5.0.dfsg.1-2)...
  33. Setting up nano(2.9.3-2)...
  34. update-alternatives:using/bin/nano to provide /usr/bin/editor (editor)inauto mode
  35. update-alternatives:using/bin/nano to provide /usr/bin/pico (pico)inauto mode
  36. Processing triggers forsystemd(237-3ubuntu10.20)...
  37. Processing triggers forman-db (2.8.3-2ubuntu0.1)...
  38. Setting up mariadb-server (1:10.1.38-0ubuntu0.18.04.1)...

至于删除,需要使用相同的命令格式和适当的选项。

  1. # apt -y remove $(cat/tmp/pack1.txt)
  2. Readingpackage lists...Done
  3. Building dependency tree
  4. Reading state information...Done
  5. The following packages were automatically installed and are no longer required:
  6. apache2-bin apache2-data apache2-utils galera-3 libaio1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libjemalloc1 liblua5.2-0
  7. libmysqlclient20 libopts25 libterm-readkey-perl mariadb-client-10.1 mariadb-client-core-10.1 mariadb-common mariadb-server-10.1 mariadb-server-core-10.1 mysql-common sntp socat
  8. Use'apt autoremove' to remove them.
  9. The following packages will be REMOVED:
  10. apache2 mariadb-server nano
  11. 0 upgraded,0 newly installed,3 to remove and24not upgraded.
  12. Afterthis operation,1,377 kB disk space will be freed.
  13. (Reading database ...291046 files and directories currently installed.)
  14. Removing apache2 (2.4.29-1ubuntu4.6)...
  15. Removing mariadb-server (1:10.1.38-0ubuntu0.18.04.1)...
  16. Removingnano(2.9.3-2)...
  17. update-alternatives:using/usr/bin/vim.tiny to provide /usr/bin/editor (editor)inauto mode
  18. Processing triggers for ufw (0.36-0ubuntu0.18.04.1)...
  19. Processing triggers for install-info(6.5.0.dfsg.1-2)...
  20. Processing triggers forman-db (2.8.3-2ubuntu0.1)...

使用 yum 命令 在基于 RHEL (如 Centos、RHEL (RedHat) 和 OEL (Oracle Enterprise Linux)) 的系统上安装文件中列出的软件包。

  1. #yum-y install $(cat/tmp/pack1.txt)

使用以命令在基于 RHEL (如 Centos、RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上卸载文件中列出的软件包。

  1. #yum-y remove $(cat/tmp/pack1.txt)

使用以下 dnf 命令 在 Fedora 系统上安装文件中列出的软件包。

  1. # dnf -y install $(cat/tmp/pack1.txt)

使用以下命令在 Fedora 系统上卸载文件中列出的软件包。

  1. # dnf -y remove $(cat/tmp/pack1.txt)

使用以下 zypper 命令 在 openSUSE 系统上安装文件中列出的软件包。

  1. # zypper -y install $(cat/tmp/pack1.txt)

使用以下命令从 openSUSE 系统上卸载文件中列出的软件包。

  1. # zypper -y remove $(cat/tmp/pack1.txt)

使用以下 pacman 命令 在基于 Arch Linux (如 Manjaro 和 Antergos) 的系统上安装文件中列出的软件包。

  1. # pacman -S $(cat/tmp/pack1.txt)

使用以下命令从基于 Arch Linux (如 Manjaro 和 Antergos) 的系统中卸载文件中列出的软件包。

  1. # pacman -Rs $(cat/tmp/pack1.txt)

方法二:如何使用 cat 和 xargs 命令在 Linux 中安装文件中列出的软件包。

甚至,我更喜欢使用这种方法,因为这是一种非常简单直接的方法。

使用以下 apt 命令在基于 Debian 的系统 (如 Debian、Ubuntu 和 Linux Mint) 上安装文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs apt -y install

使用以下 apt 命令 从基于 Debian 的系统 (如 Debian、Ubuntu 和 Linux Mint) 上卸载文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs apt -y remove

使用以下 yum 命令在基于 RHEL (如 Centos,RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上安装文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargsyum-y install

使用以命令从基于 RHEL (如 Centos、RHEL (Redhat) 和 OEL (Oracle Enterprise Linux)) 的系统上卸载文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargsyum-y remove

使用以下 dnf 命令在 Fedora 系统上安装文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs dnf -y install

使用以下命令从 Fedora 系统上卸载文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs dnf -y remove

使用以下 zypper 命令在 openSUSE 系统上安装文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs zypper -y install

使用以下命令从 openSUSE 系统上卸载文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs zypper -y remove

使用以下 pacman 命令在基于 Arch Linux (如 Manjaro 和 Antergos) 的系统上安装文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs pacman -S

使用下以命令从基于 Arch Linux (如 Manjaro 和 Antergos) 的系统上卸载文件中列出的软件包。

  1. #cat/tmp/pack1.txt |xargs pacman -Rs

方法三 : 如何使用 For 循环在 Linux 上安装文件中列出的软件包

我们也可以使用 for 循环命令来实现此目的。

安装批量包可以使用以下一条 for 循环的命令。

  1. #for pack in`cat /tmp/pack1.txt`;do apt -y install $i;done

要使用 shell 脚本安装批量包,请使用以下 for 循环。

  1. #vi/opt/scripts/bulk-package-install.sh
  2. #!/bin/bash
  3. for pack in`cat /tmp/pack1.txt`
  4. do apt -y remove $pack
  5. done

bulk-package-install.sh 设置可执行权限。

  1. #chmod+ bulk-package-install.sh

最后运行这个脚本。

  1. # sh bulk-package-install.sh

方法四:如何使用 While 循环在 Linux 上安装文件中列出的软件包

我们也可以使用 while 循环命令来实现目的。

安装批量包可以使用以下一条 while 循环的命令。

  1. #file="/tmp/pack1.txt";while read -r pack;do apt -y install $pack;done<"$file"

要使用 shell 脚本安装批量包,请使用以下 while 循环。

  1. #vi/opt/scripts/bulk-package-install.sh
  2. #!/bin/bash
  3. file="/tmp/pack1.txt"
  4. while read -r pack
  5. do apt -y remove $pack
  6. done<"$file"

bulk-package-install.sh 设置可执行权限。

  1. #chmod+ bulk-package-install.sh

最后运行这个脚本。

  1. # sh bulk-package-install.sh

via: https://www.2daygeek.com/how-to-install-uninstall-listed-packages-from-a-file-in-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:way-ww 校对:wxy

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

linux
友情链接
  • Mozilla发布Firefox 67.0.4,修复沙箱逃逸漏洞
  • 蚂蚁金服正式成为CNCF云原生计算基金会黄金会员
  • Firefox 68将采用Microsoft BITS安装更新
  • OpenSSH增加对存储在RAM中的私钥的保护
  • 谷歌想实现自己的curl,为什么?
  • Raspberry Pi 4发布:更快的CPU、更大的内存
  • Firefox的UA将移除CPU架构信息
  • Ubuntu放弃支持32位应用程序实属乌龙,Steam会否重回Ubuntu怀抱
  • Qt 5.13稳定版发布:引入glTF 2.0、改进Wayland以及支持Lottie动
  • 红帽企业Linux 7现已内置Redis 5最新版
  • Slack进入微软内部禁用服务清单,GitHub也在其列?
  • 安全的全新编程语言V发布首个可用版本
  • Windows Terminal已上架,快尝鲜
  • 阿里巴巴微服务开源生态报告No.1
  • 面世两年,Google地球将支持所有基于Chromium的浏览器
  • 推进企业容器化持续创新,Rancher ECIC千人盛典完美收官
  • CentOS 8.0最新构建状态公布,或于数周后发布
  • Debian移植RISC
  • 微软拆分操作系统的计划初现雏形
  • Oracle发布基于VS Code的开发者工具,轻松使用Oracle数据库
  • Ubuntu 19.10停止支持32位的x86架构
  • 微软为Windows Terminal推出全新logo
  • 联想ThinkPad P系列笔记本预装Ubuntu系统
  • 微软发布适用于Win7/8的Microsoft Edge预览版
  • 启智平台发布联邦学习开源数据协作项目OpenI纵横
  • 经过六个多月的延迟,微软终于推出Hyper
  • ZFS On Linux 0.8.1 发布,Python可移植性工作
  • DragonFly BSD 5.6.0 发布,HAMMER2状态良好
  • Linux Kernel 5.2
  • CentOS 8.0 看起来还需要几周的时间
  • 百度网盘Linux版正式发布
  • PCIe 6.0宣布:带宽翻倍 狂飙至256GB/s
  • PHP 7.4 Alpha 发布,FFI扩展,预加载Opcache以获得更好的性能
  • Canonical将在未来的Ubuntu版本中放弃对32位架构的支持
  • Scala 2.13 发布,改进的编译器性能
  • 微软的GitHub收购了Pull Panda,并且使所有订阅完全免费
  • Windows Subsystem for Linux 2 (WSL 2)现在适用于Windows 10用
  • Debian 10 “Buster”的RISC
  • MariaDB宣布发布MariaDB Enterprise Server 10.4
  • DXVK 1.2.2 发布,带来微小的CPU开销优化
  • DragonFlyBSD 5.6 RC1 发布,VM优化,默认为HAMMER2
  • PrimeNG 8.0.0 发布,支持Angular 8,FocusTrap等
  • GIMP 2.10.12 发布,一些有用的改进
  • 清华大学Anaconda 镜像服务即将恢复
  • Debian GNU/Linux 10 “Buster” 操作系统将于2019年7月6日发布
  • 时时彩论坛
  • 五星体育斯诺克
  • 北单比分直播
  • 河北11选5走势图
  • 福建体彩36选7开奖结果
  • 九龙图库下载