ユーザーがインストールしたすべてのパッケージを見つける


38

Ubuntuシステムにユーザーがインストールしたすべてのパッケージ、つまりデフォルトのインストール済みパッケージの上にインストールされたパッケージのリストを取得する方法はありますか?

(アイデアは、クリーンなUbuntuインストールに同じパッケージをインストールするために使用できる包括的なリストを取得することです)

回答:


15

これらのファイルを見て、

  1. ' /var/log/installer/initial-status.gz'-プライマリインストール
    • このファイルの日付はインストール日です(私は思う)
    • ' /var/log/dpkg.log'タイムラインを更新します(これはあなたが望むものです)
    • ' /var/log/apt/term.log'- aptシステムで更新されたもの
    • ' インストール用にダウンロード/var/cache/apt/archives/'されたdebパッケージが含まれます

更新:新規インストールの正確なリストについては、次の2つの手順を使用します。

  1. 実行する: grep -w install /var/log/dpkg.log > full-list.log
  2. /var/log/installer/initial-status.gzタイムスタンプを超えた行を見る

これらのパッケージを使用して別のシステムにクリーンインストールを取得したいので、「deb」ファイルを「cache / apt / archives」パスから新しいインストールのパスにコピーし、1回でインストールすることもできます(ダウンロードせずに再び)。


ヒントをありがとう。このリストを取得する単一のコマンドを探していましたが、それは便利です。cat /var/log/dpkg.log | grepの「インストールは、」私は項目は、インストールの日付/時刻までに設置無視すれば近づくように見える
Rabarberski

ダウン投票の理由を追加すると、答えに問題がある場合、その問題を理解するのに役立ちます。将来的にはより良い答えにつながるでしょう。
ニック

Oeps、downvoteは偶然私のものだった。私はすでにあなたの答えを支持していました。あなたの答えを「最終」としてマークしようとしたとき、ミスクリックして下向きの矢印を押しました。元に戻すと、「この回答が編集されない限り、変更するには古すぎます」というメッセージが表示されました。申し訳ありませんが、ニック、ダウンボートと混乱の両方のため。:-(
Rabarberski 2009年

@Rabarberski、まあそれは起こる...害はありません。
ニック

サーバーのインストールのように/ var / log / installerが存在しない場合は機能しません。また、「Ubuntu」について話している場合は、バージョン番号を追加するのが理にかなっています。どのUbuntuですか?

8

にやにや笑いのために、最初にインストールされたパッケージと自動的にインストールされたパッケージを除く、手動でインストールされたパッケージを把握するワンライナー(ここでは明確にするために分割)をまとめました。

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )

これはとの両方で機能bashzshます。


これは、初期インストール中にインストールされたライブラリの束を印刷するように見えることを除いて、ほぼ完全に機能します。束がありますlibtifflibxcb私は自分自身をインストールしていない、などが。この回答:superuser.com/a/105000/24349は、インストール時間に基づいてソートし、システムのインストール時間の前にすべてを削除することで、それを処理します。シェルの素晴らしい(ab)使用!
ハクスニー

3

上記の情報に基づいて、手動でインストールされたパッケージをリストする短いPythonスクリプトを作成しました。このリンクを参照してください

私は責任を負いませんが、自由に使用してください。ただし、フィードバックや提案はいつでも歓迎します。


ブリリアント!実行にはしばらく時間がかかりますが、必要なことを正確に実行できる唯一のソリューションです。
ハクスニー

2
(特に「短いPythonスクリプト」のために、ここで答えを置くの値を示しています残念ながらリンクは現在壊れている(番組のpythonトレースバック)
デヴィッド・Ljungマディソンステラ

スクリプトでgithubリポジトリを見つけました: github.com/gerjantd/bin/blob/master/… 「raw」をクリックしてダウンロードし、「python list_manually_installed_pa​​ckages.py」で実行します
デビッドリュングマディソンステラ

2
githubのリンクは今...あまりにも、壊れている
Suzana

2

私の答えを確認してくださいここに関連する質問に:どのように私はDebianシステムにインストールされているすべてのパッケージのリストを表示することができますか?。質問に対する他の回答のいくつかには、そのようなリストを取得するための素晴らしい提案も含まれています。

以前の質問もこの質問に対応しているため、この質問は重複としてマークする必要がありますが、見つけやすいようにこの質問を単独で立てておくと便利です。


1

一貫した履歴があり、aptitudeを使用すると仮定します。

history | grep -e "^..... aptitude install"

aptitude install ... duhでインストールしたパッケージのみをリストします


1

これはハックジョブですが、完全に機能します。

まず、http://releases.ubuntu.com/maverick/(または使用しているUbuntuのバージョン)にアクセスし*.manifest fileて、使用しているUbuntuのバージョンに関連付けられているものを取得します。

次に、次のスクリプトを実行します(<manifest file>、山かっこなどを、ダウンロードしたファイルへのパスに置き換えます。いつでも> output末尾に追加して、ファイルダンプを作成できます。

diff --suppress-common-lines <(sed 's/ .*//' <manifest file>) <(dpkg --get-selections | sed 's/[ \t].*//') | grep '>' | sed 's/[>] //'

1

Geekosaur、素敵なコードをありがとう。私はそれを使用しましたが、それを機能させる方法を見つけるのに時間がかかりました。Ubuntu 11.10でそれを行った方法は次のとおりです。bashターミナルで動作します。

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  ) > user-installed-packages

次に、タブを追加します\t— —そしてinstall各行に:

sed 's/$/\tinstall/' user-installed-packages >uip

次に、新しいマシンで:

sudo dpkg --set-selections < uip

そして、パッケージをインストールするには:

sudo apt-get dselect-upgrade

0

これを行う別の方法は、最初のニーズに応じてインストールする基本パッケージを決定する「タスク」に基づいて、インストールされたものを決定することです。

tasksel --list-tasks

少なくともあなたが持っているだろうserver。ただし、さらに多くを選択することもできます。インストールしたタスクごとに、インストールされているパッケージのリストを取得できます。インストールで選択したパッケージに対して、次のコマンドがすべてを1行で実行します(わかりやすくするために分割されています)。

(tasksel --task-packages server ; \
 tasksel --task-packages openssh-server ; \
 tasksel --task-packages lamp-server) | sort | uniq

上記に対する一般的なアプローチは次のとおりです。

(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
 do tasksel --task-packages $a; done) | sort | uniq

今使っapt-cache depends --installed -i --recurse <packagename> | grep -v "^ "タスクで定義されたすべてのパッケージで使用される依存関係のリストを取得します。これは、次のように1行で実行できます。

apt-cache depends --installed -i --recurse \
     $(for a in $( tasksel --list-tasks | \
                   grep "^i" | \
                   awk '{ print $2 }' ) ; \
       do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq

以下に、システムにインストールされているすべてのパッケージをリストします(依存関係は含まれません)。

dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'

commコマンドを使用して、2番目のリストのみにあるものを見つけます(つまり、両方のファイルと最初のファイルにあるものを無視します)

comm -13 <(apt-cache depends --installed -i --recurse \
              $(for a in $( tasksel --list-tasks | \
                            grep "^i" | \
                            awk '{ print $2 }' ) ; \
                do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \
         <( dpkg --get-selections | grep "[[:space:]]install" | \
            awk '{print $1}' | sort)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.