패키지 목록을 다운로드/설치하는 것과 각 패키지를 자체적으로 다운로드하는 것에는 차이가 있나요?

패키지 목록을 다운로드/설치하는 것과 각 패키지를 자체적으로 다운로드하는 것에는 차이가 있나요?

개발 패키지 목록(예: pkgs="python3.5-dev python3-tk")이 주어지면 실행 사이에 차이가 있습니까?

sudo apt-get install $pkgs 

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

주로 물어보는데종속성-topo-정렬관련, 즉 어떤 방식으로든 다른 패키지를 다운로드하고 설치합니까?

답변1

예, 종속성을 충족하기 위해 다른 패키지를 선택할 수 있습니다.다음을 지정하는 1개의 명령 실행N설치할 패키지는 때때로 실행과 다른 효과를 갖습니다.N지정된 실제 패키지가 각 경우에 동일한 경우에도 각각 설치할 패키지 1개를 지정하는 명령입니다.

주요현실적인차이점은 아마도 하나일 것이다카렐이 설명했다.그러나 종속성 해결이 다르기 때문에 모든 작업이 성공하더라도 효과가 다를 수 있습니다.

그 이유는 대략적으로 추측한 대로입니다.

주로 물어보는데종속성-topo-정렬관련된

더 구체적으로 말하면 종속성을 충족하는 대안이 두 개 이상 있을 수 있기 때문에 이런 일이 발생합니다.

추상적인 설명

패키지를 설치하고 싶다고 가정하십시오.a, 이는가상 패키지 v, 그리고v패키지로 만족할 수 있습니다b또는 패키지c그리고 다른 방법은 없습니다. 가정하다b의존하지 않는다c,c의존하지 않는다b, 해당 패키지 중 어느 것도 이미 설치되어 있지 않습니다. 이제 다음을 실행한다고 가정해 보겠습니다.

sudo apt-get install a

그런 다음 APT가 선택합니다.b또는c의존성을 만족시키기 위해. 어느 것을 선택하느냐는 귀하가 설치한 패키지, 사용 가능한 패키지, 사용 중인 APT 버전 및 구성 방법에 따라 영향을 받을 수 있는 계산 결과입니다. 그러나 이 모든 조건이 동일하다면 매번 동일한 결정이 내려질 것입니다.

가정하다일반성을 잃지 않고그게 골라준다고b. 그 다음에a그리고b설치되어 있습니다. 그런 다음 다음을 실행한다고 가정합니다.

sudo apt-get install c

이후,a,b, 그리고c모두 설치되어 있습니다. 즉, 다음을 실행한 결과 세 가지 패키지가 모두 설치되었습니다.

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-sapt-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])

jeditAPT에 및 openjdk-9-jre를 모두 설치하도록 지시한 경우 sudo apt-get install jedit openjdk-9-jreOpenJDK 8 패키지는 설치되지 않습니다. jeditJava 런타임에 대한 의 종속성은 OpenJDK 9 패키지에 의해 충족되기 때문입니다.

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])

설치 jedit하고 openjdk-9-jre두 개의 별도 sudo apt-get install명령을 해당 순서대로 실행하면 OpenJDK 8 및 OpenJDK 9 패키지가 모두 제공됩니다.

답변2

매우 긴 패키지 목록 중 하나라도 설치할 수 없는 경우 명령 실행이 중지되고 정보 오류 메시지가 인쇄됩니다. 일부 패키지를 성공적으로 설치하려면 터미널에 대화형 사용자 입력이 필요하기 때문에 긴 패키지 목록을 한 번에 설치하는 것도 실망스러울 수 있습니다. 사용자 입력에 실수가 있는 경우 전체 설치 프로세스를 처음부터 다시 시작해야 합니다.

초기의 긴 패키지 목록을 25-40개의 패키지 그룹으로 분할한 다음 한 번에 한 그룹씩 적절한 패키지를 설치하지 않으면 끝까지 명령을 성공적으로 실행하기가 어렵습니다. 이렇게 하면 추가 시간이 많이 걸리지 않으며 모든 패키지 설치를 더 쉽게 관리할 수 있습니다.

한 가지만 더 기억하세요. 실행 중인 sudo apt install관리 디렉터리( /var/lib/dpkg/)를 잠그므로 apt가 처리를 완전히 마칠 때까지 루트 권한이 필요한 다른 프로세스를 실행하지 마세요. 예를 들어 터미널에서 apt를 사용하여 패키지를 설치하는 경우 apt 처리가 완료될 때까지 터미널의 새 탭이나 창에서 다른 스냅 패키지를 설치하려고 시도하지 마세요.

관련 정보