Linux下alternatives命令學習總結

来源:https://www.cnblogs.com/kerrycode/archive/2023/07/07/17534576.html
-Advertisement-
Play Games

在Linux系統中提供了一個alternatives命令,用於在多個同功能的軟體,或軟體的多個不同版本間選擇、切換。簡單來說就是版本切換控制。例如,你的操作系統有多個Python版本,例如python3.6,Python 3.9,如果不用alternatives命令,那麼你可能需要通過手工修改軟鏈接 ...


在Linux系統中提供了一個alternatives命令,用於在多個同功能的軟體,或軟體的多個不同版本間選擇、切換。簡單來說就是版本切換控制。例如,你的操作系統有多個Python版本,例如python3.6,Python 3.9,如果不用alternatives命令,那麼你可能需要通過手工修改軟鏈接來實現Python版本的切換。如果用alternatives命令就可以很容易的實現Python版本的切換和管理。

另外,關於命令alternatives與update-alternatives的關係,其實先有update-alternatives命令,然後才有alternatives,update-alternatives最開始是Debian Linux下的一個項目,用於管理多版本,它是Perl編寫的,然後RHEL重寫了這個項目,名字也改為了alternatives,alternatives則在基於Fedora的分發版本(Redhat, CentOS)中發行,傳播,而update-alternatives一般存在Debian Linux下。但是為了統一或者方便,在RHEL下你也會看到update-alternatives這個命令,它此時實際上是一個軟鏈接,指向alternatives命令。如下所示:

# more /etc/redhat-release 
Red Hat Enterprise Linux release 8.8 (Ootpa)
# whereis alternatives
alternatives: /usr/sbin/alternatives /etc/alternatives /usr/share/man/man8/alternatives.8.gz
# whereis update-alternatives
update-alternatives: /usr/sbin/update-alternatives /usr/share/man/man8/update-alternatives.8.gz
# ll /usr/sbin/update-alternatives
lrwxrwxrwx. 1 root root 12 Jul 27  2021 /usr/sbin/update-alternatives -> alternatives

查看alternatives命令的幫助信息

alternatives或alternatives --help

$ alternatives
alternatives version 1.19.1 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.

usage: alternatives --install <link> <name> <path> <priority>
                    [--initscript <service>]
                    [--family <family>]
                    [--slave <slave_link> <slave_name> <slave_path>]*
       alternatives --remove <name> <path>
       alternatives --auto <name>
       alternatives --config <name>
       alternatives --display <name>
       alternatives --set <name> <path>
       alternatives --list
       alternatives --remove-all <name>
       alternatives --add-slave <name> <path> <slave_link> <slave_name> <slave_path>
       alternatives --remove-slave <name> <path> <slave_name>

common options: --verbose --test --help --usage --version --keep-missing --keep-foreign
                --altdir <directory> --admindir <directory>

主要常使用的參數是 install ,remove,config,display,list這5個參數。

install  --生成軟連接

remove   --刪除軟連接

config   --選擇軟連接

display  --顯示軟連接

list     --顯示所有軟連接

例子:顯示所有軟連接

$ alternatives --list
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
python                  auto    /usr/libexec/no-python
cifs-idmap-plugin       auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
ld                      auto    /usr/bin/ld.bfd
modules.sh              auto    /usr/share/Modules/init/profile.sh
python3                 manual  /usr/bin/python3.9

例子:顯示python3的軟連接

$ alternatives --display python3
python3 - status is manual.
 link currently points to /usr/bin/python3.9
/usr/bin/python3.6 - priority 1000000
 slave easy_install-3: /usr/bin/easy_install-3.6
 slave pip-3: /usr/bin/pip-3.6
 slave pip3: /usr/bin/pip3.6
 slave pydoc-3: /usr/bin/pydoc3.6
 slave pydoc3: /usr/bin/pydoc3.6
 slave pyvenv-3: /usr/bin/pyvenv-3.6
 slave python3-man: /usr/share/man/man1/python3.6.1.gz
/usr/bin/python3.9 - priority 3900
 slave easy_install-3: /usr/bin/easy_install-3.9
 slave pip-3: /usr/bin/pip-3.9
 slave pip3: /usr/bin/pip3.9
 slave pydoc-3: /usr/bin/pydoc3.9
 slave pydoc3: /usr/bin/pydoc3.9
 slave pyvenv-3: (null)
 slave python3-man: /usr/share/man/man1/python3.9.1.gz
