Ubuntu ve Debian'da update-alternatives Komutu Kullanımı

Ubuntu ve Debian sistemlerinde komut alternatiflerini yönetmek için kullanılan update-alternatives aracının detaylı kullanım kılavuzu.

I
ITWISE
1 görüntülenme
Ubuntu ve Debian'da update-alternatives Komutu Kullanımı

Giriş

Ubuntu, Debian ve türevlerinde birden fazla program aynı komutu sağladığında, varsayılan olarak hangisinin çalıştırılacağını belirlemek zor olabilir. Elle sembolik bağlantılar oluşturmak veya komut yollarını sabit kodlamak, bu seçimlerin sürdürülebilirliğini zorlaştırır ve sistem yönetimini karmaşık hale getirir.

update-alternatives komutu, bu seçimleri /etc/alternatives dizinindeki sembolik bağlantılar aracılığıyla yönetir. Bu araç sayesinde sistem yöneticileri, mevcut alternatifleri görüntüleyebilir, varsayılan seçimi değiştirebilir, yeni alternatifler ekleyebilir ve otomatik modu etkinleştirebilir. Bu makale, update-alternatives komutunun nasıl kullanılacağını adım adım açıklamaktadır.

Neden update-alternatives Kullanılmalı?

  • Sürdürülebilirlik: Elle sembolik bağlantılar oluşturmak yerine, sistem alternatiflerini merkezi olarak yönetmeyi sağlar.
  • Kolaylık: Komut satırından yapılan seçimler, sistem paket yöneticisiyle uyumlu çalışır ve paket yükseltmeleri sırasında seçimlerin korunmasını sağlar.
  • Esneklik: Hem otomatik modda (en yüksek öncelikli alternatif seçilir) hem de manuel modda (sistem yöneticisinin seçimi korunur) çalışabilir.

update-alternatives Nasıl Çalışır?

update-alternatives, her biri bir komut adı ve bu komut için kayıtlı program yollarını içeren alternatif gruplarını yönetir. Örneğin, java grubu, sistemde yüklü olan Java çalıştırıcılarından hangisinin /usr/bin/java komutu aracılığıyla çalıştırılacağını belirler.

Sistemde /usr/bin/java komutunu çalıştırdığınızda aslında doğrudan Java ikili dosyasına bağlanmaz. Bunun yerine, sembolik bir zincir oluşturulur:

/usr/bin/java → /etc/alternatives/java → /usr/lib/jvm/java-21-openjdk-amd64/bin/java

Bu iki aşamalı yapı sayesinde, sistem alternatifleri kolayca değiştirilebilir. Alternatifler, /var/lib/dpkg/alternatives dizininde saklanır ve sistem paket yöneticisiyle entegre şekilde çalışır.

Otomatik ve Manuel Mod

Her alternatif grubu iki moddan birinde çalışabilir:

  • Otomatik Mod: Sistem, kayıtlı alternatifler arasında en yüksek önceliğe sahip olanı otomatik olarak seçer. Bu mod, sistem paketleri tarafından genellikle tercih edilir.
  • Manuel Mod: Sistem yöneticisinin yaptığı seçim korunur ve ancak açıkça değiştirildiğinde veya geçersiz hale geldiğinde güncellenir. Bu mod, özel gereksinimler için kullanışlıdır.

Temel Sözdizimi

update-alternatives komutunun genel sözdizimi aşağıdaki gibidir:

update-alternatives [SEÇENEKLER] KOMUT

Komutlar ve seçenekler aşağıdaki gibidir:

  • Değişiklik gerektiren komutlar (örneğin, alternatif seçimi yapmak) sudo yetkisi gerektirir.
  • Bilgi sorgulama komutları (örneğin, mevcut alternatifleri listelemek) sudo gerektirmez.

Alternatif Gruplarını Listeleme

Tüm Alternatif Gruplarını Görüntüleme

Sistemde kayıtlı tüm alternatif gruplarını listelemek için aşağıdaki komutu çalıştırın:

update-alternatives --get-selections

Bu komut, her grubun adını, modunu (otomatik/manuel) ve seçilen program yolunu görüntüler. Örnek çıktı:

awk auto /usr/bin/mawk
editor auto /bin/nano
pager auto /bin/more
vi auto /usr/bin/vim.basic

