UbuntuおよびDebianパッケージ管理の基本事項

前書き

パッケージ管理は、Linuxシステムが提供する基本的な利点の1つです。 パッケージング形式とパッケージ管理ツールは配布ごとに異なりますが、2つの一般的なファミリが最も一般的です。

RHELベースのディストリビューションでは、RPMパッケージ形式と、「+ rpm 」や「 yum 」などのパッケージツールが一般的です。 Debian、Ubuntu、および関連するディストリビューションで使用されるもう1つの主要なファミリは、 ` .deb `パッケージング形式と ` apt `や ` dpkg +`などのツールを使用します。 この後者のグループは、このガイドで説明するファミリーです。

この虎の巻スタイルのガイドでは、システム管理者がDebianおよびUbuntuシステムで使用する最も一般的なパッケージ管理ツールのいくつかを取り上げます。 これは、これらのシステム内でパッケージ管理タスクを実行する方法を知る必要がある場合のクイックリファレンスとして使用できます。

このガイドの使用方法

このガイドでは、DebianおよびUbuntuシステムでよく使用されるユーザーレベルのパッケージ管理ツールについて説明します。 パッケージの作成に必要なツールについては説明しません。これは、さまざまなディストリビューションと、自明ではない例に伴う複雑さの間のポリシーに関する見解が異なるためです。

Debianパッケージ管理ツールの概要で各共通ツールについて個別に説明しますが、このガイドの大部分はツールではなく機能ごとにまとめられます。 このガイドは機能的なリファレンスとして概念化されているため、この構成はより理にかなっています。

このガイドを最大限に活用するには、次の点に留意してください。

  • パッケージ管理ツールのDebianファミリに不慣れな場合は、以下のDebianパッケージ管理ツールの概要セクションをお読みください。 これにより、各ツールの目的とその関連性の大まかな概要がわかります。

  • 目的の効果を得るには、このガイドの各セクションを使用する必要があります。 これは手続き型ではないため、現時点で最も関連性の高いものに自由にジャンプしてください。

  • このページの左側にある[コンテンツ]メニュー(ページ幅が広い場合)またはブラウザの検索機能を使用して、必要なセクションを見つけます。

  • 指定されたコマンドラインの例をコピーして貼り付け、 `++`の値を独自の値に置き換えます。

Debianパッケージ管理ツールの概要

Debian / Ubuntuエコシステムは、システム上のソフトウェアを管理するために、かなり多くの異なるパッケージ管理ツールを採用しています。

これらのツールのほとんどは相互に関連しており、同じパッケージデータベースで動作します。 これらのツールの中には、パッケージングシステムに高レベルのインターフェースを提供しようとするものもあれば、低レベルの機能を提供することに集中しているものもあります。

アプトゲット

+ apt-get`コマンドは、おそらくパッケージツールの + apt`スイートの中で最も頻繁に使用されるメンバーです。 その主な目的は、ディストリビューションのパッケージングチームが管理するリモートリポジトリとのインターフェースをとり、利用可能なパッケージに対してアクションを実行することです。

一般的な機能である `+ apt `スイートは、リモートリポジトリからローカルシステムで維持されているキャッシュに情報をプルすることによって機能します。 ローカルキャッシュを更新するには、 ` apt-get`コマンドを使用します。 また、パッケージの状態を変更するためにも使用されます。つまり、システムにパッケージをインストールまたは削除します。

一般的に、 `+ apt-get +`はローカルキャッシュを更新し、ライブシステムに変更を加えるために使用されます。

apt-cache

+ apt`スイートのもう1つの重要なメンバーは + apt-cache`です。 このユーティリティは、ローカルキャッシュを使用して、利用可能なパッケージとそのプロパティに関する情報を照会します。

たとえば、特定の機能を実行する特定のパッケージまたはツールを検索したいときはいつでも、 `+ apt-cache `を開始するのに適した場所です。 また、プロシージャが対象とするパッケージの正確なバージョンについての情報も得られます。 依存関係と逆依存関係の情報は、「 apt-cache」が役立つ別の領域です。

適性

`+ aptitude +`コマンドは、上記の2つのコマンドの機能の多くを組み合わせています。 上記の2つのツールの機能を組み合わせたコマンドラインツールとして動作するという利点があり、ncursesテキストベースのメニューインターフェイスを使用して動作することもできます。

コマンドラインから操作する場合、ほとんどのコマンドは `+ apt-get `と ` apt-cache `の機能を正確に反映します。 この重複のため、このガイドでは「 aptitude 」について詳しく説明しません。 このツールを好む場合は、多くの場合、「 apt-get」または「+ apt-cache」の代わりに「+ aptitude」を使用できます。

Dpkg

