update-alternatives в Ubuntu и Debian: как управлять альтернативами

Linux ориентирован на свободу выбора. В отличие от проприетарных систем, где часто заранее задано одно приложение по умолчанию (например, браузер), в Linux вы можете иметь несколько реализаций одной и той же роли и легко переключаться между ними. update-alternatives управляет этим механизмом через символические ссылки.
Объяснение термина: альтернатива — это группа взаимозаменяемых программ, объединённых общей функцией (например, «editor» или «x-www-browser»).
Рассмотрим простой пример: команда editor, используемая в терминале.
whereis editor
editor: /usr/bin/editor /usr/share/man/man1/editor.1.gzЕсли вы откроете системный файл через sudo editor /etc/fstab, командная оболочка запустит ту программу, на которую указывает ссылка editor:
sudo editor /etc/fstabНа одной из тестовых систем это открылось в nano:
Команда /usr/bin/editor — это не сама программа. Это символическая ссылка на /etc/alternatives/editor. Каталог /etc/alternatives хранит «промежуточные» ссылки, указывающие на фактические исполняемые файлы. Получается: ссылка (в PATH) → ссылка (в /etc/alternatives) → реальная программа.
Инструмент update-alternatives управляет этими связями: он создаёт, удаляет и переназначает ссылки. Дальше — практические примеры.
Частые команды и шаблон использования
Основная форма команды выглядит так:
sudo update-alternatives [option] [alternative(s)]- option — действие, которое вы хотите выполнить;
- alternative(s) — программа или группы, с которыми работаете.
Для просмотра подробной информации используйте display:
update-alternatives --display editorИнформация может быть громоздкой (включая ссылки на man-страницы и локализации). Более простая и понятная команда — list:
update-alternatives --list editorВы увидите доступные реализации — nano, vim и т.д. Чтобы поменять выбор через интерактивное меню:
sudo update-alternatives --config editorЕсли знаете точный путь, можно установить альтернативу напрямую:
sudo update-alternatives --set editor /usr/bin/vim.basicПолезные системные группы альтернатив
Некоторые группы полезно знать заранее:
- Java: переключение между версиями Java
update-alternatives --config javaНекоторые приложения требуют конкретной версии Java. На Ubuntu можно установить несколько версий OpenJDK из репозиториев и вручную добавить Oracle JRE. В сложных случаях удобно использовать отдельную утилиту update-java-alternatives, которая синхронизирует несколько Java-альтернатив.
- Веб-браузер:
update-alternatives --config x-www-browser
update-alternatives --config gnome-www-browser- Плагины Flash (когда они ещё нужны):
update-alternatives --config mozilla-flashpluginЧтобы увидеть все альтернативы и их текущие установки:
update-alternatives --get-selectionsВажно: многие пакеты автоматически добавляют свои записи в систему альтернатив при установке. Но вы можете добавлять и свои группы — ниже подробная инструкция.
Создание собственных групп альтернатив
Добавлять альтернативы можно вручную. Представьте, что вы хотите создать команду word-processor, которая будет запускать разные текстовые процессоры.
Команда для добавления первой реализации (LibreOffice Writer):
sudo update-alternatives --install /usr/bin/word-processor x-word-processor /usr/bin/lowriter 40Пояснение результата:
- создаётся ссылка /usr/bin/word-processor (новая команда в PATH);
- создаётся группа альтернатив с именем x-word-processor;
- добавляется реализация /usr/bin/lowriter с приоритетом 40;
- по умолчанию система будет в автоматическом режиме и выбирать реализацию с наибольшим приоритетом.
Добавим затем текстовый процессор в консоли:
sudo update-alternatives --install /usr/bin/word-processor x-word-processor /usr/bin/wordgrinder 20Теперь вы можете переключаться через –config или принудительно установить конкретную реализацию через –set.
Внимание: если вы создаёте собственную группу, вы отвечаете за актуальность путей. Если удалите программу, не удалив её запись в альтернативе, ссылка может указывать на несуществующий файл.
Удаление альтернатив и групп
Чтобы удалить одну реализацию из группы:
sudo update-alternatives --remove x-word-processor /usr/bin/wordgrinderЧтобы удалить всю группу вместе со всеми ссылками:
sudo update-alternatives --remove-all x-word-processorЭти команды удаляют только записи в системе альтернатив. Они не удаляют сами пакеты или исполняемые файлы.
Важно: всегда проверяйте, что вы удаляете — особенно если команда в PATH связана с критичным сервисом.
Когда update-alternatives полезен и когда он подводит
Когда он полезен:
- стандартные системные роли (editor, java, x-www-browser) — лёгкое переключение;
- тестирование разных реализаций без переустановки пакетов;
- создание «виртуальных» команд для унификации вызовов в скриптах.
Ограничения и случаи, когда он не подойдёт:
- графические окружения часто имеют собственные механизмы выбора приложений (например, настройки GNOME или KDE), которые могут переопределять системные ссылки;
- программы, ожидающие определённый путь или имя файла, могут некорректно работать при смене реализации (особенно если интерфейсы отличаются);
- если вы вручную изменяете файлы в /etc/alternatives, можно случайно нарушить целостность связей.
Ментальные модели и эвристики
- Приоритет — числовое значение: выше — предпочтительнее в режиме auto.
- Auto vs manual: auto выбирает по приоритету; manual фиксирует выбранную реализацию.
- Всегда думайте «команда в PATH → /etc/alternatives → реальная программа».
Эвристики:
- Для скриптов используйте явные пути или убедитесь, что нужная альтернатива установлена в manual-режиме.
- Для интерактивной работы применяйте config и проверяйте результат через –display.
Быстрая методология: как добавить, переключить и удалить
Шаги добавления новой альтернативы:
- Определите виртуальное имя команды (например, word-processor).
- Добавьте первую реализацию через –install с разумным приоритетом.
- Добавьте дополнительные реализации аналогично.
- Проверьте список через –list или –display.
- Переключите в manual-режим через –config, если нужно закрепить выбор.
Шаги удаления:
- Переключитесь на другую реализацию, если удаляемая активна.
- Выполните –remove для конкретного пути.
- Если группа больше не нужна — –remove-all.
Чек-листы по ролям
Чек-лист для системного администратора:
- проверить текущие альтернативы: update-alternatives –get-selections;
- удостовериться, что приоритеты заданы корректно;
- зафиксировать критичные команды в manual-режиме;
- перед удалением пакета удалить соответствующие альтернативы.
Чек-лист для разработчика:
- использовать явные пути в CI, если результат должен быть детерминированным;
- предусмотреть fallback, если альтернативы могут менять среду выполнения;
- документировать зависимости на системных командах.
Чек-лист для настольного пользователя:
- для смены браузера используйте –config x-www-browser;
- проверяйте, не конфликтует ли системный GUI с настройками альтернатив;
- при создании пользовательских групп — держите в актуальном состоянии пути к программам.
Шпаргалка команд (cheat sheet)
- Показать список реализаций для группы:
update-alternatives --list - Показать состояние:
update-alternatives --display - Интерактивно выбрать реализацию:
sudo update-alternatives --config - Принудительно установить реализацию:
sudo update-alternatives --set /path/to/program - Добавить реализацию:
sudo update-alternatives --install - Удалить реализацию:
sudo update-alternatives --remove - Удалить всю группу:
sudo update-alternatives --remove-all Отладка и частые проблемы
Проблема: после удаления пакета команда в PATH указывает на несуществующий файл.
Решение: запустите –display для проверки; если путь отсутствует — выполните –remove или –remove-all и заново добавьте корректный путь.
Проблема: GNOME/KDE не используют системную альтернативу.
Пояснение: окружения рабочего стола могут хранить свои настройки по умолчанию и игнорировать системные ссылки. Изменяйте настройки через GUI либо проверьте специфические группы (например, gnome-www-browser).
Проблема: Java-приложение запускается другой версией JVM.
Решение: используйте update-java-alternatives для синхронизации связанных Java-альтернатив.
Примеры использования в реальных сценариях
Сценарий тестирования: вам нужно протестировать, как скрипт работает с vim и nano. Добавьте обе реализации (если их нет), затем переключайтесь через –config. Это удобнее и чище, чем править PATH вручную.
Сценарий деплоя: Вы выпускаете скрипт, который вызывает word-processor. Добавьте в документацию требование: «система должна иметь альтернативу x-word-processor, настроенную на /usr/bin/lowriter» — или используйте контейнер, где окружение детерминировано.
Решение выбора: простая логика выбора (Mermaid)
flowchart TD
A[Нужна команда в PATH?] --> B{Существует группа альтернатив?}
B -- Да --> C{Требуется конкретная реализация?}
B -- Нет --> D[Создать группу через --install]
C -- Да --> E[Использовать --set или --config]
C -- Нет --> F[Оставить авто-режим по приоритету]
E --> G[Проверить через --display]
F --> G
D --> GКритерии приёмки
- команда в PATH запускает ожидаемую программу;
- альтернативы не ссылаются на отсутствующие файлы;
- приоритеты настроены и документированы для критичных ролей;
- изменения проверены в целевых средах (рабочий стол, сервер, CI).
Галерея пограничных случаев
- Альтернатива указывает на скрипт-обёртку, который далее перенаправляет вызов — это нормально, но усложняет трассировку.
- Несколько пакетов заявляют одну и ту же альтернативу с разными приоритетами — при установке/удалении приоритеты меняются, и система может переключиться автоматически.
- Симметричные имена групп в кастомных и системных пакетах — старайтесь уникализировать имена кастомных групп (например, x- префикс).
Итог и рекомендации
update-alternatives — простой и мощный механизм для управления тем, какая реализация программы запускается по общему имени. Он полезен для тестирования, миграции и поддержания консистентности в системах с несколькими реализациями. Создавайте собственные группы осторожно, документируйте приоритеты и регулярно проверяйте целостность ссылок.
Если у вас есть примеры нестандартных групп альтернатив или советы по использованию в продакшене — поделитесь в комментариях.
Image Credit: momente via Shutterstock.com
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone