Как удалить все пакеты i386 из 64-битной Ubuntu?

Ответы:

15

Если они вам не мешают, я бы оставил их там, где они есть.
Если вы настаиваете на удалении, используйте dpkg -l | grep i386для создания списка i386-пакетов. Вы можете удалить их после тщательной проверки с чем-то вроде sudo apt-get purge <package-name>.

Henk
источник
2
За исключением того, что склонность к мультиарху нарушена , так что это не сработает так хорошо: P
перемолоть
apt-get purge <package-name>все равно должно работать
Элия ​​Каган
2
«после тщательной проверки» - это расплывчато. Пожалуйста, будьте более ясны.
Кевинарпе
1
у меня есть система i386 на usb, иногда я использую ее на машинах amd64, теперь я просто хотел сделать обратное, поэтому после запуска dpkg -l | grep amd64я получил pkg i386 в моем списке, который amd64-microcode 3.20160316.3 i386, я думаю, что ':' в шаблоне grep является важным ! ( dpkg -l | grep ":amd64")
Иона
24

Верхние автоматизированные решения опасны и не всегда работают (1), поэтому здесь другой путь

sudo aptitude purge `dpkg --get-selections | grep ":i386" | awk '{print $1}'`

или

sudo apt-get purge `dpkg --get-selections | grep ":i386" | awk '{print $1}'`

(Старайтесь использовать всегда и только один из инструментов. Поскольку aptitude лучше справляется с проблемами зависимости, я предпочитаю это.)

Хорошая идея также

dpkg --remove-architecture i386

и возможно

dpkg --print-foreign-architectures

(1) В предыдущих командах также перечисляются пакеты, в названии которых содержится только i386 (хотя они предназначены для 64-битной архитектуры), регулярное выражение не работает, и dpkg показывает пакеты, которые уже удалены, но у них все еще есть файлы конфигурации ( dpkg -l показывает «rc» вместо «ii» в качестве статуса).

вещий
источник
Так как вы используете в awkлюбом случае, вы можете также избавиться от grepвызова. Кроме того, $()предпочтительнее вместо кавычек. Я только что избавился от своих пакетов i386, используя эту команду, основанную на той, которую вы дали:sudo apt purge $(dpkg --get-selections | awk '$1 ~ /:i386$/ { print $1 }')
scy
23

Я уничтожил все свои 32-битные пакеты, как это:

sudo apt-get remove `dpkg --get-selections | grep i386 | awk '{print $1}'`
Mathnode
источник
1
как делать такие команды, я знаю apt-get и grep, но что такое awk '{print $ 1}', просто хочу знать.
Sukupa91
Круто, и теперь я смог удалить архитектуру i386, но когда я dpkg -l | grep i386проверяю пакеты, есть ли еще какие-либо идеи, также +1 для предыдущего комментария и, я думаю, это связано с методами сценариев оболочки
Исмаил Мармуш
Нет ответов, вероятно, потому что комментарии не место для учебника по awk. Этот бит awk печатает только первое поле каждой передаваемой строки. Разделителем полей Awk по умолчанию является пробел, "".
rthbound
Закончите его сsudo dpkg --remove-architecture i386
Serge Stroobandt
9

В случае, если кому-то интересно, есть гораздо более вменяемый и изящный способ сделать это. Последний предыдущий ответ надеется сделать то же самое, но поиск завершится неудачно, поскольку архитектуры фактически не являются частью имен пакетов, за исключением особых случаев.

с правами root (или с помощью sudo) выполните:

aptitude remove ~i~ri386

Если вы уже не используете aptitude вместо apt-get, сделайте. Это действительно отлично. Вы можете найти список условий поиска aptitude здесь .

Патрик
источник
6

Вот еще один способ снижения риска:

apt-get remove "^.*:i386$"

Это будет конкретно соответствовать только пакетам, оканчивающимся на ":i386", что является стандартным соглашением об именах для всех i386архитектурных пакетов Debian.

kevinarpe
источник
зачем снимать над продувкой?
Lotus
1
@Lotus: я не знаю о разнице. Не могли бы вы объяснить? Может быть, мы можем обновить этот ответ, чтобы улучшить его.
Кевинарпе
purge также принимает файлы конфигурации и любые оставшиеся каталоги iirc
Lotus
2
@Lotus Я использовал продувку, и она работала 14.04. Это сработало только для меня после удаления кавычек и каверны. sudo apt-get purge .*:i386
Антониос Хаджигеоргалис