我在我的电脑上安装了一个普通的 Ubuntu 10.10,并通过 apt-get 安装了一些软件。上周我设法打破了一切,从头开始,我需要重新安装我的软件。有什么方法可以创建包含我手动安装的所有软件包的列表?
这样它会给我一个列表,texlive, ...
而不是texlive, texlive-dep1, textlive-dep2, ...
所有的标准包都被删除了?
如果我能以某种方式找出我删除了常规安装中的哪些程序,那也太棒了!
2015 年 5 月 23 日更新:我现在在我的系统上使用 Ansible 作为配置管理。在那里我指定要安装的软件包。这符合目标,在新系统上安装所有程序,甚至更好。所以这个问题可能是进入一些轻量级配置管理的入口。
Mar*_*ell 24
有了这个建议,我假设你的旧安装仍然会启动!
在另一台机器上复制一组包:
在系统 A 上,运行:
dpkg --get-selections | grep -v deinstall > my-selections
Run Code Online (Sandbox Code Playgroud)
将my-selections
文件移至系统 B。
在系统 B 上,运行:
dpkg --set-selections < my-selections
Run Code Online (Sandbox Code Playgroud)
进而:
sudo apt-get dselect-upgrade
Run Code Online (Sandbox Code Playgroud)
重要提示:如果您已经安装了来自非标准存储库和/或 PPA 的软件包,您还需要在运行升级之前将系统 A/etc/apt/sources.list
的内容复制/etc/apt/sources.list.d/
到系统 B。
您还可以使用dpkg
查看已删除的内容(注意:这还将包括您手动安装和删除的包):
dpkg --get-selections | grep deinstall
Run Code Online (Sandbox Code Playgroud)
您可以在终端中查看结果,当然也可以重定向到文件。
小智 20
来自 superuser.com 的这个线程给出了这个解决方案:
aptitude search '?installed ?not(?automatic)'
Run Code Online (Sandbox Code Playgroud)
小智 11
如果你的 apt 日志在 /var/log/apt 中,这样的事情应该可以工作:
gunzip -c /var/log/apt/history.log.*.gz | grep "apt-get install"
Run Code Online (Sandbox Code Playgroud)
或者,如果您想摆脱输出中的一些重复性垃圾:
gunzip -c /var/log/apt/history.log.*.gz | grep "apt-get install" \
| cut -f4- -d" " | sort | uniq
Run Code Online (Sandbox Code Playgroud)
sudo apt-get install debfoster
sudo debfoster
Run Code Online (Sandbox Code Playgroud)
这将检查所有已安装的软件包并找出哪些软件包保留了其他软件包:
texlive-full is keeping the following 161 packages installed:
cm-super cm-super-minimal context doc-base dvipng feynmf
fonts-gfs-artemisia fonts-gfs-baskerville fonts-gfs-bodoni-classic
...
Keep texlive-full? [Ynpsiuqx?], [H]elp:
Run Code Online (Sandbox Code Playgroud)
当您对每个问题回答“y”时(只需按 Enter 键即可快速移动),debfoster 将收集包列表并将它们逐行写入文件。默认情况下,这是在/var/lib/debfoster/keepers
。它看起来像这样:
gnome-do
texlive-full
...
Run Code Online (Sandbox Code Playgroud)
我配置 debfoster 通过/etc/debfoster.conf
将这个列表放在/etc/debfoster-keepers
并使用etckeeper跟踪文件以保留历史记录和备份。此处的答案显示了如何从以换行符分隔的文本文件安装软件包列表:
sudo apt-mark manual $(cat debfoster-keepers)
Run Code Online (Sandbox Code Playgroud)
请注意这里的一个限制,您清除的软件包前面有一个“-”。所以你想在调用 apt-mark 之前删除这些行。
尽管debfoster 的网站说 debfoster 已被弃用,以支持 aptitude,但我更喜欢 debfoster 的快速和简单配置。它让你处于你的包数据库的中间,让你清理东西,使自动和手动包更加明显。
在 debfoster 提示符下键入“h”以解释您的选项。类型 ”?” 查看包装说明。该如何到这里可能是有用的。
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Run Code Online (Sandbox Code Playgroud)
提供所有手动安装的包(不是系统包,不是依赖项)。例如,它显示build-essential
但不显示gcc
。
我现在终于明白了:
outfile="$(mktemp)"
pattern='(\[INSTALLIEREN\]|\[INSTALL\])'
if [[ -f "/var/log/aptitude.1.gz" ]]
then
gunzip -c /var/log/aptitude.*.gz | grep -E "$pattern" | awk '{ print $2; }' > "$outfile"
fi
if [[ -f "/var/log/aptitude" ]]
then
grep -E "$pattern" "/var/log/aptitude" | awk '{ print $2; }' >> "$outfile"
fi
sort "$outfile"
rm "$outfile"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32796 次 |
最近记录: |