Як виключити пакет з apt-get autoremove?


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вилучимо пакет, якщо він не є залежністю від будь-якого іншого пакету.


Ще один зручний фокус в тому , що ви можете відзначити багато пакетів відразу , як це: Судо APT-мітки керівництво <package1> <package2> <упаковке3> і т.д.
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).

Коли список пакунків, які ви хочете автоматично перемістити, легко визначити, ви можете передати /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, мабуть, надмірно розробити ситуацію.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.