以前のツールはリポジトリで管理されているパッケージの管理に焦点を合わせていましたが、 `+ dpkg `コマンドを使用して個々の ` .deb `パッケージを操作することもできます。 ` dpkg +`ツールは、実際には、上記のコマンドのほとんどの舞台裏作業を担当します。

`+ apt-* `コマンドとは異なり、 ` dpkg `には依存関係を自動的に解決する機能がありません。 主な機能は、 ` .deb +`パッケージを直接簡単に操作できることと、パッケージを分析してその構造について詳しく調べることができることです。 システムにインストールされているパッケージに関する情報を収集できますが、主な目的は個々のパッケージレベルです。

Tasksel

`+ tasksel `プログラムは、ソフトウェアを管理するための異なるタイプのツールです。 個々のパッケージやアプリケーションを管理する代わりに、「 tasksel +」は特定の「タスク」を達成するために必要なソフトウェアをグループ化することに焦点を当てています。

組織化されたタスクは、テキストベースのインターフェースを使用して選択することも、従来のパッケージツールでパッケージをターゲットにするのと同じようにターゲットにすることもできます。 最も外科的なアプローチではありませんが、すぐに立ち上がって実行するのに非常に役立ちます。

その他

さまざまな機能を提供したり、さまざまな方法で情報を提示したりできるパッケージ管理ツールは他にもたくさんあります。 これらについては必要に応じてのみ触れますが、特定の状況では非常に役立ちます。

このカテゴリに分類されるツールには、「+ apt-file 」、「 dselect 」、および「 gdebi +」があります。

パッケージキャッシュとシステムの更新

DebianおよびUbuntuパッケージ管理ツールは、システムの利用可能なパッケージのリストを最新の状態に保つ優れた方法を提供します。 また、サーバーに現在インストールされているパッケージを更新する簡単な方法も提供します。

ローカルパッケージキャッシュの更新

パッケージツールがパッケージ情報に依存しているリモートリポジトリは、常に更新されます。 ただし、パッケージ管理ツールの大部分は、この情報のローカルキャッシュで動作します。

通常、他のパッケージコマンドを実行する前に、セッションごとにローカルパッケージキャッシュを更新することをお勧めします。 これにより、使用可能なソフトウェアに関する最新の情報を確実に操作できます。 さらに重要なことに、古いパッケージ情報で操作している場合、一部のインストールコマンドは失敗します。

ローカルキャッシュを更新するには、 `+ apt-get `コマンドと ` update +`サブコマンドを使用します。

sudo apt-get update

これにより、追跡しているリポジトリで利用可能なパッケージの更新されたリストがプルダウンされます。

パッケージを削除せずにパッケージを更新する

`+ apt +`パッケージスイートを使用すると、サーバーにインストールされているすべてのソフトウェアを最新の状態に保つことが簡単になります。

`+ apt `コマンドは、2つの異なる更新手順を区別します。 最初の更新手順(このセクションで説明)は、コンポーネントの削除を必要としないコンポーネントをアップグレードするために使用できます。 必要に応じて、コンポーネントを削除および交換するために「 apt +」を更新および許可する方法については、以下のセクションを参照してください。

これは、どのような状況でもインストール済みパッケージを削除したくない場合に非常に重要です。 ただし、一部の更新には、システムコンポーネントの交換または競合するファイルの削除が含まれます。 この手順では、パッケージの削除が必要な更新は無視されます。

sudo apt-get upgrade

このアクションを実行すると、コンポーネントの削除を伴わない更新が適用されます。

パッケージを更新し、必要に応じて削除する

`+ apt +`パッケージスイートを使用すると、サーバーにインストールされているすべてのソフトウェアを最新の状態に保つことが簡単になります。

`+ apt +`コマンドは、2つの異なる更新手順を区別します。 最初の更新手順では、パッケージの削除が必要な更新は無視されます。 これについては、上記のセクションで説明しています。

2番目の手順(このセクションで説明します)は、パッケージの削除が必要なパッケージも含め、すべてのパッケージを更新します。 多くの場合、パッケージの依存関係が変更されるため、これが必要です。

通常、削除されるパッケージはアップグレード手順中に機能的に同等のものに置き換えられるため、これは一般に安全です。 ただし、一部の必須コンポーネントが削除対象としてマークされている場合に備えて、削除するパッケージに注意することをお勧めします。 このアクションを実行するには、次を入力します。

sudo apt-get dist-upgrade

これにより、システム上のすべてのパッケージが更新されます。 これは、最後のアップグレードよりも完全なアップグレード手順です。

パッケージのダウンロードとインストール

パッケージ管理ツールの主な機能の1つは、システムへのパッケージのダウンロードとインストールを容易にすることです。

パッケージを検索

パッケージをダウンロードしてインストールする際の最初のステップは、多くの場合、探しているパッケージをディストリビューションのリポジトリから検索することです。