İkinci sütun, grubun otomatik mi yoksa manuel mi modda olduğunu gösterir. Üçüncü sütun ise seçilen programın yolunu içerir. Sistemde yüklü paketlere bağlı olarak çıktılar değişiklik gösterebilir.

Belirli Bir Gruba Ait Alternatifleri Listeleme

Örneğin, java grubuna ait kayıtlı alternatifleri görüntülemek için:

update-alternatives --list java

Bu komut, grubun kayıtlı alternatiflerini listeler. Örnek çıktı:

/usr/lib/jvm/java-17-openjdk-amd64/bin/java
/usr/lib/jvm/java-21-openjdk-amd64/bin/java

Eğer belirtilen grup mevcut değilse, komut no alternatives for NAME şeklinde bir hata mesajı verecektir.

Bir Alternatifin Ayrıntılarını Görüntüleme

Belirli bir alternatif grubunun tüm kayıtlı seçeneklerini ve hangisinin aktif olduğunu görüntülemek için:

update-alternatives --display java

Örnek çıktı:

java - auto mode
  link best version is /usr/lib/jvm/java-21-openjdk-amd64/bin/java
  link currently points to /usr/lib/jvm/java-21-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-17-openjdk-amd64/bin/java - priority 1711
  slave java.1.gz: /usr/lib/jvm/java-17-openjdk-amd64/man/man1/java.1.gz
/usr/lib/jvm/java-21-openjdk-amd64/bin/java - priority 2111
  slave java.1.gz: /usr/lib/jvm/java-21-openjdk-amd64/man/man1/java.1.gz

Çıktıda, her alternatifin önceliği listelenir. Otomatik modda, en yüksek önceliğe sahip alternatif seçilir. slave satırları, ilgili dosyaları (örneğin, Java için man sayfası) gösterir.

Alternatifler Arasında Geçiş Yapma

Etkileşimli Seçim

Kayıtlı alternatifler arasında etkileşimli olarak seçim yapmak için:

sudo update-alternatives --config java

Bu komut, mevcut alternatifleri listeler ve kullanıcıdan seçim yapmasını ister. Örnek çıktı:

There are 2 choices for the alternative java (providing /usr/bin/java).
Selection    Path                                          Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111       auto mode
  1            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   1711       manual mode
  2            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111       manual mode

Press  to keep the current choice[*], or type selection number: 

Seçim numarasını girip Enter tuşuna basarak alternatifinizi değiştirebilirsiniz. 0 girerek otomatik moda geri dönebilir veya Enter tuşuna basarak mevcut seçimi koruyabilirsiniz.

Not: Bir grubun manuel modda olduğu durumlarda, yeni bir paket kurulduğunda alternatifiniz otomatik olarak değişmez. Seçiminiz korunur.

Alternatif Seçimini Komutla Belirleme

Komut satırından alternatif seçimini değiştirmek için --set seçeneğini kullanabilirsiniz. Bu, betiklerde ve otomatik kurulumlarda oldukça kullanışlıdır. Öncelikle, --list komutunu kullanarak alternatiflerin tam yolunu bulun:

update-alternatives --list java

Ardından, aşağıdaki komutla alternatifinizi değiştirin:

sudo update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java

Bu komut, grubu manuel moda geçirir ve seçilen alternatifin geçerli olması gerekir. Alternatif grubu bağımsız olduğundan, java grubunu değiştirmek javac grubunu etkilemez. Bağlantılı dosyaları görüntülemek için --display komutunu kullanabilirsiniz.

Yeni Alternatif Kaydetme

Paket yöneticisi dışında kurulan programlar için alternatif kaydetmek mümkündür. Örneğin, /opt/acme-tool-1.0/bin/acme-tool ve /opt/acme-tool-2.0/bin/acme-tool yollarında iki farklı sürümünüz olduğunu varsayalım. Alternatifleri kaydetmeden önce dosyaların varlığını doğrulayın:

ls -l /opt/acme-tool-1.0/bin/acme-tool /opt/acme-tool-2.0/bin/acme-tool

Ardından, aşağıdaki komutlarla her iki sürümü de acme-tool grubuna kaydedin:

sudo update-alternatives --install /usr/local/bin/acme-tool acme-tool /opt/acme-tool-1.0/bin/acme-tool 100
sudo update-alternatives --install /usr/local/bin/acme-tool acme-tool /opt/acme-tool-2.0/bin/acme-tool 200

