インストール日ごとにインストールされたパッケージを一覧表示するには?
Debian/Ubuntu でこれを行う必要があります。他のディストリビューションへの答えも良いです。
特定のコードをコンパイルするために多くをインストールしましたが、インストールする必要があるパッケージのリストを取得したいと思います。
答え1
RPMベースの展開(Red Hatなど)は簡単です。
rpm -qa --last
Debianやその他のdpkgベースのディストリビューションでは、特定の質問も簡単です。
grep install /var/log/dpkg.log
ログファイルが置き換えられていない場合は、以下を試してください。
grep install /var/log/dpkg.log /var/log/dpkg.log.1
通常、マニュアルページに対応するフィールドがないため、dpkg
インストールapt
日は追跡されないようですdpkg-query
。
結局のところ、古い/var/log/dpkg.log.*
ファイルはログ循環を通して削除されるため、このアプローチはシステムの完全な履歴を提供することを保証できません。
何度も表示される提案(例:このスレッド/var/lib/dpkg/info
)ディレクトリを見てください。この記事では、次のことを試すことができることを示唆しています。
ls -t /var/lib/dpkg/info/*.list | sed -e 's/\.list$//' | head -n 50
選択に関する質問に答えるための最初のステップは次のとおりです。
日付別にパッケージリストを作成する
$ find /var/lib/dpkg/info -name "*.list" -exec stat -c $'%n\t%y' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list\t,\t,' | \
sort > ~/dpkglist.dates
インストール済みパッケージのリストの作成
$ dpkg --get-selections | sed -ne '/\tinstall$/{s/[[:space:]].*//;p}' | \
sort > ~/dpkglist.selections
リストを2つ追加
$ join -1 1 -2 1 -t $'\t' ~/dpkglist.selections ~/dpkglist.dates \
> ~/dpkglist.selectiondates
何らかの理由でそれは私に多くの違いを印刷しないので、バグがあるか、意味に間違った仮定があるかもしれません--get-selections
。
find . -mtime -<days>
head -n <lines>
必要に応じて、明らかにパッケージを使用または制限し、出力形式を変更できます。
$ find /var/lib/dpkg/info -name "*.list" -mtime -4 | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list$,,' | \
sort > ~/dpkglist.recent
$ join -1 1 -2 1 -t $'\t' ~/dpkglist.selections ~/dpkglist.recent \
> ~/dpkglist.recentselections
過去4日以内にインストールされた(変更?)選択肢のみが一覧表示されます。
sort
使用されたソート順を確認したら、コマンドを削除してコマンドをより効率的にすることもdpkg --get-selections
できます。find
答え2
Mikelはdpkgレベルでこれを行う方法を示しました。。特に/var/lib/dpkg/info/$packagename.list
パッケージがインストールされたときに作成されます(以降は変更されません)。
APTツールを使用したことがある場合は(自動インストールされたパッケージと手動でインストールされたパッケージについて心配していたために使用したことがあります)、回転しない限り、すべての/var/log/apt/history.log
APTをインストール、アップグレード、および削除し、サイレントインストールとしてマークされたパッケージの説明を提供します。これはAPT 0.7.26で導入されたかなり新機能なので、Debianではsqueezeとして表示されます。 Ubuntuには10.04にありますが、サイレントhistory.log
インストールに関する注意事項は10.10まで表示されません。
答え3
誰もが欲しく、必要な引用は次のとおりです。
for x in $(ls -1t /var/log/dpkg.log*); do zcat -f $x |tac |grep -e " install " -e " upgrade "; done |awk -F ":a" '{print $1 " :a" $2}' |column -t
結果にはすべて(新規)が表示されます。インストール済みそしてアップグレードされたバージョンパッケージは時系列でソートされます。
この行では、以下を説明します。
ls -1t
-dpkg.log*
すべてのファイル名を時系列で取得します。zcat -f
-もしファイルはアーカイブ入力してから解凍してください。その他内容を渡すだけです。tac
- リバース出力猫、1行ずつ正しい時間順序を取得できるようにします。grep
- 確認のみ可能インストール済みまたはアップグレードバッグ。awk -F ':a'
- 分離建築学パッケージ名のフィールドcolumn -t
- スペースで区切られた列のきれいな印刷
もちろん、これに対するエイリアスを作りたいのですが、残念ながらこれは不可能です。アッ一重引用符と二重引用符によって異なります。これに関しては、これをbashスクリプトに入れる方が良い:
でしょう。建築学フィールド列に。
出力は次のとおりです
2018-03-06 18:09:47 upgrade libgomp1 :armhf 6.3.0-18+rpi1 6.3.0-18+rpi1+deb9u1
2018-03-05 15:56:23 install mpg123 :armhf <none> 1.23.8-1
2018-03-05 15:56:23 install libout123-0 :armhf <none> 1.23.8-1
2018-01-22 17:09:45 install libmailtools-perl :all <none> 2.18-1
2018-01-22 17:09:44 install libnet-smtp-ssl-perl :all <none> 1.04-1
税の払い戻し:
- 上記のようにARMアーキテクチャにのみ適用可能で、アーキテクチャフィールドの区切り文字を少し変更する必要があります。
- エイリアスの使用を容易にするには、スクリプトに入れる必要があります。
- 他の *nix システムではテストされていません。
答え4
IMHO/var/log/apt/history.log
ファイル形式が厄介です。
開始日:{日付} {時間}コマンドライン:{command} {オプション...}インストール:{パッケージ(バージョン)}、...、{パッケージ(バージョン)}、...終了日:{日付} {時間}
ログファイル形式でログインすることを好む
{date}{time}{tab}{package}{tab}{version}{tab}{command}{options}\n
または、{package}だけでなく、すべての{依存関係}を表示するいくつかのXMLです。
現在実装されているため、必要な情報を取得できますが、詳細を抽出するには少しフォレンジック処理が必要です。