`+ apt +`コマンドの大部分は、主にローカルマシンで保持されているパッケージ情報のキャッシュで動作します。 これにより、迅速な実行とネットワークトラフィックの削減が可能になります。

パッケージの検索は、情報のパッケージキャッシュを対象とする1つの操作です。 `+ apt-cache search `サブコマンドは、利用可能なパッケージを検索するために必要なツールです。 パッケージを検索する前に、 ` sudo apt-get update +`を使用してローカルキャッシュが最新であることを確認する必要があることに注意してください。

apt-cache search

この手順は情報を照会するだけなので、 `+ sudo +`権限は必要ありません。 実行された検索では、パッケージ名とパッケージの完全な説明が表示されます。

たとえば、「+ htop +」を検索すると、次のような結果が表示されます。

apt-cache search htop
aha - ANSI color to HTML converter
htop - interactive processes viewer
libauthen-oath-perl - Perl module for OATH One Time Passwords

ご覧のように、 `+ htop `という名前のパッケージがありますが、パッケージの完全な説明フィールドに ` htop +`が記載されている他の2つのプログラムもあります(出力の隣の説明は短いだけです)概要)。

リポジトリからパッケージをインストールする

リポジトリと必要な依存関係からパッケージをインストールするには、 `+ apt-get `コマンドと ` install +`サブコマンドを使用できます。

このコマンドの引数は、リポジトリ内でラベル付けされているパッケージ名です。

sudo apt-get install

スペースで区切って、複数のパッケージを一度にインストールできます。

sudo apt-get install

要求したパッケージに追加の依存関係が必要な場合、これらは標準出力に出力され、手順を確認するように求められます。 これは次のようになります。

sudo apt-get install apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
 apache2-data
Suggested packages:
 apache2-doc apache2-suexec-pristine apache2-suexec-custom
 apache2-utils
The following NEW packages will be installed:
 apache2 apache2-data
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 236 kB of archives.
After this operation, 1,163 kB of additional disk space will be used.
Do you want to continue [Y/n]?

ご覧のとおり、インストールターゲットは `+ apache2 `パッケージでしたが、依存関係として ` apache2-data +`パッケージが必要です。 この場合、ENTERまたは「y」を押して続行するか、「n」を入力して操作を中止できます。

リポジトリから特定のパッケージバージョンをインストールする

パッケージの特定のバージョンをインストールする必要がある場合は、次のように、ターゲットにしたいバージョンに等号を付けて提供できます。

sudo apt-get install =

この場合のバージョンは、リポジトリで利用可能なパッケージバージョン番号のいずれかと一致する必要があります。 これは、ディストリビューションで採用されているバージョン管理スキームを利用することを意味します。 「+ apt-cache policy +」と入力すると、利用可能なバージョンを見つけることができます。

パッケージの再構成

多くのパッケージには、インストール完了後に実行されるインストール後の構成スクリプトが含まれています。 多くの場合、管理者が構成を選択するためのプロンプトが含​​まれます。

これらの(および追加の)設定ステップを後で実行する必要がある場合は、 `+ dpkg-reconfigure +`コマンドを使用できます。 このコマンドは、渡されたパッケージを調べ、パッケージ仕様に含まれる構成後のコマンドを再実行します。

sudo dpkg-reconfigure

これにより、インストール時に実行したのと同じ(および多くの場合)プロンプトにアクセスできます。

パッケージアクションのドライランを実行する

多くの場合、実際にコマンドの実行をコミットせずに、プロシージャの副作用を確認する必要があります。 幸いなことに、 `+ apt `を使用すると、 ` -s +`フラグを追加してプロシージャを「シミュレート」できます。

たとえば、パッケージのインストールを選択した場合に何が行われるかを確認するには、次のように入力します。

apt-get install -s

これにより、 `+ -s `フラグを削除した場合に発生するすべての依存関係とシステムへの変更を確認できます。 この利点の1つは、 ` sudo +`を使用せずに、通常root権限を必要とするプロセスの結果を表示できることです。

たとえば、 `+ apache2 +`パッケージでインストールされるものを評価する場合、次のように入力できます。

apt-get install -s apache2
NOTE: This is only a simulation!
     apt-get needs root privileges for real execution.
     Keep also in mind that locking is deactivated,
     so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
 apache2-data
Suggested packages:
 apache2-doc apache2-suexec-pristine apache2-suexec-custom
 apache2-utils
The following NEW packages will be installed:
 apache2 apache2-data
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])
Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

実際のプロセスを完了することなく、インストールされるパッケージとバージョンに関するすべての情報を取得します。

これは、システムのアップグレードなどの他の手順でも機能します。

apt-get -s dist-upgrade

パッケージアクションで承認を求めない

