> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man8/pkg.8.md).

# pkg.8

`pkg` — 用于操作软件包的工具

## 名称

`pkg`

## 概要

`pkg [-d] command ...` `pkg [-d] add [-fy] [-r reponame] pkg.pkg` `pkg -N` `pkg [-46d] bootstrap [-fy] [-r reponame]`

## 描述

`pkg` 是软件包管理工具。它用于管理从 [ports(7)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man7/ports.7.md) 安装的本地软件包，以及从远程仓库安装/升级软件包。

为避免向后兼容性问题，实际的 [pkg(8)](/man/man8/pkg.8.md) 工具并未安装在基本系统中。首次调用时，`pkg` 将从远程仓库引导安装真正的 [pkg(8)](/man/man8/pkg.8.md)。

**`pkg`** `command ...` 如果尚未安装 [pkg(8)](/man/man8/pkg.8.md)，将获取它、验证其签名、安装，然后将原始命令转发给它。如果已安装，则将所请求的命令转发给真正的 [pkg(8)](/man/man8/pkg.8.md)。

**`pkg`** `add` \[`-fy`] \[`-r` `reponame`] `pkg.pkg` 从本地软件包安装 [pkg(8)](/man/man8/pkg.8.md)，而非从远程获取。如果启用了签名检查，则必须存在正确的签名文件且签名有效，软件包才会被安装。如果指定了 `-f` 标志，则无论是否已安装 [pkg(8)](/man/man8/pkg.8.md)，都将安装。如果指定了 `-y` 标志，引导安装 [pkg(8)](/man/man8/pkg.8.md) 时将不询问确认。如果指定了 `reponame`，则使用该仓库的签名配置。

**`pkg`** `-N` 不进行引导安装，仅确定是否实际安装了 [pkg(8)](/man/man8/pkg.8.md)。如果已安装，返回 0 和已安装的软件包数量，否则返回 1。

**`pkg`** \[`-46`] `bootstrap` \[`-fy`] \[`-r` `reponame`] 尝试引导安装，并在安装完成后不向 [pkg(8)](/man/man8/pkg.8.md) 转发任何内容。使用 `-4` 和 `-6` 时，`pkg` 将分别强制使用 IPv4 或 IPv6 来获取 [pkg(8)](/man/man8/pkg.8.md) 及其签名（按需）。如果指定了 `-f` 标志，则无论是否已安装 [pkg(8)](/man/man8/pkg.8.md)，都将获取并安装。如果指定了 `-y` 标志，引导安装 [pkg(8)](/man/man8/pkg.8.md) 时将不询问确认。如果指定了 `reponame`，则使用该仓库的配置。

## 选项

`pkg` 支持以下选项：

**`-d,`** `--debug` 显示调试信息。可以多次指定以提高详细程度。指定两次时，将启用 fetch(3) 调试输出。

## 配置

配置因位于仓库配置文件还是全局配置文件而异。FreeBSD 的默认仓库配置存储在 **/etc/pkg/FreeBSD.conf** 中，其他仓库配置文件将在 `REPOS_DIR` 中搜索，如果未设置则为 **/usr/local/etc/pkg/repos**。

对于引导安装，`pkg` 将处理它找到的所有仓库，并默认使用最后启用的仓库。

仓库配置以以下格式存储：

```sh
FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
  mirror_type: "srv",
  signature_type: "none",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}
```

**url** 参见环境变量中的 `PACKAGESITE` **mirror\_type** 参见环境变量中的 `MIRROR_TYPE` **signature\_type** 参见环境变量中的 `SIGNATURE_TYPE` **fingerprints** 参见环境变量中的 `FINGERPRINTS` **enabled** 定义是否应使用此仓库。有效值为 `yes`、`true`、`1`、`no`、`false`、`0`。

全局配置可以以下格式存储在 **/usr/local/etc/pkg.conf** 中：

