apt-getインストールの履歴を表示する方法は?


18

apt-get install手動で実行したコマンドの履歴を表示するにはどうすればよいですか?

利用可能なすべての方法は、Ubuntuのインストールの開始からインストールされたすべてのものを示しているように思えます。

apt-get installシステムのインストールプロセスが完了してからの履歴を表示するにはどうすればよいですか?


はい、そうです。他に何を期待しますか?GUIなどによって実行されたものではなく、ターミナルから実行したもののみを表示しますか?質問を編集して明確にしてください。
テルドン

@terdon Okayが新しい編集を行いました
-TellMeWhy

1
ログがありますdpkgでは/var/log/dpkg.log*
ヴェルカン

1
@ParanoidPandaそれはさまざまな方法で失敗します。履歴の切り捨て、他のシェルで実行されるもの、履歴から削除される、またはそもそもそこに置かれないもの、スクリプトからインストールされるもの、他のユーザーによって実行されるものなど
15年

1
@MrBones:私は知っています、そして私の答え(そしてその下のコメント)でそう述べています。ただし、OPはapt-get install、パッケージをインストールするコマンドを手動で実行したときにすべてのインスタンスを表示する方法を求め、履歴ファイルが特定の方法で変更されていない限り、この情報を提供するソリューションを提供しました(例:エントリは削除されました)。

回答:


20

ここでのコスの答えは、私が今まで見た中で最高の方法だと思います。Software Centerはを使用しますがapt、インストールしたものもすべてリストされます。

コマンドは次のとおりです。

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

私は家に帰ってこれをテストし、それが機能する場合は受け入れます:)
TellMeWhy

そうではありません!更新をチェックアウト:askubuntu.com/a/680405/320386は
KOS

これを使用すると、このタスクでより安全になります。zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d':前後のスペースを含むコマンドgrep -Po '^Commandline:(?=.* install ) \K.*'のみをフィルタリングします。特定のインストールに依存する場合あります。私の場合、Ubiquityからのエントリを削除します。これは削除したいエントリです。ご使用のシステムで番号が同じである場合は、少なくともベースラインがあります。apt-getinstallsed '1,4d' 1,4
コス

@kos apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-generic新しいコマンドなどで余分な行が表示されます。それらはユビキタスラインですか?
アロニカル

いいえ、それらはSoftware Updaterから来たように見えます。ユーザーから実行されるコマンドとapt-get、フロントエンドで実行されるコマンドを区別する方法はありません。1回だけ実行されるUbiquityを除きaptdaemonます(たとえば、そのコマンドでもエントリが表示されます)。ただし、最善の方法はまだコマンドを使用することです。これにより、少なくともUbiquityエントリは除外されます。
コス


3

@Arronicalの答えを単純化するために、最近学んだすてきなトリックはzcat -qf、txtとtxtの両方のgzip圧縮ファイルをcat するために使用できることです。

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

になる

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

man zcatから:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

以下に、現在インストールされているトップレベルパッケージのみを出力するスクリプトを示します。「トップレベルパッケージ」は、他のatpパッケージが依存しないatpパッケージとして定義されています。そのようなトップレベルのプログラムがatpまたはsynapticなどのパッケージマネージャーによってインストールされた場合、それらはユーザーが手動で選択しました。

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

パッケージは、ユーザーが新しい情報をより早く望んでいる可能性が高いという仮定の下で、プログラムが遅いために逆の順序で印刷されます。

プログラムの流れ:

  • プログラムはまず、ファイル名を読み取り、インストールされているすべてのパッケージをリストに収集します/var/lib/dpkg/info/。ファイルmod時間はインストール時間です。
  • そのリストは逆順でソートされます。
  • インストールされたパッケージごとに$Pkg、への呼び出しapt-cache rdepends $Pkg はの逆依存関係を要求します$Pkg。依存関係がない場合は、最上位パッケージであり、パッケージ情報が出力されます:date time packagename

