開発パッケージのリスト(例: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
依存しないc
、c
依存しないb
、これらのパッケージはまだインストールされていません。ここで、次を実行するとします。
sudo apt-get install a
次にAPTはb
またはc
依存関係を満たすために、どちらを選択するかは、インストールされているパッケージ、利用可能なパッケージ、使用している APT のバージョン、および APT の設定によって影響を受ける計算の結果です。ただし、これらすべての条件が同じであれば、毎回同じ決定が下されます。
仮定する一般性を失うことなくそれが選ぶb
。 それからa
そしてb
がインストールされています。次に以下を実行するとします。
sudo apt-get install c
その後、a
、b
、 そしてc
すべてインストールされています。つまり、以下を実行した結果、3 つのパッケージがすべてインストールされました。
sudo apt-get install a
sudo apt-get install c
対照的にでは、これらの代わりに次のコマンドを実行するとします。
sudo apt-get install a c
それから、a
の依存性v
満たされるc
、b
インストールされていません。つまり、a
そしてc
、 だがしかしb
は、以下を実行した結果としてインストールされます。
sudo apt-get install a c
具体的な例
apt
または をオプションapt-get
付きで実行すると、その具体的な例を見つけることができます。このオプションを使用すると、アクションを実行するのではなく、シミュレートします。( /-s
だけでは完全に確認できないことに注意してください。前の/コマンドは後のコマンドに影響を与えません。後のコマンドはシミュレーションに過ぎず、何も影響しません。)apt-get -s
apt -s
apt-get -s
apt -s
sudo apt-get install jedit
Ubuntu 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-jre
sudo apt-get install jedit openjdk-9-jre
jedit
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-jre
sudo apt-get install
答え2
非常に長いパッケージ リストの 1 つでもインストールできない場合、コマンドの実行は停止し、エラー メッセージが表示されます。また、パッケージの中には、正常にインストールするためにターミナルで対話型のユーザー入力を必要とするものもあるため、長いパッケージ リストを 1 回のバッチでインストールするのは面倒な場合があります。ユーザー入力を間違えると、インストール プロセス全体を最初からやり直す必要があります。
最初の長いパッケージ リストを 25 ~ 40 個のグループに分割し、apt を使用して一度に 1 つのグループずつパッケージをインストールしない限り、コマンドを最後まで正常に実行することは困難です。これにはそれほど時間はかかりませんし、すべてのパッケージのインストールの管理も容易になります。
もう 1 つだけ覚えておいてください。は実行中にsudo apt install
管理ディレクトリ ( /var/lib/dpkg/
) をロックするため、apt が完全に処理を終了するまで、ルート権限を必要とする他のプロセスを実行しないでください。たとえば、ターミナルから apt を使用してパッケージをインストールする場合、apt が処理を終了するまで、ターミナルから新しいタブまたはウィンドウで他の snap パッケージをインストールしないでください。