제거 apt-get autoremove하려는 고아 패키지 목록에 유지하려는 패키지가 포함되어 있습니다 . 분명히 패키지에 따라 실수로 패키지를 제거했습니다. 패키지를 명시 적으로 원하는 것으로 표시하여 apt-get autoremove제거하지 않도록하려면 어떻게 해야합니까?
제거 apt-get autoremove하려는 고아 패키지 목록에 유지하려는 패키지가 포함되어 있습니다 . 분명히 패키지에 따라 실수로 패키지를 제거했습니다. 패키지를 명시 적으로 원하는 것으로 표시하여 apt-get autoremove제거하지 않도록하려면 어떻게 해야합니까?
답변:
용도 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패키지가 다른 패키지의 종속성이 아닌 경우 패키지를 제거합니다.
몇 가지 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.
이것은 이미 잘 대답했지만 많은 패키지를 "표시"하고 싶지 않은 상황을 발견했습니다 (및 후에 표시 해제 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로도 가능하지만 상황을 과도하게 엔지니어링하고 있습니다.)