Ubuntu 套件管理(apt vs apt-get vs dpkg)
apt(Advanced package tool)
他是 Ubuntu 推薦的 package 管理工具,用來管理 package and dependencies。
常用command(需要 root 權限, ex: sudo, su- …):
- apt install,安裝套件
- apt remove,移除套件
- apt update,更新 package info,你可能會想為什麼要更新 package info?因為當你用 pkg 管理 package,有關 package 的資訊都是根據你在本地端的 pkg index( /var/lib/apt/lists ) 來進行安裝,也就是當你安裝的套件的開發者更新版本,ubuntu 的官方 repo 會有這個新的版本的 info,但是你本地端的 pkg-index 不會自動更新,不會去看官方 repo,除非你 apt update,這樣你本地端的 pkg index 也會更新,也就是會收到那個開發者的新套件資訊。
- apt upgrade,根據本地端的 package info,升級已經安裝的 package 版本,上一個指令只是更新 info, 沒有安裝,所以這兩個指令常常一起使用。 apt update && apt upgrade,你在新的電腦上最好也先執行此指令。
- apt list,列出所有 pkg,加上 --install 就會列出你安裝的 pkg,可以在加上 | grep … 來抓取特定 pkg。
apt list -a sudo,可以查看特定 pkg 是否安裝,例如左邊的例子為 sudo pkg 是否有安裝。How do I see what packages are installed on Ubuntu Linux?
事實上,apt list --install 會列出所有你手動安裝跟 dependencies,所以會很多,可以用 apt list --manual-installed 指印出自己安裝的。
apt-get
apt-get 是 apt 的前身,事實上,apt合併了apt-get 跟 apt-cache,apt-get 是 command-line utility,跟 apt 使用同樣的 apt library。
但 apt 沒有完全合併所有 apt-get 的函數,所以你有時候還是會用到 apt-get。並且通常時候 apt command 並且快且容易記憶。
有時候我們會看到 WARNING: apt does not have a stable CLI interface. Use with caution in scripts. 也就是因為 apt 是給使用者使用的,所以當你要的 script 可能要用到 pkg 等相關的東西,請使用 apt-get 。
apt
's output is not well usable in scripts. For example,apt install
(compared toapt-get install
) displays a progress bar that's useless for scripts and can throw errors when the output is parsed.apt show firefox
shows a hint for an additional record, which is also totally useless in a script, you want it to simply output every record there – that's whatapt-cache show firefox
does. Let's see whatman apt
has to say about that:
https://askubuntu.com/questions/990823/apt-gives-unstable-cli-interface-warning
dpkg
dpkg 是一個較低階的 package manager,事實上,apt 使用 dpkg。
dpkg 只能安裝下載的 packet(.deb file),它無法像 apt 一樣 apt install。並且當你用 dpkg 安裝檔案,他不會當你安裝此 package 的 dependencies,因此會有 error。
你可以使用 apt-get install -f 解決 dependencies 。https://www.imaginelinux.com/dpkg-dependency-problems/
常用指令:
- dpkg -i *.deb