🢂Ściągawka (cheatsheet) z update‑alternatives dla administratorów
Ten cheatsheet zawiera krótkie podsumowanie podstawowych pojęć, komend i opcji update-alternatives. Zawiera również informacje o źródłach dodatkowych informacji.
update-alternatives
to narzędzie w systemach Debian, Ubuntu i pochodnych, które zarządza symbolicznymi linkami do domyślnych wersji komend, gdy w systemie jest dostępnych kilka alternatyw.
Co to jest system alternatives?
System alternatives w dystrybucjach bazujących na Debianie (Ubuntu, Mint, itp.) umożliwia współistnienie kilku wersji tego samego oprogramowania na jednym systemie. Mechanizm działa poprzez tworzenie systemu symbolicznych linków, które wskazują na różne implementacje tej samej funkcjonalności.
Główne zalety systemu alternatives:
- Możliwość łatwego przełączania między różnymi wersjami programów
- Utrzymywanie spójności systemu przy jednoczesnym umożliwieniu wyboru
- Automatyczne zarządzanie zależnościami między programami
Podstawowe polecenia
Polecenie | Opis |
---|---|
update-alternatives --display NAZWA |
Wyświetla informacje o alternatywach dla danej komendy |
update-alternatives --query NAZWA |
Wyświetla szczegółowe informacje w formacie parsowanym |
update-alternatives --install LINK NAZWA ŚCIEŻKA PRIORYTET |
Dodaje nową alternatywę |
update-alternatives --remove NAZWA ŚCIEŻKA |
Usuwa alternatywę |
update-alternatives --config NAZWA |
Interaktywnie wybiera domyślną alternatywę |
update-alternatives --set NAZWA ŚCIEŻKA |
Ustawia wskazaną alternatywę jako domyślną |
update-alternatives --auto NAZWA |
Przywraca automatyczny wybór alternatywy (wg priorytetu) |
update-alternatives --list NAZWA |
Wyświetla wszystkie alternatywy dla danej nazwy |
update-alternatives --all |
Konfiguruje wszystkie alternatywy w trybie interaktywnym |
update-alternatives --remove-all NAZWA |
Usuwa wszystkie alternatywy dla danej nazwy |
Ważne parametry
- LINK - ścieżka do głównego dowiązania symbolicznego (np.
/usr/bin/java
) - NAZWA - nazwa grupy alternatyw (np.
java
,editor
) - ŚCIEŻKA - pełna ścieżka do pliku wykonywalnego (np.
/opt/jdk-11/bin/java
) - PRIORYTET - liczba całkowita określająca priorytet danej alternatywy (wyższa wartość = wyższy priorytet)
Przykłady użycia
Wyświetlanie alternatyw dla komendy
sudo update-alternatives --display java
Przykładowy wynik który zawiera informacje o tym, że domyślną alternatywą jest Java 11, a priorytetem tej alternatywy jest 1111.
java - auto mode
link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/bin/java - priority 1081
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1111
Dodawanie nowej alternatywy
sudo update-alternatives --install /usr/bin/java java /opt/jdk/bin/java 100
Dodawanie z podrzędnymi (slave) alternatywami:
sudo update-alternatives --install /usr/bin/java java /opt/jdk-11/bin/java 1100 \
--slave /usr/bin/javac javac /opt/jdk-11/bin/javac \
--slave /usr/bin/jar jar /opt/jdk-11/bin/jar
Zmiana domyślnej alternatywy (interaktywnie)
sudo update-alternatives --config editor
Przykładowy wynik:
Dostępne są 4 alternatywy dla "editor".
Wybór Ścieżka Priorytet Status
------------------------------------------------------------
* 0 /usr/bin/nano 40 tryb auto
1 /bin/ed -100 tryb ręczny
2 /bin/nano 40 tryb ręczny
3 /usr/bin/vim.basic 30 tryb ręczny
4 /usr/bin/vim.tiny 15 tryb ręczny
Proszę wcisnąć enter, aby pozostawić bieżący wybór[*], lub wpisać numer wyboru:
Ustawienie alternatywy bez interakcji
sudo update-alternatives --set editor /usr/bin/vim
Usuwanie alternatywy
sudo update-alternatives --remove editor /usr/bin/vim
Usuwanie wszystkich alternatyw dla danej nazwy
sudo update-alternatives --remove-all editor
Praktyczne zastosowania
Zarządzanie wersją Java
# Dodanie nowej wersji Java
sudo update-alternatives --install /usr/bin/java java /opt/jdk-11/bin/java 110
sudo update-alternatives --install /usr/bin/java java /opt/jdk-8/bin/java 100
# Przełączanie między wersjami
sudo update-alternatives --config java
# Sprawdzenie aktualnie używanej wersji
java -version
Zmiana domyślnego edytora
# Lista dostępnych edytorów
sudo update-alternatives --list editor
# Wybór domyślnego edytora
sudo update-alternatives --config editor
# Szybkie ustawienie vim :D jako domyślnego edytora
sudo update-alternatives --set editor /usr/bin/vim
Zarządzanie alternatywami dla PHP
# Dodanie wersji PHP
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81
sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74
# Przełączanie wersji PHP
sudo update-alternatives --set php /usr/bin/php8.1
# Wybór domyślnego php
sudo update-alternatives --config php
# Sprawdzenie aktualnie używanej wersji
php --version
Zarządzanie alternatywami dla Python
# Przełączanie między wersjami Python (jeśli są zainstalowane)
sudo update-alternatives --config python
# Dodanie Pythona 3.9 jako alternatywy dla 'python'
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
# Dodanie Pythona 3.10 z wyższym priorytetem
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 2
Zarządzanie kompilatorem C/C++
# Dodawanie GCC jako alternatywy
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110
# Przełączanie między wersjami
sudo update-alternatives --config gcc
# Sprawdzenie aktualnie używanej wersji
gcc --version
Struktura katalogów
/etc/alternatives/
- katalog zawierający symboliczne linki do obecnie wybranych alternatyw/var/lib/dpkg/alternatives/
- miejsce przechowywania konfiguracji alternatives/usr/share/man/man8/update-alternatives.8.gz
- podręcznik (man page) dla narzędzia
Jak działa system alternatives?
System alternatives opiera się na trzech poziomach linków symbolicznych:
- Link główny (np.
/usr/bin/java
) - wskazuje na link w katalogu alternatives - Link alternatives (np.
/etc/alternatives/java
) - wskazuje na faktyczny program - Faktyczny program (np.
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
)
Gdy wywołujesz komendę java
, ścieżka wygląda tak:
/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java
Uwagi
- Wyższy priorytet oznacza, że alternatywa będzie preferowana w trybie automatycznym
- Po instalacji pakietów, które zarządzane są przez
update-alternatives
, często automatycznie dodawane są odpowiednie wpisy - Operacje
--install
i--remove
wymagają uprawnień administratora (sudo) - Można zarządzać grupami alternatyw za pomocą opcji
--slave
- Gdy w systemie pojawia się alternatywa z wyższym priorytetem, automatycznie staje się domyślna, chyba że ręcznie ustawiono inną opcję
Tryby pracy alternatives
System alternatives może działać w dwóch trybach:
- Tryb automatyczny - automatycznie wybiera alternatywę z najwyższym priorytetem
- Tryb ręczny - administrator ręcznie wybiera preferowaną alternatywę
Aby przełączyć się między trybami:
# Przełączenie na tryb automatyczny
sudo update-alternatives --auto java
# Przełączenie na tryb ręczny (poprzez wybranie konkretnej alternatywy)
sudo update-alternatives --set java /path/to/java
Rozwiązywanie problemów
System alternatyw został uszkodzony
Jeśli system alternatyw został uszkodzony, można go naprawić za pomocą:
sudo update-alternatives --auto NAZWA
Poważniejsze problemy
W przypadku poważniejszych problemów:
# Przebudowanie całego systemu alternatyw
sudo dpkg --configure -a
# Sprawdzenie i naprawa pakietów
sudo apt-get install -f
Błędy z linkami symbolicznymi
Jeśli zauważysz błędy z linkami symbolicznymi:
# Sprawdzenie linków symbolicznych
ls -la /etc/alternatives/
ls -la /usr/bin/NAZWA
# Ręczne naprawienie linku symbolicznego (jeśli potrzebne)
sudo ln -sf /etc/alternatives/NAZWA /usr/bin/NAZWA
Przydatne skrypty
Skrypt do szybkiego przełączania Javy
#!/bin/bash
# Skrypt do szybkiego przełączania wersji Javy
# Użycie: ./switch_java.sh 8|11|17
case "$1" in
"8")
sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/bin/java
;;
"11")
sudo update-alternatives --set java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
;;
"17")
sudo update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java
;;sudo update-alternatives --display java
*)
echo "Użycie: $0 8|11|17"
exit 1
;;
esac
echo "Przełączono na Javę:"
java -version
Skrypt do tworzenia alternatyw dla PHP
#!/bin/bash
# Skrypt do konfiguracji alternatyw dla PHP
# Użycie: ./setup_php_alternatives.sh
# Dodawanie PHP 7.4
if [ -f /usr/bin/php7.4 ]; then
sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74
sudo update-alternatives --install /usr/bin/php-config php-config /usr/bin/php-config7.4 74
sudo update-alternatives --install /usr/bin/phpize phpize /usr/bin/phpize7.4 74
fi
# Dodawanie PHP 8.0
if [ -f /usr/bin/php8.0 ]; then
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.0 80
sudo update-alternatives --install /usr/bin/php-config php-config /usr/bin/php-config8.0 80
sudo update-alternatives --install /usr/bin/phpize phpize /usr/bin/phpize8.0 80
fi
# Dodawanie PHP 8.1
if [ -f /usr/bin/php8.1 ]; then
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81
sudo update-alternatives --install /usr/bin/php-config php-config /usr/bin/php-config8.1 81
sudo update-alternatives --install /usr/bin/phpize phpize /usr/bin/phpize8.1 81
fi
echo "Skonfigurowano alternatywy dla PHP"
echo "Aby wybrać domyślną wersję, uruchom: sudo update-alternatives --config php"
Źródła dodatkowych informacji
- Oficjalna dokumentacja:
man update-alternatives
- Debian Wiki: Alternatives System
- Ubuntu Manpage: update-alternatives
- The Debian Administrator's Handbook