デフォルトでは、 `+ apt +`は多くのプロセスの確認をユーザーに促します。 これには、追加の依存関係を必要とするインストールとパッケージのアップグレードが含まれます。

これらのアップグレードをバイパスし、デフォルトでこれらのプロンプトを受け入れるために、これらの操作を実行するときに `+ -y +`フラグを渡すことができます。

sudo apt-get install -y

これにより、ユーザーからのプロンプトを表示せずにパッケージと依存関係がインストールされます。 これは、アップグレード手順にも使用できます。

sudo apt-get dist-upgrade -y

壊れた依存関係とパッケージを修正する

依存関係またはその他の問題により、インストールが正常に終了しない場合があります。 これが発生する一般的なシナリオの1つは、依存関係を解決しない `+ .deb `パッケージと ` dpkg +`をインストールする場合です。

`+ apt-get `コマンドは、 ` -f +`コマンドを渡すことでこの状況を整理しようとすることができます。

sudo apt-get install -f

これにより、満たされていない依存関係が検索され、依存関係ツリーを修正するためにそれらがインストールされます。 インストールが依存関係の問題について不平を言う場合、これはそれを解決しようとする最初のステップであるはずです。

リポジトリからパッケージをダウンロードする

実際にインストールせずにリポジトリからパッケージをダウンロードすると役立つ場合がある主な例があります。 これを行うには、 + apt-get`の + download`サブコマンドを使用します。

これはファイルをダウンロードするだけで実際のシステムに影響を与えないため、 `+ sudo +`権限は必要ありません。

apt-get download

これにより、指定したパッケージが現在のディレクトリにダウンロードされます。

リポジトリからパッケージソースをダウンロード

`+ apt `は主に ` .deb `パッケージを扱いますが、 ` apt +`ソースリストがその情報で設定されている限り、パッケージのソースファイルを取得することもできます。

パッケージのソースをダウンロードするには、 `+ apt `の ` source.list `ファイルに対応する ` deb-src +`行が必要です。 これを行う方法については、aptリポジトリの追加に関するセクションを参照してください。

ソースリポジトリを構成したら、次のように入力してパッケージのソースをダウンロードできます。

sudo apt-get source

これにより、パッケージファイルが現在のディレクトリにダウンロードされます。 通常、これはパッケージディレクトリ、 `+ dsc +`記述ファイル、およびtar圧縮されたパッケージで構成されます。

ls -F
sublime-text-2.0.2/                 sublime-text_2.0.2-1~webupd8~3.tar.gz
sublime-text_2.0.2-1~webupd8~3.dsc

これは、ディストリビューションのパッケージをさらに変更のベースとして使用する場合に使用できます。

.debパッケージをインストールする

ほとんどのディストリビューションでは、メンテナンスされたリポジトリからソフトウェアをインストールすることを推奨していますが、一部のベンダーは、システムにインストールできる生の `+ .deb +`ファイルを提供しています。

これを行うには、 `+ dpkg `というツールを使用します。 ` dpkg `ツールは主に個々のパッケージを操作するために使用されます。 リポジトリからインストールを実行しようとせず、代わりに現在のディレクトリまたは指定されたパスで ` .deb +`パッケージを探します:

sudo dpkg --install .deb

`+ dpkg +`ツールは依存関係の処理を実装しないことに注意することが重要です。 これは、満たされていない依存関係がある場合、インストールが失敗することを意味します。 幸いなことに、必要な依存関係がマークされているため、リポジトリ内ですべての依存関係が利用できる場合は、後で次のように入力することで簡単に満たすことができます。

sudo apt-get install -f

これにより、 `+ dpkg +`でマークされた依存関係を含む、満たされていない依存関係がインストールされます。

Taskselでソフトウェア「タスク」をインストールする

「タスク」を使用して、関連するソフトウェアの大規模なセットをインストールすることができます。 タスクは、一緒にインストールされると特定の環境をセットアップするパッケージのグループです。 タスクの例には、LAMPサーバー、デスクトップ環境、およびアプリケーションサーバーが含まれます。

システムによっては、デフォルトで `+ tasksel +`パッケージがインストールされていない場合があります。 取得するには、次のように入力できます。

sudo apt-get update
sudo apt-get install tasksel

次のように入力して、さまざまなタスクパッケージグループをインタラクティブに選択できます。

sudo tasksel

これにより、異なるパッケージグループを選択して変更を適用できるインターフェイスが表示されます。

次のように入力して、使用可能なタスクとそのインストール状態のリストを印刷することもできます。

tasksel --list-task

その後、次のように入力して、コマンドラインからタスクをインストールすることを選択できます。

sudo tasksel install

パッケージの削除とファイルの削除

パッケージのインストールとダウンロードの逆の操作は、パッケージマネージャーでも可能です。 このセクションでは、パッケージをアンインストールし、パッケージ操作によって残される可能性のあるファイルをクリーンアップする方法について説明します。

