# 绪论

绪论为读者提供本书的整体概览，包括本书定位、对读者的要求、组织结构、书中命令及符号含义等内容，帮助读者建立阅读预期并做好准备。

## 本书定位

本书涵盖 FreeBSD 15.0-RELEASE、14.4-RELEASE 的安装与日常使用（并尽量向下兼容），同时包含部分 16.0-CURRENT 的内容。

主要面向 x86-64（amd64）和 AArch64（arm64）架构，并尽可能支持其他硬件架构。

Windows 测试环境为 Windows 11，并尽量保持系统更新（使用最新的 Windows Update 服务）。

## 对读者的要求

本书以高等院校计算机科学与技术专业一般本科毕业生的及格或以上水平作为难度基准。读者应具备以下基础知识：

* 操作系统基本概念（进程、内存管理、文件系统等）
* 基本的命令行使用经验
* 计算机网络基础知识
* 一定的英文阅读能力（用于阅读官方文档）

如果不具备上述全部知识，仍可通过本书学习 FreeBSD，但建议在遇到相关概念时查阅补充资料。

## 本书的组织结构

**第 1 章 FreeBSD 初见**

围绕自由软件运动与开源运动，为读者介绍 BSD UNIX 的历史与哲学，旨在厘清相关纷争及常见误区。

**第 2 章 FreeBSD 安装基础**

指导读者使用 FreeBSD 内置工具 `bsdinstall` 安装 FreeBSD，包括磁盘分区、用户创建、网络配置等步骤。

**第 3 章 FreeBSD 高级安装**

介绍使用手动及其他专业安装方式和介质，在不同平台上安装 FreeBSD，包括虚拟机、云服务器、特殊硬件等场景。

**第 4 章 FreeBSD 基础**

主要面向 Windows 用户和 Linux 用户。即使读者认为自己已经掌握了一些知识，也建议概览本章各节。内容包括基本命令、文件系统权限、Shell 配置等。

**第 5 章 软件管理和系统升级**

本章涵盖使用 pkg 命令安装二进制包、使用 Ports 编译安装软件，以及 FreeBSD 的系统更新方法。

**第 6 章 桌面环境**

尽可能列举可在 FreeBSD 上运行的桌面环境及窗口管理器，包括 GNOME、KDE、Xfce 等常见环境，以及 i3wm、Hyprland 等平铺式窗口管理器。如果没有读者喜欢的桌面环境，欢迎提交 PR。

**第 7 章 人工智能（AI）**

列举若干前沿人工智能和大语言模型技术，以及如何在 FreeBSD 上运行相关工具。

**第 8 章 本地化与中文支持**

包括中文输入法以及中文世界常用的软件，如 Wine、QQ、微信和 WPS。如果没有读者需要的软件，欢迎提交 PR。

**第 9 章 多媒体和外部设备**

介绍如何使用 FreeBSD 进行音视频播放，以及配置和使用蓝牙、打印机等常用外部设备。

**第 10 章 代理服务器**

中文世界不可或缺的一类软件。本章暂未展开（相关软件在兼容层运行同样可用，但我们仍期待原生支持），欢迎提交 PR。

**第 11 章 jail 容器管理**

介绍 FreeBSD 的原生虚拟化技术 jail，这是 Docker 技术的先驱。内容包括 jail 的创建、配置、管理和网络设置。

**第 12 章 虚拟化与容器管理**

介绍 FreeBSD 上的虚拟化技术，包括 bhyve 虚拟机管理程序（hypervisor）以及其他容器化方案。

**第 13 章 系统管理**

讲解 FreeBSD 的特色功能，主要包括 bsdconfig、SSH 以及系统恢复与引导相关工具的使用方法。

**第 14 章 网络管理**

介绍 IPv4、IPv6 配置及常用网络命令，包括网络接口管理、路由配置、防火墙基础等内容。

**第 15 章 FreeBSD 防火墙**