--install seçeneğinin argümanları şunlardır:

  • LINK: Genel komut bağlantısının oluşturulacağı yol (örneğin, /usr/local/bin/acme-tool).
  • NAME: Alternatif grubunun adı (örneğin, acme-tool).
  • PATH: Gerçek ikili dosyanın yolu (örneğin, /opt/acme-tool-1.0/bin/acme-tool).
  • PRIORITY: Öncelik değeri (daha yüksek olan otomatik modda seçilir).

Bu örnekte, otomatik modda daha yüksek önceliğe sahip olan 2.0 sürümü seçilecektir.

Uyarı: /usr/bin/python3 alternatifini değiştirmekten kaçının. Ubuntu ve Debian sistemlerinde Python, sistem araçları tarafından kullanılmaktadır. Bunun yerine, sürümlü komutları (python3.10 gibi), sanal ortamları, pyenv veya /usr/local/bin altında özel komutlar kullanın.

Alternatif Kaldırma

Bir alternatifi kaldırmadan önce, grubun detaylarını görüntüleyerek doğru yolu doğrulayın:

update-alternatives --display acme-tool

Ardından, aşağıdaki komutla alternatifi kaldırın:

sudo update-alternatives --remove acme-tool /opt/acme-tool-1.0/bin/acme-tool

Bu komut, alternatifler veritabanından yolu kaldırır, ancak program dosyasını silmez. Aktif olan yolu kaldırırsanız, grup otomatik moda geçer ve kalan alternatifler arasından en iyisini seçer.

Otomatik Mode Dönüş

Manuel modda yaptığımız bir seçimi otomatik moda geri döndürmek için:

sudo update-alternatives --auto java

Bu komut, grubu otomatik moda geçirir ve en yüksek önceliğe sahip alternatifi seçer.

Editör Alternatifini Değiştirme

editor alternatifi, sistem genelinde /usr/bin/editor komutunu sağlar. Bu komutu kullanan programlar, seçilen alternatife uygun şekilde çalışır. Sistem editörünü değiştirmek için:

sudo update-alternatives --config editor

Listeden yüklü bir editörü seçin (örneğin, vim.basic). Uygulamaların kendi editör ayarları olabilir; örneğin, Git, GIT_EDITOR, core.editor, VISUAL ve EDITOR ortam değişkenlerini kontrol eder.

Hızlı Referans Tablosu

Görev Komut
Tüm alternatif gruplarını listele update-alternatives --get-selections
Bir gruba ait yolları listele update-alternatives --list NAME
Grubun detaylarını görüntüle update-alternatives --display NAME
Etkileşimli seçim yap sudo update-alternatives --config NAME
Alternatifi komutla seç sudo update-alternatives --set NAME PATH
Otomatik moda dön sudo update-alternatives --auto NAME
Yeni alternatif kaydet sudo update-alternatives --install LINK NAME PATH PRIORITY
Alternatifi kaldır sudo update-alternatives --remove NAME PATH

Sorun Giderme

no alternatives for NAME

Belirtilen grup kayıtlı değildir. Mevcut grupları update-alternatives --get-selections komutuyla kontrol edin. Grubu kaydetmek için paket kurun veya --install seçeneğini kullanarak mevcut bir ikili dosyayı kaydedin.

alternative path ... does not exist

--install seçeneğine geçilen yol mevcut olmalıdır. Yolu ls -l PATH komutuyla kontrol edin, ardından yolu düzeltin veya programı kurun.

Düzenli bir dosya alternatifler bağlantısını engelliyor

--force seçeneğini hemen kullanmayın. dpkg -S /path/to/command komutuyla yolu hangi paketin sahiplendiğini kontrol edin ve yerel olarak kurulu dosyaları yedekleyin.

Sonuç

update-alternatives, sistem alternatiflerini yönetmek için güçlü ve esnek bir araçtır. Etkileşimli değişiklikler için --config, betiklerde kullanım için --set ve otomatik seçim için --auto seçeneklerini kullanın. Java gibi çoklu JDK'lar için pratik bir örnek için Java Sürümünü Kontrol Etme makalesine bakabilirsiniz.

Kaynak

Linuxize