パッケージをアンインストールする

インストールされたパッケージを削除するには、 `+ remove `サブコマンドを ` apt-get +`に与えることができます。 これにより、パッケージがシステムにインストールしたほとんどのファイルが削除されますが、1つの顕著な例外があります。

このコマンドは構成ファイルをそのままにしておくので、後日アプリケーションを再インストールする必要がある場合に構成を使用できます。 これは、パッケージを誤って削除した場合に、カスタマイズした構成ファイルが削除されないことを意味するため、便利です。

この操作を完了するには、アンインストールするパッケージの名前を指定するだけです。

sudo apt-get remove

パッケージは、構成ファイルを除いてアンインストールされます。

パッケージと関連するすべての構成ファイルをアンインストールする

パッケージと、設定ファイルを含むシステムからすべての関連ファイルを削除したい場合、 `+ apt-get `の ` purge +`サブコマンドを使用できます。

上記の `+ remove `コマンドとは異なり、 ` purge +`コマンドはすべてを削除します。 これは、構成ファイルを保存したくない場合、または問題があり、クリーンな状態から開始したい場合に便利です。

構成ファイルを削除すると、元に戻すことができなくなることに注意してください。

sudo apt-get purge

そのパッケージを再インストールする必要がある場合、デフォルトの構成が使用されます。

不要になった自動依存関係を削除する

`+ apt-get remove `または ` apt-get purge +`でシステムからパッケージを削除すると、パッケージターゲットが削除されます。 ただし、インストール要件を満たすために自動的にインストールされた依存関係は残ります。

パッケージに不要になった依存関係としてインストールされたパッケージを自動的に削除するには、 `+ autoremove +`コマンドを使用できます。

sudo apt-get autoremove

削除される依存関係から関連する設定ファイルをすべて削除したい場合は、 +-purge +`オプションを `+ autoremove +`コマンドに追加します。 これは設定ファイルもクリーンアップします。+ purge + `コマンドがターゲットを絞って削除するように:

sudo apt-get --purge autoremove

廃止されたダウンロード済みパッケージファイルの消去

パッケージがディストリビューションのパッケージメンテナーによってリポジトリに追加およびリポジトリから削除されると、一部のパッケージは廃止されます。

+ apt-get`ツールは、 + autoclean`コマンドを使用して、リポジトリから使用できなくなったパッケージに関連付けられているローカルシステム上のパッケージファイルを削除できます。

これにより、サーバー上のスペースが解放され、無駄な情報を保持することから生じる問題なしに、ローカルシステムのキャッシュを最新の状態にできます。

sudo apt-get autoclean

パッケージに関する情報を取得する

各パッケージには、パッケージ管理ツールを使用してアクセスできる大量のメタデータが含まれています。 このセクションでは、利用可能なインストール済みパッケージに関する情報を取得する一般的な方法をいくつか示します。

パッケージに関する情報を表示する

ディストリビューションのリポジトリでパッケージに関する詳細情報を表示するには、 `+ apt-cache `の ` show +`サブコマンドを使用できます。 このコマンドのターゲットは、リポジトリ内のパッケージ名です。

apt-cache show

これにより、問題のパッケージのインストール候補に関する情報が得られます。 各候補には、依存関係、バージョン、アーキテクチャ、競合、実際のパッケージファイル名、パッケージとインストールのサイズ、その他の詳細な説明に関する情報が含まれます。

逆の依存関係の完全なリスト(クエリされたパッケージに依存するパッケージのリスト)など、各候補に関する追加情報を表示するには、代わりに `+ showpkg +`コマンドを使用します。 これには、このパッケージと他のパッケージとの関係に関する多くの情報が含まれます。

apt-cache showpkg

.debパッケージに関する情報を表示

`+ .deb `ファイルの詳細を表示するには、 ` dpkg `コマンドで `-info `フラグを使用できます。 このコマンドのターゲットは ` .deb +`ファイルへのパスでなければなりません:

dpkg --info .deb

これにより、問題のパッケージに関するメタデータが表示されます。 これには、パッケージ名とバージョン、ビルドのアーキテクチャ、必要なサイズと依存関係、説明と競合が含まれます。

依存関係と逆依存関係を表示する

依存関係(このパッケージが依存するパッケージ)と逆の依存関係(このパッケージに依存するパッケージ)を具体的にリストするには、 `+ apt-cache +`ユーティリティを使用できます。

従来の依存情報については、 `+ depends +`サブコマンドを使用できます:

apt-cache depends

これにより、ハード依存関係、提案、推奨、または競合としてリストされているすべてのパッケージに関する情報が表示されます。

