Uma*_*ang 247 package-management aptitude apt
我想获得由apt
或手动安装的软件包列表,aptitude
并能够找出foobar
软件包是手动安装还是自动安装。从命令行有什么巧妙的方法可以做到这一点吗?
jmi*_*rez 275
您可以使用这两种单线中的任何一种。两者在我的机器上产生完全相同的输出,并且比这个问题中迄今为止(2014 年 7 月 6 日)提出的所有解决方案都更精确。
使用apt-mark
:
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)
使用aptitude
:
comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Run Code Online (Sandbox Code Playgroud)
极少数仍然包通过裂缝下跌,虽然我怀疑这是由用户实际安装,通过语言本地化设置或安装例如,通过编解码器图腾安装程序后,无论是正确的。此外,linux-header 版本似乎也在累积,即使我只安装了非特定于版本的元包。例子:
libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29
Run Code Online (Sandbox Code Playgroud)
它是如何工作的:
sed
删除行尾剩余的空白。其他可能性也不起作用:
ubuntu-14.04-desktop-amd64.manifest
文件(此处适用于 Ubuntu 14.04)而不是/var/log/installer/initial-status.gz
. 更多的软件包显示为手动安装,即使它们不是。apt-mark showauto
代替/var/log/installer/initial-status.gz
. apt-mark
例如不包含 xserver-xorg 包,而另一个文件包含。我使用了其他各种 StackExchange 帖子作为参考,但没有一个像上述解决方案一样有效:
两者都列出了比上述解决方案更多的软件包。
编辑:如果您从以前的版本升级,该怎么办:
如果您已将 Ubuntu 从一个版本升级到下一个版本,您可能需要调整此过程。在这种情况下,除了当前版本的 initial-status.gz 文件之外,我还会检查较新版本的清单文件(见上文)。您只需添加另一个比较即可轻松做到这一点。仅使用清单文件是行不通的,因为不幸的是清单文件不包含 initial_status.gz 文件所做的所有事情(我检查过)。
Dan*_*der 82
在较新版本的 apt 包中,还有 apt-mark 命令
apt-mark showmanual
Run Code Online (Sandbox Code Playgroud)
小智 30
对于 Ubuntu 16.04,请查看日志文件/var/log/apt/history.log
。
例如:
zgrep 'Commandline: apt' /var/log/apt/history.log /var/log/apt/history.log.*.gz
Run Code Online (Sandbox Code Playgroud)
它并不完美,但它非常擅长明确我手工安装的内容。-B 1
在 grep 上放一个,看看它是什么时候安装的。
示例输出
Commandline: apt install postgresql-9.5-plv8
Commandline: aptdaemon role='role-install-file' sender=':1.85'
Commandline: apt install task
Commandline: apt autoremove
Commandline: apt install atom
Commandline: apt upgrade
Commandline: apt-get install asciinema
Commandline: apt install iperf3
Commandline: apt upgrade
Commandline: apt-get install chromium-browser
Commandline: apt install joe cpanminus build-essential postgresql libdbd-pg-perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl libio-socket-ssl-perl libnet-ssleay-perl libssl-dev
Commandline: aptdaemon role='role-commit-packages' sender=':1.2314'
Commandline: apt install git
Commandline: apt install sqlite
Commandline: apt install whois
Commandline: apt install libdbd-pg-perl
Commandline: apt install perl-doc
Commandline: apt upgrade
Run Code Online (Sandbox Code Playgroud)
不知道这是否回升aptitude
。它似乎没有从 Ubuntu 软件桌面应用程序中获取安装。
Li *_* Lo 20
apt-mark showauto | grep -iE '^foobar$'
如果软件包是自动安装的,将输出“foobar”,否则不会输出。
aptitude search '!~M ~i'
将列出未自动安装的软件包。遗憾的是,从 10.10 开始,aptitude 不会成为 Ubuntu 桌面上默认安装的一部分。
axo*_*otl 15
要获取所有软件包的列表(未安装、由用户安装或默认安装、跨所有 PPA),请apt
使用以下方法:
apt list [option]
对此有用的可能选项是:
--installed
仅显示系统上安装的软件包(大约 50,000 多个)
--manual-installed
列出由命令直接或作为依赖项显式安装的软件包。
或者,你可以这样做:
apt list --manual-installed | grep -F \[installed\]
获取仅由用户命令及其依赖项生成的包列表,并获取有关它们的其他信息,例如支持的版本和架构(x86、x86_64、amd64、全部等)
以下脚本将打印出所有未设置为自动安装并因此手动安装的软件包:
#!/usr/bin/python
try:
import apt_pkg
except ImportError:
print "Error importing apt_pkg, is python-apt installed?"
sys.exit(1)
apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
pkgname = tagfile.section.get("Package")
autoInst = tagfile.section.get("Auto-Installed")
if not int(autoInst):
auto.add(pkgname)
print "\n".join(sorted(auto))
Run Code Online (Sandbox Code Playgroud)
它基于 apt-mark 如何打印自动安装的软件包。
我想给出一个 GUI 解决方案。
打开 Synaptic Package Manager
去 Status
点击 Installed (manual)
它将给出由 apt 或 aptitude 手动安装的软件包列表。
不幸的是,我找不到任何选项Custom Filters
来确定foobar
软件包是手动安装还是自动安装。
如果包在Installed
但不在下,Installed (manual)
那么它是自动安装的。如果软件包在下面,Installed (manual)
则它是手动安装的。
正如一些人评论的那样, apt-mark showmanual 似乎有点错误(我将其报告为错误 727799)。当我使用它时,它实际上报告了很多甚至没有登录 /var/lib/apt/extended_states (应该存储它的地方)的东西,并且 apt-get 没有记录安装的东西/var/lib/apt/extended_states(仅在 /var/lib/dpkg/status 中)。上面 txwikinger 的 python 脚本直接从 /var/lib/apt/extended_states 中提取,但如果你今天使用它,语法可能不起作用(我的刚开始使用 Kubuntu 13.10 产生错误)。更新的语法是:
#!/usr/bin/python
import sys
try:
import apt_pkg
except ImportError:
print "Error importing apt_pkg, is python-apt installed?"
sys.exit(1)
apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
pkgname = tagfile.section.get("Package")
autoInst = tagfile.section.get("Auto-Installed")
if not int(autoInst):
auto.add(pkgname)
print "\n".join(sorted(auto))
Run Code Online (Sandbox Code Playgroud)
对我来说,这是一个非常短的 5 个项目列表,似乎也不准确。
归档时间: |
|
查看次数: |
166016 次 |
最近记录: |