FreeBSD使用pkg包管理器完全指南

一、 核心概念:Ports 与 Packages

FreeBSD 提供了两种安装第三方软件的方式:

方式 描述 特点
Ports Collection 从源代码编译安装。 高度可定制(可启用/禁用功能),但编译耗时。
Packages (pkg) 安装预编译的二进制包。 快速、便捷,是管理附加软件的首选方式。

关键路径差异:通过 pkg 安装的软件,其二进制文件和大多数配置文件位于 /usr/local/ 目录下(例如 /usr/local/bin, /usr/local/etc),这与 Linux 发行版常见的 /usr//etc 不同。

二、 安装与初始配置

1. 安装 pkg 工具

在全新的 FreeBSD 系统上,pkg 工具本身并未预装。首次使用任何 pkg 命令(如 pkg install)时,系统会提示你安装它:

1
2
3
pkg install wget
# 输出:The package management tool is not yet installed...
# 输入 `y` 确认安装。

也可以直接运行以下命令来引导安装:

1
pkg bootstrap
2. 配置文件 (/usr/local/etc/pkg.conf)

pkg 的行为可通过此文件进行全局定制。文件采用 UCL 格式,包含大量注释说明。

  • 常用配置项
    • ASSUME_ALWAYS_YES: true:默认对所有确认提示回答“是”,适用于脚本。
    • AUTOCLEAN: true:安装/升级后自动清理过时的缓存包。
  • 定义命令别名:在文件底部的 ALIAS 部分,可以为常用命令组合创建快捷方式。
  • 查看手册man pkg.conf

三、 日常包管理操作

1. 搜索软件包

在安装前,需要确定软件包的正确名称。

1
2
3
4
5
6
# 基本搜索(在包名和描述中查找)
pkg search apache

# 精确搜索并显示详细信息
pkg search -R apache24
# 输出包括:包名、版本、维护者、描述、依赖等。
2. 安装与卸载
1
2
3
4
5
6
7
8
9
10
# 安装软件包(及其依赖)
pkg install apache24

# 安装时不询问确认(适用于脚本)
pkg install -y nginx

# 卸载软件包
pkg delete nginx
# 或
pkg remove nginx

注意:卸载一个被其他包依赖的包时,依赖包也会被一同卸载。

3. 查询已安装的包
1
2
3
4
5
6
7
8
9
10
11
# 列出所有已安装的包
pkg info

# 查看特定包的详细信息
pkg info nginx

# 列出特定包安装的文件
pkg info -l nginx

# 查询某个文件由哪个包提供
pkg which /usr/local/bin/curl
4. 更新与升级
1
2
3
4
5
6
7
8
# 更新本地包仓库目录(非升级软件)
pkg update

# 升级所有已安装的包到最新版本
pkg upgrade

# 升级特定包
pkg upgrade nginx

四、 高级管理与维护

1. 包缓存管理

pkg 会将下载的包文件缓存到 /var/cache/pkg

1
2
3
4
5
6
7
8
9
10
11
12
13
# 仅下载包而不安装(可用于离线安装)
pkg fetch nginx
# 下载包及其所有依赖
pkg fetch -d nginx

# 清理已被新版替换的旧缓存包
pkg clean

# 清理所有缓存包
pkg clean -a

# 列出缓存内容
ls /var/cache/pkg
2. 锁定与解锁包

防止特定包被意外升级或删除。

1
2
3
4
5
6
7
8
9
10
11
12
# 锁定一个包
pkg lock openssl

# 列出所有被锁定的包
pkg lock -l

# 解锁一个包
pkg unlock openssl

# 锁定/解锁所有包
pkg lock -a
pkg unlock -a
3. 依赖与自动清理
1
2
3
4
5
# 移除不再被任何包依赖的“孤儿”包(自动包)
pkg autoremove

# 查看哪些包是手动安装的(非自动依赖)
pkg prime-list
4. 安全检查与验证
1
2
3
4
5
6
7
8
# 检查所有已安装包是否有已知安全漏洞
pkg audit -F

# 验证所有包的完整性
pkg check -saq

# 验证特定包的文件是否被修改
pkg check -s nginx

五、 包仓库(Repository)配置

FreeBSD 的官方包仓库配置在 /etc/pkg/FreeBSD.conf。默认使用 quarterly 分支,更稳定。

1
2
3
4
FreeBSD: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
enabled: yes
}
  • 切换分支:将 url 中的 quarterly 改为 latest 可获取最新的软件包(可能包含测试版)。
  • 添加第三方仓库:在 /usr/local/etc/pkg/repos/ 目录下创建 .conf 文件。需确保 pkg.confREPO_DIRS 包含该路径。

六、 命令速查与参考

任务 命令
安装 pkg install <包名>
卸载 pkg delete <包名>
搜索 pkg search <关键词>
列表 pkg info
更新仓库 pkg update
升级系统 pkg upgrade
清理缓存 pkg clean
自动移除孤儿包 pkg autoremove
安全检查 pkg audit -F
锁定包 pkg lock <包名>
获取帮助 pkg help <子命令>

七、 重要文件与目录

路径 用途
/usr/local/etc/pkg.conf pkg 主配置文件
/etc/pkg/FreeBSD.conf 官方 FreeBSD 包仓库配置
/usr/local/etc/pkg/repos/ 自定义第三方仓库配置目录
/var/cache/pkg/ 下载的包文件缓存目录
/var/db/pkg/local.sqlite 已安装包的注册数据库(切勿删除
/usr/local/ 通过 pkg 安装的软件根目录

总结:对于绝大多数 FreeBSD 系统管理任务,pkg 是管理第三方软件最有效、最推荐的工具。除非你需要特定的编译选项或软件尚未被打包,否则应优先使用 pkg 而非 Ports。