apt-get 자동 제거에서 패키지를 제외하는 방법은 무엇입니까?


20

제거 apt-get autoremove하려는 고아 패키지 목록에 유지하려는 패키지가 포함되어 있습니다 . 분명히 패키지에 따라 실수로 패키지를 제거했습니다. 패키지를 명시 적으로 원하는 것으로 표시하여 apt-get autoremove제거하지 않도록하려면 어떻게 해야합니까?


그리고 관련 질문 : 왜 전혀 고아가 아닌가?
bluenote10

답변:


29

용도 apt-mark

$ man apt-mark
...
manual
       manual is used to mark a package as being manually installed, which will 
prevent the package from being automatically removed if no other packages 
depend on it.

그래서

sudo apt-mark manual <package-name>

이제 autoremove제거하지 않습니다.

실행 취소

sudo apt-mark auto <package-name>

이제 autoremove패키지가 다른 패키지의 종속성이 아닌 경우 패키지를 제거합니다.


또 다른 유용한 트릭은 다음과 같이 한 번에 많은 패키지를 표시 할 수 있다는 것입니다. sudo apt-mark manual <package1> <package2> <package3> etc
Msencenb

10

몇 가지 Google 시도가 해결책을 제시했습니다 .

명시 적으로 설치하는 것이 가능합니다.

sudo apt-get install <package>

또는 수동으로 설치 한 것으로 표시

sudo apt-mark manual <package>

apt 다시 설치하지 않으면 출력은 다음과 같습니다.

$ sudo apt-get install tmux
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tmux is already the newest version.
tmux set to manually installed.

0

이것은 이미 잘 대답했지만 많은 패키지를 "표시"하고 싶지 않은 상황을 발견했습니다 (및 후에 표시 해제 autoremove).

당신이 패키지 목록 때 원하는 autoremove로 쉽게 정의되고, 당신이 할 수있는 파이프 / sed/ xargs그들을.

많은 패키지의 복잡한 예는 없지만 다음 시나리오가있는 경우 :

root@fptc-rsvrd:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  libluajit-5.1-2 libluajit-5.1-common linux-headers-4.4.0-141 linux-headers-4.4.0-141-generic linux-headers-4.4.0-143 linux-headers-4.4.0-143-generic linux-headers-4.4.0-146 linux-headers-4.4.0-146-generic
  linux-image-4.4.0-141-generic linux-image-4.4.0-143-generic linux-image-4.4.0-146-generic linux-image-extra-4.4.0-141-generic linux-modules-4.4.0-143-generic linux-modules-4.4.0-146-generic
  linux-modules-extra-4.4.0-143-generic linux-modules-extra-4.4.0-146-generic linux-signed-image-4.4.0-141-generic pandoc-data
0 upgraded, 0 newly installed, 18 to remove and 19 not upgraded.
After this operation, 907 MB disk space will be freed.

linux*패키지 만 제거하고 싶습니다 .이 작업을 수행 할 수 있습니다.

root@fptc-rsvrd:~# apt-get autoremove -s | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp'
linux-headers-4.4.0-141-generic
linux-headers-4.4.0-141
linux-headers-4.4.0-143-generic
linux-headers-4.4.0-143
linux-headers-4.4.0-146-generic
linux-headers-4.4.0-146
linux-signed-image-4.4.0-141-generic
linux-image-extra-4.4.0-141-generic
linux-image-4.4.0-141-generic
linux-modules-extra-4.4.0-143-generic
linux-image-4.4.0-143-generic
linux-modules-extra-4.4.0-146-generic
linux-image-4.4.0-146-generic
linux-modules-4.4.0-143-generic
linux-modules-4.4.0-146-generic

따라서 여기에서 xargs명령 행 인수로 이를 통해 간단하게 전달할 수 있습니다 apt-get remove -y.

apt-get autoremove -s \
  | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
  | xargs apt-get remove -y

일반적으로을 사용할 때 xargs인수 (예 :)의 공백을 경계 find ... -print0 | xargs -0 ...하지만 패키지 이름에는 공백이 없으므로 줄 바꿈으로 구분 된 인수를 사용하는 것이 좋습니다.

(다른 상황에서는 보류를 "표시"하고 패키지를 보류 해제하는 것이 더 적절하다고 생각합니다. 정규식과 xargs로도 가능하지만 상황을 과도하게 엔지니어링하고 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.