```sh
PACKAGESITE: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
MIRROR_TYPE: "srv",
SIGNATURE_TYPE: "none",
FINGERPRINTS: "/usr/share/keys/pkg",
ASSUME_ALWAYS_YES: "yes"
REPOS_DIR: ["/etc/pkg", "/usr/local/etc/pkg/repos"]
```

每个变量参见环境变量。

## 环境变量

可以设置以下环境变量来覆盖所使用的 `pkg.conf` 文件中的设置。

**`MIRROR_TYPE`** 定义应使用哪种镜像类型。有效值为 `SRV`、`HTTP`、`NONE`。

**`ABI`** 定义要安装的软件包的 ABI。默认 ABI 由 **/bin/sh** 确定。

**`ASSUME_ALWAYS_YES`** 如果设置，引导安装 [pkg(8)](/man/man8/pkg.8.md) 时将不询问确认。

**`SIGNATURE_TYPE`** 如果设置为 `FINGERPRINTS`，则在引导安装 [pkg(8)](/man/man8/pkg.8.md) 时将要求签名并根据已知证书指纹进行验证。

**`FINGERPRINTS`** 如果 **SIGNATURE\_TYPE** 设置为 `FINGERPRINTS`，此值应设置为已知指纹所在的目录路径。

**`PACKAGESITE`** 获取 [pkg(8)](/man/man8/pkg.8.md) 和其他软件包的 URL。

**`REPOS_DIR`** 以逗号分隔的目录列表，将在其中搜索仓库配置文件。

## 文件

配置按所列顺序从以下文件中读取。此路径可以通过设置 `REPOS_DIR` 更改。最后启用的仓库用于引导安装 [pkg(8)](/man/man8/pkg.8.md)。

**/usr/local/etc/pkg.conf**

**/etc/pkg/FreeBSD.conf**

**/usr/local/etc/pkg/repos/\*.conf**

## 实例

此处列出了一些示例。可用命令的完整列表在引导安装后可通过 [pkg(8)](/man/man8/pkg.8.md) 获得。

搜索软件包：

```sh
$ pkg search perl
```

安装软件包：

```sh
% pkg install perl
```

列出已安装的软件包：

```sh
$ pkg info
```

从远程仓库升级：

```sh
% pkg upgrade
```

列出非自动安装的软件包：

```sh
$ pkg query -e '%a = 0' %o
```

列出自动安装的软件包：

```sh
$ pkg query -e '%a = 1' %o
```

删除已安装的软件包：

```sh
% pkg delete perl
```

移除不需要的依赖项：

```sh
% pkg autoremove
```

将软件包从自动改为非自动，这将防止 pkg-autoremove(8) 将其移除：

```sh
% pkg set -A 0 perl
```

将软件包从非自动改为自动，这将使 pkg-autoremove(8) 在没有其他软件包依赖它时允许将其移除：

```sh
% pkg set -A 1 perl
```

从已安装的软件包创建软件包文件：

```sh
% pkg create -o /usr/ports/packages/All perl
```

确定哪个软件包安装了某个文件：

```sh
$ pkg which /usr/local/bin/perl
```

审计已安装软件包的安全公告：

```sh
$ pkg audit
```

检查已安装软件包的校验和不匹配：

```sh
# pkg check -s -a
```

检查缺失的依赖项：

```sh
# pkg check -d -a
```

为不同的 FreeBSD 版本获取软件包及其所有依赖项：

```sh
# pkg -o ABI=FreeBSD:15:amd64 -o IGNORE_OSVERSION=yes fetch -o destdir -d perl
```

## 参见

[ports(7)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man7/ports.7.md), [pkg(8)](/man/man8/pkg.8.md)

## 历史

`pkg` 命令首次出现在 FreeBSD 9.1 中。它在 FreeBSD 10.0 中成为默认的软件包工具，替代了 pkg\_install 工具套件 pkg\_add(1)、pkg\_info(1) 和 pkg\_create(1)。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man8/pkg.8.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
