![如何列出用户安装的应用程序(不是软件包)?](https://linux22.com/image/911805/%E5%A6%82%E4%BD%95%E5%88%97%E5%87%BA%E7%94%A8%E6%88%B7%E5%AE%89%E8%A3%85%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%88%E4%B8%8D%E6%98%AF%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%89%EF%BC%9F.png)
不是包裹并非所有应用程序。仅指用户自己从任何来源(软件中心、手动添加的 PPA 等)安装的应用程序。
如果上述方法不可行 - 提供所有已安装应用程序的列表,或至少提供列出应用程序的 GUI,以便我可以对其进行截图。
我读过十几个类似的问题,人们发布的答案通常甚至没有接近 OP 问题的价值。请注意,我的问题包括“用户安装”。
答案:目前在 Ubuntu Linux 中还无法实现。(不过选择 tijybba 的答案作为最接近的答案)
答案1
你实际上可以使用Ubuntu 软件中心,如下面截图所示:
您还可以在 Synaptic 左下角的列表选择中看到它。
您cd /etc/apt/sources.list.d/ && cat *.list
将获得系统中所有存储库的列表。
您还可以Y PPA 经理备份并更新您的存储库。
第二种方法
[由于此方法涉及安装所有软件包,但如果我们认为新安装的操作系统已经有了这 90% 的软件包,那么它将忽略现有的软件包并安装新手动添加的软件包,这些软件包将只是您手动安装的应用程序]
此方法来自这里。
sudo dpkg --get-selections > installed-applications.txt
它将在主文件夹中的 txt 文件中生成已安装应用程序的列表。
要使用此文件安装相同的应用程序,您必须执行(但在此之前,请同时添加所有第三方存储库就像在旧版本中一样)
sudo dpkg --set-selections < installed-applications.txt
sudo apt-get -y update
sudo apt-get dselect-upgrade
这也可以通过 Gui 方式实现
sudo add-apt-repository ppa:webupd8team/mintbackup && sudo apt-get update
sudo apt-get install mintbackup
我想图像几乎说明了一切,备份您的选择,然后在新安装中恢复它。
答案2
apt-mark showmanual
将为您提供“手动安装”软件包的列表。这包括安装程序安装的软件包,即大多数软件包。但如果您在安装后运行此命令并稍后再次比较输出,您将获得用户明确请求的软件包列表,不包括自动安装的依赖项。
例如:
$ # Save the current list of manually installed packages
$ apt-mark showmanual | sort > original-package-list
# ...time passes...
$ # Compare the old list with the current list
$ # (this will output a list of packages that have been installed by the user since the last command)
$ apt-mark showmanual | sort | comm -13 - original-package-list
请注意应用程序是就软件中心和手动添加的 PPA 而言,软件包是必需的。我认为,区分专门请求的软件包和为满足依赖关系而引入的软件包是你能做的最好的事情。
或者只查看已安装的所有包的列表,运行dpkg-query -W -f'${PackageSpec}\n'
。
答案3
在 Ubuntu 下只有 root 才能安装软件包,能够执行该操作的用户只有 1 个,sudoers 只是具有同等权限的用户。
但是,您可以通过查看日志获得大量信息,您可以查看
apt 日志下的/var/log/apt/
dpkg 日志下的/var/log/
您只需一个命令即可获取已安装软件包的列表:
dpkg -l | grep ii
答案4
实际上,根据您的问题,我发现以下命令可以满足您的需要 dpkg -l | grep ii。此命令列出了每个已安装的软件包,对我来说应该如此。现在它没有显示用户 A 或用户 B,但这也不是 sudo 的限制,而是软件中心日志的限制。即使使用 sudo,调用 sudo 的用户也会被传递,因此您仍然可以获得调用 sudo 来运行命令的任何应用程序日志。现在当然您可以相当轻松地解决这个问题,因为 sudo 的一部分是能够以任何用户 [有权访问 sudo] 的身份登录(如果您知道他们的密码)、破解它或更改它(如果您在系统上拥有这些权限)。
如果您担心用户安装的内容可能会使您或您的系统面临风险,您可能需要检查为什么授予他们 sudo 访问权限以及安装软件包的能力,但这只是一个侧注。
我感觉您是在问自己自系统安装以来安装了哪些软件包,以便您可以清理或将设置镜像到新机器。这里的答案已经涵盖了备份/恢复,所以我们将跳过这一步。
由于没有简单直接的方法来查找哪个用户调用了软件包的安装,更好的方法可能是使用上面列出的命令和另一个用户列出的命令列出所有已安装的软件包,然后打开浏览器窗口并运行 Google 搜索以找出哪些软件包是保持系统运行所必需的,哪些不是。
跳至此处可跳过大部分无用内容并更直接地获得答案...
您还可以查看 sudoers 日志,查看谁调用了什么,让我举一个例子
May 15 11:26:30 <COMPUTERNAME> sudo: <user who called sudo> : TTY=unknown ; PWD=/home/pariah (pwd file or auth method used to verify user) ; USER=root (User they were running as) ; COMMAND=/usr/bin/thunar (the command they ran)
因此,这告诉我在此时间和日期此用户调用了 sudo [实际上,在这种情况下使用了 gksu],sudo 允许他们以哪个用户的身份拥有权限,以及他们运行了什么命令!
现在,如果您在 sudo 日志 [/var/log/auth.log] 中 grep apt-get 或类似内容,旧版本的日志末尾会附加 .0 .1 等。
您可以在命令行上拼凑出用户需要安装哪些程序。如果他们使用软件中心,我不确定相关终端命令是否会在此处获得身份验证行,但您可以使用以下位置的软件中心日志:
/var/log/apt/history.log 和旧日志位于 .gz 压缩档案中
现在,据我所知,软件中心日志不提供授权安装的用户,但它列出了软件中心执行的每项添加、修改或删除操作。同样,此日志也有时间和日期戳,因此很容易在基本系统安装后找到软件包,转到最旧的日志,转到顶部,或者如果您记得基本安装完成的时间和日期,您就可以开始了。
提到的两个日志文件都是纯文本,您可以使用任何 gedit、mousepad、leafpad 或您的 Ubuntu 版本默认使用的文本编辑器来查看或打印它们。