位元詩人 [FreeBSD] 系統使用教學:管理系統套件

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

大部分 Unix 和 GNU/Linux 會提供套件管理程式,用來自動化安裝和管理軟體的流程。本文介紹 FreeBSD 的套件管理程式。

說明

FreeBSD 有兩種套件格式,packages 和 ports。前者是編譯好的程式,後者則是從原始碼自行編譯。由於編譯大型程式費時甚久,有些甚至要數小時,大部分情形下都會用 packages,只有需要調整編譯選項時才會用 ports。

大部分的套件管理指令需要 root 權限,故本文的指令皆使用 root

搜尋套件

使用 pkg search 指令可以搜尋可用的套件。以下範例指令搜尋可用的 AWK (註)

$ pkg search awk
awka-0.7.5_1                   Converts the AWK script to C, then compiles it
bioawk-1.0.7                   BWK awk modified for biological data
czkawka-3.2.0_2                Multi functional app to find duplicates, empty folders, similar images etc.
gawk-5.1.0                     GNU version of AWK scripting language
goawk-1.8.1                    AWK interpreter written in Go
ja-gawk-3.0.6_1                GNU awk + multi-byte extension
mawk-1.3.4.20190203            Interpreter for the AWK Programming Language
mohawk-2.0.21                  Simple and lightweight HTTP daemon
nawk-20121220_1                Brian Kernighan's pattern scanning and processing language
nighthawk-3.0.0_6              X11 shoot-'em up which requires some lateral thinking
py38-rawkit-0.6.0              Ctypes based libraw bindings
runawk-1.6.1                   Wrapper for AWK interpreter that implements a modules system

(註) 一種用於文字處理的小型語言

由於 AWK 有許多實作品,所以這裡列出多個選項。此外,也有一些和 AWK 無關的程式。因為 pkg search 是以字串搜尋而非語意搜尋的方式來找套件。

pkg search 是少數不需要 root 權限的套件管理指令,因為搜尋套件的動作不會影響到系統。

安裝套件

使用 pkg install 指令來安裝套件。本範例指令安裝 gawk(1) (GNU Awk):

# pkg install gawk

更新套件

使用 pkg update 指令來更新套件。本範例指令更新 gawk

# pkg update gawk

移除套件

使用 pkg remove 指令來移除套件。本範例指令移除 gawk

# pkg remove gawk

移除無用套件

安裝應用程式套件往往會附帶安裝一至多個函式庫套件。當該程式移除後,相關的函式庫套件就顯得冗餘。使用以下指令移除無用套件:

# pkg autoremove

有時候系統使用者會刻意安裝一些函式庫套件,像是在學習程式設計時。使用 -n 參數 (dry run) 可以觀看有那些可移除套件但不會真的移除那些套件:

# pkg autoremove -n

下載及更新 Ports

前文提過,若需要從原始碼編譯程式,會用到 ports。本節開始介紹 ports 的使用方式。

第一次使用 ports 時,需要抓取 ports 樹:

# portsnap fetch

承上,第一次抓取 ports 樹後,需要將其解壓縮:

# portsnap extract

日後需要更新 ports 樹時,則使用以下指令:

# portsnap fetch
# portsnap update

編譯及安裝 Ports 套件

Ports 樹位於 /usr/ports 。每個 ports 套件有自己的目錄。以下範例指令編譯及安裝 lsof(1)

# cd /usr/ports/sysutils/lsof
# make install clean

make install cleanmake installmake clean 兩個指令的結合。前者會編譯後安裝程式,後者會清除編譯時產生的目的檔 (object files)。

調整 Ports 套件的選項

比起 packages,ports 的優點在於可以調整編譯選項,客製化編譯出的程式。但調整的方式並不是直接改 Makefile (註) ,這樣很容易把 ports 套件改壞。而是用 make config 選擇客製化所需的項目。以下是範例指令:

# cd /usr/ports/editors/nano
# make config

(註) Makefile 是編譯程式的設定檔,需搭配 Make 使用

然後編譯、安裝該程式:

# make install clean

移除 Ports 套件

編譯過的 ports 套件和一般的程式無異,所以直接用 pkg remove 指令即可移除該套件。以下是範例指令:

# pkg remove lsof

也可以移動到該 ports 套件所在的目錄後,以 make deinstall 指令移除該套件:

# cd /usr/ports/sysutils/lsof
# make deinstall
關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。