特定のパッケージに依存しているパッケージを見つける必要がある場合、そのパッケージを `+ rdepends +`サブコマンドに渡すことができます。

apt-cache rdepends

インストール済みおよび利用可能なパッケージバージョンを表示

多くの場合、リポジトリ内にはパッケージの複数のバージョンがあり、単一のデフォルトパッケージがあります。 パッケージの利用可能なバージョンを確認するには、 `+ policy `サブコマンドを使用して ` apt-cache +`を使用します。

apt-cache policy

これにより、インストールされているバージョン(存在する場合)、インストールコマンドでバージョンを指定しない場合にデフォルトでインストールされる候補、および各バージョンの優先度を示す重み付きのパッケージバージョンの表が表示されます。

これを使用して、インストールするバージョンと使用可能な代替バージョンを決定できます。 これには、各バージョンが存在するリポジトリもリストされるため、追加のリポジトリまたはPPAがデフォルトリポジトリのパッケージを置き換えるかどうかを判断するために使用できます。

dpkg -lを使用してインストール済みパッケージを表示する

システムにインストールされているパッケージを表示するには、希望する出力の形式と詳細度に応じて、いくつかのオプションがあります。

最初の方法は、「-dpkg」または「 dpkg-query」コマンドと「+ -l +」を使用することです。 これらのコマンドの両方からの出力は同じです。 引数なしで、システムにインストールされたすべてのパッケージまたは部分的にインストールされたパッケージのリストを提供します。 出力は次のようになります。

dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                        Version                                 Architecture Description
+++-===========================================-=======================================-============-=====================================================================================================================
ii  account-plugin-generic-oauth                0.10bzr13.03.26-0ubuntu1.1              amd64        GNOME Control Center account plugin for single signon - generic OAuth
ii  accountsservice                             0.6.34-0ubuntu6                         amd64        query and manipulate user account information
ii  acl                                         2.2.52-1                                amd64        Access control list utilities
ii  acpi-support                                0.142                                   amd64        scripts for handling many ACPI events
ii  acpid                                       1:2.0.18-1ubuntu2                       amd64        Advanced Configuration and Power Interface event daemon
. . .

出力は、システム上のすべてのパッケージに対して継続されます。 出力の上部で、各行の最初の3文字の意味を確認できます。 最初の文字は、パッケージの望ましい状態を示します。 かもね:

  • * u *:不明

  • * i *:インストール済み

  • * r *:削除されました

  • * p *:パージ済み

  • * h *:保持されているバージョン

2番目の文字は、パッケージングシステムで認識されているパッケージの実際のステータスを示します。 次のいずれかです。

  • * n *:インストールされていません

  • * i *:インストール済み

  • * c *:構成ファイルは存在しますが、アプリケーションはアンインストールされます。

  • * u *:開梱。 ファイルは解凍されますが、まだ構成されていません。

  • * f *:パッケージは半分インストールされています。つまり、インストールの途中で障害が発生し、操作が停止しました。

  • * w *:パッケージは別のパッケージからのトリガーを待機しています

  • * p *:パッケージは別のパッケージによってトリガーされました。

3番目の文字は、ほとんどのパッケージでは単に空白スペースになりますが、他の潜在的なオプションは1つだけです。

  • * r *:これは、再インストールが必要であることを示します。 これは通常、パッケージが壊れていて機能していない状態であることを意味します。

残りの列には、パッケージ名、バージョン、アーキテクチャ、および説明が含まれています。

フィルターされたパッケージのインストール状態を表示する

`+ -l `パターンの後に検索パターンを追加すると、 ` dpkg +`はそのパターンを含むすべてのパッケージ(インストールされているかどうかに関係なく)をリストします。 たとえば、ここでYAML処理ライブラリを検索できます。

dpkg -l libyaml*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name            Version      Architecture Description
+++-===============-============-============-===================================
ii  libyaml-0-2:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
ii  libyaml-dev:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
un  libyaml-perl    <none>                    (no description available)
un  libyaml-syck-pe <none>                    (no description available)
ii  libyaml-tiny-pe 1.51-2       all          Perl module for reading and writing

最初の列からわかるように、3番目と4番目の結果はインストールされていません。 これにより、パターンに一致するすべてのパッケージ、および現在の状態と目的の状態が得られます。

dpkg –get-selectionsを使用してインストール済みパッケージを表示する

システムにインストールされているパッケージをレンダリングする別の方法は、 `-get-selections +`フラグと ` dpkg +`を使用することです。

これにより、インストールまたは削除されたがパージされていないすべてのパッケージのリストが表示されます。

dpkg --get-selections

これら2つの状態を区別するために、 `+ awk +`を使用して状態ごとにフィルタリングできます。 インストール済みパッケージのみを表示するには、次を入力します。

dpkg --get-selections | awk '$2 ~ /^install/'

