「aptitude」を使用して特定の日付にインストールされたパッケージを表示するにはどうすればよいですか?


54

aptitude(またはapt-get)を使用しているときに、インストールされたパッケージのリストを日付順にソートする簡単な方法があるかどうか誰もが知っていますか?

何か新しいことを試すためにたくさんのパッケージをインストールしましたが、うまくいきませんでした。ディスクスペースを取り戻すために、これらのパッケージをすべて削除したいと思います。

ダウンロードした.debファイルのリストを見てみましたが、それはやや逆方向の方法のようです(動作しましたが)。

回答:


43

残念ながら、dpkg(パッケージハンドラーaptitudeはその上で動作します)は、パッケージのインストール日を特に保存しませんが、追加することを考えています。ただし、インストール日付は、ディレクトリに書き込まれたファイルの日付スタンプを調べることで見つけることができます/var/lib/dpkg/info


4
このアプローチを使用する場合*.list、他のファイルにはパッケージの日付がスタンプされるため、必ずファイルのタイムスタンプのみを確認してください。
デイブ

20

ログに書き込むようにaptitudeを構成しました(/var/log/aptitude)。このような出力を生成します。

Aptitude 0.4.11.11: log report
Mon, Feb  9 2009 13:21:28 +0100

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================

Log complete.

これにより、aptitudeがインストールした正確な日付とパッケージが表示されます。これを設定するには、aptitudeリファレンスに従います。

Option:Aptitude::Log

Default:/var/log/aptitude

Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.

aptitudeのマニュアルページにaptitudeリファレンスへのリンクがあります。


1
リンクとその実装方法を投稿してください。一部のマニュアルテキストを参照するだけではあまり役に立ちません。
not2qubit

17

すべてのパッケージのインストール日を確認する簡単な方法があります。実行するだけです:

grep " install" /var/log/dpkg.log*

その結果、インストールされたすべてのパッケージと正確な日付と時刻のリストが表示されます。

そのソリューションに私を導くコメントをありがとう。


2
cdあなたが完全なパスを使用する場合、コマンドは必要ありませんcatコマンド...
papukaija

1
cdコマンドの目的は、lsこのディレクトリ内で使用可能なdpkg.logファイルを確認することでした。ただし、ls /var/log | grep 'dpkg.log'ログファイルを一覧表示するためのより良いソリューションが実行されます。混乱してすみません。
jmarceli

2
または単に「grep install /var/log/dpkg.log*」?
マークヴァンデール

1
ええ、私はcat | catあなたができることだとは知りませんでした。しかし、1つのコマンドで両方のファイルをcatしないのはなぜですか?(またはさらに良い:@MarcVanDaeleが言うことをしてください。)
mwfearnley

13

これはウェブで見つけました。dpkgログファイルからdpkgの履歴を作成します。

とてもシンプルに見えます。

function apt-history(){
      case "$1" in
        install)
              cat /var/log/dpkg.log | grep 'install '
              ;;
        upgrade|remove)
              cat /var/log/dpkg.log | grep $1
              ;;
        rollback)
              cat /var/log/dpkg.log | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              ;;
        *)
              cat /var/log/dpkg.log
              ;;
      esac
}

ソース

編集

このスクリプトをUbuntu 8.10 Serverで試しましたが、非常にうまく機能します。いくつかの情報、問題の解決方法を教えてください。


5
  • dpkgログを使用する

    locate dpkg.log | xargs cat {} | grep " install "
    
  • またはあなたが持っていない場合 locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • sort適切な時間ベースの注文を保証するために使用

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • 使用tac(リバースcat*)、頭部などは、最新の4つのエントリを取得します

    locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
    

たとえば、最後のコマンドの場合、次のようになります。

2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1

1
なぜ代わりにtac+ を使用headするのtailですか?
ザンナ

1
これは、しばらくしている私が、なぜ忘れてしまった-しかし、それはそれのために完全に正当な理由があるのですが可能です...または多分私は金髪の瞬間だった:D
A20

4

/var/log/apt/term.log、および古いファイルterm.log.1.gzなどを確認することで、以前のアクションを追跡することもできます。インストール中のタイムスタンプとメッセージからの完全なログがあります。


2

[実際の質問に答える]、はい、apt-getを使用してターミナル内で実行された場合でも、特定の日付にインストールされたパッケージを検索する簡単な方法があります。

Ubuntu Software Centerから自由にインストールできるSynaptic Package Managerをインストールする場合は、ファイルメニューを開いて[履歴]オプションを選択するだけです。ここでは、インストールまたは削除された方法に関係なく、追加および削除されたすべてのアプリケーションパッケージのアカウンティングが日付別に整理されています。


2

実際、pkginstall.shこれを実行できる「公式」 スクリプトがあります。公式ドキュメントの指示に従ってください。簡単に説明すると、上記のリンクからスクリプトをダウンロードし、実行可能であることを確認してから実行します。

~/pkginstalls.sh

これpkginstalls.txtにより、インストールされているすべてのパッケージが日付順にソートされたファイルがホームディレクトリに作成されます。

ところで、これはスクリプトの内容です:

#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date

#first append all info from archived logs

i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))

while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append all info from unarchived logs

i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append current log

cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt

#sort text file by date

sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt

rm $HOME/pkgtmp.txt

exit 0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.