ノート:

  • このスクリプトはapt-cache rdepends $Pkg、人間の目を対象とした出力形式に依存しており、aptの将来のバージョンで変更される可能性があります。
  • / var / lib / dpkg / info /の下にファイル名を収集する部分のコードは、このunix.stackexchange投稿から来ました 。そのポスター「mikel」が指摘したように、dpgk履歴ログファイルは、特定のボリュームに達するとローテーションされるため、信頼できません。
  • のmanページ apt-chache
  • apt-cache rdepends ...おそらく、各呼び出しはすべての依存関係を反復処理することで計算されるため、呼び出しは非常に低速です。したがって、上記のスクリプトは最新のインストールから開始され、ユーザーに可能な限り即時の満足を提供します。
  • dpkg-installedパッケージもapt-installedであること--installedapt-cacheチェックした後のフラグ。ユーザーまたは別のインストールソフトウェアがaptをバイパスし、dpkgを直接使用した場合、可能です。このケースはテストされていませんが、顕著な出力が標準出力またはエラー出力のいずれかに出力されると思います
  • 出力には、後で上位のパッケージに依存するようになった手動で選択されたパッケージは含まれません。出力には、他のサードパーティのインストールソフトウェアによってaptを介してインストールされたパッケージも含まれている可能性があります。ただし、出力の目的が、/homeサードパーティソフトウェアを含むバックアップディレクトリから復元されたLinuxをセットアップするための基礎である場合、この出力は適切です。
  • パッケージ名にはバージョン番号が含まれているものと含まれていないものがあります。事実に認識をもたらすためだけに言及しました。

1

実行してインストールしたものをすべて表示したい場合:

sudo apt-get install [package]

また、bashの履歴を台無しにしたり、別のユーザー(またはすべてのユーザー)のこの種類のインストールの履歴を表示したくない場合は、次のコマンドを実行するだけです。

history | grep "apt-get install"

そして、それはあなたにほとんど関連する結果を得るはずです。


1
これですべての履歴を取得できますか?
TellMeWhy

@DevRobot:ファイルapt-get install内のエントリを手動で変更したり、.bash_historyこのファイルを削除したりしない限り、コマンドはapt-get install、ユーザーアカウントで文字列を含むコマンドを実行したときにすべてのインスタンスを表示します(たとえコマンドをrootとして実行します。したがって、ユーザーアカウントとは正確に一致しません-でコマンドを実行していますsudo)。

2
ただし、200を超えるコマンドを入力した場合は問題が発生する可能性があります
15年

2
申し立てを行う際に@Arronical証拠が期待されます;-)
Rinzwind

1
私自身は500がデフォルトであると想定しています(gnu.org/software/bash/manual/html_node/…)。
リンツウィンド

1

apt-get installコマンドの履歴が必要な場合は、次のコマンドを使用します。

grep "apt-get install" .bash_history

出力:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

その他の情報については、追加情報を参照してください

また、ファイルおよびファイルに/var/log/apt/は、より詳細なインストール情報があります。history.loghistory.log.X.gzterm.logterm.log.X.gz

apt-get含まれるコマンドのみの履歴が必要な場合は、

history | grep apt-get


apt-mark showmanual実際に手動でインストールされたパッケージだけでなく、OSのインストール時にインストールされたすべてのパッケージを表示します。奇妙な振る舞いです!
アロニカル

1
これは必ずしも履歴に関する特定の詳細を提供するわけではありません。人々見る必要があるのは/var/log/apt/history.log、同様のファイルです。手動で選択および自動選択されたパッケージのリストのみを取得します。あなたは与えていない任意のこの回答からなど、アップグレードされたものを、削除されたものを、インストールされたものの時系列の歴史を。
トーマスウォード

@Arronical-のmanページはどこにありますapt -mark showmanualか?Ubuntu 16.04 LTSのマニュアルページ(apt< manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >)に表示されません。
クレイグヒックス


0

など、あなたが再インストール、インストール、削除した内容についての詳細情報を見るために apt-getのインストールのを。

答えはエイリアスに変更できます:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

インストール中にvirtualminスクリプトが行うように、いくつかの引数はインストールの前に設定できることに注意してください:apt-get -y install packagename。

したがって、すべてのインストールコマンドをキャプチャする場合は、正規表現クエリを変更する必要があります。

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.