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


85

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

私が時間をかけて与えたすべての「sudo apt-get install」コマンドの履歴を見つける簡単な方法はありますか?つまり、dpkg -lはインストールされているすべてのパッケージを表示しますが、どの最上位パッケージがインストールしたかは表示しません。dpkgがインストールパッケージを提供する方法があれば、そこに固有のものを見つけることができます。そうでない場合は、「これらの24個のパッケージをインストールしました」と言ってほしい。



以下の回答を受け入れてもらえますか?答えた人に感謝する。
m-ric 16


これらのソリューションは、最後のログのローテーション後に発生したことのみをチェックします。すべての履歴をチェックするわけではありません。
クラングプライム

回答:


68

apt歴史があり/var/log/apt/history.log、上記のようにコメントで述べています。ただし、これは、dpkgなどのGUI を使用して手動でインストールされたパッケージをリストしませんgdebi。通過したすべてのパッケージを表示するにはdpkg、あなたが見ることができます/var/log/dpkg.log


8

5
最初のリンクの手順では、自動インストールパッケージと手動インストールパッケージを区別しません。/var/log/apt/history.log(場所が間違っていたので)数か月後に回転してしまいます。
ジル

ジルは両方の点で正しい。私はこれらのログの約1か月分のログしか持っておらず、ログの削除率がどのように設定されているかさえわかりません(FreeBSDの 'newsyslog'で行われます)。だから私はまだ解決策を持っていませんが、いくつかのポインタがあります。少なくとも、クローニング記事のコマンドからの出力をgrepし、「高レベル」名を探し、それらを新しい名前にインストールし、同じことを新しいボックスで行い、2つの結果を比較し、満足するまで繰り返すことができます。私はまだ多くのアイデアを聞きたいと思っています。
ポールホフマン

7

を使用してインストールが明示的に要求されたパッケージを一覧表示できます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)

1
---非常に異なる結果comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe

Debianにはapt-mark showmanual、最後のコマンドに相当するものがあります。
maxschlepzig

3
grep -i "Commandline" /var/log/apt/history.log

次を使用してインストールしたすべてのパッケージを表示します。 sudo apt-get install xxxxx


これは、@ℝaphinkの回答と十分に異なるものではなく、コメントである必要があります。
カールリヒター

2

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

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

これは、@ℝaphinkの回答と十分に異なるものではなく、コメントである必要があります。
カールリヒター

また、同じではありません。tailは、ファイル内の最後の行を、ファイル内にある順にリストします。tacは順序を逆にして、最後の行が最初、2番目から最後が2番目などになるようにします。また、理由を説明せずに「より良い」と言うと、間違っているリスクがあります。つまり、誰が「より良い」ということですか?どのような要件ですか?自信過剰のようです。
トッドウォルトン

0

他の回答は役に立ちましたが、出力が多すぎました。出力を削減するために、私apt-mark showmanualこの回答のように始めて、最初にインストールされたパッケージを除外しました(最初にインストールされたパッケージのリストを取得する方法についてはこの回答を参照してください;私はubuntu 18.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個のパッケージのリストになりました。

私が好きな他の方法は、すべてのaptログを検索するこの答えです


-1

最新のインストール済みパッケージのリストを降順で取得するには、次のように使用します(例:25行):

tac /var/log/apt/history.log |head --lines=25

1
より効率的(かつ文芸的): tail -25 /var/log/apt/history.log | tac
agc

これは、@ℝaphinkの回答と十分に異なるものではなく、コメントである必要があります。
カールリヒター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.