Я пытаюсь удалить кучу пакетов, в которых есть «abc». Однако я не хочу удалять abc-def. Как я могу этого добиться?
Например, как удалить все пакеты, в которых есть "php", кроме "php-common"?
Я пробовал добавить --exclude
к команде, но она работает не так, как ожидалось - «php-common» все еще был в списке удаления.
# yum --exclude=php-common remove *php*
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package php-cli.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-common.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-fpm.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-mcrypt.x86_64 0:5.4.16-3.el7 will be erased
---> Package php-mysqlnd.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-pdo.x86_64 0:5.4.16-36.el7_1 will be erased
--> Finished Dependency Resolution
yum remove *php* !php-common
,--exclude=php-common*
и --exclude=php-common.x86_64 0:5.4.16-36.el7_1
тоже не работает.
Я спрашиваю об этом, потому что у меня есть огромный пакет (~ 1,5 ГБ), который мне все еще нужен, и я не хочу его повторно загружать, потому что у меня медленный интернет.
ОС: CentOS 7.
Просто добавьте префикс к имени пакета, который вы хотите сохранить -
. Вам нужно добавить --
перед списком пакетов, чтобы гарантировать, что имя пакета не рассматривается как опция:
yum remove *php* -- -php-common
На странице руководства (в разделе установки):
Если имя начинается с символа -, то поиск выполняется внутри транзакции, и все совпадения удаляются.
--exclude
исключит пакет из репозиториев, так как он не доступен для установки, но не действует на установленные пакеты.
Один способ действительно защитить свой пакет от деинсталляции - поместить его имя в protected_packages
в /etc/yum.conf
, но потом yum
не будет обрабатывать подстановочный знак, который также соответствует этому пакету.
Одно решение:
С вашим конкретным примером php-common
, на самом деле это не сработает, поскольку преобразователь зависимостей будет мешать, но если зависимости не являются проблемой, вы можете попробовать следующее:
yum erase `yum list installed | cut -d " " -f 1 | grep php | grep -v php-common `
Подкоманда сгенерирует список установленных пакетов, сократит его до первого столбца, сократит его до пакетов, содержащих php
в названии, а затем устраняет php-common
из списка.
╮ (╯_╰) ╭
Вчера я написал питон для решения этой проблемы.
Надеюсь, это будет полезно для вас и кого волновала эта проблема. : -)
Я записал процесс разработки в своем блоге
http://blog.j3l11234.com/2016/11/23/yum-remove-with-exclude/
вот использование:
# ./remove.py -e *php* -x php-common
analyzing exclude packages and their dependencies ...
analyzing packages which will be removed...
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package php-cli.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-fpm.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-gd.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-mbstring.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-mysqlnd.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-opcache.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-pdo.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-xml.x86_64 0:7.0.12-2.el7.remi will be erased
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Removing:
php-cli x86_64 7.0.12-2.el7.remi @/php-cli-7.0.12-2.el7.remi.x86_64 12 M
php-fpm x86_64 7.0.12-2.el7.remi @/php-fpm-7.0.12-2.el7.remi.x86_64 4.1 M
php-gd x86_64 7.0.12-2.el7.remi @/php-gd-7.0.12-2.el7.remi.x86_64 203 k
php-mbstring x86_64 7.0.12-2.el7.remi @/php-mbstring-7.0.12-2.el7.remi.x86_64 2.8 M
php-mysqlnd x86_64 7.0.12-2.el7.remi @/php-mysqlnd-7.0.12-2.el7.remi.x86_64 868 k
php-opcache x86_64 7.0.12-2.el7.remi @/php-opcache-7.0.12-2.el7.remi.x86_64 396 k
php-pdo x86_64 7.0.12-2.el7.remi @/php-pdo-7.0.12-2.el7.remi.x86_64 381 k
php-xml x86_64 7.0.12-2.el7.remi @/php-xml-7.0.12-2.el7.remi.x86_64 854 k
Transaction Summary
==============================================================================================================
Remove 8 Packages
Installed size: 22 M
Is this ok [y/N]: