
manual
apt-get을 사용하여 이미 다른 패키지의 종속성으로 설치된 패키지를 실수 로 설치하면 패키지를 auto
.
나중에 sudo apt-mark markauto package-name
.
apt-get(또는 aptitude, dpkg 또는 다른 도구)에게 처음에 링크를 끊지 않도록 하거나 요청한 패키지가 이미 설치된 경우 아무것도 하지 않도록 지시하는 방법이 있습니까?
나는 이것을 몇 가지 다른 방법으로 실행합니다.
특정 작업을 수행하기 위해 설치할 패키지 목록이 있습니다(이와 같은 웹 사이트의 지침에 따라).
한 설치에 추가한 모든 패키지 목록이 있고 이를 복사하여 다른 설치에 모두 추가합니다. 예를 들어 시스템을 업그레이드하는 대신 새로 설치하는 경우입니다.
답변1
당신은 말했다
apt-get을 사용하여 이미 다른 패키지의 종속성으로 설치된 패키지를 실수로 설치하면 패키지를
manual
다음 으로 표시하여 "종속성"을 깨뜨립니다.auto
제 생각에는 당신이 약간 잘못 이해한 것 같습니다. 종속성 체인이 끊어지지 않습니다. 다른 패키지는 여전히 이것에 의존합니다수동으로 표시됨패키지. 영향을 받는 유일한 점은 이제 apt-get autoremove
다음을 실행하면수동으로 표시됨패키지는 제거되지 않습니다. 수동으로 표시된다는 것은 apt
사용자가 의도적으로 해당 패키지를 설치했음을 의미하는 것이지 사용자가 해당 패키지에 의존하는 다른 패키지를 원했기 때문이 아닙니다.
당신은 물었습니다
apt-get(또는 aptitude, dpkg 또는 다른 도구)에게 처음에 링크를 끊지 않도록 하거나 요청한 패키지가 이미 설치된 경우 아무것도 하지 않도록 지시하는 방법이 있습니까?
지금까지 자동으로 수행할 수 있는 도구를 찾지 못했습니다. 하지만 이것도 논리적으로 들리지 않습니다. 왜냐하면 이 경우 설치하는 모든 패키지가 처럼 되어 명령 automatically installed
에 취약해지기 때문 입니다 apt-get autoremove
.
따라서 일부 패키지를 다음과 같이 표시하려면자동으로 설치됨수동으로 설치하더라도 apt-get markauto
또는 를 사용해야 합니다 aptitude mark-auto
.
답변2
기존 도구로 이 작업을 수행할 수 없는 경우 해결 방법은 다음과 같습니다.
다음과 같은 bash 스크립트를 통해 각 패키지를 실행합니다.
#!/bin/bash
dpkg -s "$1" &> /dev/null
(($?)) && sudo apt-get install "$1"
dpkg -s
패키지(스크립트에 인수로 제공됨)가 설치된 경우 0을 반환합니다. 1 그렇지 않은 경우. 이 스크립트는 패키지가 설치된 경우 아무 작업도 수행하지 않지만 그렇지 않은 경우 설치하여 원래 문제를 방지합니다.
이 dpkg
명령은 여기에 필요하지 않은 많은 정보를 출력하므로 /dev/null
이를 제거하기 위해 비트 버킷으로 리디렉션됩니다.
(($?))
의 반환 코드를 살펴봅니다 dpkg
. 일반적인 bash 테스트와 반대되는 C처럼 작동합니다. $?
패키지가 설치되지 않았기 때문에 1인 경우 true로 평가되고 &&
패키지를 설치하라는 절이 트리거됩니다.
필요한 것에 따라 이를 함수로 만들거나 패키지 이름 목록에 대한 루프에 배치할 수 있습니다.
이것이 많이 사용되는 경우 인수 가 $1
null이 아니고 포함된 공백이나 기타 쓰레기가 포함되지 않았는지 확인하는 코드도 추가됩니다. 그러나 이 모든 것은 단지 일반적인 스크립팅일 뿐이며 솔루션 자체의 일부는 아닙니다.
dpkg
기술 을 찾았어요여기.