详细介绍 FreeBSD 自带的防火墙系统，包括 pf、ipfw、ipfilter 等的配置和使用方法。

**第 16 章 服务器**

介绍一些非 Web 服务器的搭建和配置，如文件服务器、邮件服务器等。

**第 17 章 Web 服务器和监控平台**

介绍常用的网络服务器和监控平台，如 Apache、Nginx、Prometheus、Grafana 等。

**第 18 章 嵌入式平台**

主要介绍如何在树莓派、RISC-V 和 x86 等嵌入式设备上运行 BSD 系统。

**第 19 章 数据库管理**

介绍常用数据库的安装和使用，包括 PostgreSQL、MySQL、MongoDB 等。

**第 20 章 游戏、科学计算和专业工具**

介绍游戏、科研教育工具以及专业软件在 FreeBSD 上的使用方法。

**第 21 章 Linux 二进制兼容层**

介绍如何在 FreeBSD 上运行各类 Linux 发行版。如果没有读者喜欢的发行版，欢迎提交 PR。

**第 22 章 FreeBSD 开发与社区贡献**

介绍如何在 FreeBSD 上搭建常用开发环境，以及如何参与 FreeBSD 社区贡献。

**第 23 章 存储与文件系统管理**

主要介绍了 UFS 以及常见的 Windows、Linux 文件系统的使用方法，以及磁盘管理相关内容。

**第 24 章 FreeBSD 内核架构**

介绍 FreeBSD 内核选项，提供完整注释和翻译，帮助读者理解内核配置。

**第 25 章 ZFS 文件系统**

介绍划时代的新型文件系统——ZFS，包括其特性、配置、管理和高级功能。

**第 26 章 OpenBSD 系统入门**

介绍一款安全至上的操作系统——OpenBSD，包括安装、配置和基本使用。

**第 27 章 NetBSD 系统入门**

介绍 NetBSD 操作系统，包括其特点、安装和基本使用方法。

**附录 Ⅰ 计算机概论**

涉及 408（计算机学科专业基础）的相关内容，为读者提供必要的计算机基础知识补充。

**附录 Ⅱ 工具与资源**

包括小众 BSD 操作系统导论、硬件挑选建议、BIOS 参数注解及开源常识。

**附录 Ⅲ UEFI/BIOS 注解**

基于 AMI BIOS，提供全注全译，帮助读者理解系统启动相关设置。

**附录 IV 文学故事**

只有故事，没有酒。

**附录 V 参考文献与术语表**

列出全书涉及的核心参考文献和术语表，方便读者查阅。

## 本书中的命令及符号含义

### 权限

`#` 表示在 `root` 权限下的操作，通常通过 `su`、`sudo` 或 `doas` 获得。

`$`、`%` 表示普通用户权限（注：`%` 在 FreeBSD 文档中不常用作标准提示符，通常使用 `$`）。

### 特别提示

> **注意**
>
> 即使是泛读和跳读也不应忽略。

> **技巧**
>
> 提示一些有助于提高效率、转变思路的方法。

> **警告**
>
> 如果不了解或不按要求执行，将无法完成操作或可能造成重大危害。