Current `best' version is /usr/bin/python3.6.

如上所示,--display顯示鏈接組的所有信息,包括鏈接的模式(自動還是手動)、鏈接priority值、所有可用的鏈接命令

例子:選擇軟連接

註意,選擇軟鏈接必須使用root許可權,否則會遇到許可權問題,如下所示:

$ alternatives --config python3

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
*  1           /usr/bin/python3.6
 + 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number: 1
failed to create /var/lib/alternatives/python3.new: Permission denied

root用戶下操作:

# alternatives --config python3

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
*  1           /usr/bin/python3.6
 + 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number: 1
# alternatives --list
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
python                  auto    /usr/libexec/no-python
cifs-idmap-plugin       auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
ld                      auto    /usr/bin/ld.bfd
modules.sh              auto    /usr/share/Modules/init/profile.sh
python3                 manual  /usr/bin/python3.6

(*)星號表示當前系統使用的版本,加號表示優先順序最高的。輸入數值可修改預設配置,直接按回車保持原來狀態

例子:生成軟連接python

alternatives --install <link> <name> <path> <priority>

# link是在/usr/bin/,/usr/local/bin/等預設PATH搜索目錄
# name是在/etc/alternatives目錄中的鏈接名
# path是真正的可執行程式的位置,可以在任何位置
# priority是優先順序

例如,當前環境只有python3,你想使用python這個命令,而不想使用python3的話,那麼我們可以生成一個軟連接。

# alternatives --install /usr/bin/unversioned-python python /usr/bin/python3.9 2
# alternatives --list | grep python
python                  auto    /usr/bin/python3
python3                 manual  /usr/bin/python3.9

註意,link的命令最好合乎規範,否則可能有告警信息:

# alternatives --install /usr/bin/python python /usr/bin/python3.9 2
the primary link for python must be /usr/bin/unversioned-python
# alternatives --list
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
python                  auto    /usr/bin/python3
cifs-idmap-plugin       auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
ld                      auto    /usr/bin/ld.bfd
modules.sh              auto    /usr/share/Modules/init/profile.sh
python3                 manual  /usr/bin/python3.9

關於priority優先順序, 當命令鏈接已存在時,需高於當前值,因為當alternative為自動模式時,系統預設啟用priority高的鏈接

例子:刪除軟連接

# alternatives --remove python /usr/libexec/no-python

那麼我們接下來簡單探究一下,在版本切換時,alternatvies命令做了一下啥

# alternatives --list | grep python3
python                  auto    /usr/bin/python3
python3                 manual  /usr/bin/python3.9
# whereis python3
python3: /usr/bin/python3.6 /usr/bin/python3.6m /usr/bin/python3 /usr/bin/python3.9 /usr/lib/python3.6 /usr/lib/python3.9 /usr/lib64/python3.6 /usr/lib64/python3.9 /usr/include/python3.6m /usr/include/python3.9 /usr/share/man/man1/python3.1.gz
# ll /usr/bin/python3
lrwxrwxrwx. 1 root root 25 May 12 11:04 /usr/bin/python3 -> /etc/alternatives/python3
# ll /etc/alternatives/python3
lrwxrwxrwx 1 root root 18 Jul  6 15:00 /etc/alternatives/python3 -> /usr/bin/python3.9
# ll /usr/bin/python3.9
-rwxr-xr-x 1 root root 7776 Dec 21  2022 /usr/bin/python3.9
# alternatives --config python3

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
*  1           /usr/bin/python3.6
 + 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number: 1
# python3 --version
Python 3.6.8
# ll /usr/bin/python3
lrwxrwxrwx. 1 root root 25 May 12 11:04 /usr/bin/python3 -> /etc/alternatives/python3
# ll /etc/alternatives/python3
lrwxrwxrwx 1 root root 18 Jul  7 10:46 /etc/alternatives/python3 -> /usr/bin/python3.6

如上所示,我們看到alternatvies其實是通過多一層軟鏈接,例如,/usr/bin/python3指向/etc/alternatives/python3,這一層關係不變, 切換python版本時,我們看到鏈接/etc/alternatives/python3 指向了不同的python版本來實現的。

掃描上面二維碼關註我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當初剛開始學單鏈表學的是一頭霧水,簡直就是徹頭徹尾災難,一塌糊塗,過段時間後經過自己的重新認真思考再結合小練習明白了它是怎麼個回事兒。 1、首先從它的邏輯上入手,對他有大體認知。 簡單來說就是一個一個有方向小塊兒連在一起,好像疫情期間大家排隊做核酸,都朝著醫護人員那個方向,醫護人員會從第一個開始數有 ...
  • 目前為止,介紹的`numpy`數組基本都是關於數值的,其實,`numpy`本身就是一個用於數值計算的基礎庫。 不過,除了數值計算之外,`numpy`也能夠支持**結構化數組**。 # 1. 關聯不同類型數據 `numpy`的數組為了提高計算性能,要求數組的數據類型要一致。但是現實情況下,我們經常遇到 ...
  • **爬蟲,這個經常被人提到的詞,是對數據收集過程的一種形象化描述。特別是在Python語言中,由於其豐富的庫資源和良好的易用性,使得其成為編寫爬蟲的絕佳選擇。本文將從基礎知識開始,深入淺出地講解Python爬蟲的相關知識,並分享一些獨特的用法和實用技巧。本文將以實際的網站為例,深入闡述各個處理部分, ...
  • # 劇透警告,沒寫過的勿觸 題目: > 編寫一個方法,找出兩個數字a和b中最大的那一個。不得使用if-else或其他比較運算符。 qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq q ...
  • Aware是Spring提供的一個標記超介面,指示bean有資格通過回調樣式的方法由Spring容器通知特定的框架對象,以獲取到容器中特有對象的實例的方法之一。實際的方法簽名由各個子介面確定,但通常只包含一個接受單個參數的void返回方法。 ...
  • ...
  • # Unity AssetPostprocessor中Model相關函數的實際應用 Unity AssetPostprocessor是Unity引擎中的一個重要功能,它可以在導入資源時自動一些腳本,以便對資源進行自定義處理。其中,Model相關的函數可以用於對導入的3D模型進行處理,包括修改模型的材 ...
  • # feishu-doc-export 一個支持Windows、Mac、Linux系統的飛書文檔一鍵導出服務,僅需一行命令即可將飛書知識庫的全部文檔同步到本地電腦。導出速度嘎嘎快,實測**700**多個文檔導出只需**25**分鐘,且程式是後臺掛機運行,不影響正常工作。 ## 動機 最近也是公司辦公 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...