web-dev-qa-db-ja.com

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

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

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

39
Rabarberski

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

  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'パスから新しいインストールのパスにコピーし、それらを一度にインストールできます(ダウンロードせずにそれらを再び)。

16
nik

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

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の両方で機能します。

9
geekosaur

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

責任は負いかねますが、お気軽にご利用ください。ただし、フィードバックや提案はいつでも歓迎します。

3
uniomni

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

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

2
user4358

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

最初に、 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
Arthur Summers

あなたが一貫した歴史を持ち、適性を使用していると仮定します:

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

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

1
Fehlersturm

ニースのコード、ギーコサウルスに感謝します。私はそれを使用しましたが、それを機能させる方法を理解するのにしばらく時間がかかりました。 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
1
jrussell88

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

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)
0