> **思考题**
>
> > 美国国家标准与技术研究院（NIST）发布的数字身份指南草案（NIST. NIST SP 800-63B-4: Authentication and Authenticator Management\[EB/OL]. (2025-07)\[2026-04-04]. <https://pages.nist.gov/800-63-4/sp800-63b.html>）指出：
> >
> > 必须要求，当密码被用作单因素认证机制时，其长度至少为 15 个字符。可以允许仅作为多因素认证过程一部分使用的密码较短，但必须要求其长度至少为 8 个字符。
> >
> > 应当允许最大密码长度至少为 64 个字符。
> >
> > 应当接受所有可打印的 ASCII（RFC20）字符以及空格字符作为密码的一部分。
> >
> > 应当接受 Unicode【ISO/IEC 10646】字符作为密码的一部分。在评估密码长度时，每个 Unicode 码点必须被计为一个字符。
> >
> > 不得强制要求其他组成规则（例如，要求混合不同类型的字符）用于密码。
>
> > 不得要求订阅者定期更改密码。然而，如果有证据表明认证器已被泄露，必须强制更改密码。
> >
> > 不得允许订阅者存储提示信息（例如，关于密码如何创建的提醒），该提示信息不应能被未经认证的声明者访问。
> >
> > 不得在用户选择密码时提示其使用基于知识的认证（KBA）（例如“你的第一只宠物叫什么名字？”）或安全问题。
> >
> > 必须要求完整提供密码（而非部分提供），并且必须验证整个提交的密码（例如，不得截断密码）。
>
> > “尽管近年来不少专家一再批评现行密码规则的弊端，但银行、互联网平台和政府机构大多依然固守这些过时、无效甚至有害的规则。”（GoUpSec. “定期更换密码”是最愚蠢的密码规则？\[EB/OL]. (2024-09-27)\[2026-04-04]. <https://www.goupsec.com/news/17579.html>.）
>
> 问题：我们习以为常的“知识”究竟有没有坚实可靠的根基？我们固守的一些东西，究竟是一种传承，还是一种陈规陋习？如何划分二者的界限？

思考题旨在帮助有意愿探索和有动力追问的读者。其形式类似于常见的课后习题，不同之处在于思考题的位置是随机的。尽管可能预设了一些立场和理解，但答案通常是开放的，取决于读者自身。如果读者感到疲惫，可以选择跳过。

### 特殊章节

```
故障排除与未竟事宜
```

旨在将现存的问题、改进方向或未解的谜团留置其中，以期借助后人的智慧。

### 删除线

~~为何人要活着？越是想探究生命的意义，越会陷入混乱。——《Caligula 卡里古拉》（和田纯一，导演. 卡里古拉\[V]. 日本：Caligula 制作委员会，2018.~~ [~~https://www.bilibili.com/bangumi/media/md77552~~](https://www.bilibili.com/bangumi/media/md77552)~~.）第三集标题~~

~~KDE 6 在 Wayland 上右键单击会导致黑屏~~（注：此问题可能已在后续版本中修复）

删除线表示过时内容或带有调侃意味的文字，其不属于正文部分；如无法理解相关“梗”，可直接跳过，不影响阅读。

## pkg 与 ports

FreeBSD 提供两种软件安装方式：pkg（二进制包管理）和 Ports（源码编译）。这两种方式各有优势，可以根据实际需求选择使用，也可以混合使用。

pkg 是 FreeBSD 的二进制包管理器，通过预编译的软件包提供快速、便捷的安装方式，适合大多数用户的日常使用。Ports 则提供了从源码编译安装的方式，允许用户根据需要自定义配置选项，适合需要定制化或优化的场景。

> **请注意**
>
> ports 通常对应 HEAD 分支，建议 pkg 与 ports 保持在同一主线上，即均选择 `latest`。你也可以自行使用 pkg 对应的 Ports 季度分支，如 `2025Q1`。

如果要安装软件 `yyy`，`yyy` 在 ports 里是 `xxx/yyy`，那么路径便是 `/usr/ports/xxx/yyy`。

首先可以通过 pkg 安装二进制软件包，和绝大多数 Linux 用法一样：

```sh
# pkg install yyy
```

还可以这样：

```sh
# pkg install xxx/yyy
```

或者这样简写：

```sh
# pkg ins yyy
```

还可以通过 Ports 编译安装：

```sh
# cd /usr/ports/xxx/yyy
# make install clean
```

系统会不断弹出配置窗口询问你的选择。如果使用默认选项，请这样做：

```sh
# cd /usr/ports/xxx/yyy
# make BATCH=yes install clean
```

如果你想一次性完成所有配置：

```sh
# cd /usr/ports/xxx/yyy
# make config-recursive # 会一直询问，直到结束依赖
# make install clean
```