構成ファイルがパージされていない削除済みパッケージのリストを取得するには、代わりに次のように入力できます。

dpkg --get-selections | awk '$2 !~ /^install/'

インストール済みパッケージを検索

特定のパッケージのインストール済みパッケージベースを検索するには、 `+-get-selections +`オプションの後にパッケージフィルター文字列を追加できます。 ワイルドカードを使用して一致させることができます。 繰り返しますが、これはインストールされているか、システムにまだ構成ファイルがあるパッケージを表示します:

dpkg --get-selections libz*

もう一度、最後のセクションの `+ awk +`式を使用してフィルタリングできます。

パッケージによってインストールされたファイルを一覧表示する

パッケージが担当しているファイルを見つけるには、 `+ dpkg `コマンドで ` -L +`フラグを使用できます。

dpkg -L

これにより、パッケージによって制御される各ファイルの絶対パスが出力されます。 これには、パッケージ内のプロセスによって生成される構成ファイルは含まれません。

ロケーションにインストールするパッケージを検索する

ファイルシステム内の特定のファイルを担当するパッケージを見つけるには、 `+ -S `フラグを付けて絶対パスを ` dpkg +`コマンドに渡すことができます。

これにより、問題のファイルをインストールしたパッケージが出力されます。

dpkg -S

インストール後のスクリプトによって所定の場所に移動されたファイルは、この手法ではパッケージに結び付けられないことに注意してください。

インストールせずにファイルを提供するパッケージを見つける

`+ dpkg `を使用すると、 ` -S +`オプションを使用してファイルを所有しているパッケージを簡単に見つけることができます。 ただし、関連するパッケージがインストールされていない場合でも、どのパッケージがファイルまたはコマンドを提供するかを知る必要がある場合があります。

そのためには、 `+ apt-file`というユーティリティをインストールする必要があります。 これにより、データベース内のパッケージによって制御されるすべてのファイルのインストールパスを含む、独自の情報データベースが維持されます。

次を入力してユーティリティをインストールします。

sudo apt-get update
sudo apt-get install apt-file

次に、ツールのデータベースを更新し、次のように入力してファイルを検索します。

sudo apt-file update
sudo apt-file search

これは、パッケージによって直接インストールされるファイルの場所でのみ機能します。 インストール後スクリプトを介して作成されたファイルは見つかりません。

システム間でパッケージリストを転送する

多くの場合、1つのシステムからインストール済みパッケージのリストをバックアップし、それを使用して同じシステムのパッケージを別のシステムにインストールすることができます。 これは、バックアップの目的にも役立ちます。 このセクションでは、パッケージリストをエクスポートおよびインポートする方法を示します。

パッケージリストのエクスポート

あるシステムにインストールされているパッケージのセットを別のシステムに複製する必要がある場合は、まずパッケージリストをエクスポートする必要があります。

`+ dpkg --get-selections +`の出力をパイピングすることにより、インストール済みパッケージのリストを後でインポートするために必要な形式でファイルにエクスポートできます。

dpkg --get-selections > ~/packagelist.txt

その後、このリストを2番目のマシンにコピーしてインポートできます。

また、ソースリストと信頼できるキーリストをバックアップすることもできます。 必要なファイルを含むディレクトリを作成し、それらをコピーすることにより、ソースをバックアップできます。

mkdir ~/sources
cp -R /etc/apt/sources.list* ~/sources

信頼できるキーは、次のように入力してバックアップできます。

apt-key exportall > ~/trusted_keys.txt

これで、 + packagelist.txt +`ファイル、 `+ source`ディレクトリ、および + trusted keys.txt`ファイルを別のコンピューターに転送してインポートできます。

パッケージリストのインポート

上記のように `+ dpkg --get-selections `を使用してパッケージリストを作成した場合、 ` dpkg +`コマンドを使用して別のコンピューターにパッケージをインポートすることもできます。

最初に、信頼できるキーを追加し、最初のコンピューターからコピーしたソースリストを実装する必要があります。 バックアップしたすべてのデータが新しいコンピューターのホームディレクトリにコピーされたと仮定すると、次のように入力できます。

