`apt install pkg1 pkg2` は `apt install pkg1 && apt install pkg2` とは異なります。なぜですか?

`apt install pkg1 pkg2` は `apt install pkg1 && apt install pkg2` とは異なります。なぜですか?

両方のパッケージをインストールすると、php7.4がインストールされます。

$ apt install php7.1 php7.1-redis

The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils ifupdown iproute2 isc-dhcp-client isc-dhcp-common libapache2-mod-php7.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libargon2-0 libatm1 libbsd0 libdns-export162 libedit2
  libgdbm3 libisc-export160 liblua5.1-0 libmnl0 libpcre2-8-0 libperl5.22 libsodium23 libssl1.1 libxtables11 netbase perl perl-modules-5.22 php-common php-igbinary php-redis php7.1 php7.1-cli php7.1-common php7.1-json php7.1-opcache
  php7.1-readline php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-phpdbg php7.4-readline psmisc rename ssl-cert tzdata

個別にインストールすると、php7.4はインストールされません。

$ apt install php7.1

The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils ifupdown iproute2 isc-dhcp-client isc-dhcp-common libapache2-mod-php7.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libatm1 libbsd0 libdns-export162 libedit2 libgdbm3
  libisc-export160 liblua5.1-0 libmnl0 libperl5.22 libssl1.1 libxtables11 netbase perl perl-modules-5.22 php-common php7.1 php7.1-cli php7.1-common php7.1-json php7.1-opcache php7.1-readline psmisc rename ssl-cert tzdata

$ apt install php7.1-redis

The following NEW packages will be installed:
  php-igbinary php-redis

なぜ?私はLinuxに初めて触れる人ではありませんが、これらの動作を見たことはありません。

それを試すには、dockerを使用できます。

docker run -it --rm ubuntu:16.04 bash

これらのパッケージには追加のppaが必要なので、次のようになります。

apt update && apt install -y software-properties-common
LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php && apt-get update

これで行く準備ができました。

答え1

apt見逃しやすいメッセージを出力してヒントを提供してください。

ちなみに「php7.1-redis」の代わりに「php-redis」を選択してください。

php7.1-redis存在しないか、むしろダミーパッケージによって提供されますphp-redis。だからapt変えなさい

apt install php7.1 php7.1-redis

到着

apt install php7.1 php-redis

2つのパッケージが同時に要求されると、すべての依存関係がapt考慮され、その場合は仮想交換処理によって中断されます。複数の特定のPHPパッケージで提供されるphp-redis依存関係の選択は、依存関係を満たす評価順序の最初のパッケージです。それも解決しましたが、おそらく接続が異なるため(PHP 7.4提供、PHP 7.1提供)、「依存関係」がついに満たされたことに気づいていませんでした。phpapi-20190902 | phpapi-20180731 | phpapi-20170718 | phpapi-20160303 | phpapi-20151012 | phpapi-20131226aptphp7.4-cliphp7.1phpapiphpapi-20190902phpapi-20160303php7.1php-redis

php-redisインストールされると、要件php7.1phpapi満たされたため、apt何もインストールしようとしません。

関連情報