我想将所有已安装软件包的列表输出到文本文件中,以便我可以查看它并批量安装在另一个系统上。我该怎么做?
我想将所有已安装软件包的列表输出到文本文件中,以便我可以查看它并批量安装在另一个系统上。我该怎么做?
Answers:
apt
Ubuntu 14.04及更高版本上的工具使此操作非常容易。
apt list --installed
要获取本地安装的软件包的列表,请在终端中执行以下操作:
dpkg --get-selections | grep -v deinstall
(-v
标记“反转” grep以返回不匹配的行)
要获取已安装的特定软件包的列表:
dpkg --get-selections | grep postgres
要将列表保存到packages
桌面上称为的文本文件中,请在终端中执行以下操作:
dpkg --get-selections | grep -v deinstall > ~/Desktop/packages
或者,只需使用
dpkg -l
(您无需以超级用户身份运行任何这些命令,因此sudo
此处没有必要或任何其他变体)
cat ~/Desktop/packages > sudo dpkg --set-selections && sudo apt-get dselect upgrade
源代码
sudo dpkg --set-selections < ~/Desktop/packages && sudo apt-get -u dselect-upgrade
绝招。
要获取仅已明确安装的软件包(而不仅仅是作为依赖项安装),可以运行
aptitude search '~i!~M'
这还将包括您可能需要的简短描述。如果没有,还添加-F '%p'
karthick87提到的option 。
似乎还有另一个选择是复制file /var/lib/apt/extended_states
,它是这种格式的文本文件数据库:
Package: grub-common
Architecture: amd64
Auto-Installed: 0
Package: linux-headers-2.6.35-22-generic
Architecture: amd64
Auto-Installed: 1
Auto-Installed: 0
表示软件包已明确安装,而不仅仅是依赖关系。
apt-get
?
要列出通过apt命令有意安装的所有软件包(不作为依赖项),请运行以下命令:
(zcat $(ls -tr /var/log/apt/history.log*.gz); cat /var/log/apt/history.log) 2>/dev/null |
egrep '^(Start-Date:|Commandline:)' |
grep -v aptdaemon |
egrep '^Commandline:'
这提供了一个基于时间的反向视图,其中首先列出了较旧的命令:
Commandline: apt-get install k3b
Commandline: apt-get install jhead
...
安装数据还显示了突触的用法,但没有详细信息(与安装日期相同):
(zcat $(ls -tr /var/log/apt/history.log*.gz); cat /var/log/apt/history.log) 2>/dev/null |
egrep '^(Start-Date:|Commandline:)' |
grep -v aptdaemon |
egrep -B1 '^Commandline:'
提供以下内容:
Start-Date: 2012-09-23 14:02:14
Commandline: apt-get install gparted
Start-Date: 2012-09-23 15:02:51
Commandline: apt-get install sysstat
...
zgrep -hE '^(Start-Date:|Commandline:)' $(ls -tr /var/log/apt/history.log*.gz ) | egrep -v 'aptdaemon|upgrade' | egrep -B1 '^Commandline:'
dpkg
??的软件包吗?
创建当前安装的软件包的备份:
dpkg --get-selections > list.txt
然后(在另一个系统上)从该列表还原安装:
dpkg --clear-selections
sudo dpkg --set-selections < list.txt
要摆脱陈旧的软件包:
sudo apt-get autoremove
要像在备份时一样进行安装(即安装设置的软件包dpkg --set-selections
):
sudo apt-get dselect-upgrade
ubuntu-desktop
被卸载了-可能是由于dpkg命令之一。小心,花了我几个小时才能修复损坏!
sudo apt-mark hold name-your-package
。这将防止apt-get升级到当前版本,这是更新过程的默认版本。
apt-mark showmanual
手册页状态:
将打印手动安装的软件包列表
因此,它应该仅给出明确安装的软件包的列表(尽管其中包括默认初始安装中包含的软件包),但由于要安装这些软件包而没有包括所有依赖项。
要将结果输出到文本文件中:
apt-mark showmanual > list-manually-installed.txt
apt-mark showmanual
并非如此。它还列出了大量自动安装的软件包,可能是基本安装的一部分。
apt list --manual-installed
。
dpkg-query
(而不是dpkg --get-selections
,其中列出了一些未安装的软件包),如下所示:
dpkg-query -W -f='${PackageSpec} ${Status}\n' | grep installed | sort -u | cut -f1 -d \ > installed-pkgs
要么:
dpkg -l | grep ^ii | sed 's_ _\t_g' | cut -f 2 > installed-pkgs
# for pkg in `cat installed-pkgs`; do apt-get install -y $pkg; done
在第二个系统中键入内容,以便安装软件包。
apt-get install -y $(< installed-pkgs)
它将使apt-get只运行一次并同时处理所有依赖项。
sudo apt-get build-dep name-package; sudo apt-get install name-package;
吗?
要列出所有已安装的软件包,
dpkg -l |awk '/^[hi]i/{print $2}' > 1.txt
要么
aptitude search -F '%p' '~i' > 1.txt
要么
dpkg --get-selections > 1.txt
注意:
您将在主文件夹中得到结果1.txt文件,或者您可以指定自己的路径。
我建议使用蓝图。即使它是为服务器设计的,也可以在台式机上使用。它将创建一个shell脚本/ chef / puppet,您可以使用该脚本来重新安装所有软件包。
您想立即在12.04那里重新安装软件包,对吗?
如果是这样,这非常容易。您需要一个“ Ubuntu单点登录帐户”。(在重新安装之前创建它,以便同步您的系统。)
转到软件中心,然后在“文件”菜单下查找“在计算机之间同步...”选项。
当您单击它时,您将看到计算机已注册以及计算机上所有应用程序的列表。
当您全新安装时,该计算机将被视为新计算机。
您只需要登录Ubuntu帐户,就会显示以前的计算机。
点击它; 您将获得所有应用程序的列表。在要安装的应用上选择“安装”。
还有一个名为Aptik的工具(命令行和GUI),可以帮助您查看所有已安装软件包的列表,并可以选择/取消选择其中一些软件包,创建备份列表,然后在其中还原同一组软件包。另一个系统。
安装:
sudo add-apt-repository -y ppa:teejee2008/ppa
sudo apt-get update
sudo apt-get install aptik
更多信息:https : //teejeetech.in/aptik/
从屏幕快照中可以看到,Aptik 还允许您备份和还原PPA,这对于安装某些已安装的软件包当然是必需的。
apt-get install aptik-gtk
以及
APT克隆。该软件包可用于在基于apt的系统上克隆/恢复这些软件包。
- 它将保存/恢复软件包,sources.list,密钥环和自动安装状态。
- 它还可以使用dpkg-repack保存/恢复不再下载的软件包。
资源:
man apt-clone
ubiquity
(Ubuntu安装程序)将APT克隆用于升级过程。它比dpkg --get-selections
解决方案好得多,因为:
如何使用
安装
sudo apt-get install apt-clone
进行备份
sudo apt-clone clone path-to/apt-clone-state-ubuntu-$(lsb_release -sr)-$(date +%F).tar.gz
恢复备份
sudo apt-clone restore path-to/apt-clone-state-ubuntu.tar.gz
还原到较新的版本:
sudo apt-clone restore-new-distro path-to/apt-clone-state-ubuntu.tar.gz $(lsb_release -sc)
它制作了简单的压缩tar文件,可以轻松编辑和查看,然后再还原到其他计算机上。这里是其结构的一个例子:
/
├── etc
│ └── apt
│ ├── preferences.d
│ ├── sources.list
│ ├── sources.list.d
│ │ ├── anton_-ubuntu-dnscrypt-vivid.list
│ │ ├── maarten-baert-ubuntu-simplescreenrecorder-vivid.list
│ │ └── megasync.list
│ ├── trusted.gpg
│ └── trusted.gpg.d
│ ├── anton__ubuntu_dnscrypt.gpg
│ ├── anton__ubuntu_dnscrypt.gpg~
│ ├── maarten-baert_ubuntu_simplescreenrecorder.gpg
│ └── maarten-baert_ubuntu_simplescreenrecorder.gpg~
└── var
└── lib
└── apt-clone
├── extended_states
├── installed.pkgs
└── uname
在Unix StackExchange上有一个很好的解释,描述了如何使用aptitude列出未安装为依赖项的软件包,以及如何将该列表与Ubuntu版本的默认软件包列表进行比较。
要获取台式机版本12.04及更高版本的清单文件,请访问此网站,选择您的发行版,然后在CD映像下方滚动到“文件”部分。您会找到与您的体系结构相匹配的“ ubuntu-12.04.4-desktop-amd64 + mac.manifest”之类的内容。
对于服务器版本,您需要从用于安装原始系统的ISO中获取清单文件。对于VPS或云服务器,您的提供商可能使图像可用,或者您可能需要联系它们。
这是一个使用引用的帖子中的代码的示例,以及对要在新服务器上安装的修改的示例。
旧服务器(其他帖子的代码,输出保存到文件):
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currently-installed.list
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > default-installed.list
comm -23 currently-installed.list default-installed.list > user-installed.list
在新服务器上,使用scp复制文件,然后使用sed将'install'附加到每一行(-i执行内联替换)。然后,您可以将列表用作“ dpkg --set-selections”的输入,并使用apt-get安装软件包:
scp user@oldserver:user-installed.list .
sed -i 's/$/\tinstall/' user-installed.list
sudo dpkg --set-selections < user-installed.list
sudo apt-get dselect-upgrade
在开始此任务之前,建议您阅读并理解本文开头提到的所有内容,然后查阅aptitude参考指南以获取有关搜索模式的详细信息。
我很惊讶上面没有提到apt-cache
专门为此目的设计的命令...
apt-cache pkgnames
有关更多信息,请运行apt-cache --help
:
** apt-cache是用于查询信息的低级工具 从APT的二进制缓存文件 命令: gencaches-构建包和源缓存 showpkg-显示单个软件包的一些常规信息 showsrc-显示源记录 统计-显示一些基本统计数据 转储-以简洁的形式显示整个文件 dumpavail-将可用文件打印到标准输出 未满足-显示未满足的依赖关系 搜索-在软件包列表中搜索正则表达式模式 show-显示包装的可读记录 取决于-显示软件包的原始依赖性信息 rdepends-显示包的反向依赖关系信息 pkgnames-列出系统中所有软件包的名称 dotty-为GraphViz生成包图 xvcg-生成xvcg的程序包图 策略-显示策略设置 选项: -h此帮助文本。 -p =?程序包缓存。 -s =?源缓存。 -q禁用进度指示器。 -i仅显示unmet命令的重要部门。 -c =?阅读此配置文件 -o =?设置任意配置选项,例如-o dir :: cache = / tmp 有关更多信息,请参见apt-cache(8)和apt.conf(5)手册页。 **
apt --installed list
给出了最好的结果(如上面的最佳答案所示。尽管apt-cache pkgnames
乍一看似乎可以解决问题,但它列出了“系统中的所有软件包”(根据上面的帮助文本),其中还包括易于了解的软件包,但实际上并没有安装有一个--installed
选项,但它似乎并没有一起工作pkgnames
。
apt-cache pkgnames | wc -l
提供55909
软件包(系统知道),而aptitude search '~i!~M' | wc -l
给出2160
(明确安装的软件包,没有依赖性)。
有关完整的摘要,请参见:
页面的一半:
dpkg-列表
以下命令还将列出所有已安装的软件包,
grep ' installed ' /var/log/dpkg.log /var/log/dpkg.log.1 | awk '{print $5}' | sort -u
/var/log/dpkg.log*
获取所有轮换的日志。
帮助此社区Wiki-添加最新解决方案。
此命令应完成包含已安装软件包的文本文件的创建:
dpkg -l | awk '{print $2}' > package_list.txt
要完成列出软件包的批量安装,您需要编辑“ package_list.txt”。使用文本编辑器删除文件顶部的怪异行。然后,您可以使用以下命令从创建的文件中安装软件包:
xargs < package_list.txt apt-get install -y
仅当您希望使用列表安装所有当前软件包(包括自动安装的软件包等)时,才使用此方法。
将“ apt-cache pkgnames”的响应输出到我们将简单命名为“ package_list.txt”的文件。您可以使用以下方法完成此操作:
apt-cache pkgnames > package_list.txt
然后,当您要从“ package_list.txt”安装软件包时,可以使用以下命令:
xargs < package_list.txt apt-get install -y
我们可以使用该命令apt-mark showmanual
提供手动或最初随Ubuntu安装的软件包列表。我们将其输出到文件中,我们将其称为“ package-list.txt”。使用此命令可以完成以下任务:
apt-mark showmanual > package-list.txt
下面是用于从文件“ package_list.txt”安装软件包的命令。
xargs < package_list.txt apt-get install -y
实用程序,用于在升级/重新安装基于Ubuntu的发行版后简化软件包的重新安装。
[ 启动板| Aptik ]
有关Aptik的信息,请尝试访问其官方页面,有关屏幕截图,请单击此处或查看本节的结尾。
安装Aptik很简单。跟着这些步骤:
通过以下方式添加 PPA:
sudo add-apt-repository -y ppa:teejee2008/ppa
使用以下命令更新 apt。
sudo apt-get update
使用以下命令安装 Aptik:
sudo apt-get install aptik
apt-mark showmanual
Bash,Unity和Xorg等的输出。他们应该在那里吗?
除了APT软件包外,如今许多GUI软件包也都作为snap分发。
如果在中找不到您的软件包apt list --installed
,请尝试snap list
:
$ snap list
Name Version Rev Tracking Publisher Notes
gimp 2.10.10 165 stable snapcrafters -
gnome-calculator 3.32.1 406 stable/… canonical✓ -
keepassxc 2.4.1 267 stable keepassxreboot -
...
添加/snap/bin
到PATH 也是一个好主意,因此您可以从终端启动它们(对于非root用户自动完成)。
该软件包dctrl-tools
提供了grep-status
获取系统中标记为已安装软件包的列表的工具:
sudo apt install dctrl-tools
用法:
grep-status -FStatus -sPackage -n "install ok installed"
https://www.rosehosting.com/blog/list-all-installed-packages-with-apt-on-ubuntu/:
1.列出Ubuntu上已安装的软件包
要列出计算机上已安装的软件包,可以使用以下命令:
sudo apt list --installed
该命令的输出将与以下命令非常相似,具体取决于当前安装的软件包:
Listing... acl/xenial,now 2.2.52-3 amd64 [installed] adduser/xenial,xenial,now 3.113+nmu3ubuntu4 all [installed] apache2/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] apache2-bin/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed,automatic] apache2-data/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed,automatic] apache2-doc/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed] apache2-utils/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] apparmor/xenial-updates,now 2.10.95-0ubuntu2.5 amd64 [installed,automatic] apt/xenial-updates,now 1.2.19 amd64 [installed] apt-utils/xenial-updates,now 1.2.19 amd64 [installed] ...
2.使用LESS程序
要轻松读取整个输出,可以使用该
less
程序。sudo apt list --installed | less
3.使用GREP命令
您可以使用该
grep
程序通过输出查找特定的程序包 。sudo apt list --installed | grep -i apache
4.列出所有包含Apache的软件包
上面命令的输出将列出
apache
名称中包括的所有软件包 。apache2/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] apache2-bin/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed,automatic] apache2-data/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed,automatic] apache2-doc/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed] apache2-utils/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] libapache2-mod-php/xenial,xenial,now 1:7.0+35ubuntu6 all [installed,automatic] libapache2-mod-php7.0/xenial-updates,now 7.0.13-0ubuntu0.16.04.1 amd64 [installed,automatic] libapache2-mod-security2/xenial,now 2.9.0-1 amd64 [installed] libapache2-modsecurity/xenial,xenial,now 2.9.0-1 all [installed]
Apt支持匹配软件包名称的模式以及列出已安装
(--installed)
软件包,可升级(--upgradeable)
软件包或所有可用(--all-versions)
软件包版本的选项。5.使用DPKG程序
您可以用来列出Ubuntu VPS上已安装软件包的另一种替代方法是该
dpkg
命令。sudo dpkg -l
该命令的输出将为您提供信息,例如软件包名称,版本,体系结构以及有关软件包的简短描述。当然,您可以
grep
再次使用该程序来搜索特定的程序包。sudo dpkg -l | grep -i apache
输出应如下所示:
ii apache2 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server ii apache2-bin 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server (modules and other binary files) ii apache2-data 2.4.18-2ubuntu3.1 all Apache HTTP Server (common files) ii apache2-doc 2.4.18-2ubuntu3.1 all Apache HTTP Server (on-site documentation) ii apache2-utils 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server (utility programs for web servers) rc apache2.2-common 2.2.22-6ubuntu5.1 amd64 Apache HTTP Server common files ii libapache2-mod-php 1:7.0+35ubuntu6 all server-side, HTML-embedded scripting language (Apache 2 module) (default) rc libapache2-mod-php5 5.5.9+dfsg-1ubuntu4.16 amd64 server-side, HTML-embedded scripting language (Apache 2 module) ii libapache2-mod-php7.0 7.0.13-0ubuntu0.16.04.1 amd64 server-side, HTML-embedded scripting language (Apache 2 module) ii libapache2-mod-security2 2.9.0-1 amd64 Tighten web applications security for Apache ii libapache2-modsecurity 2.9.0-1 all Dummy transitional package ii libapr1:amd64 1.5.2-3 amd64 Apache Portable Runtime Library ii libaprutil1:amd64 1.5.4-1build1 amd64 Apache Portable Runtime Utility Library ii libaprutil1-dbd-sqlite3:amd64 1.5.4-1build1 amd64 Apache Portable Runtime Utility Library - SQLite3 Driver ii libaprutil1-ldap:amd64 1.5.4-1build1 amd64 Apache Portable Runtime Utility Library - LDAP Driver .
通过本教程的竞争,您已经成功学习了如何在Ubuntu中列出已安装的软件包。