パッケージのリストをダウンロード/インストールすることと、各パッケージを個別にダウンロードすることの間に違いはありますか?

パッケージのリストをダウンロード/インストールすることと、各パッケージを個別にダウンロードすることの間に違いはありますか?

開発パッケージのリスト(例:pkgs="python3.5-dev python3-tk")が与えられた場合、

sudo apt-get install $pkgs 

for p in $pkgs; do sudo apt-get install $p; done

私が尋ねているのは主に依存関係-トポソート関連する、つまり、どちらの方法でも異なるパッケージがダウンロードされインストールされるかどうか

答え1

はい、依存関係を満たすために異なるパッケージを選択できます。指定する1つのコマンドを実行するいいえインストールするパッケージは、実行した場合とは異なる効果をもたらすことがありますいいえ実際に指定されるパッケージがそれぞれ同じであっても、インストールするパッケージをそれぞれ 1 つ指定するコマンド。

メイン実用的違いはおそらくカレルは説明したただし、依存関係の解決が異なるため、すべての操作が成功した場合でも、効果が異なる場合があります。

理由はあなたが大まかに推測したとおりです:

私が尋ねているのは主に依存関係-トポソート関連している

より具体的には、依存関係を満たす選択肢が複数存在する可能性があるためにこれが発生します。

要約説明

パッケージをインストールしたいとしますa、これは仮想パッケージ v、 そしてvパッケージで満足できるbまたはパッケージc他の方法はありません。b依存しないcc依存しないb、これらのパッケージはまだインストールされていません。ここで、次を実行するとします。

sudo apt-get install a

次にAPTはbまたはc依存関係を満たすために、どちらを選択するかは、インストールされているパッケージ、利用可能なパッケージ、使用している APT のバージョン、および APT の設定によって影響を受ける計算の結果です。ただし、これらすべての条件が同じであれば、毎回同じ決定が下されます。

仮定する一般性を失うことなくそれが選ぶb。 それからaそしてbがインストールされています。次に以下を実行するとします。

sudo apt-get install c

その後、ab、 そしてcすべてインストールされています。つまり、以下を実行した結果、3 つのパッケージがすべてインストールされました。

sudo apt-get install a
sudo apt-get install c

対照的にでは、これらの代わりに次のコマンドを実行するとします。

sudo apt-get install a c

それから、aの依存性v満たされるcbインストールされていません。つまり、aそしてc、 だがしかしbは、以下を実行した結果としてインストールされます。

sudo apt-get install a c

具体的な例

aptまたは をオプションapt-get付きで実行すると、その具体的な例を見つけることができます。このオプションを使用すると、アクションを実行するのではなく、シミュレートします。( /-sだけでは完全に確認できないことに注意してください。前の/コマンドは後のコマンドに影響を与えません。後のコマンドはシミュレーションに過ぎず、何も影響しません。)apt-get -sapt -sapt-get -sapt -s

sudo apt-get install jeditUbuntu 16.04 LTS システムで実行すると、いくつかの OpenJDK 8 パッケージがインストールされます。

ek@Io:~$ apt -s install jedit
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 additional packages will be installed:
  ca-certificates-java default-jre default-jre-headless java-common java-wrappers openjdk-8-jre openjdk-8-jre-headless
Suggested packages:
  default-java-plugin icedtea-8-plugin fonts-wqy-zenhei fonts-indic
The following NEW packages will be installed:
  ca-certificates-java default-jre default-jre-headless java-common java-wrappers jedit openjdk-8-jre
  openjdk-8-jre-headless
0 upgraded, 8 newly installed, 0 to remove and 11 not upgraded.
Inst java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Inst ca-certificates-java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all]) []
Inst java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all]) []
Inst openjdk-8-jre-headless (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [amd64])
Inst default-jre-headless (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [amd64])
Inst openjdk-8-jre (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [amd64])
Inst default-jre (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [amd64])
Inst jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])
Conf java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Conf java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all])
Conf ca-certificates-java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all])
Conf openjdk-8-jre-headless (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [amd64])
Conf default-jre-headless (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [amd64])
Conf openjdk-8-jre (8u222-b10-1ubuntu1~16.04.1 Ubuntu:16.04/xenial-updates, Ubuntu:16.04/xenial-security [amd64])
Conf default-jre (2:1.8-56ubuntu2 Ubuntu:16.04/xenial [amd64])
Conf jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])

