Странное поведение «apt-get purge» с regEx

Если вас не устраивает режим --check, можно решить проблему с помощью --list-tasks. Следуйте рекомендуемой « организации содержимого » и ведите отдельные инструкции для групп узлов, которым требуются одни и те же задачи.

1
23.05.2017, 15:40
2 ответа
$ apt-cache show xfce4 | grep ^Depends
Depends: xfwm4 (>= 4.12.0), xfconf (>= 4.12.0), xfce4-settings (>= 4.12.0), xfce4-panel (>= 4.12.0), xfdesktop4 (>= 4.12.0), thunar (>= 1.6.6), gtk2-engines-xfce (>= 3.2.0), xfce4-session (>= 4.12.0), xfce4-appfinder (>= 4.12.0), xfce4-mixer (>= 4.10.0), orage (>= 4.10.0), libxfce4ui-utils (>= 4.12)

Как вы видите, пакет xfce4 зависит от gtk2-engines-xfce, поэтому если вы удалите gtk2-engines-xfce, apt также удалит xfce4. Это похоже на другие упомянутые вами пакеты, так openshot зависит от gtk2-engines-pixbuf, а gtk2-engines-pixbuf зависит от gtk2-engines-murrine

Я также хотел бы обратить внимание на комментарий Хенрика;
apt-get может принимать regex в качестве аргумента вместо имен пакетов, но вы должны позаботиться о глобализации файлов, которая происходит до того, как shell фактически вызовет команду. Посмотрите на пример:

$ touch gtk2-engine-test
$ sudo apt-get remove gtk2-engine*
[sudo] password for boban: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package gtk2-engine-test

Когда вы хотите передать regex в apt, вы должны экранировать символы поиска файлов, такие как *,?,[,] и так далее, поэтому правильной командой будет:

sudo apt-get remove gtk2-engine\*
2
27.01.2020, 23:19

Как уже объяснил Бобан П. , если вы запрашиваете удаление или очистку пакета, это также приведет к удалению пакетов, которые зависят от него.

Вы можете использовать aptitude why , чтобы узнать, какие пакеты, установленные вручную, зависят от пакета, то есть почему этот пакет установлен. Аргументом является одно имя пакета package, а не шаблон глобуса или регулярное выражение. Вы можете объединить его с [поиском aptitude] (( http://aptitude.alioth.debian.org/doc/en/ch02s04s05.html ) для одновременного запроса нескольких пакетов.

aptitude -v why $(aptitude -F %p search '~i ~ngtk2-engines.*')

Остерегайтесь этого. вывод может быть очень длинным. Без -v aptitude перечисляет только одну причину установки каждого пакета.

Кроме того, обратите внимание, что аргумент apt-get и apt-cache - это регулярное выражение, а не шаблон подстановки оболочки. Если аргумент не содержит специальных символов, он используется буквально, но если аргумент действительно содержит специальные символы () [] .? * + , то регулярное выражение должно соответствовать только части имени пакета. Итак, gtk2 -otors - * соответствует пакетам, которые содержат gtk2-engine в качестве подстроки² ; вот почему gtk2-engine был указан как соответствующий. Вы, вероятно, хотели написать вместо этого gtk2-engine -. * , но это также могло бы перехватить пакеты, чьи имена не указаны art с gtk2-двигателями ³. Чтобы перечислить пакеты, которые начинаются с gtk2-engine- , используйте ^ gtk2 -otors- .

Также возьмите в привычку заключать в кавычки специальные символы в командной строке оболочки - если существовал файл, соответствующий шаблону glob gtk2-engine - * в текущем каталоге (например, .deb файл, который вы только что скачали), тогда шаблон был бы заменен соответствующими файлами.

¹ Или шаблон поиска aptitude в некоторых версиях, но не в Debian jessie.
² Потому что gtk2-engine заканчивается нулевым или более вхождением - (а именно нулем).
³ Из них в Debian на данный момент нет.

2
27.01.2020, 23:19

Теги

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