パッケージがインストールされている理由を確認できますか?


112

特定のパッケージについて、それがインストールされている理由を見つけることができますか?

だから、私はそれを見ることができますか、手動でインストールされていますか、または別のパッケージの依存関係としてインストールされていますか?または、それはディストリビューションの一部としてインストールされますか?


これは、この質問(の一部)に関連しています。詳細については、この回答を参照してください。
koushik

2017年のより良い答えはこちら:askubuntu.com/questions/128524/…–
ランバート

回答:


107

簡単な解決策は、ターミナルで次のコマンドを入力することです。

aptitude why $package

または、最終的な原因のみに関心がある場合:

aptitude why $package --show-summary

$ packageをパッケージの名前に置き換えますaptitude。最初にパッケージをインストールする必要がある場合があります。

ここにあなたが得るかもしれない出力があります aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

詳細については、実行しaptitude why aspellます。「あなたが手動でインストール:次のようにあなたは、以下の例の出力を読み取ることができinkscape、必要とするlibgtkspell必要とする、libenchantic2a必要としますaspell」。(iマーカーはインストールされたパッケージを示し、Aマーカーは自動的にインストールされたパッケージを示します。)

i   inkscape       Depends libgtkspell0 (>= 2.0.10)                                                                    
i A libgtkspell0   Depends libenchant1c2a (>= 1.6.0)                                                                   
i A libenchant1c2a Depends aspell-en | myspell-dictionary | aspell-dictionary | ispell-dictionary | hunspell-dictionary
i A aspell-en      Depends aspell (>= 0.60.3-2)

最後に、次のコマンド

apt-cache rdepends --installed $package

$ packageに直接依存する、コンピューターにインストールされている他のパッケージを一覧表示します--recurseオプションを追加して、それに直接または間接的に依存するすべてのパッケージをリストできます。


同情適性はデフォルトでは含まれていません:(
badp

1
@badp指摘していただきありがとうございます。これはmaverickの悪い新機能です。livecdisoイメージのスペースを節約するためだけです。しかし、それは非常に貴重なツールであり、私は欠かせません。
enzotib

15
apt-cache rdepends --recurse $packageおそらくパッケージが多すぎます。--installedインストール済みパッケージに制限するオプションを追加します。-iオプションは、事前依存パッケージおよび依存関連パッケージに制限されます。ただし、パッケージは別のパッケージによって推奨されているため、インストールされる場合があります。このよう勧告relatededパッケージを含めるには、私は、これは正しいものを与えるだろうとしますapt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
ヤルノ

4
@jarnoの呪文と同等のわずかに短いもの。bashまたはブレース拡張を備えた他のシェルを使用していると仮定しますapt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
。– akavel

30

ターミナル(Applications -> Accessories -> Terminal)で次のコマンドを入力すると、特定のパッケージがインストールされた理由をすばやく簡単に判断できます。

aptitude why <package-name>

関心のあるパッケージの名前に置き換えます。たとえば、入力aptitude why libgoo-canvas-perlすると次のように出力されます。

i   shutter Suggests libgoo-canvas-perl

これは基本的にshutter、この場合のパッケージのlibgoo-canvas-perlインストールが提案されたことを意味します。次に、入力するaptitude why shutterことで、依存関係チェーンをたどることができます。

ただし、注意点があります。aptitudeは、実際のケースではないかもしれない状況について最も妥当な説明を見つけますが、それでもなお、さらに調査するための手がかりを与えることに気づきます。

私の場合、shutter提案libgoo-canvas-perl-しかし、提案されたパッケージはデフォルトでは自動的にインストールされません。それでも、スクリーンショットを編集できないという「経験」の記憶を揺り動かし、shutter手動でインストールすることになりました。ligbgoo-canvas-perl

最後に、次のコマンドを実行することにより、パッケージが自動的にインストールされたかどうかを確認できます(インストールを要求した他のパッケージの依存関係と推奨事項を調べることで、パッケージ管理システムが必須と判断したことを意味します)。

aptitude show <package-name>

これにより、次のような行が出力されます(出力の3行目)。

Automatically installed: no

詳細情報info aptitude(端末での実行)またはAptitude wikiページをご覧ください

特定のパッケージがいつインストールされたかを調べるには、2つのオプションがあります。

  1. Synapticパッケージマネージャーは、すべてのアクティビティの履歴ログを保持します。履歴ログファイルを表示するには、[ファイル]メニューから[履歴]を選択します。検索Install(ケースに注意)して、インストールに関するすべてのエントリを一覧表示できます。ただし、これはSynapticを使用してインストールされたパッケージのみを表示します
  2. ターミナルで次のコマンドを実行します。これにより、インストール履歴エントリのdpkgログが検索されます。ただし、保持されるログの量には上限があります。したがって、探しているパッケージがかなり前にインストールされていた場合は、見つからない可能性があります。詳細はこちら

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    

1
あなたが知りたい場合はパッケージがインストールまたはアップグレードされたときにzcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
クリス・グッド

@ChrisGood:コメントをスマートクォートなしで再入力できるので、コピー/貼り付けが可能ですか?
ダンダスカレスク

1
それを指摘してくれてありがとう。正しい二重引用符付き:zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep "\ install \ | \ upgrade \"
クリスグッド

12

はい、できます。実際、それはかなり明白なコマンドです。aptitudeがインストールされていると仮定すると、ターミナルウィンドウの広告タイプを開くことができます:

aptitude why package

その特定のパッケージに依存するパッケージのリストが表示されます。手動でインストールされたパッケージの場合、「パッケージをインストールする理由を見つけることができませんでした」などのメッセージが表示されます。


5

に依存しない簡単な方法は次のaptitudeとおりです。10.10はデフォルトではもう出荷されていません。

グラフィカルに

Synapticを開き、削除してみます。

他のパッケージを削除するように求めるダイアログがポップアップ表示される場合、それらは(再帰的に)それに依存しているパッケージです。

ターミナルから

apt-get remove package_name_goes_here -s

繰り返しますが、結果として削除されるパッケージはすべて(再帰的に)そのパッケージに依存します。(-sパラメーターはapt-get、実際にパッケージを削除しないように指示します。)


2
パッケージと依存関係が誤ってクリックされた場合、実際にパッケージとすべての依存関係を削除する可能性があるため、これは危険なソリューションです。
ImaginaryRobots

1
@ImaginaryRobots、それは多くのミスクリックです。(最初のダイアログで[OK]をクリックし、次に[適用]、確認ダイアログでもう一度[OK]をクリックする必要があります。)ターミナルバージョンのy/N場合、タイプミスに対する追加の確認要求もあります-s。ただし、警告を追加しました。
badp

1
-1。この情報は、パッケージのプロパティを表示するときに、Synapticの[依存関係]タブで利用できます。
アレクサンダー

@alexが正しくありません-そのダイアログは、そのパッケージが手動でインストールされたか自動でインストールされたかを通知しません。PS:受信トレイカウンターのリセット。
badp

@badpいいえ。ただし、その情報はメイン画面の「インストール済み(手動)」ステータスフィルタで確認でき、パッケージを選択するとパッケージメニューに表示されます。
アレクサンダーパス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.