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