Debian:列出所有用户安装的软件包?

Tho*_*vin 11 linux debian apt

对于我参与的网络安全竞赛,我给了一个安装了许多软件包的Debian虚拟机,并要求清理无关或恶意软件包.

在过去,我已经使用dpkg -l | grep [searchterm]了一个常用包列表来执行此任务.然而,这是非常低效和耗时的.

为了加快我的任务,有没有办法搜索系统上安装的软件包列表,这些软件包已经由用户安装了进程,而不是系统"默认"软件包?

Jam*_*aid 10

此命令可能会缩短您的工作时间:

apt-mark showmanual
Run Code Online (Sandbox Code Playgroud)

它应该显示"手动"安装了什么包.它不是100%可靠,因为许多自动安装的软件包被标记为手动安装(因为这里描述的原因太长).

您也可以(如果允许)运行安全工具,例如clamav和/或rkhunter扫描您的计算机以查找恶意程序.


Ben*_*ill 7

下面是我每晚在桌面上运行的"健康"脚本中的一行.除了从传感器,网络使用,硬盘温度等收集信息之外,它还获得了我从命令行手动安装的所有软件的列表.

我目前正在运行Kubuntu 14.04.5(Trusty),我不知道Ubuntu和Debian的软件包管理之间有什么区别的细节,但希望这对你有用,对我来说也是如此.

( zcat $( ls -tr /var/log/apt/history.log*.gz ) ; cat /var/log/apt/history.log ) | egrep '^(Start-Date:|Commandline:)' | grep -v aptdaemon | egrep '^Commandline:' | egrep 'install' 1>>installed_packages.txt
Run Code Online (Sandbox Code Playgroud)


Dav*_* II 6

所有套餐

我为这个问题找到的大多数代码都使用了历史日志中的搜索:

$ cat /var/log/apt/history.log | grep 'apt-get install '
Run Code Online (Sandbox Code Playgroud)

或列出机器上安装的所有 Debian 软件包:

$ dpkg --get-selections
Run Code Online (Sandbox Code Playgroud)

手动安装

我发现上述答案不够充分,因为我的历史日志不完整,而且我不想将内置包与手动安装的包分开。然而,这个解决方案做到了只显示手动启动的安装包的技巧。这个使用 log: /var/log/dpkg.log,它应该作为 bash 脚本执行。

#!/usr/bin/env bash
parse_dpkg_log() {
  {
    for FN in `ls -1 /var/log/dpkg.log*` ; do
      CMD="cat"
      [ ${FN##*.} == "gz" ] && CMD="zcat" 
      $CMD $FN | egrep "[0-9] install" | awk '{print $4}' \
        | awk -F":" '{print $1}'
    done
  } | sort | uniq
}

list_installed=$(parse_dpkg_log)
list_manual=$(apt-mark showmanual | sort)
comm -12 <(echo "$list_installed") <(echo "$list_manual")
Run Code Online (Sandbox Code Playgroud)

我在这里找到了代码:https : //gist.github.com/UniIsland/8878469