如何取得沒有依賴項的已安裝軟體包清單?

如何取得沒有依賴項的已安裝軟體包清單?

軟體中心以某種方式顯示了相當短的已安裝軟體包清單。如何在文字檔中獲取它?

我試過:

> dpkg --get-selections|wc -l
3265

> aptitude search '~i!~M'|wc -l
1181

> dpkg -l | grep ^ii | sed 's_  _\t_g' | cut -f 2|wc -l
3076

> dpkg --get-selections | grep -v deinstall|wc -l
3076

> apt-mark showmanual|wc -l
1181

我知道我安裝了幾十個軟體包,而不是數千個。我需要在清單中準確地選擇我選擇的軟體包,而不需要依賴項來查看它。

更新

非常感謝@kos,我終於用該命令得到了清單:

> zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install \K.*' | tr ' ' '\n' | grep -v '\-\-reinstall'|grep -v '\-\-force-yes'|grep -v '\-y'|grep -v '\-f'|sort|uniq wc -l
103

答案1

這並不能準確回答問題:它提供了一個命令來列出所有apt-get install運行過的命令,並提供一些關於如何進一步解析該列表的建議,以便獲取所有apt-get install運行過的命令的列表(不包括Ubiquity 運行的命令) ,因為這項任務的完美解決方案似乎不存在。

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*'
  • zcat /var/log/apt/history.log.*.gzapt:解壓縮中的所有壓縮日誌/var/log/apt,連接它們並列印到stdout
  • cat - /var/log/apt/history.log: 追加/var/log/apt/history.log並印到stdout;
  • grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*'Commandline: apt-get:僅選擇以contains開頭install且帶有前導和尾隨空格的行,並將每個選定行的其餘部分打印到stdout;

這將輸出曾經運行過的所有命令的列表apt-get install(唯一不需要的輸出可能是提及某個包的apt-get非命令,但該包不存在(還?),至少在預設存儲庫中);installinstall

筆記:在我的安裝(Ubuntu 15.04 64 位元)中,列出的前四個命令是 Ubiquity 在安裝過程中執行的命令;要排除這些,您可以將輸出透過管道傳輸到sed

sed '1,4d'

這樣最終的近似Ubuntu 15.04 64 位元的指令是:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*' | sed '1,4d'

答案2

apt-mark 顯示手冊

將為您提供所有手動安裝的軟體包的列表,不包含依賴項 - 需要注意的重要一點是,它還將顯示在 Ubuntu 安裝過程中安裝了哪些軟體包。

要將輸出寫入檔案:

apt-mark showmanual > 某些文件

其實還有很多其他的方法,像是使用這個指令

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u) 

雖然我完全不知道上面是如何運作的;)

若要按日期查看安裝的軟體包:

按日期 use 安裝的軟體包使用usecat /var/log/dpkg.log | grep "\ install\ > somefile"
安裝的軟體包- 這可能是您正在尋找的。dpkgls -l /var/log/dpkg* > somefile

若要查看使用 dpkg 安裝的軟體包:

該文件包含上述資訊:/var/log/dpkg.log

答案3

這實際上比看起來更複雜,並且在 Ask Ubuntu 上有許多類似的問題。

我發現,在查看/var/log/apt/history.log該日誌的舊版本 gzip 後,任何由apt-get install命令安裝的內容都會被列為由該命令安裝。

所以:

grep "apt-get install" /var/log/apt/history.log

將向您顯示目前 apt 歷史日誌涵蓋的時間段內的所有內容。您需要查看gunzip較舊的日誌,並 grep 這些日誌以將所有資訊放在一起。 grep 指令都可以重定向到一個文字檔案中,為您提供一個不錯的清單。

apt-get install如果安裝時使用軟體中心,這可能僅對您的情況有用。我知道軟體中心是前端,apt但不確定它是否明確使用該命令。

答案4

此命令將給出手動安裝的軟體包的列表,以及那些已刪除「自動安裝」反向依賴項的軟體包(例如,如果刪除ubuntu-server 元軟體包,其依賴項將不再標記為自動,並且將現在已在此列表中):

apt list --installed | grep -v automatic

換句話說,上面的清單將傳回沒有反向依賴項或也被標記為手動安裝的所有套件。

相關內容