是否可以在不使用 taskel 的情况下确定手动安装的任务列表(或末尾带有 ^ 的特殊包)?

是否可以在不使用 taskel 的情况下确定手动安装的任务列表(或末尾带有 ^ 的特殊包)?

我看到我的系统安装了几个任务。下面是使用以下命令的输出tasksel

$ tasksel --list-tasks | grep ^i
i print-server  Print server
i samba-server  Samba file server
i ubuntu-mate-core  Ubuntu MATE minimal
i ubuntu-mate-desktop   Ubuntu MATE desktop
i openssh-server    OpenSSH server
i server    Basic Ubuntu server

如何使用不同的工具获取相同的信息?
希望得到解决方案没有安装tasksel包. 只能通过解析 dpkg-info 或者类似的东西。

答案1

我不认为这是实际检查的方式tasksel,但没有tasksel你可以

  1. 解析任务列表

    apt-cache dumpavail | grep ^Task: | sed -e 's/Task: //' -e 's/,./\n/g' | sort -u
    
  2. 获取为任务安装的软件包列表。例如openssh-server^元包

    apt-cache show openssh-server^ | grep ^Package: | sed -e 's/Package: //' | sort -u
    
  3. 检查安装状态以获取为任务安装的软件包列表。例如,对于openssh-server^元包

    apt-cache policy $(apt-cache show openssh-server^ | grep ^Package: | sed -e 's/Package: //' | sort -u) | grep -B 1 Installed:
    
  4. 使用 bash 将它们粘合在一起以获取任务状态

    for t in $(apt-cache dumpavail | grep ^Task: | sed -e 's/Task: //' -e 's/,./\n/g' | sort -u); do
      t_installed=u
      if (( $(apt-cache policy $(apt-cache show ${t}^ | grep ^Package: | sed -e 's/Package: //' | sort -u) | grep Installed: | grep -c 'none') == 0 )); then t_installed=i ; fi
      echo $t_installed $t
    done
    

相关内容