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