依存関係のないインストール済みパッケージのリストを取得するにはどうすればよいですか?

依存関係のないインストール済みパッケージのリストを取得するにはどうすればよいですか?

ソフトウェア センターには、インストールされているパッケージのリストがかなり短く表示されます。これをテキスト ファイルで取得するにはどうすればよいでしょうか?

私は試した:

> 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これまでに実行されたすべてのコマンドをリストするコマンドと、Ubiquity によって実行されたものを除く、これまでに実行されたすべてのコマンドのリストを取得するためにリストをさらに解析する方法に関するアドバイスを提供しますapt-get install。このタスクに対する完璧なソリューションは存在しないようです。

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: 先頭と末尾にスペースを含むで始まる行のみを選択しinstall、選択した各行の残りの部分をstdout;に出力します。

これにより、これまでに実行されたすべてのコマンドのリストが出力されます(唯一の望ましくない出力は、パッケージに言及している-non-コマンドapt-get installですが、そのパッケージは (まだ?) 存在していません (少なくともデフォルトのリポジトリに))。apt-getinstallinstall

注記:私のインストール (Ubuntu 15.04 64 ビット) では、リストされている最初の 4 つのコマンドは、インストール中に 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 > somefile

実際には、このコマンドを使用するなど、他にも多くの方法があります

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

ただし、上記がどのように機能するかは全くわかりません ;)

インストールされたパッケージを日付別に表示するには:

日付使用によってインストールされたパッケージ、使用cat /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 コマンドをすべてテキスト ファイルにリダイレクトすると、わかりやすいリストが得られます。

これは、インストール時に Software Center が使用される場合にのみ役立つ可能性がありますapt-get install。Software Center が のフロントエンドであることは知っていますaptが、そのコマンドを明示的に使用するかどうかはわかりません。

答え4

このコマンドは、手動でインストールされたパッケージのリストと、「自動的にインストールされた」逆依存関係が削除されたパッケージのリストを表示します (たとえば、ubuntu-server メタパッケージを削除すると、その依存関係は自動としてマークされなくなり、このリストに表示されるようになります)。

apt list --installed | grep -v automatic

つまり、上記のリストは、逆依存関係がない、または手動でインストールされたとマークされているすべてのパッケージを返します。

関連情報