sudo apt-key add ~/trusted_keys.txt
sudo cp -R ~sources/* /etc/apt/

次に、新しいコンピューターからすべての必須でな​​いパッケージの状態をクリアします。 これにより、変更をクリーンスレートに確実に適用できます。 これは、rootアカウントまたは `+ sudo +`権限で実行する必要があります。

sudo dpkg --clear-selections

これにより、必須ではないすべてのパッケージが削除対象としてマークされます。 ローカルパッケージリストを更新して、インストールするすべてのソフトウェアのレコードがインストールに含まれるようにします。 実際のインストールおよびアップグレード手順は、「+ dselect +」というツールで処理されます。

`+ dselect +`ツールがインストールされていることを確認する必要があります。 このツールは独自のデータベースを維持するため、続行する前にそれも更新する必要があります。

sudo apt-get update
sudo apt-get install dselect
sudo dselect update

次に、現在のリストの上にパッケージリストを適用して、保持またはダウンロードするパッケージを構成できます。

sudo dpkg --set-selections < packagelist.txt

これにより、必要なパッケージ状態が設定されます。 変更を適用するには、「+ select-upgrade of」を実行します。これは「+ apt-get」サブコマンドです。

sudo apt-get dselect-upgrade

これにより、必要なパッケージがダウンロードおよびインストールされます。 また、選択解除のマークが付いているパッケージも削除されます。 最終的には、構成ファイルをコピーまたは変更する必要がありますが、パッケージリストは前のコンピューターのものと一致する必要があります。

リポジトリとPPAの追加

ほとんどのディストリビューションで提供されるデフォルトのリポジトリセットには、ほとんどのユーザーにとって十分なパッケージが含まれていますが、追加のソースが役立つ場合があります。 このセクションでは、追加のソースを参照するためにパッケージツールを設定する方法について説明します。

PPAを追加

従来のリポジトリに代わるものは、PPA、または個人用パッケージアーカイブです。 この記事の執筆時点では、PPAはUbuntuシステムでのみ利用可能です。 通常、PPAの範囲はリポジトリよりも小さく、PPA所有者が管理するアプリケーションの集中セットが含まれます。

システムにPPAを追加すると、PPAに含まれるパッケージを通常のパッケージ管理ツールで管理できます。 これを使用して、ディストリビューションのリポジトリに含まれていない最新のパッケージを提供できます。 非標準のメンテナーがシステム用のパッケージをビルドできるようにするため、信頼できるPPAのみを追加するよう注意してください。

PPAを追加するには、 `+ add-apt-repository`コマンドを使用できます。 ターゲットには、ラベル「+ ppa:+」と、それに続くhttps://launchpad.net/ubuntu/+ppas[Launchpad]のPPA所有者の名前、スラッシュ、およびPPA名を含める必要があります。

sudo add-apt-repository ppa:/

パッケージャーのキーを受け入れるように求められる場合があります。 その後、PPAがシステムに追加され、通常の `+ apt +`コマンドでパッケージをインストールできます。 パッケージを検索またはインストールする前に、新しいPPAに関する情報でローカルキャッシュを更新してください。

sudo apt-get update

リポジトリを追加する

UbuntuまたはDebianシステムにリポジトリを追加するには、2つの異なるアプローチを使用できます。

1つ目は、ソースリストを直接編集することです。 + / etc / apt / sources.list`ファイルを編集するか、 + / etc / apt / sources.list.d`ディレクトリに新しいリストを配置できます。 この後者のルートを使用する場合、作成するファイル名は `+ .list +`で終わる必要があります。

sudo nano /etc/apt/sources.list.d/.list

ファイル内で、次の形式を使用して新しいリポジトリの場所を追加できます。

リポジトリ仕様の異なる部分は次のとおりです。

  • * deb または deb-src *:これはリポジトリのタイプを識別します。 従来のリポジトリは「+ deb 」でマークされますが、ソースリポジトリは「 deb-src +」で始まります。

  • * url *:リポジトリのメインURL。 これは、リポジトリが見つかる場所でなければなりません。

  • リリースコード名またはスイート:通常、これはディストリビューションのリリースのコード名ですが、ディストリビューションのバージョン用に作成された特定のパッケージセットを識別するために使用される任意の名前にすることができます。

  • コンポーネント名:使用可能にするパッケージの選択のラベル。 これは、多くの場合、リポジトリメンテナが提供する区別であり、リポジトリメンテナに含まれるソフトウェアの信頼性またはライセンスの制限について説明します。

これらの行をファイル内に追加できます。 ほとんどのリポジトリには、使用すべき正確な形式に関する情報が含まれています。

これを達成する2番目の方法は、 `+ add-apt-repository`コマンドを使用することです。 通常、これはUbuntuにデフォルトで含まれています。Debianの場合、 `+ software-properties-common +`パッケージでインストールできます。

sudo apt-get update
sudo apt-get install software-properties-common

その後、追加したい行を `+ add-apt-repository`コマンドに提供できます。 これらは、手動で追加する場合と同じ形式にする必要があります。

sudo add-apt-repository 'deb   '

システムが新しく利用可能なパッケージを認識できるように、リポジトリの更新を適用した後、ローカルパッケージキャッシュを更新してください。

sudo apt-get update

結論

他にも多くのパッケージ管理操作を実行できますが、ここでは最も一般的な手順をカバーしようとしました。 他にお気に入りがある場合は、下のコメントセクションを使用してお知らせください。