Как исключить пакет из Кв. - добираются, автоудаляют?

Я нахожусь в ситуации где список осиротевших пакетов, которые будут удалены apt-get autoremove включает пакет, который я хочу сохранить. По-видимому, я случайно удалил пакет, который был в зависимости от него. Как я могу теперь отметить пакет, как явно желаемый, так, чтобы apt-get autoremove не удалит его?

20
задан 5 August 2017 в 03:56

3 ответа

Использовать 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 удалит пакет, если это не будет зависимость никакого другого пакета.

29
ответ дан 23 November 2019 в 01:49

Еще несколько попыток 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.
10
ответ дан 23 November 2019 в 01:49

Этому уже отвечают хорошо, но я нашел ситуацию, где я не хотел "отмечать" многие пакеты (и затем снять выделение с них после 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 ...), но так как имена пакета не имеют пробелов в них, я - удобные использующие разграниченные новой строкой аргументы.

(Я думал бы это другие ситуации, будет более уместно "отметить" хранение, нехранение пакеты. Это может также быть сделано с regexes и xargs, но, вероятно, сверхразработка ситуация.)

0
ответ дан 23 November 2019 в 01:49

Другие вопросы по тегам:

Похожие вопросы: