web-dev-qa-db-ja.com

Ubuntuで「apt-get install」の履歴を取得するにはどうすればよいですか?

私はサーバーをあるUbuntuボックスから別のものに移動するつもりです。私は古い箱を新しい箱にクローンしていません。新しいシステムを作成しており、必要に応じてデータを移動します。古いボックスにあるすべてのソフトウェアを新しいボックスにインストールしたい。

時間の経過とともに与えたすべての「Sudo apt-get install」コマンドの履歴を見つける簡単な方法はありますか?つまり、dpkg -lは、インストールされているすべてのパッケージを表示しますが、それらをインストールしたトップレベルのパッケージは表示しません。 dpkgがインストールパッケージを提供する方法がある場合、そこにユニークなパッケージを見つけることができます。それ以外の場合は、「これらの24個のパッケージをインストールした」と別の言い方をしたいと思います。

94
Paul Hoffman

上記のコメントで述べたように、aptの履歴は/var/log/apt/history.logにあります。つまり、dpkggdebiなどのGUIを使用して手動でインストールされたパッケージは表示されません。 dpkgを通過したすべてのパッケージを確認するには、/var/log/dpkg.logを参照してください。

76
ℝaphink
8
M_1

apt-mark を使用して、インストールが明示的に要求されているパッケージを一覧表示できます。

apt-mark showmanual

Debianの古いリリースを実行している場合のために、ここに手動の方法があります。

次のコマンドは、手動または自動にかかわらず、インストールが要求されたパッケージのリストを提供します。パッケージのインストール(削除)の途中でない限り、これはインストール済みパッケージのリストです。

dpkg --get-selections | sed -n 's/\t\+install$//p'

次のコマンドは、自動的にインストールされるパッケージのスーパーセットを提供します。

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

すべてをまとめると、次のコマンドは手動でインストールされたパッケージを一覧表示します。

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)
grep -i "Commandline" /var/log/apt/history.log

インストールしたすべてのパッケージを表示:Sudo apt-get install xxxxx

3
Prent Rodgers

Tac/headの組み合わせの代わりに、tailを使用することをお勧めします(最後の25行):

tail -n 25 /var/log/apt/history.log
2
Integer

他の回答は役に立ちましたが、出力が多すぎました。出力を削減するために、apt-mark showmanualこの答え のように、最初にインストールされたパッケージをフィルターで除外します(最初にインストールされたパッケージのリストを取得する方法については この答え を参照してください。ubuntu18.04を使用しています。 2したがって、以下のリンク)。

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-AMD64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:AMD//g" ) |
    cut -f1 |
    sort |
    uniq

このスクリプトは、バージョンに依存しない比較を行うことにより、元のマニフェストにあったパッケージを除外し、アップグレードされたパッケージがリストに表示されないようにします。最終的には約60個のパッケージのリストができました。

私が好むもう1つの方法は すべてのaptログを検索するこの回答 です。

0
TooTone

私はこの方法でtar.gz-ed履歴ファイルも手探りしています:

zgrep -E "Commandline: apt(|-get) install" /var/log/apt/history.log*

タイムスタンプも必要な場合は、パラメータ-B1を追加してください。

0
CraZ