を実行してAPT にjeditと の両方をインストールするように指示した場合、の Java ランタイムへの依存関係は OpenJDK 9 パッケージによって満たされるため、OpenJDK 8 パッケージはインストールされません。openjdk-9-jresudo apt-get install jedit openjdk-9-jrejedit

ek@Io:~$ apt -s install jedit openjdk-9-jre
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 additional packages will be installed:
  ca-certificates-java java-common java-wrappers libatk-wrapper-java libatk-wrapper-java-jni openjdk-9-jre-headless
Suggested packages:
  default-jre icedtea-8-plugin fonts-indic
The following NEW packages will be installed:
  ca-certificates-java java-common java-wrappers jedit libatk-wrapper-java libatk-wrapper-java-jni openjdk-9-jre
  openjdk-9-jre-headless
0 upgraded, 8 newly installed, 0 to remove and 11 not upgraded.
Inst java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Inst ca-certificates-java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all]) []
Inst java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all]) []
Inst openjdk-9-jre-headless (9~b114-0ubuntu1 Ubuntu:16.04/xenial [amd64])
Inst libatk-wrapper-java (0.33.3-6 Ubuntu:16.04/xenial [all])
Inst libatk-wrapper-java-jni (0.33.3-6 Ubuntu:16.04/xenial [amd64])
Inst openjdk-9-jre (9~b114-0ubuntu1 Ubuntu:16.04/xenial [amd64])
Inst jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])
Conf java-wrappers (0.1.28 Ubuntu:16.04/xenial [all])
Conf java-common (0.56ubuntu2 Ubuntu:16.04/xenial [all])
Conf ca-certificates-java (20160321ubuntu1 Ubuntu:16.04/xenial-updates [all])
Conf openjdk-9-jre-headless (9~b114-0ubuntu1 Ubuntu:16.04/xenial [amd64])
Conf libatk-wrapper-java (0.33.3-6 Ubuntu:16.04/xenial [all])
Conf libatk-wrapper-java-jni (0.33.3-6 Ubuntu:16.04/xenial [amd64])
Conf openjdk-9-jre (9~b114-0ubuntu1 Ubuntu:16.04/xenial [amd64])
Conf jedit (5.3.0+dfsg-1 Ubuntu:16.04/xenial [all])

2 つの別々のコマンドjeditをその順序でインストールして発行すると、OpenJDK 8 と OpenJDK 9 の両方のパッケージが取得されます。openjdk-9-jresudo apt-get install

答え2

非常に長いパッケージ リストの 1 つでもインストールできない場合、コマンドの実行は停止し、エラー メッセージが表示されます。また、パッケージの中には、正常にインストールするためにターミナルで対話型のユーザー入力を必要とするものもあるため、長いパッケージ リストを 1 回のバッチでインストールするのは面倒な場合があります。ユーザー入力を間違えると、インストール プロセス全体を最初からやり直す必要があります。

最初の長いパッケージ リストを 25 ~ 40 個のグループに分割し、apt を使用して一度に 1 つのグループずつパッケージをインストールしない限り、コマンドを最後まで正常に実行することは困難です。これにはそれほど時間はかかりませんし、すべてのパッケージのインストールの管理も容易になります。

もう 1 つだけ覚えておいてください。は実行中にsudo apt install管理ディレクトリ ( /var/lib/dpkg/) をロックするため、apt が完全に処理を終了するまで、ルート権限を必要とする他のプロセスを実行しないでください。たとえば、ターミナルから apt を使用してパッケージをインストールする場合、apt が処理を終了するまで、ターミナルから新しいタブまたはウィンドウで他の snap パッケージをインストールしないでください。

関連情報