全平臺全發行版通用的包管理工具 - UPT

SigodenH發表於2019-04-02

特性

統一命令

每款作業系統都有自己的包管理。完成同一各操作,在各個系統中需要輸入不同的命令和引數。

比如我們要獲取可更新的軟體包,必須執行如下命令:

apt list --upgrable       # Ubuntu, Debian, Linux Mint...
yum list updates          # Centos, Redhat...
brew outdated             # MacOS Homebrew
apk list --upgrades       # Apline
pacman -Qu                # Arch, Manjaro...
choco outdated            # Windows Chocolaty
dnf list --upgrades       # Fedora
複製程式碼

這給我們切換和體驗新系統帶來了很大的不便,畢竟包管理是基本而有常用的操作。

upt 解決了這個問題。它可以執行於各個平臺,甚至各個發行版中,提供統一命令執行包管理操作。

upt list -u # 所有平臺命令一致。
複製程式碼

UPT 只是提供統一的介面,包管理功能是通過呼叫系統自帶工具實現。

命令替換

每個人都有自己熟悉的作業系統和包管理工具。

常用 MacOS 的人可能對 brew 命令較熟悉,常用 Windows 的人對 choco 較熟悉,常用 Ubuntu 的人對 apt 較熟悉。

為了使用 upt,還得學套 upt 的命令,這並不輕鬆。幸好,upt 支援命令替換。你不再需要學一個新命令。

如果你是一個熟悉 brew 的人,在 Ubuntu 中進行包管理時,可以下載 upt 命令後,重新命名 uptbrew。你可以在 Ubuntu 中使用 brew 進行包管理了。

安裝

下載可執行檔案

Releases 下載可執行檔案。解壓後是個單一的可執行檔案,將檔案複製的合適的路徑,並確保路徑已加入到 PATH 環境變數中。

mv upt /usr/local/bin # Linux, MacOS
複製程式碼
:: Windows, 以管理員身份執行
move upt C:\Windows\System32 
複製程式碼

使用 Cargo 安裝

upt 使用 rust 語言編寫,併發布到 crates。所以可以使用 cargo 安裝。

# curl https://sh.rustup.rs -sSf | sh # 安裝 cargo
cargo install upt
複製程式碼

使用

  • 安裝軟體包
upt install vim                 # 安裝單個包
upt install vim ripgrep         # 安裝多個
upt install -y vim              # 安裝時自動完成 yes 輸入
複製程式碼
  • 刪除軟體包
upt remove vim                  # 刪除單個包
upt remove vim ripgrep          # 刪除多個
upt remove -y vim               # 刪除時自動完成 yes 輸入
複製程式碼
  • 更新軟體包
upt upgrade vim                 # 更新單個包
upt upgrade vim ripgrep         # 更新多個
upt upgrade -y vim              # 更新時自動完成 yes 輸入
複製程式碼
  • 查詢軟體包
upt search vim
複製程式碼
  • 檢視軟體包詳情
upt show vim
複製程式碼
  • 更新軟體索引
upt update
複製程式碼
  • 更新系統
upt upgrade                    # 更新所有過期的軟體包
upt upgrade -y                 # 更新時自動完成 yes 輸入
複製程式碼
  • 檢視所有已安裝的軟體包
upt list -i
複製程式碼
  • 檢視所有可更新的軟體包
upt list -u
複製程式碼

如果覺得應該支援某個包管理操作,歡迎發 Issue 一起討論。

指令替換表

upt 可執行檔案很小,又需要全平臺通用,不可能自帶包管理功能。它通過呼叫系統自帶工具實現包管理功能。所以 upt 實質上是一個直譯器。

如果你在 Ubuntu 平臺中使用 upt:

  • 輸入 upt list -u
  • 解析後發現你是要執行 獲取所有可更新軟體包 這一任務
  • 檢測到你的系統使用的 apt 包管理工具
  • 將任務 獲取所有可更新軟體包 轉換成 apt 命令
  • 執行命令 apt list --upgradable

如果你將 upt 重新命名成 brewupt 會使用 brew 的語法解析成任務。命令替換就是如此實現的。

下表是輸入與輸出對映,也就是指令替換:

| task                         | udt              | apt                   | brew                | choco                | yum                | dnf                  | pacman          | apk                  |
| :--------------------------- | :--------------- | :-------------------- | :------------------ | :------------------- | :----------------- | :------------------- | :-------------- | :------------------- |
| Install packages             | udt install $pkg | apt install $pkg      | brew install $pkg   | choco install $pkg   | yum install $pkg   | dnf install $pkg     | pacman -S $pkg  | apk add $pkg         |
| Remove packages              | udt remove $pkg  | apt remove $pkg       | brew uninstall $pkg | choco uninstall $pkg | yum remove $pkg    | dnf remove $pkg      | pacman -Rs $pkg | apk del $pkg         |
| Upgrade packages             | udt upgrade $pkg | apt install $pkg      | brew upgrade $pkg   | choco upgrade $pkg   | yum update $pkg    | dnf upgrade $pkg     | pacman -S $pkg  | apk upgrade $pkg     |
| Search for package           | udt search $pkg  | apt search $pkg       | brew search $pkg    | choco search $pkg    | yum search $pkg    | dnf search $pkg      | pacman -Ss $pkg | apk search $pkg      |
| Show package details         | udt show $pkg    | apt show $pkg         | brew info $pkg      | choco info $pkg      | yum info $pkg      | dnf info $pkg        | pacman -Si $pkg | apk info $pkg        |
| Update indexes of packages   | udt update       | apt update            | brew update         | choco upgrade --noop | yum check-update   | dnf check-update     | pacman -Syy     | apk update           |
| Upgrade all packages         | udt upgrade      | apt upgrade           | brew upgrade        | choco upgrade all    | yum update         | dnf upgrade          | pacman -Syu     | apk upgrade          |
| List all upgradable packages | udt list -u      | apt list --upgradable | brew outdated       | choco outdated       | yum list updates   | dnf list --upgrades  | pacman -Qu      | apk list --upgrades  |
| List all installed packages  | udt list -i      | apt list --installed  | brew list           | choco list -lai      | yum list installed | dnf list --installed | pacman -Qe      | apk list --installed |
複製程式碼

指令替換表同時列出了:

  • 能夠替換的命令
  • 支援的包管理工具
  • 命令間轉換的語法

如果你發現有錯誤,或者想新增其他包管理工具,歡迎發 Issue

相關文章