仅本页所有页面
由 GitBook 提供支持
无法为325页生成 PDF,生成在100页时停止。
使用50页进行扩展。
1 / 100

FreeBSD 手册

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

前言

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第1章 简介

Loading...

Loading...

Loading...

第2章 安装 FreeBSD

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第3章 FreeBSD 基础

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第4章 安装应用程序:软件包和 Ports

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第5章 X Window 系统

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第6章 FreeBSD 中的 Wayland

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第7章 网络

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第8章 桌面环境

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第9章 多媒体

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第10章 配置 FreeBSD 内核

Loading...

Loading...

Loading...

Loading...

Loading...

FreeBSD 中文手册

警告

除已校对部分外,本项目目前翻译错漏百出,不适合用于生产。

本项目目前处于低维护状态,主要维护者因精力所限仅处理 PR。欢迎社区通过 PR 贡献力量。

正在施工,具体进度请看编辑日志。

官方原址:https://docs.freebsd.org/en/books/handbook/

旧版存档

https://www.alipan.com/s/9rUaCHKauvC

编辑日志

  • 2025.12.1 仅更新 handbook/cutting-edge 到 https://cgit.freebsd.org/doc/commit/?id=099e57c42a

  • 2025.8.15 同步至

  • 2025.5.2 机器翻译至

  • 2024.9.28

  • 2.1 校对完成

  • 2.2 校对完成

  • 2.3 校对完成

  • 2.4 校对完成

  • 2.5 校对完成

  • 2.6 校对完成

  • 2.7 校对完成

  • 2.8 校对完成

  • 2.9 校对完成

  • 2.10 校对完成

  • 2024.9.27

    • 1.1 校对完成

    • 1.2 校对完成

    • 1.3 校对完成

  • https://github.com/freebsd/freebsd-doc/commit/f6d5b57b005213d676aa958f48ea1315ee682aff
    https://github.com/freebsd/freebsd-doc/commit/8f28a757b13aa8d1db6528453b4bd9df776271e9

    第一部分:快速开始

    这部分手册是面向 FreeBSD 新用户和管理员的。在本章节:

    • 介绍了 FreeBSD。

    • 引导读者完成安装过程。

    • 教授 UNIX® 基础知识和基本原理。

    2.2.最低硬件要求

    安装 FreeBSD 的硬件要求因架构和版本而异。每款 FreeBSD RELEASE 支持的硬件架构和设备列在 页面上。也提供了针对不同架构正确镜像的建议。

    2.10.使用 Live CD

    bsdinstall 的欢迎菜单(见提供了选项 Live CD。这对那些仍在考虑 FreeBSD 是否适合自己的用户很有帮助,他们可以在安装之前测试一些功能。

    在使用 Live CD 前应注意以下几点:

    • 使用系统需要身份验证。用户名为 root,密码为空。

    • 由于系统直接从安装介质运行,性能将明显弱于安装在硬盘上的系统。

    示范如何安装用于 FreeBSD 的大量第三方应用程序。

  • 介绍 X,即 UNIX® 窗口系统,并详细说明了如何对桌面环境进行配置,让用户使用起来更加高效。

  • 介绍了 Wayland,它是一款新的 UNIX® 显示服务器。

  • 我们已经尽量减少了文本中参考文献的引用数量,因此你可以通读该部分,不会遇到经常翻页的问题。

    FreeBSD 版本信息
    FreeBSD 下载页面

    此功能仅提供命令提示符,未提供图形界面。

    欢迎菜单

    FreeBSD 中文手册

    商标

    FreeBSD 是 FreeBSD 基金会的注册商标。

    IBM、AIX、OS/2、PowerPC、PS/2、S/390 和 ThinkPad 是国际商业机器公司在美国、其他国家或两者之间的商标。

    IEEE、POSIX 和 802 是美国电气和电子工程师协会的注册商标。

    Red Hat、RPM 是 Red Hat, Inc.在美国和其他国家的商标或注册商标。

    3Com 和 HomeConnect 是 3Com Corporation 的注册商标。

    Adobe、Acrobat、Acrobat Reader、Flash 和 PostScript 是 Adobe Systems Incorporated 在美国和/或其他国家的注册商标或商标。

    Apple、AirPort、FireWire、iMac、iPhone、iPad、Mac、Macintosh、Mac OS、Quicktime 和 TrueType 是美国和其他国家注册的 Apple Inc.商标。

    Intel、Celeron、Centrino、Core、EtherExpress、i386、i486、Itanium、Pentium 和 Xeon 是 Intel Corporation 或其在美国和其他国家的子公司的商标或注册商标。

    Linux 是 Linus Torvalds 的注册商标。

    Microsoft、IntelliMouse、MS-DOS、Outlook、Windows、Windows Media 和 Windows NT 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。

    Motif、OSF/1 和 UNIX 是 The Open Group 在美国和其他国家的注册商标,IT DialTone 和 The Open Group 是 The Open Group 的商标。

    Sun、Sun Microsystems、Java、Java Virtual Machine、JDK、JRE、JSP、JVM、Netra、OpenJDK、Solaris、StarOffice、SunOS 和 VirtualBox 是 Sun Microsystems, Inc.在美国和其他国家的商标或注册商标。

    RealNetworks、RealPlayer 和 RealAudio 是 RealNetworks, Inc.的注册商标。

    Oracle 是 Oracle Corporation 的注册商标。

    3ware 是 3ware Inc.的注册商标。

    ARM 是 ARM Limited 的注册商标。

    Adaptec 是 Adaptec, Inc.的注册商标。

    Android 是 Google Inc.的商标。

    Heidelberg、Helvetica、Palatino 和 Times Roman 是 Heidelberger Druckmaschinen AG 在美国和其他国家注册的商标或商标。

    Intuit 和 Quicken 是 Intuit Inc.或其子公司在美国和其他国家注册的商标和/或注册服务商标。

    LSI Logic、AcceleRAID、eXtremeRAID、MegaRAID 和 Mylex 是 LSI Logic Corp.的商标或注册商标。

    MATLAB 是 The MathWorks, Inc.的注册商标。

    SpeedTouch 是 Thomson 的商标。

    VMware 是 VMware, Inc.的商标。

    Mathematica 是 Wolfram Research, Inc.的注册商标。

    Ogg Vorbis 和 Xiph.Org 是 Xiph.Org 的商标。

    XFree86 是 The XFree86 Project, Inc.的商标。

    许多制造商和销售商用来区分其产品的名称被宣称为商标。在本文档中,如果 FreeBSD 项目知晓了这些商标声明,他们的名称旁将带有符号“™”或“®”。

    3.1.概述

    本章介绍了 FreeBSD 操作系统的基础命令及功能。这些章节中的大部分内容对于所有类 UNIX® 操作系统来说都是适用的。建议 FreeBSD 新用户仔细阅读本章。

    阅读本章后,你将会了解:

    • 如何使用和配置虚拟控制台。

    • 如何在 FreeBSD 上创建和管理用户和组。

    • UNIX® 文件权限和 FreeBSD 文件标志的工作原理。

    • FreeBSD 文件系统的默认布局。

    • FreeBSD 磁盘结构。

    • 如何挂载及卸载文件系统。

    • 进程、守护程序和信号分别是什么。

    • 什么是 Shell,如何修改默认登录环境。

    • 如何使用基本的文本编辑器。

    • 什么是设备和设备节点。

    • 如何阅读手册页面以获取更多信息。

    概述

    欢迎来到 FreeBSD!本手册涉及了 FreeBSD 14.3-RELEASE 和 13.5-RELEASE 的安装和日常使用。本书是许多人不懈努力的成果。有些部分可能已经过时。有志于帮助更新和增补此文档的人可以发送电子邮件至 FreeBSD 文档项目邮件列表。

    可以从 FreeBSD 官网得到本书的最新版本。还可以从 https://docs.FreeBSD.org/doc/ 获取旧版本。本书可以从 FreeBSD 下载服务器和众多镜像站中下载(提供了多种文件格式和压缩方式)。可以通过手册和其他文档的搜索页面中进行搜索。

    5.3.X Window 系统概览

    X Window 系统是 UNIX® 平台的传统图形架构,既支持最新技术,又兼顾对历代应用程序的支持。包括桌面组件在内的应用程序由 Xorg(1) 服务器承载。该系统具有网络感知能力,其各个组件可以跨网络协同工作。

    致谢

    你手中的这本书凝聚着全世界数百人的心血。无论是改正了错别字,还是撰写了完整的章节,一切贡献都是有用的。

    有多家公司通过向作者支付全职工作的工资、支付出版费用等方式来支持本文档的编写。特别是 BSDi(后来被风河系统公司收购)曾赞助 FreeBSD 文档项目的成员全职改进本书,最后于 2000 年 3 月纸质版第一版出版(ISBN 1-57176-241-8)。随后,风河系统公司又支付了几位作者的稿酬,以改进排版打印等基础工具,并增补新章节。这项工作的最终成果是于 2001 年 11 月出版的纸质版第二版(ISBN 1-57176-303-1)。在 2003-2004 年期间,FreeBSD Mall, Inc 为几位撰稿人支付了稿酬来完善手册,为纸质版第三版做准备。纸质版第三版分成了两卷本。这两卷分别以书名《FreeBSD 手册第 3 版第 1 卷:用户指南》(The FreeBSD Handbook 3rd Edition Volume 1: User Guide,ISBN 1-57176-327-9)和《FreeBSD 手册第 3 版第 2 卷:管理员指南》(The FreeBSD Handbook 3rd Edition Volume 2: Administrators Guide,ISBN 1-57176-328-7)进行出版。

    3.11.设备和设备节点

    设备是一个主要用于描述系统中与硬件相关活动的术语,包括磁盘、打印机、显卡和键盘。当 FreeBSD 启动时,大多数启动消息都与设备的检测有关。启动消息的副本会保存到 /var/run/dmesg.boot 文件中。

    每个设备都有一个设备名称和编号。例如,ada0 是第一个 SATA 硬盘,而 kbd0 表示键盘。

    FreeBSD 中的大多数设备必须通过名为设备节点的特殊文件访问,这些文件位于 /dev 目录中。

    9.1.概述

    多媒体章节概述了 FreeBSD 上的多媒体支持。多媒体应用程序和技术已经成为现代计算的不可或缺的一部分,而 FreeBSD 为各种多媒体硬件和软件提供了强大而可靠的支持。本章节涵盖了音频、视频和图像处理等多种多媒体组件。它还讨论了各种媒体格式和编解码器,以及用于多媒体创作和播放的工具和应用程序。此外,本章节还介绍了多媒体系统的配置、故障排除和优化。无论你是多媒体爱好者还是专业内容创作者,FreeBSD 都为多媒体工作提供了一个强大的平台。本章节旨在帮助充分发挥 FreeBSD 的多媒体功能,提供有用的信息和实际示例,帮助用户快速入门。

    第三版

    当前版本的在线手册凝聚着过去十年间许多贡献者的不懈努力。自 2004 年两卷本的第三版出版以来,以下是一些重要变化:

    • 新增了 ,介绍了如何在 FreeBSD 上运行 Windows® 应用程序。

    • 新增了 的有关信息,它是一款功能强大的性能分析工具。

    • 新增了,介绍了 FreeBSD 中的非原生文件系统,如 Sun™ 的 ZFS。

    3.10.文本编辑器

    大多数 FreeBSD 的配置都是通过编辑文本文件完成的,因此熟悉一个文本编辑器是一个好主意。FreeBSD 的基本系统中自带了一些文本编辑器,Ports 中还提供了更多。

    一个适合入门的简单编辑器是 ,即 easy editor(简易编辑器)。要启动该编辑器,可以键入 ee filename,其中 filename 是要编辑的文件名。进入编辑器后,所有用于操作编辑器功能的命令都会列在显示器顶部。插入符号(^)代表 Ctrl,因此 ^e 就是 Ctrl+e。要退出 ,按下 Esc,然后从主菜单中选择“leave editor(退出编辑器)”选项。如果文件已被修改,编辑器会提示保存更改。

    FreeBSD 的基本系统中还包括一些功能更强的文本编辑器,比如 。其他编辑器如 和 是 FreeBSD Ports 的一部分。这些编辑器提供了更强大的功能,但学习起来也更复杂。长期来看,学习如 vim 或 Emacs 这样的强大编辑器可以节省更多时间。

    许多修改文件或需要输入内容的应用程序会自动打开一个文本编辑器。要更改默认编辑器,可以按照 中的说明设置 EDITOR

    第四版

    当前版本的手册凝聚了工作组的长久努力,工作组一直在审查和更新手册中的所有内容。以下是自第四版手册以来的主要更新。

    • 手册已从 转换为 和 。

    • 创建了 。

    • 新增了 及有关在 FreeBSD 上安装和配置 Wayland 的信息。

    4.7.安装后的注意事项

    无论软件是通过二进制包还是 Ports 安装,大多数第三方应用程序在安装后都需要进行一定程度的配置。以下命令和位置可以帮助确定应用程序安装了哪些内容。

    • 大多数应用程序至少会在 /usr/local/etc 中安装一个默认的配置文件。如果应用程序有大量配置文件,则会创建一个子目录来存放这些文件。通常,示例配置文件会以 .sample 后缀结尾。应该查看并根据系统的需要编辑这些配置文件。要编辑示例文件,首先将其复制到没有 .sample 后缀的文件名。

    • 提供文档的应用程序会将文档安装到 /usr/local/share/doc 目录中,许多应用程序还会安装手册页。应该在继续操作之前参考这些文档。

    2.9.故障排除

    本节涉及基本的安装故障排除,例如常见问题。

    请查看 页面上列出的硬件注意事项,确保硬件受支持。

    注意

    某些安装问题可以通过更新各种硬件组件的固件来避免或缓解——最明显的是主板。主板固件通常被称为 BIOS。大多数主板和计算机制造商都有一个用于升级和升级信息的网站。

    制造商通常建议非必要不升级主板 BIOS,应仅在出现关键更新等情况下才考虑升级。升级过程 可能 出现问题,造成 BIOS 不完整,导致计算机无法正常工作。

    如果系统在启动时探测硬件时卡住,或在安装过程中表现异常,ACPI 可能是罪魁祸首。在 i386 和 amd64 平台上,FreeBSD 在引导期间检测到系统 ACPI 服务时,会大量使用它来帮助系统配置。不幸的是,ACPI 驱动程序以及系统主板和 BIOS 固件中仍然存在一些错误。可通过在第三阶段引导加载程序中设置 hint hint.acpi.0.disabled 来禁用 ACPI:

    每次系统启动时,这个设置都会被重置,因此需要将 hint.acpi.0.disabled="1" 添加到文件 /boot/loader.conf

    6.1.简介

    在使用 bsdinstall 安装 FreeBSD 时,系统不会自动安装图形用户界面。本章将介绍如何选择、安装和配置 Wayland 合成器,以提供图形环境。

    在阅读本章之前,你应当:

    • 知道如何安装 。

    • 知道如何识别和配置 。

    阅读本章后,你将了解:

    8.1.概述

    虽然 FreeBSD 由于其性能和稳定性而广受欢迎于服务器领域,但它同样非常适合作为日常使用的桌面系统。FreeBSD 的 Ports 中包含 36000 余款应用程序,因此构建一款能够运行多种桌面应用的定制化桌面环境变得十分简单。本章将演示如何安装常见的桌面环境,以及网页浏览器、办公软件、文档查看器和财务软件等桌面应用。

    前提条件:

    • 本章的读者应已了解如何在 FreeBSD 上安装 或 。

    • 本章中将指导读者安装官方预编译软件包。如需了解如何通过 Ports 构建自定义软件包,请参考 一节。

    4.1.概述

    FreeBSD 自带了丰富的系统工具作为基本系统的一部分。此外,FreeBSD 提供了两种互补技术用于安装第三方软件:FreeBSD Ports,用于从源代码安装;以及软件包,用于从预构建的二进制文件安装。可以使用任一方法从本地介质或网络安装软件。

    阅读完本章后,你将会知道:

    • 二进制软件包和 ports 之间的区别。

    • 如何查找移植到 FreeBSD 的第三方软件。

    • 如何使用 pkg 管理二进制包。

    2.7.获取安装文件

    安装时间会因所选发行版、安装介质和计算机速度而异。一系列信息可指示进度。

    首先,安装程序会格式化所选的磁盘并初始化分区。接下来,在使用 bootonly media/mini memstick 的情况下,它会下载所选组件:

    图 31. 获取分发文件

    接下来,会验证发行文件的完整性,确保它们在下载过程中没有损坏或在安装介质中读取错误:

    图 32. 校验分发文件

    最后,经过校验的分发文件会被解压到磁盘上:

    图 33. 提取发行文件

    7.5.主机名

    主机名表示网络中主机的完全限定域名(FQDN)。

    技巧

    如果主机未设置主机名,FreeBSD 会将自己称为 “Amnesiac”。

    7.5.1. 检查当前主机名

    可以使用 来检查当前主机名:

    输出应类似于以下内容:

    1.1.概述

    感谢你对 FreeBSD 的关注!以下章节涉及了 FreeBSD 项目的各个方面,如历史、目标、发展模式等。

    在阅读本章后,你将会收获:

    • FreeBSD 与其他计算机操作系统的关系。

    • FreeBSD 项目的历史。

    • FreeBSD 项目的宗旨。

    10.1.概述

    内核是 FreeBSD 操作系统的核心。它负责管理内存、执行安全控制、网络通信、磁盘访问等众多任务。虽然 FreeBSD 的大部分内容是动态可配置的,但一些用户可能希望配置并编译自定义内核。

    阅读本章后,你将了解:

    • 何时构建自定义内核。

    • 如何进行硬件清单盘点。

    • 如何自定义内核配置文件。

    7.1.概述

    本章将深入探讨网络配置和性能,展示了 FreeBSD 操作系统强大的网络能力。无论是使用有线还是无线网络,本章都提供了在 FreeBSD 中配置和优化网络连接的全面指南。

    在深入了解细节之前,读者最好对协议、网络接口和寻址等网络概念有一个基本的了解。

    本章内容包括:

    • 在 FreeBSD 中配置有线网络的能力,包括网络接口设置、寻址和自定义选项。

    • 在 FreeBSD 中配置无线网络的技能,包括无线网络接口设置、安全协议和故障排除技术。

    • FreeBSD 的网络功能及其出色网络性能的声誉。

    第二部分:常见任务

    现在基础知识已经讲解完毕。本书的这一部分讨论了 FreeBSD 的一些常用功能。这些章节包括:

    • 介绍受欢迎和有用的桌面应用程序:浏览器、办公工具、文档查看器等。

    • 介绍用于 FreeBSD 的多媒体工具。

    • 解释构建自定义 FreeBSD 内核的过程,以实现额外的功能。

    致读者

    FreeBSD 新手会发现本书的第一部分旨在引导你掌握 FreeBSD 安装过程,并逐步介绍了支撑起 UNIX® 的概念和约定。阅读此部分只需要你有探索的好奇心和接受新概念的意愿。

    走完这一步路后,手册中的第二部分是全方位覆盖的主题参考,包含了 FreeBSD 系统管理员所有可能感兴趣的内容。其中某些章节可能建议你在阅读前进行预习,这在每章开头的概述中有所注明。

    如需更进一步的内容,请参阅。

    一些应用程序运行服务,在启动应用程序之前,必须将其添加到 /etc/rc.conf 中。这些应用程序通常会在 /usr/local/etc/rc.d 中安装启动脚本。有关更多信息,请参阅 启动服务。

    注意

    按设计,应用程序在安装时不会自动运行其启动脚本,也不会在卸载或升级时运行其停止脚本。这一决定由系统管理员自行决定。

  • 使用 csh(1) 的用户应运行 rehash 以重新构建 shell 的已知二进制文件列表。

  • 使用 pkg info 命令可以确定与应用程序一起安装的文件、手册页和二进制文件。

  • 如何使用 Ports 从源代码构建第三方软件。

  • 在安装后配置应用程序所安装的文件的方法。

  • 如果软件安装失败怎么办。

  • FreeBSD 开源开发模型的基础。

  • 以及 FreeBSD 这个名字的由来。

  • 如何使用内核配置文件创建并构建新内核。

  • 如何安装新内核。

  • 如果出现问题,如何进行故障排除。

  • 本章中的所有示例命令都应以 root 用户身份执行。

  • 了解 FreeBSD 支持的各种网络服务和协议,以及 DNS、DHCP 等的配置说明。

  • 有关如何在高级网络中进行高级网络配置的更多信息…

    详细说明桌面和网络连接打印机设置中的打印系统。

  • 展示如何在 FreeBSD 系统上运行 Linux 应用程序。

  • 这些章节中的某些建议需要先进行阅读,这在每个章节的简介中都有注明。

    新增了安全事件审计,以涉及 FreeBSD 中新的审计功能并介绍其使用方法。

  • 增加了有关在虚拟化软件上安装 FreeBSD 的内容。

  • 安装 FreeBSD 新增了使用新的安装工具——用 bsdinstall 安装 FreeBSD 的方法。

  • WINE
    DTrace
    其他文件系统
    环境变量。
    ee(1)
    ee(1)
    vi(1)
    editors/emacs
    editors/vim
    Shells

    书目得到大规模更新。。

    Docbook
    Hugo
    AsciiDoctor
    FreeBSD 文档网站
    Wayland
    如何配置 FreeBSD 以托管 Wayland 图形环境。
  • 如何安装和配置 Wayland 合成器。

  • 如何运行为旧版 X Window 系统设计的程序。

  • 如何配置远程桌面访问 Wayland 图形环境。

  • 额外的第三方软件
    图形硬件的驱动程序
    X Window 系统
    Wayland
    使用 Ports
    书目

    5.1.概述

    使用 bsdinstall 安装的 FreeBSD 系统不会自动安装图形用户界面。本章介绍如何安装和配置 Xorg(1) 服务器,该服务器提供开源 X Window 系统(俗称 X11),用于提供图形化环境。

    在阅读本章节之前,你应该:

    • 了解如何按照 安装应用程序:软件包和 Ports 的说明安装额外的第三方软件。

    阅读本章节后,你将了解:

    • 如何为图形处理器(GPU)选择和安装驱动程序。

    • X Window 系统的各个组件及其协作方式。

    • 如何安装和配置 X.org 服务器。

    • 如何为 X Window 系统安装字体。

    。有关引导加载程序的更多信息,请参见
    。
    set hint.acpi.0.disabled="1"
    FreeBSD 发行信息
    “概要”

    6.9.实用工具

    一款有用的 Wayland 工具是 waybar,所有合成器都可以使用它。虽然 Wayfire 自带了启动菜单,但易于使用且快速的任务栏是所有合成器或桌面管理器的好配件。waybar 是一款与 Wayland 兼容的任务栏,快速且易于配置。要安装这个软件包以及一款支持的音频控制工具,可以执行以下命令:

    # pkg install pavucontrol waybar

    要创建配置目录并复制默认的配置文件,可以执行以下命令:

    % mkdir ~/.config/waybar
    % cp /usr/local/etc/xdg/waybar/config ~/.config/waybar

    lavalauncher 工具提供了一个启动条,用于启动各种应用程序。该软件包没有提供示例配置文件,因此需要执行以下操作:

    mkdir ~/.config/lavalauncher

    以下是一个示例配置文件,它仅包含 Firefox,并将其放置在右侧:

    global-settings {
    	watch-config-file = true;
    }
    
    bar {
    	output            = eDP-1;
    	position          = bottom;
    	background-colour = "#202020";
    
    	# 默认配置集的条件。
    	condition-resolution = wider-than-high;
    
    	config {
    		position = right;
    	}
    
    	button {
    		image-path          =     /usr/local/lib/firefox/browser/chrome/icons/default/default48.png;
    		command[mouse-left] =     /usr/local/bin/firefox;
    	}
    	button {
    	  image-path           =   /usr/local/share/pixmaps/thunderbird.png;
    	  command[mouse-left]  =   /usr/local/bin/thunderbird;
    }

    6.8.Wayland 登录管理器

    虽然有多种登录管理器,并且它们正在慢慢迁移到 Wayland 上,其中一个选择是 x11/ly 文本用户界面(TUI)管理器。ly 的配置最简单,能够通过在系统初始化时展示登录窗口来启动 Sway、Wayfire 等。要安装 ly,可以执行以下命令:

    # pkg install ly

    系统会提供一些配置提示,导入步骤是将以下内容添加到 /etc/gettytab 文件中:

    Ly:\
      :lo=/usr/local/bin/ly:\
      :al=root:

    然后修改 /etc/ttys 文件中的 ttyv1 行,修改为以下内容:

    ttyv1 "/usr/libexec/getty Ly" xterm onifexists secure

    重启系统后,登录界面应该会出现。要配置特定的设置,如语言,可以编辑 /usr/local/etc/ly/config.ini 文件。至少,这个文件中应该指定之前在 /etc/ttys 文件中设置的 tty。

    注意

    如果将 ttyv0 设置为登录终端,可能需要按下 alt 和 F1 键,才能正确看到登录窗口。

    当登录窗口出现时,使用左右箭头键可以切换不同的支持的窗口管理器。

    7.5.2. 更改主机名

    要更改主机名并使其在重启后保持持久,执行以下命令:

    hostname
    freebsdhostname.example.com
    hostname(1)
    # sysrc hostname="freebsdhostname.example.com"

    在所有请求的发行文件解压完成后,bsdinstall 将显示首次安装后的配置界面。可用的后配置选项将在下一节中概述。

    显示下载不同组件的菜单
    显示验证不同组件的菜单
    显示提取不同组件的菜单

    第二版(2004)

    第三版是 FreeBSD 文档项目专员连续两年工作的成果。纸质版变得非常厚重,所以必须分成两卷本来出版。以下是新版本的主要变化:

    • 配置和调优已增补,提供了有关 ACPI 电源和资源管理、系统实用程序 cron 以及更多内核调优参数的新内容。

    • 安全已增补,提供有关虚拟专用网络(VPN)、文件系统访问控制列表(ACL)和安全通告的新内容。

    • 此版新增了章节。它解释了什么是 MAC 以及如何使用该机制来保护 FreeBSD 系统。

    • 已增补,包括有关 USB 存储设备、文件系统快照、文件系统配额、文件和网络支持的文件系统以及加密磁盘分区的新内容。

    • 中新增了故障排除部分。

    • 已增补,包括了有关使用替代传输代理、SMTP 身份验证、UUCP、fetchmail、procmail 以及其他高级主题的新内容。

    • 此版新增了这一章。本章包含了有关设置 Apache HTTP 服务器、ftpd 以及为 Microsoft® Windows® 客户端设置服务器的方法。有些来自部分的内容被移至此处,以改进章节排布。

    • 部分已增补,新增了有关在 FreeBSD 上使用蓝牙®设备、设置无线网络以及异步传输模式(ATM)网络的教程。

    • 书中增加了一个词汇表,为全书所用技术术语的定义提供了一个集中的位置。

    • 对全书的表格和图表进行了诸多美化。

    本书中使用的一些约定

    为了提供一致且易于阅读的内容,全书遵循了一些惯例。

    排版惯例

    斜体

    斜体 字体用于文件名、网址、重点内容强调以及当技术术语首次出现。

    等宽

    monospaced 字体用于错误信息、命令、环境变量、Port、主机名、用户名、组名、设备名、变量和代码片段。

    加粗

    应用程序、命令和按键均使用 粗体 字体。

    用户输入

    按键以粗体 显示, 以便与其他文本区分开来。需要同时输入的按键组合以 + 按键之间显示,例如:

    Ctrl+Alt+Del

    这意味着用户应该同时按下 Ctrl、Alt 和 Del 键。

    需要按顺序输入的键将用逗号分隔,例如:

    Ctrl+X、Ctrl+S

    这意味着用户需要同时按下 Ctrl 和 X 键,然后再同时按下 Ctrl 和 S 键。

    示例

    以 C:> 开头的示例表示 MS-DOS® 命令。除非另有说明,否则这些命令一般可以在现代微软® Windows® 环境上的“命令提示符”窗口中执行。

    以 # 开头的示例表示该命令必须用 FreeBSD 中的超级用户身份调用。你可以以普通用户身份登录并以 root 键入命令,或以普通用户身份登录并使用 获得超级用户权限。

    以 % 开头的示例表示应使用普通用户账户调用的命令。除非另有说明,否则一律使用 C-shell 语法来设置环境变量和其他 shell 命令。

    4.2.软件安装的概述

    FreeBSD port 是一组旨在自动化从源代码编译应用程序的过程的文件。这些组成 Ports 的文件包含所有必要的信息,能够自动下载、解压、打补丁、编译和安装应用程序。

    如果软件尚未适配并经过 FreeBSD 测试,可能需要编辑源代码,以便其能够正确安装和运行。

    然而,已有 36000 余款第三方应用程序被移植到了 FreeBSD。当可行时,这些应用程序会作为预编译的 包 提供下载。

    可以使用 FreeBSD 包管理命令来操作包。

    包和 Ports 都能处理依赖关系。如果使用包或 Ports 安装应用程序,而所依赖的库尚未安装,库将自动先行安装。

    FreeBSD 包包含应用程序的所有命令的预编译副本,以及任何配置文件和文档。可以使用 pkg(8) 命令(例如 pkg install)来操作包。

    尽管这两种技术相似,包和 Ports 各自有其优势。选择符合你需求的技术来安装特定应用程序。

    包的优点

    • 压缩的包 tarball 通常比包含应用程序源代码的压缩包小。

    • 包不需要编译时间。对于大型应用程序,如 Firefox、KDE Plasma 或 GNOME,这在系统较慢时尤为重要。

    • 包不需要理解在 FreeBSD 上编译软件的过程。

    Ports 的优点

    • 包通常使用保守选项进行编译,因为它们必须在最大数量的系统上运行。通过从 Ports 编译,可以更改编译选项。

    • 一些应用程序有与安装特性相关的编译时选项。例如,NGINX® 可以通过各种内建选项进行配置。 在某些情况下,同一个应用程序可能会有多个包,配置不同的选项。例如,NGINX® 有 nginx 包和 nginx-lite 包,前者启用了更多的选项,但这也需要安装更多的依赖项,因此会增加空间消耗和攻击面。

      传递依赖项可能会变得相当庞大,例如完整的 nginx 包会拉入多个 X 库,这可能让人感到惊讶,因此从 Ports 编译可以让你选择仅需要的选项,而不使用“万金油”方法。在某些情况下,可能会为同一应用程序提供多个包,以指定特定设置。

    • 某些软件的许可条款禁止二进制分发。这类软件必须以源代码形式分发,且必须由最终用户编译。

    要跟踪更新的 Port,可以订阅 和 。

    警告

    在安装应用程序之前,请检查 以了解相关的安全问题。

    要审核已安装的包以检查已知漏洞,请运行 pkg audit -F。

    本章其余部分将解释如何使用包和 Ports 在 FreeBSD 上安装和管理第三方软件。

    4.3.寻找所需的应用程序

    FreeBSD 可用应用程序的列表一直在不断增长。有多种方式可以找到要安装的软件:

    • FreeBSD 网站维护着一个最新的可搜索应用程序列表,地址为 Ports Portal。可以按应用程序名称或软件类别搜索 Port。

    • Dan Langille 维护着 FreshPorts,提供了一个全面的搜索工具,还跟踪 Ports 中的应用程序变化。注册用户可以创建一个自定义的关注列表,以便在关注的 Port 更新时收到自动邮件。

    • 如果寻找特定应用程序变得困难,可以尝试在 SourceForge 和 GitHub 等网站上搜索,然后返回 Ports Portal 查看该应用程序是否已被移植。

    • 使用 命令在二进制包仓库中搜索应用程序。

    4.8.如何处理损坏的 port

    当某个 Port 无法构建或安装时,可以尝试以下方法:

    1. 在 问题报告数据库 中搜索该 Port 是否有待解决的修复。如果有,实施提议的修复可能会解决该问题。

    2. 向 Port 的维护者寻求帮助。在 Port 目录中输入 make maintainer,或阅读 Port 的 Makefile 以查找维护者的电子邮件地址。记得在发给维护者的电子邮件中包含导致错误的输出信息。

      注意

      有些 Port 不是由个人维护,而是由一个由 代表的群体维护。许多(但不是所有)此类地址看起来像 。发送邮件时请注意这一点。

      特别是,维护 的 Port 并非由特定个人维护。因为所有的修复和支持来自订阅该邮件列表的一般社区。总是需要更多的志愿者!

      如果没有收到邮件回复,请按照 中的说明使用 Bugzilla 提交 bug 报告。

    3. 修复它! 包含有关 Port 基础设施的详细信息,你可以用它来修复偶尔出现的问题 Port ,甚至提交你自己的修复!

    4. 使用 中的说明,安装包而不是 Port。

    10.5.构建并安装定制内核

    待保存了自定义配置文件的编辑内容,就可以按照以下步骤编译内核源代码:

    过程:构建内核

    1. 切换到此目录:

      # cd /usr/src
    2. 通过指定自定义内核配置文件的名称来编译新内核:

      # make buildkernel KERNCONF=MYKERNEL
    3. 安装与指定内核配置文件关联的新内核。此命令将新内核复制到 /boot/kernel/kernel 并将旧内核保存到 /boot/kernel.old/kernel:

      # make installkernel KERNCONF=MYKERNEL
    4. 关闭系统并重启进入新内核。如果出现问题,请参考 。

    默认情况下,当编译自定义内核时,所有内核模块都会重新编译。要更快地更新内核或仅构建自定义模块,可以在开始构建内核之前编辑 /etc/make.conf。

    例如,以下变量指定要构建的模块列表,而不是默认构建所有模块:

    或者,此变量列出要从构建过程中排除的模块:

    还可以使用其他变量。有关详细信息,请参阅 。

    第一版(2001)

    第二版是 FreeBSD 文档项目专员两年多努力的结晶。本版的主要变化如下:

    • 添加了完整索引。

    • 所有 ASCII 图均被图形化的图表取代。

    • 每章都增加了独立的概述小节,以在短时间内获得该章所涉及的内容,以及读者应了解的内容。

    8.5.桌面办公应用

    在提高生产力方面,用户通常会寻找一款办公套件或易于使用的文字处理软件。虽然一些桌面环境,如 ,提供了办公套件,但并没有默认的生产力软件包。无论安装了哪种桌面环境,FreeBSD 上都有多个办公套件和图形化文字处理软件可供选择。

    本节介绍了如何安装以下流行的生产力软件,并指出这些应用是否资源占用较高、从 Port 编译时是否需要较长时间,或是否有任何重大依赖。

    表 4. 支持的桌面办公生产力套件

    名称
    许可证
    包含的包
    所需资源

    10.2.为什么要构建定制内核

    传统上,FreeBSD 使用的是宏内核。该内核是一款大型程序,支持固定的设备列表,并且要改变内核的行为,必须编译并重新启动到新内核中。

    如今,FreeBSD 内核中的大部分功能都包含在可以根据需要动态加载和卸载的模块中。这使得运行中的内核能够立即适应新硬件,并将新的功能引入内核。这种内核被称为模块化内核。

    有时,仍然需要进行静态内核配置。某些功能与内核紧密绑定,无法动态加载。一些安全环境会阻止加载和卸载内核模块,要求只能将所需功能静态编译到内核中。

    构建定制内核通常是高级 BSD 用户的必由之路。这个过程虽然耗时,但能为 FreeBSD 系统带来很多好处。与必须支持广泛硬件的 GENERIC 内核不同,定制内核可以精简,只提供对该计算机硬件的支持。这有以下几个好处:

    • 更快的启动时间。由于内核只会探测系统中的硬件,系统启动所需的时间可能会减少。

    • 更低的内存使用。定制内核通常通过省略不使用的功能和设备驱动程序来减少内存占用。这一点非常重要,因为内核代码始终驻留在物理内存中,防止该内存被应用程序占用。因此,定制内核对于内存较小的系统非常有用。

    7.2.设置网络

    设置有线或无线连接是 FreeBSD 用户的常见任务。本节将介绍如何识别有线和无线网络适配器以及如何配置它们。

    在开始配置之前,必须了解以下网络数据:

    • 网络是否启用了 DHCP

    • 如果网络没有 DHCP,使用的静态 IP

    • 子网掩码

    5.4.安装 X.org 服务器

    摘要:必须安装 服务器以承载 。必须把用户添加到 video 组才能使用它。

    待显卡驱动安装并启用后,可以作为元包安装 X.org 服务器,也可以通过 Ports 树在本地编译。

    完整元包安装速度快,但可自定义选项较少:

    此安装将完整的 X Window 系统安装到系统中,包括传统窗口管理器 以及传统桌面套件。大多数用户会希望安装并配置自己选择的现代 。

    当前用户必须是 video 组的成员才能运行图形环境。要将用户添加到 video 组,请执行以下命令:

    要运行 X Window 系统,可使用来自 的 ,或安装并配置显示管理器,在启动时进行图形登录。

    7.7.故障排除

    在排查硬件和软件配置问题时,应首先检查最基础的内容:

    • 网线是否插好?

    • 网络服务是否配置正确?

    • 防火墙是否配置正确?

    6.4.Hikari 混成器

    Hikari 合成器采用多个围绕生产力的概念,如工作区、工作表等。因此,它与平铺窗口管理器相似。具体来说,合成器从一个工作区开始,这类似于虚拟桌面。Hikari 使用单个工作区或虚拟桌面进行用户交互。工作区由多个视图组成,视图是合成器中以工作表或组的形式分组的工作窗口。工作表和组都由一组视图组成,也就是那些分组在一起的窗口。在切换工作表或组时,活动的工作表或组将被集体称为工作区。手册页将详细介绍每个功能的具体内容,但在本文中,我们将假设使用单个工作区和单个工作表。Hikari 安装由一个软件包组成:,以及终端仿真器 alacritty:

    注意

    其他终端,如 kitty 或 Plasma Terminal,也能在 Wayland 下正常工作。用户可以尝试他们喜欢的终端编辑器来验证兼容性。

    Hikari 使用配置文件 hikari.conf,该文件可以放置在 XDG_RUNTIME_DIR 中,或者通过 -c 参数在启动时指定。不需要自动启动配置文件,但可以使迁移到这个合成器的过程更轻松。配置开始时,创建 Hikari 配置目录并复制配置文件进行编辑:

    配置文件分为不同的部分,例如 ui、outputs、layouts 等。对于大多数用户来说,默认设置已足够;然而,应该做一些重要的更改。例如,$TERMINAL 变量通常不会在用户的环境中设置。可以修改该变量或将 hikari.conf 文件中的设置更改为:

    10.4.配置文件

    为了创建一个自定义内核配置文件并构建自定义内核,必须首先安装完整的 FreeBSD 源代码树。

    如果 /usr/src/ 目录不存在或为空,则说明源代码未安装。可以按照 中的说明通过 Git 安装源代码。

    安装完源代码后,请查看 /usr/src/sys 目录的内容。该目录包含多个子目录,其中包括表示以下受支持架构的目录:amd64、i386、powerpc 和 sparc64。每个特定架构的目录只处理该架构的相关内容,其他代码则是所有平台通用的机器无关代码。每个受支持架构都有一个 conf 子目录,其中包含该架构的 GENERIC 内核配置文件。

    不要直接编辑 GENERIC 文件。相反,应将文件复制并编辑复制的文件。命名约定是使用全大写字母的名称。在管理多台具有不同硬件的 FreeBSD 机器时,建议将其命名为机器的主机名。以下示例为 amd64 架构的 GENERIC 配置文件创建名为 MYKERNEL 的副本:

    现在可以使用任何 ASCII 文本编辑器自定义 MYKERNEL。默认编辑器是 vi,但 FreeBSD 还安装了一个更适合初学者的编辑器,名为 ee。

    内核配置文件的格式很简单。每行包含一个代表设备或子系统的关键字、一个参数和一个简短的描述。任何在 #

    6.7.使用 VNC 进行远程连接

    之前文中提到,Wayland 不提供与 Xorg 相同的 X 服务器访问方式。但用户可以选择远程桌面协议,如 RDP 或 VNC。FreeBSD Ports 有 wayvnc,它支持基于 wlroots 的合成器,如本文中讨论的那些。可以使用以下命令安装该应用:

    与其他一些包不同,wayvnc 没有配置文件。幸运的是,手册页文档中列出了重要的选项,这些选项可以提取成一个简单的配置文件:

    需要生成密钥文件,并强烈建议使用它们来增强连接的安全性。启动 wayvnc 时,它会在 ~/.config/wayvnc/config 中查找配置文件。也可以在启动服务器时使用 -C configuration_file 选项覆盖该配置文件。因此,要启动 wayvnc 服务器,可以执行以下命令:

    警告

    在本文写作时,没有 rc.d 脚本来在系统初始化时启动 wayvnc

    2.1.概述

    FreeBSD 支持多种架构,包括 amd64、ARM®、RISC-V® 和 PowerPC®。根据架构和平台,可以不同镜像来安装或者直接运行 FreeBSD。

    镜像类型包括:

    • 虚拟机磁盘镜像,如 qcow2、vmdk、vhd 和裸设备镜像。这些不是安装镜像,而是已预安装 FreeBSD 的镜像,可准备执行安装后的任务。虚拟机镜像在云环境中也很常用。

    • SD 卡镜像,适用于嵌入式设备,如树莓派。必须解压缩这些文件,以裸镜像写入 SD 卡,卡板将从中启动。

    内容上被逻辑重组为三部分:“入门指南”,“系统管理”和“附录”。

  • FreeBSD 基础已增补,包含了有关进程,守护程序和信号的额外信息。

  • 安装应用程序:软件包和 Port 已增补,包含了有关使用二进制软件包管理的其他信息。

  • X Window 系统被完全重写,重点是在 XFree86™ 4.X 上使用现代桌面技术,如 KDE 和 GNOME。

  • FreeBSD 启动过程已增补。

  • 将以前两个独立的小节“磁盘”和“备份”重写为存储。我们认为将这些主题作为单独一章呈现更易理解。还添加了有关 RAID(硬件和软件)的部分。

  • 串行通信已完全重写并更新,适用于 FreeBSD 4.X/5.X。

  • PPP 已大幅更新。

  • 高级网络中添加了许多新章节。

  • 电子邮件已增补,包括有关配置 sendmail 的更多信息。

  • Linux® 二进制兼容层已增补,包括了有关安装 Oracle®和 SAP® R/3® 的信息。

  • 第二版涉及以下新主题:

    • 配置和调优。

    • 多媒体。

  • FreeBSD 是否支持该网卡?
  • 路由器是否正常工作?

  • 技巧

    在提交 bug 报告之前,请务必查看 FreeBSD 发布页面 中的硬件说明,更新至最新的 STABLE 版本,查阅邮件列表归档,并搜索互联网。

    7.7.1. 有线网络中的故障排查

    如果网卡能够工作,但性能较差,请阅读 tuning(7)。同时检查网络配置,因为错误的网络设置可能导致连接缓慢。

    出现 No route to host 消息时,说明系统无法将数据包路由到目标主机。这可能是因为没有指定默认路由,或者网线未插好。检查 netstat -rn 的输出,确保有一条有效的到主机的路由。如果没有,请参阅 网关与路由。

    ping: sendto: Permission denied 错误通常是防火墙配置错误所致。如果 FreeBSD 上启用了防火墙但未定义任何规则,则默认策略是拒绝所有流量,即使是 ping(8)。更多信息请参见 防火墙。

    7.7.2. 无线网络中的故障排查

    本节介绍了一些用于排查常见无线网络问题的步骤:

    • 如果在扫描时未列出接入点,请检查配置是否将无线设备限制在特定信道范围内。

    • 如果设备无法与接入点建立关联,请确认配置与接入点的设置一致,包括认证方式与安全协议。尽量简化配置。如果使用 WPA2 或 WPA 等安全协议,可以将接入点配置为开放认证且无安全保护,以测试是否能传输数据。

    • 待系统能够与接入点建立关联,使用 ping(8) 等工具诊断网络配置。

    • 有许多底层调试工具可用。可以使用 wlandebug(8) 在 802.11 协议支持层启用调试信息。

    强制访问控制
    存储
    PPP
    电子邮件
    网络服务器
    高级网络
    高级网络
  • 有些人不信任二进制分发,或更愿意通过源代码查找潜在问题。

  • 应用自定义补丁时需要源代码。

  • FreeBSD Ports 邮件列表
    FreeBSD Ports 错误邮件列表
    https://vuxml.freebsd.org/
    pkg(8)
    邮件列表
    [email protected]
    [email protected]
    编写 FreeBSD 问题报告
    Porter’s Handbook
    pkg 进行二进制包管理

    安装镜像,用于从 ISO/USB 设备引导,可在常规桌面、笔记本电脑和服务器系统上安装 FreeBSD。

    本章的其余部分概述了第三种情况,解释如何使用名为 bsdinstall(基于文本)安装程序安装 FreeBSD。安装程序和此处所示内容之间可能存在细微差异,因此请将本章作为通用指南,而不是逐字逐句的指令。

    阅读完本章后,你将了解:

    • 如何获取 FreeBSD 镜像,创建 FreeBSD 安装介质。

    • 如何启动 bsdinstall。

    • bsdinstall 将询问的问题,它们的含义以及如何回答。

    • 如何排除安装失败的故障。

    • 如何在安装之前使用 FreeBSD 的 Live 版本。

    下载
    su(1)
    MODULES_OVERRIDE = linux acpi
    WITHOUT_MODULES = linux acpi sound
    内核无法启动
    make.conf(5)
    技巧

    面向高级用户的精简版 X Window System 可通过 x11/xorg-minimal 获得。大部分文档、库和应用程序不会被安装,部分应用程序需要这些额外组件才能正常运行。

    # pkg install xorg
    X.org
    桌面
    twm(1)
    桌面
    x11/xinit
    startx(1)
    。如果需要此功能,则需要创建一个本地启动文件。这可能是一个针对 Port 维护者的功能请求。
    # pkg install wayvnc
    address=0.0.0.0
    enable_auth=true
    username=username
    password=password
    private_key_file=/path/to/key.pem
    certificate_file=/path/to/cert.pem
    % wayvnc -C ~/.config/wayvnc/config
  • 增强的硬件支持。定制内核可以为 GENERIC 内核中没有的设备提供支持。

  • 警告

    在构建定制内核时,重要的是要注意,非默认配置的测试不如 GENERIC 配置彻底。虽然定制内核可以带来特定的好处,但它也增加了遇到构建或运行时问题的风险。只有那些有明确理由进行更改并愿意在必要时进行调试的高级用户,才建议使用定制内核配置。

    在构建定制内核之前,考虑一下构建的原因。如果需要特定的硬件支持,可能已经作为模块存在。

    内核模块位于 /boot/kernel 中,可以使用 kldload(8) 将其动态加载到运行中的内核中。大多数内核驱动程序都有可加载的模块和手册页。例如,ath(4) 无线网络驱动程序的手册页中包含以下信息:

    或者,要在启动时加载驱动程序作为模块,请在 loader.conf(5) 中加入以下行:

    将 if_ath_load="YES" 添加到 /boot/loader.conf 中,将在启动时动态加载此模块。

    在某些情况下,/boot/kernel 中没有关联的模块。这通常适用于某些子系统。

    if_ath_load="YES"

    默认网关的 IP 地址

    技巧

    网络连接可能在安装时通过 bsdinstall(8) 配置。

    7.2.1. 识别网络适配器

    FreeBSD 支持多种有线和无线网络适配器。请检查所使用的 FreeBSD 版本的硬件兼容性列表,以查看网络适配器是否受支持。

    要获取系统中使用的网络适配器,可以执行以下命令:

    输出应类似于以下内容:

    在 @ 符号之前的文本是控制设备的驱动程序名称。在本例中,分别是 em(4) 和 iwn(4)。

    • ① 显示供应商的名称

    • ② 显示设备的名称

    注意

    只有在 FreeBSD 未正确检测到网卡时,才需要加载网卡模块。

    若要在启动时作为模块加载驱动程序,请在 /boot/loader.conf 中加入以下行:

    这样,通过绑定的按键按下,就可以启动 alacritty 终端。在浏览配置文件时,请注意大写字母用于映射用户的按键。例如,L 键用于启动终端,按下 L+Return 键实际上是之前提到的超级键或 Windows 键。因此,按住 L/super/Windows 键并按 Enter 将打开指定的终端仿真器,使用默认配置。要将其他键映射到应用程序,需创建一个操作定义。为此,可以在 actions 部分列出该操作项,例如:

    然后,可以在键盘绑定部分定义的 bindings 部分将操作映射到一个键:

    重启 Hikari 后,按住 Windows 键并按下 b 键,浏览器将启动。合成器没有菜单栏,建议在迁移之前至少设置好一个终端仿真器。手册页包含了大量文档,在进行完整迁移之前应该阅读。Hikari 的另一个优点是,在迁移到合成器时,Hikari 可以在 Plasma 和 GNOME 桌面环境中启动,允许在完全迁移之前进行测试。

    在 Hikari 中锁定屏幕非常简单,因为默认的 pam.d 配置文件和解锁工具已与软件包捆绑。锁定屏幕的键绑定是 L(Windows 键)+ Shift + Backspace。需要注意的是,所有未标记为公开的视图将被隐藏。这些视图在锁定时将无法接受输入,但要小心敏感信息暴露。对于某些用户,迁移到其他屏幕锁定工具(例如本节讨论的 swaylock-effects)可能会更容易。要启动 Hikari,可以使用以下命令:

    # pkg install hikari alacritty
    % mkdir ~/.config/hikari
    % cp /usr/local/etc/hikari/hikari.conf ~/.config/hikari
    x11-wm/hikari
    后面的文本都被视为注释并被忽略。要从内核配置中删除对某个设备或子系统的支持,请在表示该设备或子系统的行的开头加上
    #
    。对于你不理解的行,请不要添加或删除
    #
    。

    警告

    删除设备或选项的支持很容易导致内核损坏。例如,如果从内核配置文件中删除 ata(4) 驱动程序,使用 ATA 磁盘驱动程序的系统可能无法启动。如有疑问,最好将支持保留在内核中。

    除了文件中提供的简短描述外,附加描述还包含在 NOTES 文件中,可以在该架构的 GENERIC 文件所在目录中找到。对于架构无关的选项,请参考 /usr/src/sys/conf/NOTES。

    技巧

    完成自定义内核配置文件后,将备份副本保存到 /usr/src 之外的位置。

    还可以将内核配置文件保存在其他地方,并创建指向该文件的符号链接:

    配置文件中可以使用 include 指令。这允许将另一个配置文件包含到当前配置文件中,使得相对于现有文件维护小的变化变得容易。如果只需要少量的额外选项或驱动程序,可以通过这种方法维护与 GENERIC 的差异,如下所示:

    使用这种方法,本地配置文件表示与 GENERIC 内核的本地差异。在执行升级时,除非使用 nooptions 或 nodevice 明确防止,否则 GENERIC 中新增的特性也会添加到本地内核中。有关配置指令及其描述的完整列表,请参阅 config(5)。

    注意

    要构建一个包含所有可用选项的文件,请以 root 用户身份运行以下命令:

    “使用 Git”
    C:\> tools\fdimage floppies\kern.flp A:
    # dd if=kern.flp of=/dev/fd0
    % top
    # pw groupmod video -m username
    # kldload if_alc
    if_alc_load="YES"
    % pciconf -lv | grep -A1 -B3 network
    em0@pci0:0:25:0:        class=0x020000 rev=0x03 hdr=0x00 vendor=0x8086 device=0x10f5 subvendor=0x17aa subdevice=0x20ee
        vendor     = 'Intel Corporation' ①
        device     = '82567LM Gigabit Network Connection' ②
        class      = network
        subclass   = ethernet
    --
    iwn0@pci0:3:0:0:        class=0x028000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x4237 subvendor=0x8086 subdevice=0x1211
        vendor     = 'Intel Corporation' ①
        device     = 'PRO/Wireless 5100 AGN [Shiloh] Network Connection' ②
        class      = network
    terminal = "/usr/local/bin/alacritty"
    actions {
      terminal = "/usr/local/bin/alacritty"
      browser = "/usr/local/bin/firefox"
    }
    bindings {
      keyboard {
    SNIP
        "L+Return" = action-terminal
        "L+b" = action-browser
    SNIP
    % hikari -c ~/.config/hikari/hikari.conf
    # cd /usr/src/sys/amd64/conf
    # mkdir /root/kernels
    # cp GENERIC /root/kernels/MYKERNEL
    # ln -s /root/kernels/MYKERNEL
    # cd /usr/src/sys/arch/conf && make LINT
    # cd /usr/src/sys/amd64/conf
    # cp GENERIC MYKERNEL
    include GENERIC
    ident MYKERNEL
    
    options         IPFIREWALL
    options         DUMMYNET
    options         IPFIREWALL_DEFAULT_TO_ACCEPT
    options         IPDIVERT

    LGPL 和 GPL

    中

    AbiWord

    GPL 2.0 或更高

    中

    8.5.1. LibreOffice

    LibreOffice 是由 The Document Foundation 开发的免费软件办公套件。它与其他主要的办公套件兼容,并可在多种平台上使用。LibreOffice 是 Apache OpenOffice 的一个重命名分支,包含了一个完整办公生产力套件中的应用程序:文字处理器、电子表格、演示管理器、绘图程序、数据库管理程序以及一个用于创建和编辑数学公式的工具。它提供多种语言版本,并且国际化已扩展到界面、拼写检查器和字典等方面。有关 LibreOffice 的更多信息,请访问 libreoffice.org。

    安装 LibreOffice,执行:

    LibreOffice 包默认只包含英文版本。如果需要本地化版本的 LibreOffice,必须安装语言包。例如,安装西班牙语本地化版本,需要使用以下命令安装 editors/libreoffice-es 包:

    8.5.2. Calligra

    KDE Plasma 桌面环境包含一个可以与 KDE Plasma 单独安装的办公套件。Calligra 包含其他办公套件中的标准组件。Words 是文字处理器,Sheets 是电子表格程序,Stage 用于管理幻灯片演示,Karbon 用于绘制图形文档。

    安装 Calligra,执行:

    8.5.3. AbiWord

    AbiWord 是一款免费的文字处理程序,外观和操作方式类似于 Microsoft® Word。它运行速度快,功能丰富,并且用户友好。

    AbiWord 可以导入或导出多种文件格式,包括一些专有格式,如 Microsoft® .rtf。

    安装 AbiWord,执行:

    LibreOffice

    MPL 2.0

    editors/libreoffice

    重

    KDE Plasma

    Calligra Suite

    3.2.虚拟控制台和终端

    如果没有配置 FreeBSD 在启动时自动进入图形环境,那么系统将启动到命令行登录提示界面,如下所示:

    第一行包含了一些系统信息。amd64 表示 FreeBSD 正运行在 64 位 x86 设备上。主机名是 pc3.example.org,而 ttyv0 表示这是“系统控制台”。第二行是登录提示符。

    由于 FreeBSD 是款多用户系统,因此它需要一种方法来区分不同的用户。这是通过要求每个用户在访问系统上的程序之前先行登录来实现的。每位用户都有一个唯一的“用户名”及其对应的个人“密码”。

    要登录系统控制台,请输入安装系统时配置的用户名(详见 添加用户)并按下 Enter 键。然后输入与该用户名关联的密码并再次按下 Enter。出于安全原因,输入的密码不会回显。

    若输入了正确的密码,将会显示“今日信息”(MOTD),随后出现命令提示符。根据用户创建时选择的 shell,此提示符可能是 #、$ 或 % 字符。这个提示符表明用户已登录到 FreeBSD 系统控制台,并可开始尝试使用可用命令。

    3.2.1. 虚拟控制台

    虽然可以用系统控制台来与系统交互,但在 FreeBSD 系统的键盘上进行命令行操作的用户通常会登录到虚拟控制台。这是因为系统消息默认会输出到系统控制台上。这些信息会覆盖用户正在处理的命令和文件,从而妨碍工作。

    FreeBSD 默认配置了多个虚拟控制台供用户输入命令。每个虚拟控制台都有自己的登录提示和 shell,用户可以方便地在它们之间切换。这实质上提供了图形环境中多窗口操作的命令行等价体验。

    FreeBSD 保留了快捷键 Alt+F1 到 Alt+F8 用于切换虚拟控制台。使用 Alt+F1 可切换到系统控制台(ttyv0),Alt+F2 可访问第一个虚拟控制台(ttyv1),Alt+F3 可访问第二个虚拟控制台(ttyv2),依此类推。当使用 Xorg 作为图形控制台时,快捷键变为 Ctrl+Alt+F1 返回文本模式虚拟控制台。

    在控制台之间切换时,FreeBSD 会管理屏幕输出。这样产生了一种拥有多个虚拟屏幕和键盘的错觉,每个都可以用于输入 FreeBSD 要执行的命令。在一个虚拟控制台中启动的程序在切换到其他控制台时 不会 停止运行。

    更详细的 FreeBSD 控制台与键盘驱动说明,可参考 、、、 和 。

    在 FreeBSD 中,可用虚拟控制台的数量配置在 /etc/ttys 文件的以下部分:

    要禁用某个虚拟控制台,在对应那一行的开头加上注释符号(#)。例如,要将虚拟控制台数量从八个减少到四个,可以在 ttyv5 到 ttyv8 这四行前添加 #。不要注释掉系统控制台 ttyv0 的那一行。注意最后一个虚拟控制台(ttyv8)用于在已安装并配置 Xorg 时访问图形环境,详见 。

    关于该文件中每一列的详细说明以及虚拟控制台的可用选项,参见 。

    3.2.2. 单用户模式

    FreeBSD 启动菜单提供了选项 “Boot Single User” 。如果选择此项,系统将启动到一种特殊模式,称为“单用户模式”。该模式通常用于修复无法启动的系统,或者在不知道 root 密码时重置该密码。在单用户模式下,网络功能和其他虚拟控制台不可用。但可以获得系统的完整 root 权限,并且默认不需要输入 root 密码。出于这些原因,启动到该模式需要对键盘有物理访问权限,因此在保护 FreeBSD 系统时,应考虑谁可以访问键盘这一问题。

    控制单用户模式的设置位于 /etc/ttys 文件的以下部分:

    在默认情况下,状态设为 secure。这意味着默认假设对键盘的物理访问要么不重要,要么由实体安全策略加以控制。如果将该设置改为 insecure,则说明当前环境是不安全的,因为任何人都可以访问键盘。当将这一行改为 insecure 时,FreeBSD 会在用户选择启动单用户模式时提示输入 root 密码。

    注意

    更改此设置为 insecure 时请小心! 如果忘记了 root 密码,虽然仍可启动到单用户模式,但对不熟悉 FreeBSD 启动流程的人来说可能会很困难。

    3.2.3. 更改控制台显示模式

    FreeBSD 控制台的默认显示模式可以调整为 1024x768、1280x1024 或任何显卡和显示器支持的分辨率。要使用不同的显示模式,需加载 VESA 模块:

    要查看硬件支持哪些显示模式,请使用 。运行以下命令可获取支持的显示模式列表:

    此命令的输出列出了硬件支持的显示模式。要选择新的显示模式,使用 root 用户身份通过 指定模式:

    如果新的显示模式符合要求,可以通过在 /etc/rc.conf 中添加以下行,使其在启动时自动生效:

    3.12.手册页

    FreeBSD 上最全面的文档形式是手册页。几乎系统上的每个程序都有一份简短的参考手册,解释基本操作和可用参数。这些手册可以通过 man 命令查看:

    其中 command 是要了解的命令名称。例如,要了解更多关于 ls(1) 的信息,可以输入:

    手册页分为不同的章节,每个章节代表不同的主题类型。在 FreeBSD 中,以下是可用的章节:

    1. 用户命令。

    2. 系统调用和错误号码。

    3. C 库中的函数。

    4. 设备驱动程序。

    5. 文件格式。

    6. 游戏和其他娱乐。

    7. 杂项信息。

    8. 系统维护和操作命令。

    9. 系统内核接口。

    在某些情况下,同一主题可能出现在多个章节中。例如,chmod 用户命令和 chmod() 系统调用都存在。要告诉 显示哪个章节,可以指定章节编号:

    这将显示用户命令 的手册页。手册页的各章节通常在书面文档中用括号标出,因此 指的是用户命令,而 指的是系统调用。

    如果不知道手册页的名称,可以使用 man -k 命令搜索手册页描述中的关键词:

    此命令将显示描述中包含“mail”关键词的命令列表。这等同于使用 。

    要查看 /usr/sbin 目录中所有命令的描述,可以输入:

    或者

    3.12.1. GNU Info 文件

    FreeBSD 包含了由自由软件基金会(FSF)制作的几个应用程序和工具。除了手册页,这些程序还可能包括名为 info 文件的超文本文档。这些文件可以通过 或者在安装了 的情况下,通过 emacs 的 info 模式查看。

    使用 时,输入:

    要查看简短的介绍,输入 h。要快速查看命令参考,输入 ?。

    3.5.目录结构

    FreeBSD 的目录层级结构是理解整个系统的基础。根目录(“/”)是最重要的目录,它在启动时最先挂载,包含了操作系统的基础部分,为多用户操作做准备。根目录还包含了其他文件系统的挂载点,这些文件系统在进入多用户模式时被挂载。

    挂载点是将额外文件系统附加到父文件系统(通常是根文件系统)上的目录。常见的挂载点包括 /usr/、/var/、/tmp/、/mnt/ 和 /cdrom/。这些目录在 /etc/fstab 文件中有条目。大多数文件系统会在启动时通过 rc(8) 脚本自动挂载,除非它们的条目包含 noauto。

    文件系统层级的完整说明见 hier(7)。以下是常见目录的简要概述:

    目录
    说明

    4.6.使用 Poudriere 构建软件包

    poudriere 是一个采用 BSD 许可证的实用工具,用于创建和测试 FreeBSD 软件包。它通过 FreeBSD jail 创建隔离的编译环境。这些 jail 可用于为与当前系统版本不同的 FreeBSD 构建软件包,也可以在 amd64 主机上为 i386 构建软件包。构建完成后,生成的软件包布局与 FreeBSD 官方镜像相同,能被 pkg(8) 及其他包管理工具使用。

    poudriere 可通过 ports-mgmt/poudriere 软件包或 port 安装。安装后会附带一个示例配置文件 /usr/local/etc/poudriere.conf.sample,可将其复制为 /usr/local/etc/poudriere.conf 并根据本地系统进行编辑。

    虽然运行 poudriere 的系统不要求使用 ZFS,但使用 ZFS 有助于提升性能。启用 ZFS 时,需要在 /usr/local/etc/poudriere.conf 中设置 ZPOOL,并将 FREEBSD_HOST 设为附近的镜像站。定义 CCACHE_DIR 可启用 ,对重复编译的代码进行缓存,加快构建速度。建议将 poudriere 的数据集挂载到一个独立的目录(如 /poudriere)。大多数默认配置项通常已经足够。

    系统会根据可用处理器核心数决定并行构建的数量。请确保系统具有足够的虚拟内存(RAM 或交换空间),否则 jail 会在构建时中止并被销毁,可能导致莫名其妙的错误信息。

    4.6.1. 初始化 Jail 和 Ports 树

    完成配置后,需要初始化 poudriere,使其安装所需的 FreeBSD jail 和 Ports 树。使用 -j 指定 jail 名称,-v 指定 FreeBSD 版本。在 FreeBSD/amd64 系统上,也可使用 -a 指定架构(i386 或 amd64),默认使用 uname 输出的架构:

    然后拉取并初始化一个 ports 树:

    poudriere 支持在单机上构建多个配置的 ports,分别使用不同的 jail、ports 树和配置集合(sets)。关于 set 的详细内容,请参阅 中的 CUSTOMIZATION 部分。

    以下是基本配置示例:为每一个 jail/ports/set 组合提供一个专用的 make.conf 文件,命名规则为 <jail>-<ports>-<set>-make.conf。该文件与系统的 make.conf 合并后,将用于构建。

    要构建的软件包列表写入 13amd64-local-workstation-pkglist 文件(带有 的 ports 使用 @FLAVOR 指定):

    配置这些 port 的选项与依赖:

    开始构建并生成软件包仓库:

    构建过程中按下 Ctrl+t 可查看当前构建状态。构建日志会保存于 /poudriere/logs/bulk/jailname,可通过 Web 服务器查看构建详情。

    构建完成后,新生成的软件包可通过 poudriere 提供的软件仓库进行安装。

    如需了解更多内容,请参阅 和 poudriere 官方页面 。

    4.6.2. 配置 pkg 客户端使用 poudriere 仓库

    虽然可以同时使用自定义软件包仓库与官方仓库,但有时更希望禁用官方仓库。这可以通过创建一个覆盖官方配置的文件来实现。创建 /usr/local/etc/pkg/repos/FreeBSD.conf,内容如下:

    通常最方便的做法是通过 HTTP 将 poudriere 软件包仓库提供给客户端访问。可以通过 Web 服务器提供仓库目录,例如 /usr/local/poudriere/data/packages/13amd64,其中 13amd64 是构建名。

    假设软件包仓库的 URL 是 ,那么应在 /usr/local/etc/pkg/repos/custom.conf 中创建如下配置文件:

    如果不希望将软件包仓库暴露在互联网中,可以使用 file:// 协议直接指向本地路径,例如:

    7.6.DNS

    DNS 可以理解为一本电话簿,其中将 IP 地址与主机名相互关联。

    有三个文件负责管理 FreeBSD 系统如何与 DNS 进行交互。这三个文件是 hosts(5)、resolv.conf(5) 和 nsswitch.conf(5)。

    除非在 /etc/nsswitch.conf 文件中另有说明,FreeBSD 将首先查看 /etc/hosts 文件中的地址,然后查看 /etc/resolv.conf 文件中的 DNS 信息。

    注意

    nsswitch.conf(5) 文件指定了 nsdispatch(名称服务切换调度器)应如何运行。

    在默认情况下,/etc/nsswitch.conf 文件中的 hosts 部分如下所示:

    例如,在使用 服务时,可以通过将该行更改为如下所示,来更改优先级顺序:

    7.6.1. 本地地址

    /etc/hosts 文件是一个简单的文本数据库,用于提供主机名到 IP 地址的映射。可以将通过局域网连接的本地计算机的条目添加到此文件中,以便简化命名,而无需设置 DNS 服务器。此外,/etc/hosts 还可以用于提供互联网名称的本地记录,从而减少查询外部 DNS 服务器的需求,特别是对于常访问的名称。

    例如,如果在本地环境中有一个 的本地实例,可以将其添加到 /etc/hosts 文件中,如下所示:

    7.6.2. 配置 Nameserver

    FreeBSD 系统如何访问互联网域名系统(DNS)由 控制。

    /etc/resolv.conf 中最常见的条目有:

    典型的 /etc/resolv.conf 文件如下所示:

    注意

    选项 search 和 domain 只能使用其中一个。

    使用 DHCP 时, 通常会根据从 DHCP 服务器接收到的信息重写 /etc/resolv.conf。

    注意

    如果当前正在配置的这台机器 不是 DNS 服务器,可以使用 来提升 DNS 查询性能。

    要在系统启动时启用它,请执行以下命令:

    要启动 服务,请执行以下命令:

    8.4.开发工具

    本节介绍了如何在 FreeBSD 系统上安装和配置一些流行的开发工具。

    表 3. 支持的开发工具

    名称
    许可证
    包含的包
    所需资源

    Visual Studio Code

    MIT

    重

    Qt Creator

    QtGPL

    8.4.1. Visual Studio Code

    Visual Studio Code 是一种工具,它将代码编辑器的简便性与开发人员在核心编辑、构建和调试周期中所需的功能相结合。它提供了全面的编辑和调试支持、可扩展性模型以及与现有工具的轻量集成。

    安装 Visual Studio Code,执行:

    8.4.2. Qt Creator

    Qt Creator 是一个跨平台的集成开发环境(IDE),专为 Qt 开发人员的需求量身定制。Qt Creator 包含的功能有:

    • 支持 C++、QML 和 ECMAscript 的代码编辑器;

    • 快速的代码导航工具;

    • 输入时进行静态代码检查和样式提示;

    • 上下文敏感帮助;

    安装 Qt Creator,执行:

    8.4.3. Kdevelop

    Kdevelop 是一个开源的功能丰富、可扩展插件的 IDE,支持 C/C++ 和其他编程语言。它基于 KDevPlatform 和 KDE 与 Qt 库,自 1998 年以来一直在开发。

    安装 Kdevelop,执行:

    8.4.4. Eclipse IDE

    Eclipse 平台是一个开放的、可扩展的 IDE,适用于各种用途。Eclipse 平台提供了构建和运行集成软件开发工具的基础模块和平台。Eclipse 平台允许工具开发者独立开发与他人工具集成的工具。

    安装 Eclipse IDE,执行:

    8.4.5. Vim

    Vim 是一个高度可配置的文本编辑器,旨在实现高效的文本编辑。它是 vi 编辑器的改进版本,分发在大多数 UNIX 系统中。

    Vim 常被称为“程序员的编辑器”,它在编程中非常有用,以至于许多人认为它是一个完整的 IDE。然而,它不仅仅适用于程序员,Vim 也非常适合各种文本编辑,从编写电子邮件到编辑配置文件。

    安装 Vim,执行:

    6.3.Wayfire 混成器

    Wayfire 是款旨在轻量化和可定制的合成器。它提供了多种功能,并恢复了之前发布的 Compiz Fusion 桌面的一些元素,在现代硬件上看起来非常美观。要启动 Wayfire,首先需要安装必要的软件包:

    # pkg install wayfire wf-shell alacritty swaylock-effects swayidle wlogout kanshi mako wlsunset

    alacritty 包提供了一个终端仿真器,但并不是完全必需的,因为其他终端仿真器,如 kitty 和 XFCE-4 Terminal,在 Wayfire 合成器下也已经过测试并确认可以正常运行。Wayfire 配置相对简单,它使用一个文件,用户可以查看该文件并进行自定义。首先,将示例文件复制到运行时环境配置目录,然后编辑该文件:

    对于大多数用户来说,默认配置应该已经足够。在配置文件中,像著名的 cube 之类的项目已被预配置,并且有说明帮助用户理解可用的设置。几个值得注意的基本设置如下:

    在这个示例中,配置文件中的输出屏幕应该是列出的模式和赫兹。例如,模式应该设置为 widthxheight@refresh_rate。position 将输出放置在指定的像素位置,默认设置对于大多数用户应该没问题。transform 设置背景变换,scale 将输出缩放到指定的缩放因子。这些选项的默认设置通常是可以接受的;更多信息可以参见文档。

    如前所述,Wayland 是新的协议,并非所有应用程序都已经更新为完全兼容此协议。目前,sddm 似乎不支持在 Wayland 中启动和管理合成器。在这些示例中,使用了 swaylock 实用程序。配置文件包含选项,用于运行 swayidle 和 swaylock 来管理空闲和屏幕锁定。

    定义系统空闲时应采取的操作的选项如下:

    锁定超时通过以下几行进行配置:

    第一个选项将在 300 秒后锁定屏幕,再过 300 秒后,通过 dpms_timeout 选项将屏幕关闭。

    最后需要注意的是 <super> 键。大多数配置都提到了这个键,它是键盘上的传统 Windows 键。大多数键盘上都有这个超级键;如果没有,可以在配置文件中重新映射。例如,要锁定屏幕,按住 super 键和 shift 键,再按 escape 键。除非映射发生了变化,否则这将启动 swaylock 应用程序。swaylock 的默认配置将显示一个灰色的屏幕,但该应用程序非常可定制并且文档齐全。此外,由于安装了 swaylock-effects 版本,还可以使用例如模糊效果等多种选项,如下所示:

    此外,还有 --clock 参数,用于在锁屏时显示时钟和日期。当安装了 时,默认的 pam.d 配置已包括在内。它提供了默认的选项,适合大多数用户使用。更高级的选项可通过 PAM 文档获得更多信息。

    此时,是时候测试 Wayfire 并检查它是否能在系统上启动了。只需输入以下命令:

    合成器现在应该启动,并在屏幕上显示背景图像以及顶部的菜单栏。Wayfire 会尝试列出安装的兼容应用程序并呈现在下拉菜单中。例如,如果安装了 XFCE-4 文件管理器,它将在下拉菜单中显示出来。如果某个特定应用程序兼容且足够重要,它可以通过 wayfire.ini 配置文件映射到一个键盘快捷键。Wayfire 还提供了一个名为 Wayfire Config Manager 的配置工具,可以通过下拉菜单启动,也可以通过终端输入以下命令启动:

    通过此应用程序,可以启用、禁用或配置各种 Wayfire 配置选项,包括合成特殊效果。此外,为了提供更友好的用户体验,可以在配置文件中启用背景管理器、面板和停靠应用程序:

    警告

    通过 wcm 所做的更改将覆盖在 wayfire.ini 配置文件中的自定义更改。因此,强烈建议备份 wayfire.ini 文件,以便在需要时恢复任何重要的更改。

    最后,wayfire.ini 中列出的默认启动器是 ,如果用户愿意,也可以用其他面板替换它。

    6.6.使用 Xwayland

    在安装 Wayland 时,除非 Wayland 是在没有 X11 支持的情况下构建的,否则 Xwayland 二进制文件应该已经安装。如果 /usr/local/bin/Xwayland 文件不存在,请使用以下命令安装它:

    # pkg install xwayland

    注意

    推荐使用 Xwayland 的开发版本,并且它很可能与 Wayland 包一起安装。每个合成器都有启用或禁用此功能的方法。

    安装 Xwayland 后,需要在所选合成器中进行配置。对于 Wayfire,在 wayfire.ini 文件中需要添加以下行:

    对于 Sway 合成器,Xwayland 应该默认启用。即使如此,建议手动在 ~/.config/sway/config 中添加以下配置行:

    最后,对于 Hikari,不需要做任何更改。默认情况下,Xwayland 的支持已内建。如果需要禁用该支持,可以从 Ports 重新构建该包,并在此时禁用 Xwayland 支持。

    完成这些更改后,启动合成器并通过键绑定执行一个终端。在此终端中,执行 env 命令并搜索 DISPLAY 变量。如果合成器能够正确启动 Xwayland X 服务器,则这些环境变量应该类似于以下内容:

    在此输出中,显示了默认的 Wayland 显示器和为 Xwayland 服务器设置的显示器。验证 Xwayland 是否正常工作的另一种方法是安装并测试一个小的包:[x11/eyes],并检查输出。如果 xeyes 应用程序启动并且眼睛跟随鼠标指针,则说明 Xwayland 正常工作。如果出现如下错误,说明在 Xwayland 初始化期间发生了问题,可能需要重新安装:

    警告

    Wayland 的一个安全特性是,在没有运行 X 服务器的情况下,不会有其他网络监听程序。待启用 Xwayland,此安全特性不再适用于系统。

    对于某些合成器,如 Wayfire,Xwayland 可能无法正确启动。因此,env 会显示以下 DISPLAY 环境变量信息:

    尽管已经安装并配置了 Xwayland,X11 应用程序仍然无法启动,并会出现显示问题。为了解决这个问题,需要验证是否已经有一个通过 UNIX 套接字运行的 Xwayland 实例。首先,检查 sockstat 的输出并搜索 X11-unix:

    输出应该类似于以下信息:

    这表明存在一个 X11 套接字。可以进一步通过在合成器下的终端仿真器中尝试手动执行 Xwayland 来验证这一点:

    如果已经有一个 X11 套接字可用,用户会看到以下错误:

    由于已经有一个活跃的 X 显示器(显示号为 0),因此环境变量设置不正确。要修复此问题,可以将 DISPLAY 环境变量更改为 :0 并重新尝试执行该应用程序。以下示例使用 作为需要 Xwayland 服务的应用程序:

    做出此更改后, 应用程序应该能够使用 Xwayland 启动并按预期工作。

    10.3.浏览系统硬件

    在编辑内核配置文件之前,建议对机器的硬件进行清单盘点。在双重启动系统中,可以从其他操作系统创建硬件清单。例如,Microsoft® 的设备管理器包含有关已安装设备的信息。

    注意

    某些版本的 Microsoft® Windows® 有个系统图标,可以用来访问设备管理器。

    如果 FreeBSD 是唯一安装的操作系统,可以使用 dmesg(8) 来确定在启动探测过程中找到并列出的硬件。FreeBSD 上的大多数设备驱动程序都有手册页,其中列出了该驱动程序支持的硬件。例如,以下几行表明 psm(4) 驱动程序找到了一个鼠标:

    psm0: <PS/2 Mouse> irq 12 on atkbdc0
    psm0: [GIANT-LOCKED]
    psm0: [ITHREAD]
    psm0: model Generic PS/2 mouse, device ID 0

    由于此硬件存在,因此不应将该驱动程序从自定义内核配置文件中删除。

    如果 dmesg 的输出未显示启动探测的结果,可以改为读取 /var/run/dmesg.boot 的内容。

    另一个用于查找硬件的工具是 pciconf(8),它提供了更详细的输出。例如:

    % pciconf -lv
    ath0@pci0:3:0:0:        class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
        vendor     = 'Atheros Communications Inc.'
        device     = 'AR5212 Atheros AR5212 802.11abg wireless'
        class      = network
        subclass   = ethernet

    此输出表明 ath 驱动程序找到了一款无线以太网设备。

    的 -k 标志可以用于提供有用的信息。例如,它可以用来显示包含特定设备品牌或名称的手册页列表:

    创建硬件清单后,请参考它以确保在编辑自定义内核配置时不会删除已安装硬件的驱动程序。

    9.4.视频播放器

    本节介绍了 FreeBSD Ports 中的一些可用于视频播放的软件。

    表 4. 视频播放器包

    名称
    许可证
    包
    工具包

    MPlayer

    GPL 2.0

    CLI

    SMPlayer

    GPL 2.0

    9.4.1. MPlayer

    MPlayer 是一款多媒体播放器和编码器套件,支持多个平台并可通过命令行操作。它支持众多不同的文件格式和编解码器,包括流行的 DivX、XviD、H.264 流媒体,以及 DVD 和 SVCD,还支持许多常见的音频编解码器。

    要安装 MPlayer,请执行:

    有关 MPlayer 工作示例,请参见 。

    9.4.2. SMPlayer

    SMPlayer 旨在成为 MPlayer 的完整前端,从基本功能(如播放视频、DVD 和 VCD)到更高级的功能(如支持 MPlayer 滤镜等)。

    要安装 SMPlayer,请执行:

    9.4.3. VLC 媒体播放器

    VLC 媒体播放器是一款高度可移植的多媒体播放器,支持多种音频和视频格式(如 MPEG-1、MPEG-2、MPEG-4、DivX、mp3、ogg 等),以及 DVD、VCD 和多种流媒体协议。它还可以用作服务器,通过高带宽网络在 IPv4 或 IPv6 上进行单播或多播流媒体传输。VLC 还具备实时转码功能,可以进行流媒体传输或保存到磁盘。

    要安装 VLC,请执行:

    9.4.4. Kodi (XBMC)

    Kodi(前身为 XBMC)是一个免费的开源跨平台媒体播放器和娱乐中心。它允许用户播放和查看来自本地和网络存储媒体以及互联网的多数视频、音乐、播客和其他数字媒体文件。

    要安装 Kodi,请执行:

    2.4.开始安装

    重要

    在默认情况下,出现以下信息之前,安装器将不会对磁盘进行任何更改:

    在此警告之前,可以随时退出安装。如果担心某些配置错误,只需在此之前关闭计算机,设备磁盘将不会有任何变更。

    本节讲解了如何从使用的说明准备的安装介质启动系统。当使用可引导 USB 闪存驱动器时,请在打开计算机之前插入 USB 闪存驱动器。当从 CD/DVD 启动时,请在打开计算机后立刻插入介质。如何配置系统从插入的介质启动取决于架构。

    2.4.1. FreeBSD 引导加载程序菜单

    在系统从安装介质启动后,将显示类似如下内容的菜单:

    1.2.欢迎来到 FreeBSD!

    FreeBSD 是一款开源、符合标准的类 Unix 操作系统,适用于 x86(32 位和 64 位)、ARM、AArch64、RISC-V、POWER 和 PowerPC 计算机。它提供了现今被视为理所当然的所有功能,例如抢占式多任务处理、内存保护、虚拟内存、多用户功能、SMP(对称多处理)支持,以及为不同语言和框架提供了所有的开源开发工具,以及基于 X Window 系统、KDE 和 GNOME 的桌面功能。FreeBSD 的独家优势包括:

    • 自由的开源许可证:你可以自由修改和扩展其源代码,并将其纳入开源项目和闭源产品中,而不受典型著佐权许可证的限制,同时规避了潜在的许可证不兼容问题。

    • 强大的 TCP/IP 网络功能:FreeBSD 实现了行业标准协议,性能和可扩展性日益增强。这使其在服务器、路由和防火墙角色中都非常适合,实际上许多公司和供应商正是出于这个目的而使用 FreeBSD。

    9.5.视频会议

    FreeBSD 桌面环境可以用于参加视频会议。本节将介绍如何配置摄像头以及 FreeBSD 支持哪些视频会议应用程序。

    9.5.1. 配置摄像头

    为了让 FreeBSD 访问摄像头并进行配置,需要安装一些实用工具:

    • 是守护进程,支持使用数百种不同的 USB 摄像头和 DVB USB 设备。

    3.7.文件系统的挂载与卸载

    文件系统最好被想象成一棵树,其“根”位于 /。/dev、/usr 和根目录下的其他目录是这棵树的分支,它们又可能有自己的分支,比如 /usr/local,以此类推。

    出于多种原因,可以将这些目录中的某些放在独立的文件系统上。/var 包含 log/、spool/ 目录以及各种临时文件,因此可能会被写满。写满根文件系统并不是好事,因此通常建议将 /var 与 / 分离。

    另一个常见的原因是某些目录树可能存放在独立的物理磁盘上,或独立的虚拟磁盘上,例如网络文件系统挂载(见 ),或 CDROM 驱动器。

    9.3.音频播放器

    本节介绍了 FreeBSD Ports 中的一些可用于音频播放的软件。

    表 3. 音频播放器包

    名称
    许可证
    包名
    工具包

    2.5.使用 bsdinstall

    本部分展示了 bsdinstall 菜单的顺序以及在系统安装之前将询问的信息类型。使用箭头键高亮菜单选项,然后按 空格键 选择/取消选择该菜单项。在完成后,按 回车键 可保存选择,进入下一个界面。

    2.5.1. 键盘布局选择菜单

    在开始安装过程之前,bsdinstall 将加载键盘布局文件,如所示。

    图 4. 键盘布局加载

    在加载键盘布局后,bsdinstall 将显示。使用上下箭头选择与系统接入的键盘最相符的键盘布局。按

    8.6.文档阅读器

    自 UNIX® 面世以来,一些新的文档格式逐渐流行起来,而这些格式所需的查看器可能在基本系统中不可用。本节介绍了如何安装以下文档查看器:

    表 5. 支持的文档查看器

    名称
    许可证
    包含的包
    所需资源

    6.5.Sway 混成器

    Sway 合成器是款平铺合成器,旨在替代 i3 窗口管理器。它应当可以与用户当前的 i3 配置兼容,但某些新功能可能需要额外的设置。

    在开始安装 Sway 之前,请确保安装并正确配置了显卡(GPU)。请参考 部分进行指导。这一步对于 Sway 合成器的正常工作至关重要。

    以下示例假定进行的是一次全新安装,而没有迁移任何 i3 配置。要安装 Sway 和相关组件,请以 root 用户身份执行以下命令:

    为了获得一个基本的配置文件,执行以下命令并在复制后编辑配置文件:

    基本的配置文件包含了许多默认设置,这对大多数用户来说已经足够。以下是需要做的一些重要更改:

    在上面的例子中,加载了 evdev(4) 事件的 xkb 规则,并将 $mod 键设置为 Windows 键,以便进行键绑定。接下来,设置了终端仿真器为 alacritty,并定义了屏幕锁定命令(稍后会详细介绍)。output 关键字定义了显示模式、位置,背景墙纸也被设置并指示 Sway 拉伸墙纸以填充屏幕。最后,swayidle 被设置为守护进程,并在 300 秒后锁定屏幕,在 600 秒后进入休眠模式。黑色的锁定背景色(000000)也在这里定义。使用 swaylock-effects,还可以使用 --clock

    6.2.Wayland 概述

    Wayland 是一种新的显示服务器,它与 Xorg 在多个重要方面有所不同。

    首先,Wayland 只是一个协议,充当客户端之间的中介,采用不同的机制,从而去除了对 X 服务器的依赖。Xorg 包括 X11 协议,用于运行远程显示,X 服务器接受连接并显示窗口。而在 Wayland 下,合成器或窗口管理器提供显示服务器,而不是传统的 X 服务器。

    由于 Wayland 不是 X 服务器,传统的 X 屏幕连接需要使用其他方法,如 VNC 或 RDP 进行远程桌面管理。其次,Wayland 可以作为一个独立的实体管理客户端与合成器之间的复合通信,而无需支持 X 协议。

    Wayland 相对较新,并不是所有软件都已更新为原生运行而无需 Xwayland 支持。由于 Wayland 不提供 X 服务器,并期望合成器提供该支持,因此尚未支持 Wayland 的 X11 窗口管理器将要求 Xwayland 在没有 -rootless 参数的情况下启动。移除 -rootless 参数后,将恢复 X11 窗口管理器的支持。

    注意

    当前的 NVIDIA® 驱动程序应该能够与大多数 wlroots 合成器兼容,但可能会略显不稳定,并且可能不支持所有功能。目前,NVIDIA® DRM 的志愿者正在寻求帮助。

    # pkg install libreoffice
    # pkg install libreoffice-es
    # pkg install calligra
    # pkg install abiword
    FreeBSD/amd64 (pc3.example.org) (ttyv0)
    
    login:
    % man command
    % man ls
    hosts: files dns
    % mkdir ~/.config/wayfire
    % cp /usr/local/share/examples/wayfire/wayfire.ini ~/.config/wayfire
    [output]
    mode = 1920x1080@60000
    position = 0,0
    transform = normal
    scale = 1.000000
    xwayland = true
    xwayland enable
    editors/calligra
    editors/abiword
    kbdcontrol(1)
    vidcontrol(1)
    atkbd(4)
    syscons(4)
    vt(4)
    X 窗口系统
    ttys(5)
    vidcontrol(1)
    vidcontrol(1)
    man(1)
    chmod(1)
    chmod(1)
    chmod(2)
    apropos(1)
    info(1)
    editors/emacs
    info(1)
    devel/ccache
    poudriere(8)
    FLAVORS
    poudriere(8)
    https://github.com/freebsd/poudriere/wiki
    http://pkg.example.com/13amd64

    nameserver

    解析器应该查询的名称服务器的 IP 地址。服务器按顺序查询,最多可以列出三个。

    search

    主机名查找的搜索列表。通常由本地主机名的域决定。

    domain

    本地域名。

    nscd(8)
    www/gitlab-ce
    resolv.conf(5)
    dhclient(8)
    local-unbound(8)
    local-unbound(8)

    可视化调试器;

  • 集成的 GUI 布局和表单设计器。

  • devel/qtcreator

    重

    Kdevelop

    GPL 2.0 或更高

    devel/kdevelop

    重

    Eclipse IDE

    EPL

    java/eclipse

    重

    Vim

    VIM

    editors/vim

    轻量

    Neovim

    Apache 2.0

    editors/neovim

    轻量

    GNU Emacs

    GPL 3.0 或更高

    editors/emacs

    轻量

    editors/vscode
    x11/swaylock-effects
    x11/wf-shell
    mail/claws-mail
    mail/claws-mail
    # man -k Atheros
    ath(4)                   - Atheros IEEE 802.11 wireless network driver
    ath_hal(4)               - Atheros Hardware Access Layer (HAL)
    man(1)

    multimedia/smplayer

    Qt

    VLC 媒体播放器

    GPL 2.0

    multimedia/vlc

    Qt

    Kodi (XBMC)

    GPL 2.0

    multimedia/kodi

    X11

    mplayer(1)
    multimedia/mplayer
    参数在锁屏时显示时钟。请参阅手册页获取更多选项。有关自定义输出选项的更多信息,请查看
    手册页。

    在 Sway 中,按住 Windows 键(mod 键)并按下 d 键,可以打开应用程序菜单。可以使用键盘上的箭头键进行导航。还有一种方法可以操作条形布局并添加托盘;有关更多信息,请阅读 sway-bar(5) 手册页。默认配置会将日期和时间添加到右上角。有关示例,请参阅配置文件中的 Bar 部分。默认情况下,配置文件没有包含锁定屏幕功能,除了上面示例中启用的锁定定时器。要创建锁定键绑定,需要在 Key bindings 部分添加以下行:

    现在,可以使用 Windows 键+Shift 键+回车键组合来锁定屏幕。无论是通过软件包还是 FreeBSD Ports 安装 Sway,都会安装一个默认的 pam.d 文件。默认配置对大多数用户来说是可以接受的,但也提供了更多高级选项。有关更多信息,请阅读 PAM 文档。

    最后,要退出 Sway 并返回到 shell,按住 Windows 键、Shift 键并按 e 键。将显示一个提示,提供退出 Sway 的选项。在迁移过程中,Sway 可以通过终端仿真器在 X11 桌面环境中启动,例如 Plasma。这样可以在完全迁移到该合成器之前,测试不同的更改和键绑定。要启动 Sway,请执行以下命令:

    # pkg install sway swayidle swaylock-effects alacritty dmenu-wayland dmenu
    图形硬件驱动
    % sway -c ~/.config/sway/config
    sway-output(5)
    目前,许多软件在 Wayland 上运行时几乎没有问题,包括 Firefox。同时,也有一些桌面环境可供选择,如 Compiz Fusion 替代品 Wayfire 和 i3 窗口管理器替代品 Sway。

    注意

    截至 2021 年 5 月,plasma5-kwin 已支持在 FreeBSD 上运行 Wayland。要在 Wayland 下使用 Plasma,请使用 startplasma-wayland 参数启动 ck-launch-session,并通过以下命令将 dbus 与其关联:dbus-launch --exit-with-x11 ck-launch-session startplasma-wayland。

    对于合成器,必须有一个支持 evdev(4) 驱动程序的内核,才能利用按键绑定功能。默认情况下,GENERIC 内核已构建此支持;但是,如果内核经过定制并且去除了 evdev(4) 支持,则需要加载 evdev(4) 模块。此外,Wayland 用户需要成为 video 组的成员。要快速更改此设置,请使用 pw 命令:

    安装 Wayland 非常简单;该协议本身不需要太多配置。大多数组合将依赖所选的合成器。现在安装 seatd,可以跳过合成器安装和配置中的一个步骤,因为 seatd 需要提供对某些设备的非根访问权限。

    所有此处描述的合成器都应该能够与 graphics/drm-kmod 开源驱动程序兼容;但是,使用专有驱动程序时,NVIDIA® 显卡可能会遇到一些问题。首先安装以下软件包:

    安装完协议和支持软件包后,需要安装一个合成器来创建用户界面。以下部分将介绍几种合成器。所有使用 Wayland 的合成器都需要在环境中定义一个运行时目录。自 FreeBSD 14.1 以来,这已自动创建和定义。对于较早的版本,可以通过以下命令在 Bourne shell 中创建此目录:

    需要注意的是,大多数合成器会在 XDG_RUNTIME_DIR 目录中搜索配置文件。在此处的示例中,将使用一个参数来指定配置文件路径为 ~/.config,以保持临时文件和配置文件的分离。建议为每个合成器配置别名,以加载指定的配置文件。

    警告

    有报告称,ZFS 用户可能会遇到一些 Wayland 客户端的问题,因为它们需要访问 posix_fallocate() 函数用于运行时目录。虽然作者无法在其 ZFS 系统上重现此问题,但推荐的解决方法是不要使用 ZFS 作为运行时目录,而是使用 tmpfs 来挂载 /var/run 目录。此时,可以通过命令 mount -t tmpfs tmpfs /var/run 挂载 tmpfs 文件系统,并通过 /etc/fstab 配置使此更改在重启后生效。可以将 XDG_RUNTIME_DIR 环境变量配置为使用 /var/run/user/$UID,以避免与 ZFS 相关的问题。请在查看以下配置示例时考虑此情况。

    seatd 守护进程有助于管理合成器中对共享系统设备的非根用户访问,包括显卡。对于传统的 X11 管理器,如 Plasma 和 GNOME,seatd 并不需要;但是,对于此处讨论的 Wayland 合成器,它将在系统中启用并在启动合成器环境之前运行。要现在启用并启动 seatd 守护进程,并确保在系统初始化时也启用:

    接下来,需要安装一个合成器来为图形环境创建用户界面。以下部分将讨论三种合成器,包括基本配置选项、屏幕锁定设置和更多信息的推荐。

    # name    getty                         type  status comments
    #
    ttyv0   "/usr/libexec/getty Pc"         xterm   on  secure
    # Virtual terminals
    ttyv1   "/usr/libexec/getty Pc"         xterm   on  secure
    ttyv2   "/usr/libexec/getty Pc"         xterm   on  secure
    ttyv3   "/usr/libexec/getty Pc"         xterm   on  secure
    ttyv4   "/usr/libexec/getty Pc"         xterm   on  secure
    ttyv5   "/usr/libexec/getty Pc"         xterm   on  secure
    ttyv6   "/usr/libexec/getty Pc"         xterm   on  secure
    ttyv7   "/usr/libexec/getty Pc"         xterm   on  secure
    ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure
    # name  getty                           type  status  comments
    #
    # 如果控制台标记为“insecure”,则在进入单用户模式时,init 会要求输入 root 密码。
    console none                            unknown  off  secure
    # kldload vesa
    # vidcontrol -i mode
    # vidcontrol MODE_279
    allscreens_flags="MODE_279"
    % man 1 chmod
    % man -k mail
    % cd /usr/sbin
    % man -f * | more
    % cd /usr/sbin
    % whatis * | more
    % info
    # poudriere jail -c -j 13amd64 -v 13.1-RELEASE
    # poudriere ports -c -p local -m git+https
    editors/emacs
    devel/git
    devel/php-composer2@php82
    ports-mgmt/pkg
    ...
    # poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
    # poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
    FreeBSD: {
    	enabled: no
    }
    custom: {
    	url: "http://pkg.example.com/13amd64",
    	enabled: yes,
    }
    custom: {
    	url: "file:///usr/local/poudriere/data/packages/11amd64",
    	enabled: yes,
    }
    hosts: files cache dns
    192.168.1.150 git.example.com git
    search example.com
    nameserver 147.11.1.11
    nameserver 147.11.100.30
    # sysrc local_unbound_enable="YES"
    # service local_unbound start
    # pkg install vscode
    # pkg install qtcreator
    # pkg install kdevelop
    # pkg install eclipse
    # pkg install vim
    idle = swaylock
    [idle]
    toggle = <super> KEY_Z
    screensaver_timeout = 300
    dpms_timeout = 600
    % swaylock --effect-blur 7x5
    % wayfire -c ~/.config/wayfire/wayfire.ini
    % wcm
    panel = wf-panel
    dock = wf-dock
    background = wf-background
    % env | grep DISPLAY
    WAYLAND_DISPLAY=wayland-1
    DISPLAY=:0
    Error: Cannot open display wayland-0
    % env | grep DISPLAY
    DISPLAY=wayland-1
    WAYLAND_DISPLAY=wayland-1
    % sockstat | grep x11
    trhodes  Xwayland   2734  8  stream /tmp/.X11-unix/X0
    trhodes  Xwayland   2734  9  stream /tmp/.X11-unix/X0
    trhodes  Xwayland   2734  10 stream /tmp/.X11-unix/X0
    trhodes  Xwayland   2734  27 stream /tmp/.X11-unix/X0_
    trhodes  Xwayland   2734  28 stream /tmp/.X11-unix/X0
    % Xwayland
    (EE)
    Fatal server error:
    (EE) Server is already active for display 0
    	If this server is no longer running, remove /tmp/.X0-lock
    	and start again.
    (EE)
    export DISPLAY=:0
    # pkg install mplayer
    # pkg install smplayer
    # pkg install vlc
    # pkg install kodi
    % mkdir ~/.config/sway
    % cp /usr/local/etc/sway/config ~/.config/sway
    # Logo 键。使用 Mod1 作为 Alt 键。
    input * xkb_rules evdev
    set $mod Mod4
    # 设置你喜欢的终端仿真器
    set $term alacritty
    set $lock swaylock -f -c 000000
    output "My Workstation" mode 1366x768@60Hz position 1366 0
    output * bg ~/wallpapers/mywallpaper.png stretch
    ### 空闲配置
    exec swayidle -w \
              timeout 300 'swaylock -f -c 000000' \
              timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
              before-sleep 'swaylock -f -c 000000'
    # 手动锁定屏幕
    bindsym $mod+Shift+Return exec $lock
    pw groupmod video -m user
    # pkg install wayland seatd
    % export XDG_RUNTIME_DIR=/var/run/user/`id -u`
    # sysrc seatd_enable="YES"
    # service seatd start

    /mnt/

    系统管理员常用作临时挂载点的空目录。

    /proc/

    进程文件系统。详见 。

    /root/

    root 账户的主目录。

    /sbin/

    在单用户和多用户环境中必需的系统程序和管理工具。

    /tmp/

    临时文件,通常在系统重启后不会保留。

    /usr/

    大多数用户工具和应用程序所在之处。

    /usr/bin/

    常用工具、编程工具和应用程序。

    /usr/local/

    本地可执行文件与库,也是 FreeBSD ports 框架的默认安装位置。

    /var/

    用于日志、临时、中转与任务排队的多用途文件目录。

    /var/log/

    系统日志文件。

    /

    文件系统的根目录。

    /bin/

    单用户和多用户环境中必需的用户工具。

    /boot/

    操作系统引导过程中使用的程序和配置文件。

    /dev/

    由 devfs(5) 管理的设备特殊文件。

    /etc/

    系统配置文件与脚本。

    /lib/

    /bin 和 /sbin 中二进制文件所需的关键系统库。

    /libexec/

    关键系统文件。

    /media/

    可移动媒体(如 CD、USB 驱动器等)的挂载点子目录。

    FreeBSD 引导加载程序菜单

    图 1. FreeBSD 引导加载程序菜单

    在默认情况下,在启动 FreeBSD 安装程序(在 FreeBSD 已安装的情况下会启动 FreeBSD)之前菜单将等待十秒钟。要暂停启动计时器来查看选项,请按 空格键。要选择某选项,请按其高亮显示的数字、字符/按键。以下选项可用。

    • Boot Multi User:将继续 FreeBSD 启动过程。如果启动计时器已暂停,请按 1、大写/小写的 B 或 回车键。

    • Boot Single User:此模式可用于修复现有的 FreeBSD 安装,详见“单用户模式”。按 2 或大写/小写的 S 可进入此模式。

    • Escape to loader prompt:将系统引导到修复提示符,其包含少量的底层命令。此提示在中进行了说明。按 3 或 Esc 可进入此提示。

    • Reboot:重新启动系统。

    • Cons:可通过 video、serial、Dual (serial primary) 或 Dual (Video primary) 继续安装。

    • Kernel:加载不同的内核。

    • Boot Options:打开在 中显示和说明的菜单。

    显示不同引导选项的菜单

    图 2. FreeBSD 引导选项菜单

    引导选项菜单分为两个部分。第一部分可用于返回主引导菜单或将任何已切换的选项重置为默认值。

    下一部分用于通过按选项的高亮数字/字符来切换可用选项为 On/Off。系统将始终使用这些选项的设置进行引导,直到它们被修改。可以通过此菜单切换几个选项:

    • ACPI Support:如果在引导期间系统卡住,请尝试将此选项切换为 Off。此选项仅在可用但非必需的情况下存在。

    • Safe Mode:如果哪怕在将 ACPI Support 设置为 Off 的情况下系统仍然卡住,请尝试将此选项设置为 On。

    • Single User:将此选项切换为 On 可修复现有的 FreeBSD 安装,详见。解决问题后,情切换回 Off。

    • Verbose:将此选项切换为 On 以查看引导过程中的详细消息。这在故障排除硬件时可能很有用。

    在做出必要的选择后,按 1 或 退格键 返回主引导菜单,然后按 回车键 继续引导 FreeBSD。随着 FreeBSD 进行硬件设备探测、加载安装程序,会出现一系列引导信息。引导完成后,将显示欢迎菜单。

    FreeBSD 安装欢迎菜单

    图 3. 欢迎菜单

    按 回车键 可选择默认的 Install 进入安装程序。本章的其余部分解释了如何使用此安装程序。还可以使用左右箭头/彩色字母选择所需的菜单项。Shell 可以用于使用 FreeBSD shell,能在安装之前使用命令行工具准备磁盘。选项 Live CD 可用于在安装之前试用 FreeBSD。Live 版本在使用 Live CD 中进行了介绍。

    技巧

    要查看引导消息,包括硬件设备探测,请按大写/小写的 S,然后按 回车键 以访问 shell。在 shell 提示符下,输入 more /var/run/dmesg.boot,再使用 空格键 滚动信息。在完成后,输入 exit 可返回欢迎菜单。

    准备安装介质
    完全集成的 OpenZFS 支持,包括在根文件系统使用 ZFS、ZFS 启动环境、故障管理、管理权限委派、对 jail 的支持、FreeBSD 特定文档和系统安装程序的支持。
  • 海量的安全功能,包括强制访问控制框架、Capsicum 能力和沙箱机制。

  • 三万余款预构建软件包,适用于所有受支持的架构。Ports 还可使你可以轻松构建自己的定制软件包。

  • 文档:除了手册和由不同作者编写的书籍(涵盖系统管理到内核内部机制等主题)外,还有 man(1) 页面,不仅包含用户空间守护进程、工具和配置文件的文档,还包括了内核驱动 API(第 9 节)和单个驱动程序(第 4 节)的文档。

  • 简单一致的存储库结构和构建系统:FreeBSD 使用单一的存储库管理所有组件——包括内核和用户空间。结合统一且易于定制的构建系统和精心设计的开发流程,使 FreeBSD 易于与你自己产品的构建基础设施集成。

  • 恪守 Unix 哲学,更倾向于可组合性,而非单一的“全能”守护进程及硬编码行为。

  • 与 Linux 的二进制兼容性,使 FreeBSD 能够在无需虚拟化的情况下运行许多 Linux 二进制文件。

  • FreeBSD 基于加州大学伯克利分校计算机系统研究小组(CSRG)发布的 4.4BSD-Lite,并延续了 BSD 系统开发的卓越传统。除了 CSRG 提供的出色工作外,FreeBSD 项目还投入了数千个小时用于扩展功能和优化系统,以实现最大性能和可靠性(尤其是在实际负载的情况下)。FreeBSD 在性能和可靠性方面能与其他开源和商业产品相媲美,并结合了独一无二的前沿特性。

    1.2.1. FreeBSD 能做什么?

    FreeBSD 的应用范围仅限于你的想象力。从软件开发到工厂自动化,从库存管理到远程卫星天线的方位校正;如果可以用商业 UNIX® 产品完成,那么很可能你也可以用 FreeBSD 来实现!FreeBSD 还明显受益于全球研究中心和大学开发的数千款高质量应用程序,他们通常以极低的成本甚至免费提供。

    由于 FreeBSD 的源代码可自由获取,该系统也可以根据特定应用程序和项目进行几乎前所未有的定制,这在大多数主要商业供应商的操作系统中通常是不可能的。以下只是现在人们使用 FreeBSD 的一些应用示例:

    • 互联网服务:FreeBSD 内置的强大 TCP/IP 网络功能使其成为各种互联网服务的理想平台,例如:

      • Web 服务器

      • IPv4 和 IPv6 路由器

      • 防火墙和 NAT(“IP 伪装”)网关

      • FTP 服务器

      • 邮件服务器

      • 存储服务器

      • 虚拟化服务器

      • 及更多……

    • 教育:你是计算机科学或相关工程领域的学生吗?没有比通过 FreeBSD 提供的动手、深入体验来学习操作系统、计算机体系结构和网络的更好方法了。对那些使用计算机完成 其他 工作的用户,许多可自由获得的 CAD、数学和图形设计软件包也非常有帮助!

    • 研究:由于整个系统的源代码都是开源的,FreeBSD 是操作系统及计算机科学其他领域研究的优秀平台。FreeBSD 的自由特性使得远程团队可以在想法和共享开发上进行合作,而无需担心特殊许可协议或受公开论坛讨论内容的限制。

    • 网络:需要一台新的路由器?一台域名服务器(DNS)?一款防火墙来保护你的内部网络?FreeBSD 可以轻松将你角落里闲置的 PC 变成具备先进数据包过滤能力的高级路由器。

    • 嵌入式:FreeBSD 是构建嵌入式系统的绝佳平台。支持 ARM、AArch64 和 PowerPC 平台,结合强大的网络栈、前沿特性以及宽松的 ,FreeBSD 为构建嵌入式路由器、防火墙和其他设备提供了良好的基石。

    • 桌面:FreeBSD 是廉价桌面解决方案的不错选择(使用免费可选的 X11 服务器及 Wayland 显示服务器)。FreeBSD 提供了多种开源桌面环境,包括标准的 GNOME 和 KDE 图形用户界面。FreeBSD 甚至可以从中央服务器以“无盘”方式启动,使得单个工作站更加经济且易于管理。

    • 软件开发:FreeBSD 基本系统配备了完整的开发工具套件,包括完整的 C/C++ 编译器和调试工具。通过 ports 和软件包,还可轻松获取更多其他语言支持。

    FreeBSD 可以免费下载,及通过 CD-ROM 和 DVD 获取。更多有关获取 FreeBSD 的信息,请参见 获取 FreeBSD。

    1.2.2. 谁在使用 FreeBSD?

    FreeBSD 以其强大的 web 服务器能力而闻名。可以在 FreeBSD 基金会的网站上找到基于 FreeBSD 的产品和服务的 公司推荐信列表 。维基百科也维护了一份 基于 FreeBSD 的产品列表。

    multimedia/pwcview 是应用程序,可用于查看摄像头的视频流。

    要安装所需的实用工具,请执行:

    在 /etc/rc.conf 中启用 webcamd(8) 服务,以便在系统启动时自动启动它:

    用户必须属于 webcamd 组。要将用户添加到 webcamd 组,请执行以下命令:

    由于 multimedia/webcamd 需要 cuse(3) 模块,因此必须加载该模块,执行以下命令:

    要在系统启动时加载 cuse(3),执行以下命令:

    安装完这些工具后,可以使用 webcamd(8) 显示可用的摄像头列表:

    输出应该类似于以下内容:

    • ① 可用的摄像头

    通过执行以下命令配置可用的摄像头:

    注意

    注意,如果这是一个即插即用的 USB 摄像头,更改连接的 USB 端口将更改 webcamd -l 输出中的内容,并且可能需要更新 rc.conf 中的条目。对于使用 USB 集成摄像头的笔记本电脑,这通常不成问题。

    必须通过执行以下命令启动 webcamd(8) 服务:

    输出应类似于以下内容:

    可以使用 multimedia/pwcview 检查摄像头是否正常工作。可以使用以下命令执行 multimedia/pwcview:

    然后 multimedia/pwcview 将显示摄像头画面:

    pwcview 显示 Absolute FreeBSD 第三版作为示例

    9.5.2. 会议软件状态

    FreeBSD 当前支持以下用于进行视频会议的工具。

    表 5. 会议软件

    名称
    Firefox 状态
    Chromium 状态
    网站

    Microsoft Teams

    不可用

    可用

    Google Meet

    不可用

    可用

    Zoom

    可用

    可用

    multimedia/webcamd
    3.7.1. fstab 文件

    在启动过程中(见 FreeBSD 启动过程),/etc/fstab 中列出的文件系统会被自动挂载,除非条目中包含 noauto。该文件中的条目格式如下:

    • device:现有设备名,详见 磁盘设备命名。

    • mount-point:现有的目录,用于挂载文件系统。

    • fstype:传递给 mount(8) 的文件系统类型。FreeBSD 默认的文件系统类型是 ufs。

    • options:rw 表示读写文件系统,ro 表示只读文件系统,可跟其他选项。常用选项包括 noauto,表示启动时不挂载此文件系统。更多选项见 。

    • dumpfreq:供 判断哪些文件系统需要备份。缺省时视为 0。

    • passno:决定在重启后,哪些 UFS 文件系统应由 检查,以及检查顺序。应跳过的文件系统设置为 0。根文件系统应优先检查,设为 1,其他文件系统设为大于 1 的值。若多个文件系统具有相同的 passno, 会尝试并行检查。

    更多格式和选项说明,见 fstab(5)。

    3.7.2. 使用 mount(8)

    文件系统通过 mount(8) 命令挂载。最基本的语法如下:

    如果文件系统已列在 /etc/fstab 中,也可以只提供挂载点进行挂载。

    该命令有许多选项,详见 mount(8)。常用选项包括:

    挂载选项

    • -a:挂载 /etc/fstab 中所有文件系统,除 noauto 标记、被 -t 排除或已挂载的。

    • -d:执行除实际挂载系统调用外的所有操作。常与 -v 配合使用,用于调试 [mount(8)] 实际尝试的操作。

    • -f:强制挂载未清理的文件系统(危险),或在将文件系统从读写状态降级为只读时撤销写权限。

    • -r:以只读方式挂载,等效于 -o ro。

    • -t fstype:指定要挂载的文件系统类型,或在使用 -a 时仅挂载该类型文件系统。默认类型是 "ufs"。

    • -u:更新文件系统的挂载选项。

    • -v:显示详细信息。

    • -w:以读写方式挂载文件系统。

    以下选项可作为 -o 的逗号分隔列表传入:

    • nosuid:不解释文件系统上的 setuid 或 setgid 标志,此选项常用于增强安全性。

    3.7.3. 使用 umount(8)

    卸载文件系统使用 umount(8)。该命令接受一个参数,可以是挂载点、设备名,或 -a、-A。

    所有形式均可接受 -f 强制卸载,以及 -v 显示详细信息。注意,-f 通常并不安全,可能导致系统崩溃或文件系统数据损坏。

    要卸载所有已挂载的文件系统,或仅卸载 -t 后指定类型的文件系统,可使用 -a 或 -A。注意 -A 不会尝试卸载根文件系统。

    “Network File System (NFS)”

    GTK+

    Audacious

    BSD-2

    Qt

    MOC (音乐控制台)

    GPL 2.0

    TUI

    9.3.1. Elisa

    Elisa 是由 KDE 社区开发的音乐播放器,旨在提供简单且易于使用的体验。

    要安装 Elisa,请执行:

    9.3.2. GNOME Music

    GNOME Music 是 GNOME 新的音乐播放应用。它旨在将优雅的浏览体验与简单直观的控制结合在一起。

    要安装 GNOME Music,请执行:

    9.3.3. Audacious

    Audacious 是一款开源音频播放器。它是 XMMS 的后代,能够按用户的需求播放音乐,同时不会占用计算机的过多资源。

    要安装 Audacious,请执行:

    注意

    Audacious 原生支持 OSS,但需要在音频选项卡中进行配置。

    9.3.4. MOC (音乐控制台)

    MOC (音乐控制台) 是一款旨在强大且易于使用的控制台音频播放器。

    MOC 运行平稳,不论系统或 I/O 负载如何,因为它在独立线程中处理输出缓冲区。它不会在文件之间造成空隙,因为下一首文件在播放当前文件时会被预缓存。

    要安装 MOC (音乐控制台),请执行:

    Elisa

    LGPL 3.0

    audio/elisa

    Qt

    GNOME Music

    GPL 2.0

    回车键
    保存选择。
    键盘布局选择菜单,显示所有受支持的键盘

    图 5. 键盘布局选择菜单

    注意

    按 Esc 可退出此菜单,使用默认键盘布局。如果不确定要选择哪个键盘布局,使用 United States of America ISO-8859-1 也是一个稳妥的选择。

    此外,在选择不同的键盘布局时,用户可测试该布局,确保正确,然后再继续,如键盘布局测试菜单中所示。

    键盘布局测试菜单

    图 6. 键盘布局测试菜单

    2.5.2. 设置主机名

    接下来的 bsdinstall 菜单用于为新安装的系统设置主机名。

    设置主机名

    图 7. 设置主机名

    输入在网络中唯一的主机名。应为一个完全限定的主机名,例如 machine3.example.com。

    2.5.3. 选择要安装的组件

    接下来,bsdinstall 将提示选择要安装的可选组件。

    可以安装的不同组件。例如:base-dbg

    图 8. 选择要安装的组件

    决定安装哪些组件在很大程度上取决于系统的预期用途和可用的磁盘空间。FreeBSD 内核和用户空间,统称为 基本系统,始终会被安装。根据架构,某些组件可能不会出现:

    • base-dbg——含有调试符号的基础工具,如 cat 和 ls 等。

    • kernel-dbg——含有调试符号的内核和模块。

    • lib32-dbg——用于在 64 位版本 FreeBSD 上运行 32 位应用程序的兼容库,含有调试符号。

    • lib32——用于在 64 位版本 FreeBSD 上运行 32 位应用程序的兼容库。

    • ports——FreeBSD Ports 是一个文件集,可自动下载、编译和安装第三方软件包。有关如何使用 Ports 的信息,请参见。

    警告

    安装程序不会检查磁盘空间是否充足。请仅在有足够硬盘空间的情况下选择此选项。FreeBSD Ports 约占用 3 GB 磁盘空间。

    • src——FreeBSD 内核和用户空间的完整源代码。虽然大多数应用程序并不需要,但可能需要构建设备驱动程序、内核模块或某些来自 Ports 的应用程序。它也用于开发 FreeBSD 本身。完整的源代码需要 1 GB 磁盘空间,重新编译整个 FreeBSD 系统需要额外的 5 GB 空间。

    • tests——FreeBSD 测试套件。

    2.5.4. 从网络安装

    在从网络安装中显示的菜单仅在安装 -bootonly.iso/-mini-memstick.img 时出现,因为这些安装介质未包含安装文件的副本。由于必须通过网络连接下载安装文件,因此该菜单要求必须先配置网络接口。如果在安装过程中显示此菜单,请记得遵循配置网络接口中的说明。

    指示未找到某些组件并将通过网络下载

    图 9. 网络安装

    加载键盘布局
    键盘布局选择菜单
    加载键盘布局

    中

    ePDFView

    GPL 2.0

    中

    Xpdf

    GPL 2.0

    轻

    Zathura

    Zlib

    轻

    8.6.1. Okular

    Okular 是一款通用文档查看器,属于 KDE Plasma 项目的一部分。

    Okular 结合了出色的功能,支持多种文档格式,如 PDF、Postscript、DjVu、CHM、XPS、ePub 等。

    安装 Okular,执行:

    8.6.2. Evince

    Evince 是一款支持多种文档格式(包括 PDF 和 Postscript)的文档查看器,属于 GNOME 项目的一部分。Evince 的目标是用一个简单的应用程序替代像 ggv 和 gpdf 这样的文档查看器。

    安装 Evince,执行:

    8.6.3. ePDFView

    ePDFView 是一款轻量级的 PDF 文档查看器,仅使用 Gtk+ 和 Poppler 库。ePDFView 的目标是提供一个简单的 PDF 文档查看器,类似于 Evince,但不使用 GNOME 库。

    安装 ePDFView,执行:

    8.6.4. Xpdf

    对于喜欢小巧 FreeBSD PDF 查看器的用户,Xpdf 提供了一款轻量高效的查看器,所需资源较少。它使用标准的 X 字体,不需要额外的工具包。

    安装 Xpdf,执行:

    8.6.5. Zathura

    Zathura 是一款高度可定制且功能强大的文档查看器。它提供简约、节省空间的界面,主要专注于键盘交互,使用起来非常便捷。

    安装支持 PDF 的 Zathura,执行:

    此外,还可以安装 graphics/zathura-pdf-poppler 提供替代的 PDF 支持,安装 graphics/zathura-ps 提供 PostScript 支持,安装 graphics/zathura-djvu 提供 DjVu 支持,以及安装 graphics/zathura-cb 提供漫画书支持。

    Okular

    GPL 2.0

    graphics/okular

    重

    Evince

    GPL 2.0

    本书的组织结构

    全书在逻辑上被分为五个独立的部分。第一部分是 入门,涉及 FreeBSD 的安装和基本用法。预设读者会按顺序阅读这些章节(可跳过已熟悉的话题)。第二部分是 常见任务,涉及一些 FreeBSD 的常用功能。第二及后续所有部分都可以乱序阅读。每章都以简洁的概述开头,讲解本章的内容以及读者应该掌握的知识。这样设计是为了让跳读的读者也能够找到感兴趣的章节。第三部分是 系统管理,涉及管理主题。第四部分是 网络通信,涉及网络和服务器主题。第五部分是包含书目的附录。

    为新用户讲解 FreeBSD。它涉及 FreeBSD 项目的历史、目标和开发模型。

    指导用户使用 bsdinstall 实现 FreeBSD 9.x(及更高版本)的完整安装。

    涉及 FreeBSD 操作系统的基础命令和功能。如果你熟悉 Linux® 或其他版本的 UNIX®,那么你大可以跳过本章节。

    涉及使用 FreeBSD 创新的“Ports”和单个二进制包来安装第三方软件的方法。

    8.3.浏览器

    本节介绍了如何在 FreeBSD 系统上安装和配置一些流行的 web 浏览器,从高资源消耗的全功能浏览器到减少资源使用的命令行浏览器。

    表 2 支持的浏览器

    名称
    许可证
    包
    所需资源

    3.8.进程和守护进程

    FreeBSD 是一个多任务操作系统。每个在任意时刻运行的程序都称为一个 进程(process)。每个正在运行的命令都会启动至少一个新进程,并且 FreeBSD 还会运行一些系统进程。

    每个进程都有一个唯一的编号,称为 进程 ID(PID)。类似于文件,每个进程也有一个所有者和所属组,系统会依据所有者和组的权限来判断进程可以访问哪些文件和设备。大多数进程也有一个启动它们的父进程。例如,shell 是一个进程,而在 shell 中启动的任何命令也都是进程,它们的父进程就是该 shell。唯一的例外是一个特殊进程,叫做 ,它总是在系统启动时第一个启动,进程 ID 永远是 1。

    某些程序并不是设计来持续接受用户输入的,它们会在合适的时机脱离终端。例如,Web 服务器是用来响应网络请求而不是用户输入的。邮件服务器也是这种程序的一个例子。这类程序被称为 守护进程(daemon)。daemon 一词来自希腊神话,表示一种既非善也非恶、在幕后默默执行有用任务的存在。这就是为什么 BSD 的吉祥物是那个穿着运动鞋、手持三叉戟、神态轻松的小恶魔。

    守护进程的程序通常以 “d” 结尾命名是一种惯例。例如,BIND(Berkeley Internet Name Domain)的实际运行程序是 named;Apache Web 服务器程序是 httpd;打印服务的后台处理进程是 lpd。这只是命名习惯,例如 Sendmail 的主邮件守护进程叫做 sendmail,而不是 maild

    9.6.图像扫描仪

    在 FreeBSD 中,图像扫描仪的访问通过 提供,该软件在 FreeBSD Ports 中可用。

    9.6.1. 检查扫描仪

    在进行任何配置之前,检查扫描仪是否受到 SANE 支持非常重要。

    将扫描仪连接好后,运行以下命令以获取所有连接的 USB 设备:

    输出应类似于以下内容:

    运行以下命令获取 idVendor 和 idProduct:

    3.9.Shell

    shell 提供了用于与操作系统交互的命令行界面。Shell 从输入通道接收命令并执行它们。许多 shell 提供内建函数,用于协助日常任务,例如文件管理、文件通配(globbing)、命令行编辑、命令宏以及环境变量。FreeBSD 提供了多个 shell,包括 Bourne shell()和扩展的 C shell()。其它 shell 可通过 FreeBSD Ports 获得,例如 zsh 和 bash。

    使用哪一个 shell 实际上是个人喜好问题。C 语言程序员可能更倾向于使用类似 C 语言的 shell,比如 。Linux® 用户可能更喜欢 bash。每种 shell 都具有其独特属性,这些属性可能符合,也可能不符合用户所偏好的工作环境,因此才会有选择 shell 的自由。

    一个常见的 shell 特性是文件名补全。用户输入命令或文件名前几个字母并按下 Tab 后,shell 会补全剩余部分。假设有两个文件分别叫做 foobar 和 football,用户要删除 foobar,可能会键入 rm foo 并按下 Tab 来补全文件名。

    Your changes will now be written to disk. If you
    have chosen to overwrite existing data, it will
    be PERMANENTLY ERASED. Are you sure you want to
    commit your changes?
    # pkg install webcamd pwcview
    # sysrc webcamd_enable=YES
    # pw groupmod webcamd -m username
    # kldload cuse
    # sysrc kld_list+=cuse
    # webcamd -l
    webcamd [-d ugen0.2] -N SunplusIT-Inc-HP-TrueVision-HD-Camera -S unknown -M 0 ①
    webcamd [-d ugen1.3] -N Realtek-802-11n-WLAN-Adapter -S 00e04c000001 -M 0
    # sysrc webcamd_0_flags="-d ugen0.2" 
    # service webcamd start
    Starting webcamd.
    webcamd 1616 - - Attached to ugen0.2[0]
    % pwcview -f 30 -s vga
    device       /mount-point fstype     options      dumpfreq     passno
    # mount device mountpoint
    # pkg install elisa
    # pkg install gnome-music
    # pkg install audacious-qt6 audacious-plugins-qt6
    # pkg install moc
    # pkg install okular
    # pkg install evince
    # pkg install epdfview
    # pkg install xpdf
    # pkg install zathura zathura-pdf-mupdf
    BSD 许可证
    mount(8)
    dump(8)
    fsck(8)
    fsck(8)
    procfs(5)
    audio/gnome-music
    multimedia/audacious
    audio/moc
    graphics/evince
    graphics/epdfview
    graphics/xpdf
    graphics/zathura
    X Window 系统

    涉及 X Window 系统简介,以及如何在 FreeBSD 上使用 X11。还包含了常见的桌面环境,如 KDE 和 GNOME。

    Wayland

    撰写了 Wayland 显示服务器大概情况,以及如何在 FreeBSD 上使用 Wayland。还讲解了常见的混成器,如 Wayfire、Hikari 和 Sway。

    桌面应用程序

    列出了一些常见的桌面应用程序,例如网络浏览器和办公软件套件,并讲解如何在 FreeBSD 上进行安装。

    多媒体

    展示如何为你的系统设置音频和视频播放功能。还讲解了一些示例音频和视频应用程序。

    配置 FreeBSD 内核

    解释为什么你可能需要自定义新内核,并为配置、构建和安装自定义内核提供了详细的指导。

    打印

    阐述在 FreeBSD 上管理打印机,包括有关横幅页面、打印机记账和初始设置的信息。

    Linux® 二进制兼容层

    讲解了 FreeBSD 的 Linux® 兼容层功能。还为许多常用的 Linux® 应用程序(如 Oracle®、Mathematica®)提供了详细的安装说明。

    WINE

    解释了什么是 WINE 以及详细的安装教程。还涉及了 WINE 的操作方式,如何安装 GUI 助手,如何在 FreeBSD 上运行 Windows® 应用程序,并包含了其他注意事项和解决方案。

    配置和优化

    讲解了系统管理员可用于调整 FreeBSD 系统以获得最佳性能的参数。还涉及了 FreeBSD 中使用的各种配置文件以及它们的位置。

    FreeBSD 引导过程

    讲解了 FreeBSD 引导过程,并解释了如何通过配置选项控制此过程。

    安全

    讲解了许多可用于帮助保持 FreeBSD 系统安全的工具,包括 Kerberos、IPsec 和 OpenSSH。

    jail

    讲解了 FreeBSD 中 jail 框架的功能,以及 jail 相较于传统的 chroot 所做的改进。

    强制访问控制

    讲解了什么是强制访问控制(MAC),以及如何使用这种机制来保护 FreeBSD 系统。

    安全事件审计

    讲解了什么是 FreeBSD 事件审计,如何安装,配置以及如何检查和监控审计日志。

    存储

    讲解了如何使用 FreeBSD 管理存储介质和文件系统。例如物理磁盘、RAID 阵列、光盘和磁带介质、内存盘和网络文件系统。

    GEOM:模块化磁盘转换框架

    讲解了在 FreeBSD 中,什么是 GEOM 框架,以及如何配置各种受支持级别的 RAID。

    OpenZFS 存储平台

    讲解了 OpenZFS 存储平台,并提供了有关在 FreeBSD 下运行 OpenZFS 的快速入门指南和高级主题信息。

    其他文件系统

    检查对 FreeBSD 下的非原生文件系统(如 ext2、ext3 和 ext4)的支持。

    虚拟化

    讲解了虚拟化系统提供的内容,以及如何在 FreeBSD 中使用虚拟化。

    本地化——i18n/L10n 的使用和配置

    讲解了如何配置 FreeBSD 使用除英语以外的其他语言,涉及系统和应用程序级别的本地化。

    更新和升级 FreeBSD

    解释了 FreeBSD-STABLE、FreeBSD-CURRENT 和 FreeBSD-RELEASE 间的区别。讲解了何者可以从跟踪开发系统中获益,并简述了该过程。包含用户将其系统更新到最新安全发行版本的几种方法。

    DTrace

    介绍了如何在 FreeBSD 上配置和使用 Sun™ 开发的 DTrace 工具。动态跟踪可执行实时系统分析,用于帮助定位性能问题。

    USB 设备模式/USB OTG

    介绍了在 FreeBSD 上使用 USB 设备模式和 USB On-The-Go(USB OTG)。

    PPP

    介绍了如何在 FreeBSD 中使用 PPP 连接远程设备。

    电子邮件

    介绍了电子邮件服务器的构成和组件,并深入探讨了最常见的邮件服务器软件:sendmail 的简单配置话题。

    网络服务器

    提供了详细的讲解和示例配置文件,以将你的 FreeBSD 设备配置成网络文件系统服务器、域名服务器、网络信息系统服务器和时间同步服务器。

    防火墙

    阐释了软件防火墙背后的哲学,并提供了适用于 FreeBSD 的多种防火墙的详细配置信息。

    高级网络

    涉及许多网络主题,包括在局域网上与其他计算机共享互联网连接、高级路由主题、无线网络、蓝牙、ATM、IPv6 等。

    获取 FreeBSD

    列出了得到 FreeBSD 光盘和 DVD 的多种方法,以及多个能让你在互联网上下载并安装 FreeBSD 的网站。

    书目

    全书涉及多个主题,有可能让你渴望更深层次的解释。在书目列出了许多在文中引用的优秀书籍。

    互联网资源

    涉及了供 FreeBSD 用户报告问题并参与有关 FreeBSD 的技术交流的论坛。

    OpenPGP 密钥

    列出了几位 FreeBSD 开发人员的 PGP 指纹。

    简介
    安装 FreeBSD
    FreeBSD 基础
    安装应用程序:软件包和 Ports
    。

    3.8.1. 查看进程

    可以使用 ps(1) 或 top(1) 查看系统中正在运行的进程。要显示当前运行的进程、它们的 PID、所使用的内存,以及启动它们的命令,可以使用 ps(1)。要以交互方式每隔几秒更新显示所有进程,以便实时观察系统正在执行的任务,可以使用 top(1)。

    默认情况下,ps(1) 只显示当前用户拥有的正在运行的命令。例如:

    输出可能类似如下:

    [ps(1)] 的输出包含多个列。PID 列表示进程的 ID。PID 从 1 开始分配,一直到 99999,然后回绕到起点,但若某个 PID 已在使用,则不会重新分配。TT 列显示程序运行的终端设备,STAT 显示程序的状态,TIME 表示进程在 CPU 上实际运行的时间(而不是启动以来的总时间,因为大多数程序大部分时间都在等待)。最后,COMMAND 是启动程序时使用的命令。

    可以通过不同的选项改变显示的信息。其中一个最有用的组合是 auxww,其中:

    • a 显示所有用户的进程,

    • u 显示用户名和内存使用信息,

    • x 显示守护进程,

    • ww 则让 ps 显示完整命令行,而不会因过长而截断。

    [Top(1)] 的输出类似如下:

    输出示例如下:

    输出分为两个部分:前五六行是标题区,显示了最近运行的进程 ID、系统负载(衡量系统繁忙程度)、系统运行时间(自上次启动以来),以及当前时间。其余数据包括:运行中进程数量、已用内存和交换空间(swap),以及 CPU 各状态所占百分比。如果加载了 ZFS 文件系统模块,还会显示一行 ARC,指示从内存缓存读取的数据量。

    标题下面是与 ps 输出类似的各列信息,包括 PID、用户名、CPU 占用时间和启动进程的命令。top 默认还显示进程占用的内存空间,这分为两个列:一列是进程总共申请的内存(SIZE),另一列是当前实际使用的内存(RES)。

    top(1) 会每两秒自动刷新一次显示内容,可通过 -s 参数指定不同的刷新间隔。

    3.8.2. 终止进程(Killing Processes)

    与任何正在运行的进程或守护进程通信的一种方式是使用 kill(1) 发送一个 信号(signal)。有多种不同的信号;有些具有特定含义,其它的则可在应用程序文档中找到解释。用户只能向自己拥有的进程发送信号,若尝试向他人的进程发送信号将会导致权限拒绝错误。唯一的例外是 root 用户,它可以向任何人的进程发送信号。

    操作系统本身也可以向进程发送信号。如果某个应用程序设计不良,试图访问其不应访问的内存,FreeBSD 会向该进程发送 “段错误(Segmentation Violation)” 信号(SIGSEGV)。如果某个应用程序使用了 alarm(3) 系统调用来在一段时间后收到通知,它会收到 “闹钟” 信号(SIGALRM)。

    可以用两种信号来终止一个进程:SIGTERM 和 SIGKILL。SIGTERM 是一种较为温和的终止方式,因为进程可以接收到信号、关闭任何已打开的日志文件,并尝试完成当前任务后再关闭。在某些情况下,如果进程正处于无法被打断的任务中,它可能会忽略 SIGTERM。

    SIGKILL 是无法被进程忽略的 <注 ①>。向进程发送 SIGKILL 通常会立即终止该进程。[^1]

    其它常见的信号包括 SIGHUP、SIGUSR1 和 SIGUSR2。由于这些是通用信号,不同的应用程序会有不同的响应方式。

    例如,在修改 web 服务器的配置文件之后,需要让 web 服务器重新读取配置。如果重新启动 httpd,可能会造成 web 服务的短暂中断。更好的方式是向该守护进程发送 SIGHUP 信号。需注意,不同守护进程的行为可能不同,因此请查阅对应文档以确定 SIGHUP 是否能达到预期效果。

    重要

    随意终止系统中的某个进程是个坏主意。特别是 init(8),即 PID 1,是一个特殊进程。运行 /bin/kill -s KILL 1 会迅速但不推荐地关闭系统。在按下 Return 之前,务必再次确认传递给 kill(1) 的参数。

    • <注 ①>:有一些任务是无法被中断的。例如,如果进程试图从网络上另一台计算机的文件中读取数据,而另一台计算机不可用,则该进程被认为是不可中断的。最终,进程会超时,通常在两分钟后。若发生超时,进程将被终止。

    init(8)

    注意

    注意,扫描仪是即插即用设备,更改其连接的 USB 端口将更改 usbconfig list 输出中的内容。

    输出应类似于以下内容:

    若获得了 idVendor 和 idProduct,需要在 SANE 支持的设备列表 中检查扫描仪是否受支持,可以通过 idProduct 进行筛选。

    9.6.2. SANE 配置

    SANE 通过后端提供对扫描仪的访问。为了能够在 FreeBSD 上进行扫描,必须安装 graphics/sane-backends 包,可以通过运行以下命令进行安装:

    技巧

    某些 USB 扫描仪需要加载固件。例如,上面使用的 HP 扫描仪,需要安装 print/hplip 包。

    安装完必要的包后,必须配置 devd(8) 以允许 FreeBSD 访问扫描仪。

    将 saned.conf 文件添加到 /usr/local/etc/devd/saned.conf,内容如下:

    • ① vendor: 是通过运行 usbconfig -d 3.2 dump_device_desc 命令获得的 idVendor。

    • ② product: 是通过运行 usbconfig -d 3.2 dump_device_desc 命令获得的 idProduct。

    之后,必须通过运行以下命令重新启动 devd(8):

    SANE 后端包括 scanimage(1),可以用来列出设备并执行图像采集。

    执行 scanimage(1) 并使用 -L 参数列出扫描仪设备:

    输出应类似于以下内容:

    如果 scanimage(1) 无法识别扫描仪,将出现以下消息:

    待 scanimage(1) 能够识别扫描仪,配置就完成了,扫描仪现在可以使用。

    要启用该服务并让它在启动时运行,执行以下命令:

    虽然可以通过命令行使用 scanimage(1) 执行图像采集,但通常更倾向于使用图形界面进行图像扫描。

    表 6. 图形扫描程序

    名称
    许可证
    包

    skanlite

    GPL 2.0

    graphics/skanlite

    GNOME Simple Scan

    GPL 3.0

    graphics/simple-scan

    XSANE

    GPL 2.0

    graphics/xsane

    SANE (Scanner Access Now Easy)
    % ps
     PID TT  STAT    TIME COMMAND
    8203  0  Ss   0:00.59 /bin/csh
    8895  0  R+   0:00.00 ps
    % top
    last pid:  9609;  load averages:  0.56,  0.45,  0.36              up 0+00:20:03  10:21:46
    107 processes: 2 running, 104 sleeping, 1 zombie
    CPU:  6.2% user,  0.1% nice,  8.2% system,  0.4% interrupt, 85.1% idle
    Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free
    ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other
    Swap: 2048M Total, 2048M Free
    
      PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
      557 root          1 -21  r31   136M 42296K select  0   2:20  9.96% Xorg
     8198 dru           2  52    0   449M 82736K select  3   0:08  5.96% kdeinit4
     8311 dru          27  30    0  1150M   187M uwait   1   1:37  0.98% firefox
      431 root          1  20    0 14268K  1728K select  0   0:06  0.98% moused
     9551 dru           1  21    0 16600K  2660K CPU3    3   0:01  0.98% top
     2357 dru           4  37    0   718M   141M select  0   0:21  0.00% kdeinit4
     8705 dru           4  35    0   480M    98M select  2   0:20  0.00% kdeinit4
     8076 dru           6  20    0   552M   113M uwait   0   0:12  0.00% soffice.bin
     2623 root          1  30   10 12088K  1636K select  3   0:09  0.00% powerd
     2338 dru           1  20    0   440M 84532K select  1   0:06  0.00% kwin
     1427 dru           5  22    0   605M 86412K select  1   0:05  0.00% kdeinit4
    # usbconfig list
    ugen4.2: <LITE-ON Technology USB NetVista Full Width Keyboard.> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (70mA)
    ugen4.3: <Logitech USB Optical Mouse> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA)
    ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
    # usbconfig -d 3.2 dump_device_desc
    ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
    
    bLength = 0x0012
    bDescriptorType = 0x0001
    bcdUSB = 0x0200
    bDeviceClass = 0x0000  <Probed by interface class>
    bDeviceSubClass = 0x0000
    bDeviceProtocol = 0x0000
    bMaxPacketSize0 = 0x0040
    idVendor = 0x03f0
    idProduct = 0x8911
    bcdDevice = 0x0100
    iManufacturer = 0x0001  <HP>
    iProduct = 0x0002  <Deskjet 1050 J410 series>
    bNumConfigurations = 0x0001
    # pkg install sane-backends
    notify 100 {
            match "system" "USB";
            match "subsystem" "INTERFACE";
            match "type" "ATTACH";
            match "cdev" "ugen[0-9].[0-9]";
            match "vendor" "0x03f0"; ①
            match "product" "0x8911"; ②
            action "chown -L cups:saned /dev/\$cdev && chmod -L 660 /dev/\$cdev";
    };
    # service devd restart
    # scanimage -L
    device `hpaio:/usb/Deskjet_1050_J410_series?serial=XXXXXXXXXXXXXX' is a Hewlett-Packard Deskjet_1050_J410_series all-in-one
    No scanners were identified. If you were expecting something different,
    check that the scanner is plugged in, turned on and detected by the
    sane-find-scanner tool (if appropriate). Please read the documentation
    which came with this software (README, FAQ, manpages).
    # sysrc saned_enable=YES

    重

    Iridium 浏览器

    BSD-3 和其他

    重

    Falkon

    MPL 2.0

    重

    Konqueror

    GPL 2.0 或更高

    中等

    Gnome Web (Epiphany)

    GPL 3.0 或更高

    中等

    qutebrowser

    GPL 3.0 或更高

    中等

    Dillo

    GPL 3.0 或更高

    轻量

    Links

    GPL 2.0 或更高

    轻量

    w3m

    MIT

    轻量

    8.3.1. Firefox

    Firefox 是一款开源浏览器,具有符合标准的 HTML 渲染引擎、标签页浏览、弹出阻止、扩展功能、增强的安全性等特点。Firefox 基于 Mozilla 代码库。

    安装最新版 Firefox 的包,执行:

    若要安装 Firefox 扩展支持版本 (ESR),执行:

    8.3.2. Chromium

    Chromium 是一个开源浏览器项目,旨在提供更安全、更快速、更稳定的 web 浏览体验。Chromium 具有标签页浏览、弹出阻止、扩展支持等功能。Chromium 是 Google Chrome 浏览器的开源基础。

    安装 Chromium,执行:

    注意

    Chromium 的可执行文件是 /usr/local/bin/chrome,而非 /usr/local/bin/chromium。

    8.3.3. Iridium 浏览器

    Iridium 是基于 Chromium 代码库的一个开源、自由的浏览器修改版,着重于隐私保护,禁用了许多关键数据的自动传输,仅在用户同意的情况下进行传输。

    安装 Iridium,执行:

    8.3.4. Falkon

    Falkon 是一款快速的 QtWebEngine 浏览器。它旨在成为一个轻量级的 web 浏览器,适用于所有主流平台。Falkon 拥有用户期待的标准浏览器功能,包括书签、历史记录(也可以在侧边栏显示)和标签。除此之外,AdBlock 插件可以阻止广告,Click2Flash 可以阻止 Flash 内容,SSL Manager 可以编辑本地 CA 证书数据库。

    安装 Falkon,执行:

    8.3.5. Konqueror

    Konqueror 不仅是一款 web 浏览器,还是一款文件管理器和多媒体查看器。它支持 WebKit 渲染引擎,这也是许多现代浏览器(如 Chromium)所使用的渲染引擎,并且支持其自己的 KHTML 引擎。

    安装 Konqueror,执行:

    8.3.6. Gnome Web (Epiphany)

    Gnome Web (Epiphany) 是一款设计简洁、快速的 web 浏览器,牺牲了许多其他浏览器的功能以提高轻量性。

    安装 Gnome Web (Epiphany),执行:

    8.3.7. qutebrowser

    qutebrowser 是一款以键盘为中心的浏览器,具有最小化的图形界面。它基于 Python 和 PyQt5,并且是自由软件,采用 GPL 许可证。

    安装 qutebrowser,执行:

    8.3.8. Dillo

    Dillo 旨在成为一个多平台的替代浏览器,具有小巧、稳定、开发友好、可用、快速和可扩展的特点。这个新的实验版本的 Dillo 基于 FLTK 工具包,而不是 GTK1,并且进行了大幅重写。

    安装 Dillo,执行:

    8.3.9. Links

    Links 是一个类似于 Lynx 的 web 浏览器,支持文本和图形模式,具有许多功能,如显示表格、菜单等。

    安装 Links,执行:

    8.3.10. w3m

    w3m 是一款分页器/文本型 web 浏览器。它与 Lynx 类似,但具有 Lynx 所不具备的一些功能,如渲染表格和渲染框架。

    安装 w3m,执行:

    Firefox

    MPL 2.0

    www/firefox

    重

    Chromium

    BSD-3 和其他

    但 shell 只显示 rm foo,它无法补全文件名,因为 foobar 和 football 都以 foo 开头。如果匹配到多个名称,一些 shell 会发出哔声或显示所有可能选项。此时用户需要输入更多字符来标识所需文件名。输入一个 t 然后再次按下 Tab,shell 就能确定所需的文件名并补全剩余部分。

    shell 的另一个功能是使用环境变量。环境变量是存储在 shell 环境中的变量/键对。任何由 shell 启动的程序都可以读取这个环境,因此其中包含了大量程序配置。常见环境变量 提供了常见环境变量及其含义的列表。请注意,环境变量名总是大写的。

    常见环境变量表:

    变量
    介绍

    USER

    当前登录用户的用户名。

    PATH

    用冒号分隔的目录列表,用于查找可执行文件。

    DISPLAY

    要连接的 Xorg 显示器的网络名称(如果可用)。

    SHELL

    当前使用的 shell。

    TERM

    用户终端类型的名称。用于判断终端的功能。

    TERMCAP

    包含终端转义码的数据库项,用于执行各种终端功能。

    不同的 shell 设置环境变量的方式不同。在 tcsh(1) 和 csh(1) 中,使用 setenv 来设置环境变量。在 sh(1) 和 bash 中,使用 export 设置当前环境变量。以下是在 tcsh(1) 中设置默认 EDITOR 为 /usr/local/bin/emacs 的示例:

    在 bash 中对应的命令是:

    要展开环境变量以查看其当前值,在命令行中在变量名前加上 $ 符号。例如,echo $TERM 会显示当前的 $TERM 设置。

    Shell 会将一些特殊字符(称为元字符)视为数据的特殊表示方式。最常见的元字符是 *,它代表任意数量的字符。元字符可用于执行文件名通配。例如,echo * 等同于 ls,因为 shell 会将所有匹配 * 的文件传递给 echo,并在命令行上列出它们。

    为了防止 shell 解释某个特殊字符,可以用反斜杠(\)对其进行转义。例如,echo $TERM 会打印终端设置,而 echo \$TERM 则会原样打印字符串 $TERM。

    3.9.1. 更改 Shell

    最简单的,永久更改默认 shell 方法是使用 chsh。运行此命令会打开由 EDITOR 环境变量配置的编辑器,默认情况下为 vi(1)。将 Shell: 行更改为新 shell 的完整路径。

    也可以使用 chsh -s,该命令会在不打开编辑器的情况下设置指定的 shell。例如,将 shell 更改为 bash:

    在提示符下输入你的密码并按下 Return 即可更改你的 shell。注销并重新登录后即可开始使用新 shell。

    然后重新运行 chsh(1)。

    3.9.2. 高级 Shell 技巧

    UNIX® shell 不仅是个命令解释器,它还是款强大的工具,允许用户执行命令、重定向其输出、重定向其输入,并将多个命令组合在一起以优化最终输出。将这些功能与内建命令结合使用,可以为用户提供一个极具效率的环境。

    Shell 重定向是将命令的输出或输入发送到另一个命令或文件中的操作。例如,将 ls(1) 命令的输出捕获到一个文件中,可以这样重定向输出:

    此时目录内容会被列出并保存到 directory_listing.txt 中。有些命令可以读取输入,比如 sort(1)。要对该列表进行排序,可以这样重定向输入:

    输入会被排序并显示在屏幕上。要将该输入重定向到另一个文件,可以将 sort(1) 的输出重定向出去,操作如下:

    在上述所有示例中,命令通过文件描述符进行重定向。每个 UNIX® 系统都有文件描述符,包括标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。每种描述符都有其用途,例如输入可以是键盘或鼠标,用于提供输入;输出可以是屏幕或打印机中的纸张;错误则用于诊断或错误信息。这三者都被视为基于 I/O 的文件描述符,有时也被称为流(streams)。

    通过使用这些描述符,shell 允许将输出和输入在多个命令之间传递,并重定向到文件或从文件中读取。另一种重定向方法是管道操作符。

    UNIX® 的管道操作符 | 允许将一个命令的输出直接传递或重定向到另一个程序。简单来说,管道允许一个命令的标准输出被作为标准输入传递给另一个命令,例如:

    在此示例中,directory_listing.txt 的内容将被排序,然后输出传递给 less(1)。这使用户可以按自己的节奏浏览输出内容,防止其在屏幕上滚动消失。

    sh(1)
    tcsh(1)
    tcsh(1)

    https://zoom.us

    Jitsi

    不可用

    可用

    https://meet.jit.si/

    BigBlueButton

    不可用

    可用

    https://bigbluebutton.org/

    https://teams.live.com
    https://meet.google.com/
    “第三阶段”
    FreeBSD 引导选项菜单
    “单用户模式”
    安装应用程序:软件包和 Ports

    2.3.安装前的准备工作

    在确定设备满足安装 FreeBSD 的最低硬件要求后,就可以下载安装文件,准备安装介质了。

    技巧

    如果你想在已安装其他操作系统的系统上使用 FreeBSD,请考虑使用虚拟化。

    在进行安装之前,请检查下列清单中的项目,查看系统是否准备就绪:

    1. 备份重要数据

      在安装任何操作系统之前,请 始终 先备份所有重要数据。不要将备份存储在要安装的系统上,而应将数据保存到可移动磁盘,如 USB 驱动器、网络上的其他系统和在线备份服务。请在开始安装之前测试备份,以确保它包含所有所需文件。在安装程序格式化系统磁盘后,存储在该磁盘上的所有数据都将丢失。

    2. 选择安装 FreeBSD 的位置

      如果你仅安装 FreeBSD 这一个操作系统,则可以跳过此步骤。但如果 FreeBSD 将与其他操作系统共享磁盘,则需决定使用哪块磁盘和分区。

      在 i386 和 amd64 架构中,可以使用两种分区方案之一将磁盘划分为多个分区。传统的 主引导记录(MBR)包含一个分区表,最多可定义四个 主分区。出于历史原因,FreeBSD 称这些主分区为 切片(slice)。其中某主分区可以作为 扩展分区,可包含多个 逻辑分区。GUID 分区表(GPT)是一种新款且更简单的磁盘分区方法。常见的 GPT 实现可使每块磁盘最多有 128 个分区,消除了对逻辑分区的需求。

      FreeBSD 引导加载程序需要一个主分区/GPT 分区。如果所有主分区/GPT 分区已被使用,则必须为 FreeBSD 释放一个分区。要在不删除现有数据的情况下创建分区,可以使用分区调整工具缩小现有分区,使用释放的空间创建新分区。

      另一种修改系统现有磁盘分区的方法是使用,这能让多个操作系统同时运行,而无需更改分区。

      各种免费和商业的分区调整工具列在上。 是一款免费的 Live CD,内置 GParted 分区编辑器。

    警告

    若使用得当,磁盘缩小工具可安全地为创建新分区创造空间。由于可能选择错误的分区,请始终备份重要数据,并在修改磁盘分区之前检查备份的完整性。

      包含不同操作系统的磁盘分区使在一台计算机上安装多个操作系统成为可能。

    1. 收集网络信息

      某些 FreeBSD 安装方法需要网络连接用于下载安装文件。在安装后,安装程序会提供设置系统网络接口的选项。

      如果网络有 DHCP 服务器,则可以用它来提供自动网络配置。如果没有 DHCP,则必须从本地网络管理员或互联网服务提供商获取以下网络信息:

      所需的网络信息:

      1. IP 地址

      2. 子网掩码

    2.3.1. 准备安装介质

    FreeBSD 安装程序不是能在其他操作系统中运行的应用程序。请下载 FreeBSD 安装文件,将其刻录到与其文件类型和大小相对应的介质(CD、DVD 或 USB)上,然后从插入的介质安装启动系统。

    可以在 上获取 FreeBSD 安装文件。每个安装文件的名称包括 FreeBSD 的发布版本、架构和文件类型。

    安装文件以多种格式提供,可以使用 压缩/未压缩。格式因计算机架构和介质类型而异。

    安装文件类型:

    • -bootonly.iso:这是最小的安装文件,仅包含安装程序。安装过程中需要一个有效的互联网连接,因为安装程序会下载完成 FreeBSD 安装所需的文件。该文件应刻录到光盘上。

    • -disc1.iso:该文件包含安装 FreeBSD 所需的所有文件、源代码和 Ports。应将该文件刻录到光盘上。

    • -dvd1.iso:该文件包含安装 FreeBSD 所需的所有文件、源代码和 Ports。它还包含一组流行的二进制包,用于安装窗口管理器和一些应用程序,以便可以从介质安装完整的系统,而无需连接互联网。应将该文件刻录到光盘上。

    下载镜像文件后,请从同一目录下载至少一个 checksum(校验和)文件。有两个校验和文件可用,文件名包含发布编号和架构名称。例如:CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64 和 CHECKSUM.SHA512-FreeBSD-13.1-RELEASE-amd64。

    下载其中一个文件(或两个文件)后,计算镜像文件的校验和并与 checksum 文件中显示的进行比较。请注意,你需要将计算出的校验和与正确的文件进行比较,因为它们对应于两种不同的算法:SHA256 和 SHA512。FreeBSD 提供了 、 用于计算 checksum。其他操作系统也有类似的程序。

    在 FreeBSD 中,可以通过执行以下命令自动完成校验和的验证:

    校验和必须完全匹配。如果校验和不符合,则镜像文件已损坏,必须重新下载。

    2.3.1.1. 将镜像文件写入 USB

    *memstick.img 文件是 USB 闪存驱动器内容的 镜像。它 不能 作为文件复制到目标设备。可用多个应用程序将 *.img 写入 USB 闪存驱动器。本节介绍了其中两个工具。

    重要

    在继续之前,请备份 USB 闪存驱动器上的所有重要数据。此过程将删除驱动器上的现有数据。

    使用 ​dd​ 写入镜像的步骤

    警告

    此示例使用 /dev/da0 作为目标设备,镜像将在此设备上写入。请 务必小心,使用正确的设备,因为此命令将删除指定目标设备上的现有数据。

    1. 此命令行工具可在 BSD、Linux® 和 Mac OS® 系统上使用。要使用 dd 刻录镜像,请插入 USB 闪存驱动器,然后确定其设备名称。接下来,指定下载的安装文件的名称和 USB 闪存驱动器的设备名称。此示例将在现有 FreeBSD 系统的首个 USB 设备上刻录 amd64 安装镜像。

    如果此命令失败,请检查,不应挂载 USB 闪存驱动器,并且设备名称是磁盘,而非分区。

    使用 Windows® 写入镜像的步骤

    警告

    请确保选择了正确的驱动器字母,因为所指定驱动器上的现有数据将被覆盖和删除。

    1. 获取 Windows® 镜像写入工具

    Windows® 镜像写入工具是一款免费应用程序,可以正确地将镜像文件写入 USB 闪存驱动器。请从 下载,然后将其解压到一个文件夹中。

    1. 使用镜像写入工具写入镜像

    双击 Win32DiskImager 图标可启动程序。验证

    7.4.无线网络

    大多数无线网络基于 IEEE® 802.11 标准。

    FreeBSD 支持使用 802.11a、802.11b、802.11g 和 802.11n 的网络。

    注意

    FreeBSD 对 802.11ac 的支持目前正在开发中。

    一个基本的无线网络由多个站点与在 2.4GHz 或 5GHz 频段中广播的无线电通信组成,虽然根据地区不同,这些频段也在变化,正在增加 2.3GHz 和 4.9GHz 范围的通信能力。

    配置无线网络的基本步骤有三步:

    1. 扫描并选择接入点

    2. 对站点进行身份验证

    3. 配置 IP 地址或使用 DHCP

    接下来的各节讨论每个步骤。

    7.4.1. 快速连接到无线网络

    将 FreeBSD 连接到现有无线网络是个非常常见的操作。

    本快速入门流程展示了使用基本认证连接网络所需的步骤。更详细的操作流程将在下一节中说明。

    第一步是从网络管理员处获取无线网络的服务集标识符(SSID)和预共享密钥(PSK)。

    第二步是在 /etc/wpa_supplicant.conf 中为该网络添加一条条目。

    如果该文件不存在,请创建它。有关在此文件中格式化条目的详细信息,请参阅 。

    • ① 这是无线网络的 SSID。将其替换为无线网络的名称。

    • ② 这是无线网络的 PSK。将其替换为无线网络的密码。

    第三步是添加网络接口条目,以便在启动时配置网络。使用 sysctl net.wlan.devices 获取网络设备接口。在下面的示例中,该 sysctl 输出显示网络设备接口为 “iwn0”。

    输出应类似如下:

    在接下来的 sysrc 命令中,如有必要,将 “iwn0” 替换为 sysctl 命令的输出:

    • 最后一步是重启 netif 服务,执行以下命令:

    7.4.2. 基本无线配置

    本节提供了一个更详细的无线网卡配置示例。要查看系统中有哪些无线网卡,请参阅章节 。

    要使该更改在重启后生效,请执行以下命令:

    注意

    由于全球各地的法规情况不同,因此需要正确设置适用于你所在位置的区域,以获得有关可用信道的正确信息。

    要使设置持久化,将其添加到 /etc/rc.conf 文件中:

    7.4.3. 扫描无线网络

    可以使用 扫描可用的无线网络。

    要列出无线网络,执行以下命令:

    输出应类似于以下内容:

    1. SSID/MESH ID:标识网络的名称。

    2. BSSID:标识接入点的 MAC 地址。

    3. CAPS:显示每个网络的类型及其站点的功能(有关 list scan 的更多详细信息,请参见 的定义)。

    7.4.4. 连接和认证无线网络

    待从扫描到的无线网络列表中选择了一个网络,就需要执行连接和认证。在绝大多数无线网络中,认证是通过路由器中配置的密码进行的。其他方案则要求在数据流量开始之前完成加密握手,可能使用预共享密钥或密码,或者使用涉及后台服务(如 RADIUS)的更复杂的方案。

    7.4.4.1. 使用 WPA2/WPA/Personal 认证

    无线网络中的认证过程由 管理。

    的配置将保存在 /etc/wpa_supplicant.conf 文件中。更多信息请参见 。

    完成无线网络扫描后,选择了一个网络并获取了密码(PSK),该信息将添加到 /etc/wpa_supplicant.conf 文件中,如下所示:

    • ① SSID 扫描技术。仅当网络为隐藏时需要使用此选项。

    • ② 网络名称。

    • ③ 无线网络的密码。

    下一步是配置无线连接到 /etc/rc.conf 文件中。

    如果使用静态地址,需要执行以下命令:

    如果使用动态地址,需要执行以下命令:

    然后执行以下命令重启网络:

    注意

    有关如何执行更高级认证方法的信息,请参见 。

    7.4.4.2. 使用开放网络进行认证

    技巧

    连接没有任何认证的开放网络时,用户需要 非常 小心。

    完成无线网络扫描并选择无线网络的 SSID 后,执行以下命令:

    然后执行 获取配置的地址:

    7.4.5. 同时使用有线和无线连接

    有线连接提供更好的性能和可靠性,而无线连接提供灵活性和流动性。笔记本用户通常希望在这两种连接之间无缝切换。

    在 FreeBSD 上,可以将两个或更多网络接口结合起来,以“故障转移”方式使用。这种配置使用一组网络接口中最优先和可用的连接,当链路状态发生变化时,操作系统会自动切换。

    链路聚合和故障转移的详细内容请参见 ,并且可以在 中找到使用有线和无线连接的示例。

    5.5.配置 X.org

    摘要:如果显示器或输入设备的默认设置不符合要求,桌面 提供了图形界面进行配置,或者也可以手动配置。

    X.org 服务器支持大多数常见的图形处理器、显示器和输入设备。首先应尝试使用默认设置。本小节概述其配置方法。

    5.5.1. X.org 配置文件

    过去,X.org 服务器通过 /usr/local/etc/X11/ 下的文件进行配置。这种方式仍然被支持用于特殊情况,但可能与动态自动配置冲突。

    除非自动配置失败,否则不要在 xorg.conf 中创建配置,也不要运行 Xorg -configure。

    X.org 服务器会在多个目录中查找配置文件。/usr/local/etc/X11/ 是 FreeBSD 上推荐的配置文件目录。使用此目录有助于将应用程序文件与操作系统文件分开管理。

    使用多个文件分别配置具体设置,比传统的单一 xorg.conf 更加方便。这些文件存储在子目录 /usr/local/etc/X11/xorg.conf.d/ 中。

    5.5.2. 配置显卡

    直接渲染允许同时无缝使用独立显卡(dGPU)和集成显卡(iGPU),称为 PRIME。驱动程序会在需要时自动将高强度任务卸载到 dGPU,并在可能时关闭其电源。

    在 PRIME 中使用更强大的 GPU 启动应用程序时,使用环境变量 DRI_PRIME=1。

    如果多个图形驱动冲突,可在 /usr/local/etc/X11/xorg.conf.d/ 目录中指定图形处理器的驱动。

    Intel® 驱动配置示例:

    /usr/local/etc/X11/xorg.conf.d/20-intel.conf

    AMD® 驱动配置示例:

    /usr/local/etc/X11/xorg.conf.d/20-radeon.conf

    NVIDIA® 驱动配置示例:

    /usr/local/etc/X11/xorg.conf.d/20-nvidia.conf

    技巧

    也可用于对 NVIDIA 驱动的配置选项进行基本控制。

    SCFB 驱动配置示例:

    /usr/local/etc/X11/xorg.conf.d/20-scfb.conf

    VESA 驱动配置示例:

    /usr/local/etc/X11/xorg.conf.d/20-vesa.conf

    配置多显卡时,可添加 BusID。执行以下命令显示显卡总线 ID 列表:

    示例输出:

    示例:同时配置 Intel® 和 NVIDIA® 驱动

    /usr/local/etc/X11/xorg.conf.d/20-drivers.conf

    5.5.3. 配置显示器

    几乎所有显示器都支持扩展显示识别数据(EDID)标准。X.org 使用 EDID 与显示器通信,检测支持的分辨率和刷新率,然后选择最合适的组合。

    其他显示器支持的分辨率可在 X 服务器启动后,通过 原子方式选择,或在 X.org 配置文件中设置。

    5.5.3.1. 使用 RandR(调整分辨率与方向)

    在 X 会话中运行 xrandr 不带参数,可查看视频输出和检测到的显示模式:

    示例输出显示 VGA-1 输出使用分辨率 1280x960,刷新率约 60Hz;LVDS-1 为辅助显示器,分辨率 1280x800,刷新率约 60Hz。

    可用 命令切换其他显示模式,例如切换到 1280x720 分辨率,刷新率 60Hz:

    技巧

    启动 X 时黑屏通常可通过在初始化过程中添加 xrandr --auto 这一步骤解决。

    5.5.3.2. 使用 X.org 配置文件

    可在配置文件中设置显示器参数。

    示例:将屏幕分辨率设置为 1024x768

    /usr/local/etc/X11/xorg.conf.d/10-monitor.conf

    5.5.4. 输入设备配置

    X.org 服务器提供了 库,统一支持触控、指点和键盘设备。默认情况下,该库会自动加载。

    各设备的设置可通过桌面 GUI 调整,或使用 和 手动配置。

    对于旧版轻量输入设备,可使用 中的 x11/xf86-input-[foo] 驱动,但需手动配置 X.org 服务器。

    5.5.4.1. 使用原子输入配置

    使用 支持的设备,可通过桌面提供的图形工具,或在运行时使用 和 进行原子配置。

    查看 libinput 当前附加设备:

    输出示例:

    所有支持的设置以属性形式提供,可原子方式列出和设置。指点设备属性多,键盘一般无需调整。

    自定义键盘布局请参考 。

    配置完成后,将命令添加至 X 初始化脚本,如 ~/.Xsession 或 ~/.xinitrc。

    5.5.4.2. 使用 X.org 配置文件

    技巧

    部分桌面环境(如 )提供图形界面设置参数,请先检查是否可用,再考虑手动编辑配置文件。

    示例:手动配置键盘布局

    /usr/local/etc/X11/xorg.conf.d/00-keyboard.conf

    5.6 在 X Window 中使用字体

    摘要:可以从 分类安装额外字体,或者将其放置在 ~/.fonts 中。现代应用程序可以立即使用这些字体。对于旧版应用程序的配置方法也有说明。

    X Window 系统提供了 X FreeType 接口库 () 来渲染矢量或轮廓字体,同时也提供传统的 X Logical Font Description 系统,以保持对多代应用程序和字体的兼容性。

    用户主要关心两类字体:

    • OpenType 或 TrueType® 字体,用于屏幕显示。

    • Adobe® PostScript® Type 1 字体,用于打印输出。

    以上都是矢量或轮廓字体,同时还有位图字体。

    FreeBSD Ports 提供了一个丰富且不断增长的免费高质量字体目录,可从

    5.2.显卡驱动

    摘要:识别你的显卡,找到提供驱动的 Port,安装它,然后通过 启用,以便在后续启动时运行。

    在 FreeBSD 能够渲染显卡环境之前,需要内核模块来驱动显卡处理器。显卡驱动发展迅速且跨平台,因此它们是单独开发和发布的,而不随 FreeBSD 基本系统一起分发。

    下表显示了 FreeBSD 支持的不同显卡处理器、对应的内核模块以及提供驱动的 Port:

    类型
    许可证
    模块
    Port

    9.2.设置声卡

    默认情况下,FreeBSD 会自动检测系统使用的声卡。FreeBSD 支持多种声卡,支持的声卡列表可以在 中查阅。

    注意

    仅当 FreeBSD 未能正确检测到声卡时,才需要加载声卡模块。

    如果不知道系统使用的是哪个声卡,或者使用哪个模块,可以通过执行以下命令加载 snd_driver 元驱动:

    或者,为了在启动时将驱动作为模块加载,可以在 /boot/loader.conf 中添加以下行:

    8.7.财务

    在 FreeBSD 桌面上,用户可以安装一些强大且易于使用的个人财务管理应用程序。有些程序兼容广泛使用的文件格式,例如 Quicken 和 Excel 使用的格式。

    本节介绍了以下程序:

    表 6. 支持的财务管理程序

    名称
    许可证
    包含的包
    所需资源
    # pkg install firefox
    # pkg install firefox-esr
    # pkg install chromium
    # pkg install iridium-browser
    # pkg install falkon
    # pkg install konqueror
    # pkg install epiphany
    # pkg install qutebrowser
    # pkg install dillo2
    # pkg install links
    # pkg install w3m
    % setenv EDITOR /usr/local/bin/emacs
    % export EDITOR="/usr/local/bin/emacs"
    % chsh -s /usr/local/bin/bash
    # echo /usr/local/bin/bash >> /etc/shells
    % ls > directory_listing.txt
    % sort < directory_listing.txt
    % sort < directory_listing.txt > sorted.txt
    % cat directory_listing.txt | sort | less

    OSTYPE

    操作系统类型。

    MACHTYPE

    系统的 CPU 架构。

    EDITOR

    用户首选的文本编辑器。

    PAGER

    用户首选的分页查看工具。

    MANPATH

    用冒号分隔的目录列表,用于查找手册页。

    www/chromium
    www/iridium-browser
    www/falkon-qtonly
    x11-fm/konqueror
    www/epiphany
    www/qutebrowser
    www/dillo2
    www/links
    www/w3m

    默认网关的 IP 地址

  • 网络的域名

  • 网络的 DNS 服务器 IP 地址

  • 查阅 FreeBSD Errata

    尽管 FreeBSD 项目努力确保每款 FreeBSD RELEASE 都尽可能地稳定,但偶尔会出现 bug。在极少数情况下,这些 bug 会影响安装过程。随着这些问题的发现和修复,它们会在每个 RELEASE 的 FreeBSD Errata 页面上注明。请在安装前查阅 errata,以确保不存在可能影响安装的问题。

    可以在FreeBSD 版本信息页面找到所有 RELEASE 的信息及 errata 。

  • -memstick.img:该文件包含安装 FreeBSD 所需的所有文件、源代码和 Ports。将此文件写入 USB 闪存驱动器,如写入 USB 镜像文件所示。

  • -mini-memstick.img:与 -bootonly.iso 类似,不包含安装文件,而是根据需要下载。安装过程中需要一个有效的互联网连接。应将其写入 USB 闪存驱动器,如写入 USB 镜像文件所示。

  • 某些操作系统可能要求使用 sudo(8) 运行此命令。dd(1) 的语法在不同平台之间略有不同;例如,Mac OS® 需要小写的 bs=1m。像 Linux® 这样的系统可能会缓冲写入。要强制所有写入完成,请使用 sync(8)。
    Device
    下显示的驱动器字母是否有 USB 闪存驱动器。单击文件夹图标,选择要写入内存棒的镜像。单击
    Save
    以接受镜像文件名。验证一切是否正确,并确保 USB 闪存驱动器中的文件夹未在其他窗口中打开。待一切准备就绪,单击
    Write
    将镜像文件写入内存棒。
    虚拟化
    磁盘分区软件列表的维基百科条目
    GParted Live
    FreeBSD 下载页面
    xz(1)
    sha256(1)
    sha512(1)
    win32diskimager 主页
    wpa_supplicant.conf(5)
    识别网络适配器
    ifconfig(8)
    ifconfig(8)
    wpa_supplicant(8)
    wpa_supplicant(8)
    wpa_supplicant.conf(5)
    无线高级认证
    dhclient(8)
    链路聚合和故障转移
    以太网和无线接口之间的故障转移模式
    x11/nvidia-xconfig
    xrandr(1)
    xrandr(1)
    x11/libinput
    xinput
    setxkbmap
    x11-drivers
    libinput(4)
    x11/xinput
    x11/setxkbmap
    setxkbmap(1)
    KDE Plasma
    安装。

    从 ports 集合安装的系统范围字体包位于 <span class="filename">/usr/local/share/fonts/</span>。单用户字体可以放在 <span class="filename">~/.fonts/</span> 或 <span class="filename">~/.local/share/fonts/</span>。

    这两个目录及其子目录中的字体在重建字体信息缓存后即可立即使用。可通过以下命令手动触发:

    Ports 树中有大量免费高质量字体可直接用于 X Window System。本章简要介绍这两类字体及 X FreeType 接口的配置。

    更多关于 FreeBSD 上字体安装和配置的信息,请参阅文章 字体与 FreeBSD。

    5.6.1. TrueType® 字体

    X.org 内置支持渲染 TrueType® 字体。有两个模块可启用此功能。示例中使用 freetype 模块,因为它与其他字体渲染后端更一致。要启用 freetype 模块,只需在 /usr/local/etc/X11/xorg.conf.d/90-fonts.conf 的 "Module" 部分添加以下行:

    然后为 TrueType® 字体创建目录(例如 /usr/local/share/fonts/TrueType),并将所有 TrueType® 字体复制到该目录。注意 TrueType® 字体不能直接从 Apple® Mac® 获取,必须是 UNIX®/MS-DOS®/Windows® 格式才能被 X.org 使用。复制完成后,使用 mkfontscale 创建 fonts.dir,以便 X 字体渲染器识别新字体。mkfontscale 可作为包安装:

    然后在目录中创建 X 字体文件索引:

    接着将 TrueType® 目录添加到字体路径中,与 Type1 Fonts 描述的方法相同:

    或者在 xorg.conf 中添加 FontPath 这行。

    现在 Gimp、LibreOffice 及其他 X 应用程序应能识别已安装的 TrueType® 字体。非常小的字体(如高分辨率网页文本)和非常大的字体(如 LibreOffice 文档)显示效果会更好。

    5.6.2. Type1 字体

    URW 字体集合 (x11-fonts/urwfonts) 提供标准 Type1 字体(Times Roman™、Helvetica™、Palatino™ 等)的高质量版本。Freefonts 集合 (x11-fonts/freefonts) 提供更多字体,但大多用于图形软件(如 Gimp),不足以作为屏幕字体使用。

    要从二进制包安装上述 Type1 字体集合,运行以下命令:

    同样适用于 freefont 或其他字体。若手动配置 X 服务器检测这些字体,可在 X 服务器配置文件 (/usr/local/etc/X11/xorg.conf.d/90-fonts.conf) 添加:

    或者在 X 会话命令行运行:

    此方法有效,但 X 会话关闭后会丢失,除非将其添加到启动文件(普通 startx 会话的 ~/.xinitrc 或图形登录管理器 XDM 的 ~/.xsession)。第三种方法是使用新的 /usr/local/etc/fonts/local.conf,如 Anti-Aliased Fonts 所示。

    5.6.3. 字体抗锯齿

    X.org 中 /usr/local/share/fonts/ 和 ~/.fonts/ 的字体会自动对 Xft 兼容应用程序启用抗锯齿处理。大多数现代应用程序都是 Xft 兼容的,包括 KDE、GNOME 和 Firefox。

    要控制哪些字体启用抗锯齿处理,或配置抗锯齿属性,可创建或编辑 /usr/local/etc/fonts/local.conf 文件。Xft 字体系统的许多高级功能可以在该文件中调优,本节仅说明简单设置。详细信息请参阅 fonts-conf(5)。

    该文件必须为 XML 格式,注意大小写,并确保所有标签正确闭合。文件以标准 XML 头和 DOCTYPE 定义开始,然后是 <fontconfig> 标签:

    如前所述,/usr/local/share/fonts/ 及 ~/.fonts/ 下的所有字体已可供 Xft 兼容应用程序使用。若要添加其他目录,请在 /usr/local/etc/fonts/local.conf 添加:

    添加新字体或目录后,重建字体缓存:

    抗锯齿处理会使边缘略微模糊,提高小字号文本可读性,并消除大字号文本的“阶梯”效果,但在普通文本上可能引起视觉疲劳。若要排除小于 14 磅的字体,加入以下配置:

    某些等宽字体在抗锯齿处理下间距可能不合适,尤其在 KDE 中。可通过强制设置间距为 100 修正:

    然后添加:

    某些字体如 Helvetica 抗锯齿处理可能出现问题(字体垂直似乎被截断,严重时可能导致应用崩溃)。可在 local.conf 中添加以下内容避免:

    编辑 local.conf 后,务必以 </fontconfig> 结束文件,否则更改无效。

    用户可以通过 ~/.config/fontconfig/fonts.conf 添加个性化设置,该文件使用相同的 XML 格式。

    对于 LCD 屏幕,可启用子像素采样(sub-pixel sampling),分别处理水平排列的红、绿、蓝子像素以提高水平分辨率。启用方法,在 local.conf 中添加:

    注意

    根据显示器类型,rgb 可能需要改为 bgr、vrgb 或 vbgr:可尝试不同设置,选择最合适的。

    x11-fonts
    Xft(3)
    x11-fonts
    % sha256sum -c CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64 FreeBSD-13.1-RELEASE-amd64-dvd1.iso
    FreeBSD-13.1-RELEASE-amd64-dvd1.iso: OK
    # dd if=FreeBSD-13.1-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync
    ctrl_interface=/var/run/wpa_supplicant
    eapol_version=1
    ap_scan=1
    fast_reauth=1
    
    network={
     ssid="myssid" ①
     psk="mypsk" ②
    }
    # sysctl net.wlan.devices
    net.wlan.devices: iwm0
    # sysrc wlans_iwn0="wlan0"
    # sysrc ifconfig_wlan0="WPA DHCP"
    # service netif restart
    # ifconfig wlan0 create wlandev iwm0
    # sysrc wlans_iwm0="wlan0"
    # ifconfig wlan0 regdomain etsi2 country AT
    # sysrc create_args_wlan0="country AT regdomain etsi2"
    # ifconfig wlan0 up list scan
    SSID/MESH ID                      BSSID              CHAN RATE    S:N     INT CAPS
    FreeBSD                           e8:d1:1b:1b:58:ae    1   54M  -47:-96   100 EP   RSN BSSLOAD HTCAP WPS WME
    NetBSD                            d4:b9:2f:35:fe:08    1   54M  -80:-96   100 EP   RSN BSSLOAD HTCAP WPS WME
    OpenBSD                           fc:40:09:c6:31:bd   36   54M  -94:-96   100 EPS  VHTPWRENV APCHANREP RSN WPS BSSLOAD HTCAP VHTCAP VHTOPMODE WME
    GNU-Linux                         dc:f8:b9:a0:a8:e0   44   54M  -95:-96   100 EP   WPA RSN WPS HTCAP VHTCAP VHTOPMODE WME VHTPWRENV
    Windows                           44:48:b9:b3:c3:ff   44   54M  -84:-96   100 EP   BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS
    MacOS                             46:48:b9:b3:c3:ff   44   54M  -84:-96   100 EP   BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS
    network={
            scan_ssid=1 ①
            ssid="FreeBSD" ②
            psk="12345678" ③
    }
    # sysrc ifconfig_wlan0="inet 192.168.1.20 netmask 255.255.255.0"
    # sysrc ifconfig_wlan0="WPA DHCP"
    # service netif restart
    # ifconfig wlan0 ssid SSID
    # dhclient wlan0
    Section "Device"
    	Identifier "Card0"
    	Driver     "intel"
    EndSection
    Section "Device"
    	Identifier "Card0"
    	Driver     "radeon"
    EndSection
    Section "Device"
    	Identifier "Card0"
    	Driver     "nvidia-modeset"
    EndSection
    Section "Device"
    	Identifier "Card0"
    	Driver     "scfb"
    EndSection
    Section "Device"
    	Identifier "Card0"
    	Driver     "vesa"
    EndSection
    % pciconf -lv | grep -B3 display
    vgapci0@pci0:0:2:0:     class=0x030000 rev=0x0c hdr=0x00 vendor=0x8086 device=0x46a6 subvendor=0x1028 subdevice=0x0b29
        vendor     = 'Intel Corporation'
        device     = 'Alder Lake-P GT2 [Iris Xe Graphics]'
        class      = display
    --
    vgapci0@pci0:1:0:0:     class=0x030200 rev=0xa1 hdr=0x00 vendor=0x10de device=0x25b9 subvendor=0x1028 subdevice=0x0b29
        vendor     = 'NVIDIA Corporation'
        device     = 'GA107GLM [RTX A1000 Laptop GPU]'
        class      = display
    Section "Device"
    	Identifier "Card0"
    	Driver     "intel"
    	BusID     "pci0:0:2:0"
    EndSection
    
    Section "Device"
    	Identifier "Card1"
    	Driver     "nvidia-modeset"
    	BusID     "pci0:0:2:1"
    EndSection
    % xrandr
    % xrandr --output LVDS-1 --mode 1280x720 --rate 60
    Section "Screen"
    	Identifier "Screen0"
    	Device     "Card0"
    	SubSection "Display"
    	Modes      "1024x768"
    	EndSubSection
    EndSection
    $ xinput
    ⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
    ⎜   ↳ System mouse                            	id=7	[slave  pointer  (2)]
    ⎜   ↳ VEN_0488:00 0488:1031 Mouse             	id=11	[slave  pointer  (2)]
    ⎜   ↳ VEN_0488:00 0488:1031 TouchPad          	id=12	[slave  pointer  (2)]
    ⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
        ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
        ↳ System keyboard multiplexer             	id=6	[slave  keyboard (3)]
        ↳ Power Button                            	id=8	[slave  keyboard (3)]
        ↳ Sleep Button                            	id=9	[slave  keyboard (3)]
        ↳ AT keyboard                             	id=10	[slave  keyboard (3)]
    Section "InputClass"
            Identifier "Keyboard1"
            MatchIsKeyboard "on"
            Option "XkbLayout" "es, fr"
            Option "XkbModel" "pc104"
            Option "XkbVariant" ",qwerty"
            Option "XkbOptions" "grp:win_space_toggle"
    EndSection
    % fc-cache
    Load  "freetype"
    # pkg install mkfontscale
    # cd /usr/local/share/fonts/TrueType
    # mkfontscale
    % xset fp+ /usr/local/share/fonts/TrueType
    % xset fp rehash
    # pkg install urwfonts
    Section "Files"
      FontPath "/usr/local/share/fonts/urwfonts/"
    EndSection
    % xset fp+ /usr/local/share/fonts/urwfonts
    % xset fp rehash
    <?xml version="1.0"?>
          <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
          <fontconfig>
    <dir>/path/to/my/fonts</dir>
    # fc-cache -f
    <match target="font">
    	    <test name="size" compare="less">
    		<double>14</double>
    	    </test>
    	    <edit name="antialias" mode="assign">
    		<bool>false</bool>
    	    </edit>
    	</match>
    	<match target="font">
    	    <test name="pixelsize" compare="less" qual="any">
    		<double>14</double>
    	    </test>
    	    <edit mode="assign" name="antialias">
    		<bool>false</bool>
    	    </edit>
    	</match>
    <match target="pattern" name="family">
    	   <test qual="any" name="family">
    	       <string>fixed</string>
    	   </test>
    	   <edit name="family" mode="assign">
    	       <string>mono</string>
    	   </edit>
    	</match>
    	<match target="pattern" name="family">
    	    <test qual="any" name="family">
    		<string>console</string>
    	    </test>
    	    <edit name="family" mode="assign">
    		<string>mono</string>
    	    </edit>
    	</match>
    <match target="pattern" name="family">
    	     <test qual="any" name="family">
    		 <string>mono</string>
    	     </test>
    	     <edit name="spacing" mode="assign">
    		 <int>100</int>
    	     </edit>
    	 </match>
    <match target="pattern" name="family">
    	     <test qual="any" name="family">
    		 <string>Helvetica</string>
    	     </test>
    	     <edit name="family" mode="assign">
    		 <string>sans-serif</string>
    	     </edit>
    	 </match>
    <match target="font">
    	     <test qual="all" name="rgba">
    		 <const>unknown</const>
    	     </test>
    	     <edit name="rgba" mode="assign">
    		 <const>rgb</const>
    	     </edit>
    	 </match>

    开源

    amdgpu 或 radeonkms

    NVIDIA®

    专有

    nvidia-drm、nvidia-modeset 或 nvidia

    或

    系统控制台帧缓冲

    开源

    scfb

    VESA BIOS 扩展

    开源

    vesa

    VirtualBox®

    开源

    vboxvideo

    VMware®

    开源

    vmwgfx

    支持的驱动技术包括:

    • 直接渲染驱动),支持 PRIME 卸载(offload)。PRIME 能让多个显卡处理器共存。有关 PRIME 的详细说明,请参见 显卡配置。

    • 内核模式设置(KMS),能让驱动直接指定显示模式。使用 vt(4) 控制台驱动时,这对于支持挂起和恢复是必须的。

    • 用户模式设置,这是最古老的驱动类别,仍然受到支持,但只能用于 sc(4) 控制台和较旧版本的 Xorg(1) 显卡环境。

    要识别系统中安装的显卡处理器,可以使用以下命令:

    输出示例:

    详细的驱动安装和启用说明在后续小节中给出。

    如果显卡处理器不受 Intel®、AMD® 或 NVIDIA® 驱动支持,则应使用 SCFB 或 VESA 模块。UEFI 模式下必须使用 SCFB 模块;BIOS 模式下必须使用 VESA 模块。可用以下命令检查启动模式:

    输出示例:

    5.2.1. Intel® 显卡

    包 graphics/drm-kmod 间接提供了一系列用于 Intel® 显卡的内核模块。最新版本的这些模块可以与其他显卡处理器在 PRIME 中协同使用,无需特殊配置。

    安装 Intel® 显卡驱动:

    然后通过以下命令将模块添加到 /etc/rc.conf 文件:

    5.2.2. AMD® 显卡

    graphics/drm-kmod 包间接提供一系列 AMD® 显卡处理器的内核模块。根据硬件代数,可使用 amdgpu 或 radeonkms 模块。FreeBSD 项目维护了一份 AMD 显卡支持列表,用于确定应使用的驱动。

    安装 AMD® 显卡驱动:

    启用当前模块,将其添加到 /etc/rc.conf:

    对于旧型号显卡(HD7000/Tahiti 之前),请启用兼容模块:

    5.2.3. NVIDIA® 显卡

    NVIDIA® 提供了专有驱动以支持其独立或独显处理器。FreeBSD Ports 提供了对近十多年的 NVIDIA 显卡驱动支持。

    管理员应安装其硬件支持的最新驱动。

    支持的 NVIDIA® 驱动版本、内核模块及支持的硬件如下:

    Port
    模块
    支持的硬件

    nvidia-drm 或 nvidia-modeset

    nvidia-modeset

    或

    nvidia-modeset

    nvidia

    安装最新 NVIDIA® 驱动:

    启用驱动,将模块添加到 /etc/rc.conf:

    这是直接渲染的 KMS 驱动。

    内核模式设置用于在内核中设置显卡模式。通过以下 loader.conf(5) 可永久启用:

    PRIME 和 Wayland 均需要内核模式设置。

    旧版本驱动不支持直接渲染。使用模块 modesetting:

    对于 390 之前版本的 NVIDIA 驱动,不支持内核模式设置,因此必须与兼容 sc(4) 控制台驱动和 1.20 之前版本的 x11/xorg-server 一道使用。

    在 /etc/rc.conf 中启用:

    Intel®

    开源

    i915kms

    graphics/drm-kmod

    sysrc(8)

    AMD®

    9.2.1. 测试声音

    为了确认声卡是否已被检测到,可以执行以下命令:

    输出应类似于以下内容:

    还可以使用以下命令检查声卡的状态:

    输出应类似于以下内容:

    如果没有列出 pcm 设备,请仔细检查是否加载了正确的设备驱动。如果一切顺利,声卡应该可以在 FreeBSD 上正常工作。

    可以使用 beep(1) 发出一些声音,以确认声卡是否正常工作:

    9.2.2. 混音器

    FreeBSD 提供了不同的实用程序来设置和显示声卡混音器值,这些程序基于 FreeBSD 声音系统:

    表 1. 支持的混音器

    名称
    许可证
    包
    工具包

    BSD-2

    系统自带

    CLI

    dsbmixer

    BSD-2

    Qt

    KDE Plasma 音频小工具

    GPL 2.0

    9.2.3. 显卡声音

    显卡通常带有自己的集成声音设备,可能不清楚哪个设备被用作默认设备。可以通过运行 dmesg 并查看 pcm 条目来确认系统如何枚举输出。执行以下命令:

    输出可能类似于以下内容:

    显卡(NVIDIA®)被列在声卡(Realtek®)之前,声卡作为 pcm4 显示。可以通过执行以下命令将系统配置为使用声卡作为默认设备:

    为了使此更改永久生效,可以将以下行添加到 /etc/sysctl.conf 文件中:

    9.2.4. 自动切换到耳机

    某些系统可能会在音频输出之间切换时遇到困难,但幸运的是,FreeBSD 允许在 device.hints 中配置自动切换。

    通过执行以下命令,识别系统如何枚举音频输出:

    输出可能类似于以下内容:

    将以下行添加到 /boot/device.hints:

    注意

    切记,这些值适用于上面示例中的情况。它们可能会根据系统的不同而有所变化。

    9.2.5. 故障排除

    一些常见的错误信息及其解决方案:

    错误信息
    解决方案

    xxx: can’t open /dev/dsp!

    输入 fstat | grep dsp 检查是否有其他应用程序正在占用该设备。需要注意的“麻烦制造者”包括 esound 和 KDE 的声音支持。

    使用 audio/pulseaudio 的程序可能需要重新启动 audio/pulseaudio 守护进程,以使 hw.snd.default_unit 的更改生效。或者,也可以即时更改 audio/pulseaudio 的设置。使用 pacmd(1) 可以连接到 audio/pulseaudio 守护进程的命令行界面:

    以下命令将默认输出设备更改为前面示例中的第 4 号卡:

    警告

    不要使用 exit 命令退出命令行界面。那样会终止 audio/pulseaudio 守护进程。请改用 Ctrl+D。

    sound(4)

    重

    8.7.1. KMyMoney

    KMyMoney 是一款由 KDE 社区创建的个人财务应用程序。KMyMoney 旨在提供商业个人财务管理应用程序中的重要功能。它还注重易用性和正确的复式记账。KMyMoney 支持从标准的 Quicken QIF 文件导入,跟踪投资,处理多种货币,并提供丰富的报告。

    安装 KMyMoney,执行:

    8.7.2. GnuCash

    GnuCash 是 GNOME 项目的一部分,旨在为最终用户提供用户友好且功能强大的应用程序。GnuCash 可用于跟踪收入和支出、银行账户和股票。它具有直观的界面,同时保持专业性。

    GnuCash 提供智能注册、账户的层次结构系统,以及许多键盘加速器和自动完成方法。它可以将单个交易拆分为多个更详细的部分。GnuCash 可以导入和合并 Quicken QIF 文件,并且支持大多数国际日期和货币格式。

    安装 GnuCash,执行:

    KMyMoney

    GPL 2.0

    finance/kmymoney

    重

    GnuCash

    GPL 2.0 和 GPL 3.0

    3.6.磁盘结构

    FreeBSD 用于查找文件的最小组织单位是文件名。文件名是区分大小写的,这意味着 readme.txt 和 README.TXT 是两个不同的文件。FreeBSD 不使用文件的扩展名来判断该文件是程序、文档还是其他数据类型。

    文件存储在目录中。一个目录可以没有文件,也可以包含成百上千的文件。一个目录还可以包含其他目录,从而形成一个层次化的目录结构,以组织数据。

    通过给出文件或目录的名称,后跟一个正斜杠 /,再加上必要的其他目录名称来引用文件和目录。例如,如果目录 foo 中包含目录 bar,而 bar 中包含文件 readme.txt,该文件的完整名称或路径是 foo/bar/readme.txt。请注意,这与 Windows® 使用反斜杠 \ 分隔文件和目录名称不同。FreeBSD 的路径中不使用驱动器字母或其他驱动器名称。例如,在 FreeBSD 中不会输入 c:\foo\bar\readme.txt。

    3.6.1. 文件系统

    目录和文件存储在文件系统中。每个文件系统在最顶层包含一个根目录,称为该文件系统的 根目录。该根目录可以包含其他目录。一个文件系统被指定为 根文件系统,即 /。每个其他文件系统都被 挂载 到根文件系统下。无论 FreeBSD 系统上有多少磁盘,每个目录都看起来是同一个磁盘的一部分。

    假设有三个文件系统,分别为 A、B 和 C。每个文件系统都有一个根目录,其中包含两个子目录,分别为 A1、A2(同样,B 包含 B1、B2,C 包含 C1、C2)。

    将 A 作为根文件系统。如果使用 查看该目录的内容,会显示两个子目录,A1 和 A2。目录树如下所示:

    一个文件系统必须挂载到另一个文件系统中的目录上。当将文件系统 B 挂载到目录 A1 时,B 的根目录会替代 A1,并且 B 中的目录会相应显示出来:

    任何在 B1 或 B2 目录中的文件都可以通过路径 /A1/B1 或 /A1/B2 访问。任何原本在 /A1 中的文件现在暂时不可见。如果卸载 B,这些文件会重新出现。

    如果 B 挂载到 A2,则目录树将如下所示:

    相应的路径为 /A2/B1 和 /A2/B2。

    文件系统可以互相叠加挂载。继续上面的例子,文件系统 C 可以挂载到 B 文件系统中的 B1 目录上,形成如下结构:

    或者 C 也可以直接挂载到 A 文件系统下的 A1 目录中:

    完全可以有一个大的根文件系统,而不需要创建其他文件系统。虽然这种方式有一些缺点,但也有一个优点。

    多个文件系统的好处:

    • 不同的文件系统可以有不同的 挂载选项。例如,根文件系统可以以只读方式挂载,防止用户不小心删除或编辑重要文件。将用户可写文件系统(如 /home)与其他文件系统分开,并以 nosuid 方式挂载,可以防止存储在文件系统中的可执行文件的 suid/guid 位生效,可能提高安全性。

    • FreeBSD 会根据文件系统的使用情况自动优化文件布局。因此,包含许多小文件并频繁写入的文件系统会与包含较少大文件的文件系统有所不同的优化。将所有内容放在一个大文件系统中时,这种优化会失效。

    • FreeBSD 的文件系统在断电时具有较强的鲁棒性。然而,在关键时刻的断电仍然可能损坏文件系统结构。通过将数据分布到多个文件系统中,系统更可能仍能启动,从而更容易从备份中恢复。

    单一文件系统的好处:

    • 文件系统是固定大小的。如果在安装 FreeBSD 时创建了一个特定大小的文件系统,可能会发现以后需要增大分区大小。这通常需要备份数据、重新创建文件系统并恢复数据,操作复杂。

    重要

    FreeBSD 提供了 命令,可以动态扩展文件系统的大小,从而消除这一限制。文件系统只能扩展到所在分区中的空闲空间。如果分区后面有空闲空间,则可以使用 扩展分区。如果该分区是虚拟磁盘上的最后一个分区,并且磁盘已扩展,则可以扩展该分区。

    3.6.2. 磁盘分区

    文件系统被包含在 分区 中。磁盘通过若干分区方案之一被划分为多个分区;参见 。较新的方案是 GPT;而基于传统 BIOS 的计算机使用的是 MBR。GPT 支持将磁盘划分为具有大小、偏移量和类型的分区。它支持大量的分区及其类型,并在可能的情况下推荐使用。GPT 分区在磁盘名后带有一个后缀,其中 p1 表示第一个分区,p2 表示第二个,依此类推。相比之下,MBR 仅支持较少数量的分区。在 FreeBSD 中,MBR 分区被称为 切片(slice)。切片可被不同操作系统使用。FreeBSD 的切片会使用 BSD 标签进一步划分为多个分区(参见 )。

    切片编号紧跟在设备名后,并以 s 为前缀,从 1 开始。例如 da0*s1* 表示第一个 SCSI 磁盘上的第一个切片。一个磁盘只能有四个物理切片,但可以在合适类型的物理切片内部建立逻辑切片。这些扩展切片从编号 5 开始,因此 ada0*s5* 是第一个 SATA 磁盘上的第一个扩展切片。这些设备被用于需要占据整个切片的文件系统。

    每个 GPT 或 BSD 分区只能包含一个文件系统,因此文件系统通常通过它们在文件系统层级中的典型挂载点,或其所在的分区名称来描述。

    FreeBSD 还会使用磁盘空间作为 交换空间(swap space) 以提供 虚拟内存(virtual memory)。这使得计算机的行为看起来像是拥有远超实际内存的容量。当 FreeBSD 内存耗尽时,它会将一部分当前未使用的数据移入交换空间,并在需要时将其移回(将其他内容移出)。这称为 换页(paging)。

    一些 BSD 分区具有特定的惯例用法:

    分区
    惯例用途

    切片和 “危险专用(dangerously dedicated)” 的物理磁盘包含 BSD 分区,使用从 a 到 h 的字母表示。这个字母会附加在设备名后,例如 da0a 表示第一个 da 磁盘(危险专用)的 a 分区。ada1s3e 则表示第二个 SATA 磁盘上第三个切片中的第五个分区。

    最后,系统中的每个磁盘都有一个标识符。磁盘名称以表示磁盘类型的代码开头,后跟一个表示磁盘序号的数字。与分区和切片不同,磁盘编号从 0 开始。常见的代码列在下表中:

    表 3:磁盘设备名对照表

    驱动器类型
    设备名称

    表 4:示例磁盘、切片与分区名

    名称
    含义

    示例 12:磁盘的概念模型

    下图展示了 FreeBSD 对系统中第一个 SATA 磁盘的视图。假设该磁盘大小为 250 GB,其中包含一个 80 GB 的切片和一个 170 GB 的切片(MS-DOS® 分区)。第一个切片包含一个 Windows® 的 NTFS 文件系统(C:),第二个切片则用于 FreeBSD 安装。本例中的 FreeBSD 安装包含四个数据分区和一个交换分区。

    这四个分区各自包含一个文件系统。分区 a 用于根文件系统,d 用于 /var/,e 用于 /tmp/,f 用于 /usr/。分区字母 c 代表整个切片,因此不会用于常规分区。

    1.3.关于 FreeBSD 项目

    以下部分提供了 FreeBSD 项目的相关背景信息,包括简史、项目宗旨和开发模型。

    1.3.1 FreeBSD 简史

    FreeBSD 项目始于 1993 年初,部分起因于 386BSD 非官方补丁包的最后三位协调人:Nate Williams、Rod Grimes 和 Jordan Hubbard 的构思。

    最初的打算是为 386BSD 制作一个中间快照,来解决补丁包机制多个无法解决的问题。FreeBSD 项目的早期工作名称是 386BSD 0.5/386BSD Interim,就说明了这一事实。

    386BSD 是 Bill Jolitz 开发的操作系统,在此之前已经被彻底无视了近一年。随着补丁包的不断膨胀,他们决定通过开发这个临时的“清理”快照来帮助 Bill。然而,当 Bill Jolitz 突然决定退出该项目,且没有明确的后续规划时,这一计划戛然而止。

    三人认为,哪怕没有 Bill 的支持,这一想法仍然值得追求,因此他们采用了 David Greenman 创造的“FreeBSD”这个名字。在咨询了当前的系统用户后,初步目标确定了下来,在 FreeBSD 项目明显有望成为现实后,Jordan 便联系了 Walnut Creek CDROM,目的是为那些没有便捷互联网访问的用户改善 FreeBSD 的分发渠道。Walnut Creek CDROM 不仅帮助将 FreeBSD 分发到 CD 上,还提供了一台可供 FreeBSD 项目使用的机器和快速的互联网连接。若没有 Walnut Creek CDROM 对这个当时这个完全不为人知的项目几乎前所未有的信任,FreeBSD 不会取得今天如此迅速的发展。

    第一张随 CD-ROM(以及一般的网络)分发的是 FreeBSD 1.0,发布于 1993 年 12 月。1.0 版本基于来自加州大学伯克利分校的 4.3BSD-Lite(“Net/2”)磁带,许多组件也由 386BSD 和自由软件基金会提供。作为初次发布,这一版本极为成功,并于 1994 年 5 月紧接着发布了备受好评的 FreeBSD 1.1。

    在此期间,某些出乎意料的阴云浮现在地平线上,Novell 与加州大学伯克利分校就 Berkeley Net/2 磁带的法律地位达成了长期诉讼的和解。和解的一项条件是,加州大学伯克利分校承认 Net/2 的三个文件是“侵权”的代码,必须删除,因为它们是 Novell 的财产(Novell 此前就从 AT&T 那里获得了这些文件)。伯克利所获得的回报是 Novell 的“许可”,即在最终发布 4.4BSD-Lite 时,将被声明为是合规的,并强烈建议所有现有的 Net/2 用户进行切换。其中就有 FreeBSD,FreeBSD 项目被要求在 1994 年 7 月底之前停止分发自己基于 Net/2 的产品。根据协议,FreeBSD 项目被允许在截止日期前发布最后一个版本,该版本为 FreeBSD 1.1.5.1。

    随后,FreeBSD 开始了一项艰苦的任务:从一个全新的、相对不完整的 4.4BSD-Lite 版本中重新创造自己。尽管仅有三个涉及 System V 共享内存和信号量的文件被移除,但已对 BSD 发行版进行了诸多其他更改和错误修复,因此将所有 FreeBSD 开发合并到 4.4BSD-Lite 中是一项艰巨的任务。直到 1994 年 11 月,FreeBSD 项目才实现这一过渡,并于 12 月向全世界发布了 FreeBSD 2.0。尽管该版本在某些方面仍显粗糙,但这是一个重要的里程碑,并于 1995 年 6 月发布了更为稳健、安装更简便的 FreeBSD 2.0.5 版本。

    自那时起,FreeBSD 每次发布都在不断改善前一个版本的稳定性、速度和功能集。

    目前,长期开发项目继续在 15.0-CURRENT(main)分支中进行,15.0 的快照版本持续在上发布,随着开发的进展而更新。

    1.3.2 FreeBSD 项目宗旨

    FreeBSD 的项目宗旨是提供可以用于一切目的且无附加条件的软件。我们中的许多人对代码(和项目)进行了大量投入,自然也希望能偶尔获得一些经济补偿,但我们绝对不打算一定如此。我们相信,我们的首要“使命”是向所有人提供代码,无论其目的如何,以便代码能得到尽可能普遍的使用,并产生尽可能大的利益。我们认为这是自由软件最基本的宗旨之一,也是我们热情拥护的宗旨。

    在我们的源代码树中,属于 GNU 通用公共许可证(GPL)和 GNU 宽通用公共许可证(LGPL)的代码附带的条件略多,尽管这些条件是要求强制开源,而非通常的限制访问。由于在商业上使用 GPL 软件可能会产生的额外复杂性,当有合理选择时,我们更倾向于选择采用以更宽松的 BSD 许可证授权的软件。

    1.3.3 FreeBSD 开发模型

    FreeBSD 的开发过程,FreeBSD 实际上是由世界各地成千上万人的贡献构成的,你可以从我们的中看出。FreeBSD 的开发基础设施能让这些成千上万的贡献者通过互联网进行合作。我们不断寻找新的志愿者,想要更密切参与的人可以查阅文章。

    无论是独立工作还是紧密合作,有关 FreeBSD 项目及其开发过程的一些有用信息:

    Git 存储库

    多年来,FreeBSD 的中央源代码树由 (Concurrent Versions System,并发版本系统)维护,这是一款可自由获取的源代码控制工具。2008 年 6 月,FreeBSD 项目切换至使用 (Subversion)。之所以进行这次切换,是因为 CVS 施加的技术限制在源代码树的快速扩展和已存历史量面前变得愈加明显。文档项目和 Ports 的存储库分别于 2012 年 5 月、2012 年 7 月从 CVS 迁移到了 SVN。2020 年 12 月,FreeBSD 项目将源代码和文档存储库至 ,而 也于 2021 年 4 月进行了上述迁移。更多有关获取 FreeBSD src/ 存储库的信息,请参阅部分,有关获取 FreeBSD Ports 的详细信息,请参阅。

    提交者(committer)名单

    提交者 是指具有 推送 权限的人员,他们被授权对 FreeBSD 源代码进行修改(“提交者”(committer)一词源于 commit,即用于将新更改引入仓库的源代码控制命令)。所有人都可以向 提交错误。在提交错误报告之前,可以使用 FreeBSD 邮件列表、IRC 频道和论坛帮助验证某个问题是否的确是个 Bug。

    FreeBSD 核心团队

    如果 FreeBSD 项目是一家公司,FreeBSD 核心团队 相当于公司的董事会。核心团队的主要任务是确保 FreeBSD 项目整体运行良好,并朝着正确的方向发展。招募专注且负责的开发者加入我们的提交者团队是核心团队的职能之一。此外,核心团队还负责招募新的核心团队成员,以替代离任的成员。当前核心团队于 2024 年 5 月和 6 月从提交者候选人中选举产生。选举每两年举行一次。

    注意

    同大多数开发者一样,在 FreeBSD 开发方面,核心团队的成员也大都是志愿者,并未从 FreeBSD 项目中获利,因此“承诺”也不应被误解为“有保障的支持”。上面提到的“董事会”类比并不十分准确,也许更恰当的说法是:这些人是在违背自己最佳利益的情况下,放弃了个人生活,投身于 FreeBSD 事业!

    FreeBSD 基金会

    是美国的一家 501(c)(3) 的非营利组织,致力于支持和促进 FreeBSD 项目及其全球社区。基金会通过项目资助支持软件开发,并提供人员以实时响应紧急问题和实现新特性和功能。基金会购买硬件以改善和维护 FreeBSD 基础设施,并资助人员以提升测试覆盖率、持续集成和自动化。基金会通过在全球技术会议和活动中推广 FreeBSD 来推动 FreeBSD。基金会还提供研讨会、教育材料和演示,以吸引更多用户和贡献者加入 FreeBSD。基金会还代表 FreeBSD 项目执行合同、许可证协议及其他需要认可法律实体的法律事务。

    外部贡献者

    最后但绝不是最不重要的,最大的开发者群体是用户本身,他们几乎不断地向我们提供反馈和错误修复。同 FreeBSD 基本系统开发保持联系的主要方式是订阅 ,在这里讨论这些内容。对于移植第三方应用程序,你可以访问 。关于文档的内容请参考 。有关各种 FreeBSD 邮件列表的更多信息,请参见。

    是一个漫长却又不断增长的名单,为什么不通过来加入其中呢?开发代码并非唯一的方式!

    总之,我们的开发模型是一个松散的同心圆集。中心化模型旨在方便 FreeBSD 用户,为他们提供一种轻松跟踪单个中心代码库的方式,而不是将潜在的贡献者排除在外!我们希望呈现一个稳定的操作系统,拥有大量协调的,用户可以轻松安装和使用——这一模型在实现此目标方面非常有效。

    我们对有志于加入 FreeBSD 开发者团队的人的唯一期望是,具备与当前成员相同的奉献精神,以确保 FreeBSD 项目的继续取得成功!

    1.3.4 第三方程序

    除了基础发行版,FreeBSD 还提供了一个移植的软件集,包含数千款常见程序。Port 列表涉及从 HTTP 服务器到游戏、语言、编辑器以及几乎所有其他类型的软件。大约有 36000 个 Port;整个 Ports 约占 3 GB 的空间。要编译一个 Port,只需切换到你希望安装的程序目录,输入 make install,然后让系统完成其余的工作。可动态检索构建每个 Port 所需的完整原始发行文件,因此你只需要有足够的磁盘空间来构建所需的 Port 就可以了。

    每个 Port 几乎也同时提供了预编译的“软件包”,那些不想从源代码自己编译 Port 的人可以通过简单的命令(pkg install)进行安装。更多有关软件包和 Ports 的信息,请参见。

    1.3.5 其他文档

    所有受支持的 FreeBSD 版本在安装程序中提供了选项,可在初始系统设置期间安装位于 /usr/local/share/doc/freebsd 下的其他文档。也可以在后期通过软件包安装文档:

    对于本地化版本,请将“en”替换为所选语言的前缀。请注意,某些本地化版本可能已经过时,并可能包含不再正确或相关的信息。你可以使用以下链接通过网页浏览器查看本地安装的手册:

    FreeBSD 手册

    /usr/local/share/doc/freebsd/en/books/handbook/handbook_en.pdf

    FreeBSD 常见问题解答

    /usr/local/share/doc/freebsd/en/books/faq/faq_en.pdf

    你可以随时在找到最新的文档。

    所有商标均为各自所有者的财产。

    % pciconf -lv | grep -B3 display
    vgapci1@pci0:0:2:0:     class=0x030000 rev=0x0c hdr=0x00 vendor=0x8086 device=0x46a6 subvendor=0x1028 subdevice=0x0b29
        vendor     = 'Intel Corporation'
        device     = 'Alder Lake-P GT2 [Iris Xe Graphics]'
        class      = display
    % sysctl machdep.bootmethod
    machdep.bootmethod: UEFI
    # pkg install drm-kmod
    # sysrc kld_list+=i915kms
    # pkg install drm-kmod
    # sysrc kld_list+=amdgpu
    # sysrc kld_list+=radeonkms
    # pkg install nvidia-drm-kmod
    # sysrc kld_list+=nvidia-drm
    hw.nvidiadrm.modeset="1"
    # sysrc kld_list+=nvidia-modeset
    # sysrc kld_list+=nvidia
    # kldload snd_driver
    snd_driver_load="YES"
    % dmesg | grep pcm
    pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> at nid 26,22 and 24 on hdaa0
    pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> at nid 29 on hdaa0
    # cat /dev/sndstat
    Installed devices:
    pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> (play/rec) default
    pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> (rec)
    % beep
    % dmesg | grep pcm
    pcm0: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
    pcm1: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
    pcm2: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
    pcm3: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
    hdac1: HDA Codec #2: Realtek ALC889
    pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
    pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
    pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
    pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
    # sysctl hw.snd.default_unit=4
    hw.snd.default_unit=4
    % dmesg | grep pcm
    pcm0: <Realtek ALC892 Analog> at nid 23 and 26 on hdaa0
    pcm1: <Realtek ALC892 Right Analog Headphones> at nid 22 on hdaa0
    hint.hdac.0.cad0.nid22.config="as=1 seq=15 device=Headphones"
    hint.hdac.0.cad0.nid26.config="as=2 seq=0 device=speakers"
    # pacmd
    Welcome to PulseAudio 14.2! Use "help" for usage information.
    >>>
    set-default-sink 4
    # pkg install kmymoney
    # pkg install gnucash

    x11/nvidia-driver-304

    nvidia

    supported hardware

    graphics/drm-kmod
    graphics/nvidia-drm-kmod
    x11/nvidia-driver
    x11-drivers/xf86-video-scfb
    x11-drivers/xf86-video-vesa
    emulators/virtualbox-ose-additions
    x11-drivers/xf86-video-vmware
    graphics/nvidia-drm-kmod
    supported hardware
    x11/nvidia-driver-470
    supported hardware
    x11/nvidia-driver-390
    x11/nvidia-secondary-driver-390
    supported hardware
    x11/nvidia-driver-340
    supported hardware

    Qt

    mixertui

    BSD-2

    audio/mixertui

    TUI

    mixer(8)
    audio/dsbmixer
    audio/plasma6-plasma-pa
    finance/gnucash
    快照服务器
    非常地开放灵活
    贡献者名单
    为 FreeBSD 贡献
    CVS
    SVN
    迁移
    Git
    Ports
    获取源代码
    使用 Ports
    Bug数据库
    FreeBSD 基金会
    FreeBSD 技术讨论邮件列表
    FreeBSD Ports 邮件列表
    FreeBSD 文档项目邮件列表
    互联网上的资源
    FreeBSD 贡献者名单
    为 FreeBSD 贡献一些东西
    应用程序
    安装应用程序:软件包和 Ports
    文档网站
    # pkg install en-freebsd-doc

    sa

    RAID 驱动器

    示例包括 aacd(Adaptec® AdvancedRAID)、mlxd 和 mlyd(Mylex®)、amrd(AMI MegaRAID®)、idad(Compaq Smart RAID)、twed(3ware® RAID)

    a

    通常包含根文件系统。

    b

    通常用于交换空间。

    c

    通常大小与所在的切片相同。这使得需要操作整个切片的工具(如坏块扫描器)可以作用于 c 分区。通常不会在该分区上创建文件系统。

    d

    分区 d 过去具有特殊含义,但现在已被视作普通分区使用。

    SATA 与 IDE 硬盘

    ada

    SCSI 硬盘与 USB 存储设备

    da

    NVMe 存储

    nvd 或 nda

    SATA 与 IDE 光驱

    cd

    SCSI 光驱

    cd

    软盘驱动器

    fd

    ada0s1a

    第一个 SATA 磁盘(ada0)上第一个切片(s1)中的第一个分区(a)

    da1s2e

    第二个 SCSI 磁盘(da1)上第二个切片(s2)中的第五个分区(e)

    ls(1)
    growfs(8)
    gpart(8)
    手动分区
    bsdlabel(8)
    根目录和两个子目录的目录树
    根目录和两个子目录的目录树
    根目录和两个子目录的目录树
    复杂的目录树,根目录下有多个子目录
    复杂的目录树,根目录下有多个子目录
    FreeBSD 与 Windows 共享磁盘的布局示意图

    SCSI 磁带机

    3.4.权限

    在 FreeBSD 中,每个文件和目录都有一组相关的权限,并提供了多种工具用于查看和修改这些权限。了解权限的工作机制是非常必要的,它可以确保用户能够访问他们需要的文件,同时无法不当地访问操作系统使用的文件和其他用户拥有的文件。

    本节讨论的是 FreeBSD 中使用的传统 UNIX® 权限。若需更细粒度的文件系统访问控制,另见 访问控制列表(Access Control Lists)。

    在 UNIX® 中,通过三种访问类型来分配基本权限:读(read)、写(write)和执行(execute)。这些访问类型用于决定文件的所有者、所属组和其他人(所有其他人)对该文件的访问权限。读、写和执行权限可以分别用字母 r、w 和 x 表示。它们也可以用二进制数字表示,因为每个权限只能是开或关(0 表示关闭)。在数字表示法中,顺序始终是 rwx,其中 r 的开值为 4,w 为 2,x 为 1。

    表 4.1 总结了可能的数字与字母组合方式。在阅读“目录列表”一栏时,- 表示该权限被关闭。

    表 2:UNIX® 权限

    值
    权限说明
    目录列表表示

    使用 的 -l 参数可以查看包含权限信息的详细目录列表。例如,在某个目录中运行 ls -l 可能显示如下内容:

    输出可能类似如下:

    我们来看 myfile 这一行,最左边的第一个字符表示这个文件的类型,比如常规文件、目录、特殊字符设备、套接字或其他特殊伪文件设备。本例中的 - 表示一个常规文件。接下来的三个字符 rw- 表示该文件所有者的权限。再接下来的三个字符 r-- 表示该文件所属用户组的权限。最后的三个字符 r-- 表示其他所有用户的权限。- 表示该权限被关闭。本例中,该文件的权限设置为:所有者可读写,组用户可读,其他用户也可读。根据上表,这个文件的权限可以表示为 644,每一位数字分别代表该文件权限的三个部分。

    系统是如何控制设备权限的呢?FreeBSD 将大多数硬件设备视为一个文件,程序可以打开它、读写它。这些特殊的设备文件存储在 /dev/ 目录中。

    目录也被当作文件处理。它们也有读、写和执行权限。目录的可执行位与文件略有不同。当一个目录被设置为可执行时,表示可以使用 命令切换进入该目录。这也意味着可以访问该目录中的文件,当然前提是文件本身的权限允许访问。

    如果要列出目录内容,该目录必须具有读权限。如果要删除一个已知名称的文件,则必须对该文件所在的目录具有写权限 和 执行权限。

    还有一些额外的权限位,主要用于特殊场景,例如 setuid 可执行文件和 sticky 目录。关于文件权限的更多信息及设置方法,请参见 。

    3.4.1. 符号权限(Symbolic Permissions)

    符号权限使用字符而不是八进制值为文件或目录分配权限。符号权限采用 (对象)(操作)(权限) 的语法格式,其中可用的值如下:

    选项
    字母
    代表含义

    这些值可与 命令结合使用,但用字母而非数字。例如,以下命令将阻止文件 FILE 的所属组成员及其他所有用户访问该文件:

    如果要对文件进行多项权限变更,可以使用逗号分隔的列表。例如,以下命令移除 FILE 的组用户和“其他用户”的写权限,并为所有用户添加执行权限:

    3.4.2. FreeBSD 文件标志(File Flag)

    除了文件权限之外,FreeBSD 还支持使用“文件标志”(file flag)。这些标志为文件(但不是目录)提供了更高层次的安全性和控制。通过文件标志,即使是 root 用户也可能被阻止删除或修改文件。

    可以使用 命令修改文件标志。例如,要在 file1 上启用系统不可删除标志,可以执行以下命令:

    要关闭该系统不可删除标志,在 sunlink 前加上 no:

    要查看文件的标志,可使用带 -lo 选项的 命令:

    某些文件标志只能由 root 用户添加或移除。在其他情况下,文件所有者也可以设置其文件标志。更多信息请参阅 和 。

    3.4.3. setuid、setgid 和 sticky 权限

    除了前面讨论过的权限,还有三种特定的设置是所有管理员都应了解的。它们分别是 setuid、setgid 和 sticky 权限。

    这些设置对某些 UNIX® 操作而言非常重要,因为它们提供了普通用户通常无法获得的功能。要理解这些设置,必须理解“真实用户 ID(real UID)”与“有效用户 ID(effective UID)”之间的区别。

    真实用户 ID 是指拥有或启动某进程的 UID;而有效用户 ID 则是指进程实际以哪个用户 ID 身份运行。例如,当用户更改自己的密码时, 以该用户的真实 UID 运行。然而,为了更新密码数据库,该命令实际以 root 的有效 UID 运行。这样用户就可以修改自己的密码,而不会遇到 Permission Denied 错误。

    可以通过给用户添加 s 权限的方式符号性地设置 setuid 权限,如下所示:

    也可以通过在权限值前加上数字 4 来设置 setuid 权限:

    此时 suidexample.sh 的权限会变为:

    注意,文件所有者的执行位已被 s 替代,表示启用了 setuid。这对于需要权限提升的工具(如 )来说非常关键。

    提示

    使用 nosuid 挂载选项(见 )会导致这类二进制程序在没有提示的情况下静默失败。该选项并非绝对可靠,因为 nosuid 的限制可能被绕过。

    可以通过以下方法实时观察此现象:打开两个终端。在一个终端中以普通用户身份输入 passwd,在等待新密码的同时,在另一个终端中查看进程表,观察 的用户信息。

    在终端 A 中:

    在终端 B 中:

    输出示例:

    尽管 是由普通用户运行的,但它使用的是 root 的有效 UID。

    setgid 权限与 setuid 的作用类似,只不过它影响的是组设置。当某个程序或工具以该权限执行时,它将获得基于文件所属组的权限,而不是发起进程的用户的组。

    要用符号方式设置某文件的 setgid 权限,可为组添加 s 权限,例如:

    或使用 chmod 时在权限数字前加上 2:

    以下示例中,可以看到 s 出现在组权限的位置:

    注意

    尽管这些示例中的 shell 脚本是可执行文件,但它们不会以不同的有效 UID 运行。这是因为 shell 脚本无法访问 系统调用。

    setuid 和 setgid 权限可能降低系统安全性,因为它们允许权限提升。第三种特殊权限 sticky bit 则可以增强系统安全。

    当目录设置了 sticky bit 后,只有文件的所有者才能删除该文件。这在公共目录(如 /tmp)中非常有用,可防止非文件所有者的用户删除文件。要设置该权限,可以添加 t 模式:

    或直接设置完整权限为 1777:

    此权限将以 t 的形式显示在权限字符串的最后:

    8.2.桌面环境

    本节介绍如何在 FreeBSD 系统中安装和配置一些常见的桌面环境。桌面环境可以从简单的窗口管理器扩展为一整套桌面应用程序。

    表 1:支持的桌面环境

    名称
    许可证
    软件包名

    4

    有读、无写、无执行权限

    r--

    5

    有读、无写、有执行权限

    r-x

    6

    有读、有写、无执行权限

    rw-

    7

    有读、有写、有执行权限

    rwx

    (操作 action)

    +

    添加权限

    (操作 action)

    -

    移除权限

    (操作 action)

    =

    明确设定权限

    (权限 perms)

    r

    读取权限(Read)

    (权限 perms)

    w

    写入权限(Write)

    (权限 perms)

    x

    执行权限(Execute)

    (权限 perms)

    t

    粘滞位(Sticky bit)

    (权限 perms)

    s

    设置 UID 或 GID(Set UID/GID)

    0

    无读、无写、无执行权限

    ---

    1

    无读、无写、有执行权限

    --x

    2

    无读、有写、无执行权限

    -w-

    3

    无读、有写、有执行权限

    -wx

    (对象 who)

    u

    用户(User)

    (对象 who)

    g

    所属组(Group owner)

    (对象 who)

    o

    其他用户(Other)

    (对象 who)

    a

    所有人(All,“world”)

    ls(1)
    cd(1)
    chmod(1)
    chmod(1)
    chflags(1)
    ls(1)
    chflags(1)
    chflags(2)
    passwd(1)
    passwd(1)
    mount(8)
    passwd(1)
    passwd(1)
    setuid(2)

    x11-wm/xfce4

    MATE

    GPL 2.0、LGPL 2.0

    x11/mate

    Cinnamon

    GPL 2.0 或更高版本

    x11/cinnamon

    LXQT

    GPL、LGPL

    x11-wm/lxqt

    8.2.1. KDE Plasma

    KDE Plasma 是一款易于使用的桌面环境。它提供了一套具有一致外观和操作体验的应用程序,统一的菜单与工具栏、快捷键、配色方案、本地化支持,以及集中式、对话框驱动的桌面配置工具。更多 KDE 的信息请参考 KDE 官方网站,FreeBSD 相关信息请参考 FreeBSD KDE 页面。

    8.2.1.1. 安装 KDE Plasma 元软件包

    要安装包含 KDE 框架、Plasma 桌面和 KDE 应用程序的 KDE Plasma 元软件包,执行:

    8.2.1.2. 最小化安装 KDE Plasma

    要进行最小化安装 KDE Plasma,执行:

    8.2.1.3. 配置 KDE Plasma

    KDE Plasma 使用 dbus-daemon(1) 作为消息总线和硬件抽象层。此应用程序会自动作为 KDE Plasma 的依赖项安装。

    在 /etc/rc.conf 中启用 D-BUS 服务,以便在系统启动时启动:

    KDE Plasma 为了获得最佳性能,需要更大的消息大小。

    将以下行添加到 sysctl.conf(5):

    要应用更改,可以以 root 身份运行以下命令,或者直接重启系统:

    8.2.1.4. 启动 KDE Plasma

    推荐使用 KDE Plasma 的显示管理器 x11/sddm。安装命令如下:

    在 /etc/rc.conf 中启用 SDDM 服务以便开机自动启动:

    可通过以下命令设置 SDDM 的键盘语言(例如设置为西班牙语):

    另一种启动 KDE Plasma 的方法是手动使用 startx(1)。为此,需要在 ~/.xinitrc 文件中加入以下内容:

    8.2.2. GNOME

    GNOME 是一款用户友好的桌面环境。它包括一个用于启动应用和显示状态的面板、桌面、本地工具和应用程序,以及一套使应用程序易于协作并保持一致的设计规范。

    8.2.2.1. 安装 GNOME 元软件包

    要安装包含 GNOME 桌面和应用程序的 GNOME 元软件包,执行:

    8.2.2.2. 最小化安装 GNOME

    要安装精简版的 GNOME-lite 元软件包,仅包含基础功能,执行:

    8.2.2.3. 配置 GNOME

    GNOME 需要挂载 /proc 文件系统。在 /etc/fstab 中添加以下行以便系统启动时自动挂载:

    GNOME 使用 dbus-daemon(1) 作为消息总线和硬件抽象服务。该应用程序会作为 GNOME 的依赖自动安装。

    在 /etc/rc.conf 中启用 D-BUS 服务以便开机自动启动:

    8.2.2.4. 启动 GNOME

    GNOME 显示管理器是 GNOME 的首选显示管理器。GDM 作为 GNOME 包的一部分安装。

    在 /etc/rc.conf 中启用 GDM,以便在系统启动时启动:

    第二种启动 GNOME 的方法是手动调用 startx(1)。要使其工作,需要在 ~/.xinitrc 中添加以下行:

    8.2.3. XFCE

    XFCE 是一款基于 GTK+ 的桌面环境,轻量级,提供了简单、高效、易于使用的桌面。它是完全可配置的,拥有包含菜单、小程序和应用程序启动器的主面板,提供文件管理器和声音管理器,并支持主题。由于它快速、轻巧、高效,非常适合旧的或较慢的、内存受限的机器。

    8.2.3.1. 安装 XFCE

    要安装 XFCE 元包,请执行:

    8.2.3.2. 配置 XFCE

    XFCE 使用 dbus-daemon(1) 作为消息总线和硬件抽象。此应用程序作为 XFCE 的依赖项自动安装。

    在 /etc/rc.conf 中启用 D-BUS,以便在系统启动时启动:

    8.2.3.3. 启动 XFCE

    x11/lightdm 是一款支持多种显示技术的显示管理器,是个很好的选择,因为它非常轻量,内存占用少,性能快速。

    要安装它,请执行:

    在 /etc/rc.conf 中启用 lightdm,以便在系统启动时启动:

    第二种启动 XFCE 的方法是手动调用 startx(1)。要使其工作,需要在 ~/.xinitrc 中添加以下行:

    8.2.4. MATE

    MATE 桌面环境是 GNOME 2 的延续。它使用传统的隐喻,提供一个直观且美观的桌面环境。

    8.2.4.1. 安装 MATE 元包

    要安装包含 MATE 桌面及一些额外应用(如文本编辑器、归档管理器等)的 MATE 元包,请执行:

    8.2.4.2. 最小化安装 MATE

    要安装仅包含基本组件的精简版 MATE 桌面的 mate-lite 元包,请执行:

    8.2.4.3. 配置 MATE

    MATE 需要挂载 /proc。请将以下行添加到 /etc/fstab,以便在系统启动时自动挂载此文件系统:

    MATE 使用 dbus-daemon(1) 作为消息总线和硬件抽象。该程序作为 MATE 的依赖项自动安装。在 /etc/rc.conf 中启用 D-BUS,以便在系统启动时启动:

    8.2.4.4. 启动 MATE

    x11/lightdm 是一个支持多种显示技术的显示管理器,是一个很好的选择,因为它非常轻量,内存占用少,性能快速。

    要安装它,请执行:

    在 /etc/rc.conf 中启用 lightdm,以便在系统启动时启动:

    第二种启动 MATE 的方法是手动调用 startx(1)。要使其工作,需要在 ~/.xinitrc 中添加以下行:

    8.2.5. Cinnamon

    Cinnamon 是一个 UNIX® 桌面环境,提供先进的创新特性以及传统的用户体验。其桌面布局类似于 GNOME 2,底层技术是从 GNOME Shell 分支出来的。Cinnamon 注重让用户感到熟悉,提供一个易于使用且舒适的桌面体验。

    8.2.5.1. 安装 Cinnamon

    要安装 Cinnamon 包,请执行:

    8.2.5.2. 配置 Cinnamon

    Cinnamon 需要挂载 /proc。请将以下行添加到 /etc/fstab,以便在系统启动时自动挂载此文件系统:

    Cinnamon 使用 dbus-daemon(1) 作为消息总线和硬件抽象。该程序作为 Cinnamon 的依赖项自动安装。在 /etc/rc.conf 中启用 D-BUS,以便在系统启动时启动:

    8.2.5.3. 启动 Cinnamon

    x11/lightdm 是一个支持多种显示技术的显示管理器,是一个很好的选择,因为它非常轻量,内存占用少,性能快速。

    要安装它,请执行:

    在 /etc/rc.conf 中启用 lightdm,以便在系统启动时启动:

    第二种启动 Cinnamon 的方法是手动调用 startx(1)。要使其工作,需要在 ~/.xinitrc 中添加以下行:

    8.2.6. LXQT

    LXQt 是一款基于 Qt 技术的高级、易用且快速的桌面环境。它专为那些注重简洁、速度和直观界面的用户而设计。与大多数桌面环境不同,LXQt 在性能较弱的计算机上同样运行良好。

    8.2.6.1. 安装 LXQT

    要安装 LXQT 元包,请执行:

    8.2.6.2. 配置 LXQT

    LXQt 需要挂载 /proc。请将以下行添加到 /etc/fstab,以便在系统启动时自动挂载此文件系统:

    LXQt 使用 dbus-daemon(1) 作为消息总线和硬件抽象。该程序作为 LXQt 的依赖项自动安装。在 /etc/rc.conf 中启用 D-BUS,以便在系统启动时启动:

    8.2.6.3. 启动 LXQT

    推荐的 LXQt 显示管理器是 x11/sddm。要安装 x11/sddm,请执行:

    在 /etc/rc.conf 中启用 SDDM 服务,以便在系统启动时启动:

    可以通过以下命令设置 SDDM 的键盘语言(例如设为西班牙语):

    第二种启动 LXQt 的方法是手动调用 startx(1)。要使其工作,需要在 ~/.xinitrc 中添加以下行:

    KDE Plasma

    GPL 2.0 或更高版本

    x11/kde

    GNOME

    GPL 2.0 或更高版本

    x11/gnome

    XFCE

    GPL、LGPL、BSD

    % ls -l
    total 530
    -rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
    -rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
    -rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
    % chmod go= FILE
    % chmod go-w,a+x FILE
    # chflags sunlink file1
    # chflags nosunlink file1
    # ls -lo file1
    -rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1
    # chmod u+s suidexample.sh
    # chmod 4755 suidexample.sh
    -rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh
    Changing local password for trhodes
    Old Password:
    # ps aux | grep passwd
    trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
    root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd
    # chmod g+s sgidexample.sh
    # chmod 2755 sgidexample.sh
    -rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh
    # chmod +t /tmp
    # chmod 1777 /tmp
    # ls -al / | grep tmp
    drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp
    # pkg install kde
    # pkg install plasma6-plasma
    # pkg install konsole
    # sysrc dbus_enable="YES"
    sysctl net.local.stream.recvspace=65536
    sysctl net.local.stream.sendspace=65536
    # sysctl -f /etc/sysctl.conf
    # pkg install sddm
    # sysrc sddm_enable="YES"
    # sysrc sddm_lang="es_ES"
    % echo "exec dbus-launch --exit-with-x11 ck-launch-session startplasma-x11" > ~/.xinitrc
    # pkg install gnome
    # pkg install gnome-lite
    # Device                Mountpoint      FStype  Options         Dump    Pass#
    proc                    /proc           procfs  rw              0       0
    # sysrc dbus_enable="YES"
    # sysrc gdm_enable="YES"
    % echo "exec gnome-session" > ~/.xinitrc
    # pkg install xfce
    # sysrc dbus_enable="YES"
    # pkg install lightdm lightdm-gtk-greeter
    # sysrc lightdm_enable="YES"
    % echo '. /usr/local/etc/xdg/xfce4/xinitrc' > ~/.xinitrc
    # pkg install mate
    # pkg install mate-base
    # 设备                  挂载点          文件系统类型  选项           转储    检查顺序
    proc                    /proc           procfs  rw              0       0
    # sysrc dbus_enable="YES"
    # pkg install lightdm lightdm-gtk-greeter
    # sysrc lightdm_enable="YES"
    % echo "exec dbus-launch --exit-with-x11 ck-launch-session mate-session" > ~/.xinitrc
    # pkg install cinnamon
    # 设备                  挂载点          文件系统类型  选项           转储    检查顺序
    proc                    /proc           procfs  rw              0       0
    # sysrc dbus_enable="YES"
    # pkg install lightdm lightdm-gtk-greeter
    # sysrc lightdm_enable="YES"
    % echo "exec dbus-launch --exit-with-x11 ck-launch-session cinnamon-session" > ~/.xinitrc
    # pkg install lxqt
    # 设备                  挂载点          文件系统类型  选项           转储    检查顺序
    proc                    /proc           procfs  rw              0       0
    # sysrc dbus_enable="YES"
    # pkg install sddm
    # sysrc sddm_enable="YES"
    # sysrc sddm_lang="es_ES"
    % echo "exec dbus-launch --exit-with-x11 ck-launch-session startlxqt" > ~/.xinitrc

    7.3.有线网络

    待加载了正确的驱动程序,就需要配置网络适配器。FreeBSD 使用驱动程序名称后跟一个单元号来命名网络接口适配器。单元号表示适配器在启动时被检测到的顺序,或者稍后发现的顺序。

    例如,em0 是系统中使用 em(4) 驱动程序的第一个网络接口卡(NIC)。

    要显示网络接口配置,输入以下命令:

    输出应类似于以下内容:

    在这个例子中,显示了以下设备:

    • em0:以太网接口。

    • lo0:回环接口是一种软件回环机制,可以用于性能分析、软件测试/本地通信。更多信息请参考 。

    该例子显示 em0 已经启动并在运行。

    关键指示项是:

    1. UP 表示接口已配置并准备就绪。

    2. 接口具有 IPv4 地址(inet),192.168.1.19。

    3. 接口具有 IPv6 地址(inet6),fe80::21f:16ff:fe0f:275a%em0

    如果 输出类似于以下内容,则表示接口未配置:

    7.3.1. 配置静态 IPv4 地址

    本节提供了在 FreeBSD 系统上配置静态 IPv4 地址的指南。

    可以通过命令行使用 来执行网络接口卡配置,但除非将配置添加到 /etc/rc.conf 中,否则在重启后不会保留。

    注意

    如果在安装过程中通过 配置了网络,可能已经有了某些网卡(NIC)的条目。在执行 之前,请仔细检查 /etc/rc.conf。

    可以通过执行以下命令设置 IP 地址:

    要使更改在重启后保持,可以执行以下命令:

    添加默认路由,执行以下命令:

    将 DNS 记录添加到 /etc/resolv.conf:

    然后通过执行以下命令重启 netif 和 routing 服务:

    可以使用 测试连接:

    输出应类似于以下内容:

    7.3.2. 配置动态 IPv4 地址

    如果网络中有 DHCP 服务器,配置网络接口使用 DHCP 非常简单。FreeBSD 使用 作为 DHCP 客户端。 会自动提供 IP 地址、子网掩码和默认路由。

    要使接口使用 DHCP,执行以下命令:

    可以通过手动运行以下命令使用 :

    输出应类似于以下内容:

    这样可以验证使用 DHCP 进行地址分配是否正常工作。

    然后重启 netif,执行以下命令:

    可以使用 测试连接:

    输出应类似于以下内容:

    7.3.3. IPv6

    IPv6 是著名的 IP 协议的新版本,也被称为 IPv4。

    与 IPv4 相比,IPv6 提供了许多优势和新特性:

    • 其 128 位地址空间允许拥有 340,282,366,920,938,463,463,374,607,431,768,211,456 个地址。这解决了 IPv4 地址短缺和最终耗尽的问题。

    • 路由器仅在其路由表中存储网络聚合地址,从而将路由表的平均大小减少到 8192 条目。这解决了与 IPv4 相关的可扩展性问题,IPv4 需要每个分配的地址块在互联网路由器之间交换,导致路由表变得过大,无法进行有效路由。

    • 地址自动配置()。

    • 强制使用多播地址。

    FreeBSD 包含 的 IPv6 参考实现,并附带了使用 IPv6 所需的一切。

    本节将重点介绍如何配置和启用 IPv6。

    IPv6 地址有三种不同类型:

    • 单播(Unicast):发送到单播地址的数据包到达属于该地址的接口。

    • 任播(Anycast):这些地址在语法上与单播地址相同,但它们表示一组接口。发往任播地址的数据包将到达距离最近的接口。

    • 多播(Multicast):这些地址标识一组接口。发送到多播地址的数据包将到达属于该多播组的所有接口。IPv4 的广播地址(通常是 xxx.xxx.xxx.255)在 IPv6 中由多播地址表示。

    阅读 IPv6 地址时,规范形式表示为 xxxx:x,其中每个 x 代表 16 位十六进制值。示例:FEBC:A574:382B:23C1:AA49:4592:4EFE:9982。

    通常,一个地址会有很长的零子串。可以使用 ::(双冒号)来替换地址中的一个子串。另外,每个十六进制值最多可以省略三个前导零。例如,fe80::1 等同于规范形式 fe80:0000:0000:0000:0000:0000:0000:0001。

    另一种形式是使用已知的 IPv4 表示法来写最后 32 位。例如,2002::10.0.0.1 对应的十六进制规范表示为 2002:0000:0000:0000:0000:0000:0a00:0001,这又等同于 2002::a00:1。

    要查看 FreeBSD 系统的 IPv6 地址,执行以下命令:

    输出应类似于以下内容:

    在此示例中,em0 接口使用 fe80::21f:16ff:fe0f:275a%em0,这是一个自动配置的链路本地地址,自动从 MAC 地址生成。

    某些 IPv6 地址是保留的。可以查看下表了解保留地址的列表:

    IPv6 地址
    描述
    备注

    有关 IPv6 地址结构的更多信息,请参阅 。

    7.3.4. 配置静态 IPv6 地址

    要将 FreeBSD 系统配置为 IPv6 客户端并使用静态 IPv6 地址,必须设置 IPv6 地址。

    执行以下命令以满足要求:

    要指定默认路由器地址,执行以下命令:

    要配置额外的 IPv6 任播地址,请按照 中的说明,将任播地址指定为 _aliasN,并在后面加上选项 anycast:

    请注意,应用程序无法绑定到任播地址;这种情况下需要使用别名地址来代替。

    7.3.5. 配置动态 IPv6 地址

    要使用 动态配置接口的 IPv6 地址,请执行以下命令:

    请注意,当启用 IPv6 数据包转发(即 ipv6_gateway_enable=YES)时,除非将 变量 net.inet6.ip6.rfc6204w3设置为 1,否则系统不会配置 SLAAC 地址。

    7.3.6. 路由器通告和主机自动配置

    本节演示如何在 IPv6 路由器上设置 [rtadvd(8)](https://man.freebsd.org/cgi/man.cgi?query=rtadvd&sektion=8&format=html),以广播 IPv6 网络前缀和默认路由。

    要启用 [rtadvd(8)](https://man.freebsd.org/cgi/man.cgi?query=rtadvd&sektion=8&format=html),执行以下命令:

    重要的是要指定进行 IPv6 路由器通告的接口。例如,要告诉 [rtadvd(8)](https://man.freebsd.org/cgi/man.cgi?query=rtadvd&sektion=8&format=html) 使用 em0:

    接下来,创建配置文件 /etc/rtadvd.conf,如以下示例所示:

    将 em0 替换为要使用的接口,并将 2001:db8:1f11:246:: 替换为分配的前缀。

    对于专用的 /64 子网,无需更改其他任何内容。否则,请将 prefixlen# 更改为正确的值。

    7.3.7. IPv6 和 IPv4 地址映射

    启用 IPv6 的服务器可能需要启用 IPv4 映射的 IPv6 地址通信。此兼容性选项允许将 IPv4 地址表示为 IPv6 地址。允许 IPv6 应用程序与 IPv4 通信,反之亦然,这可能会带来安全问题。

    在大多数情况下,此选项可能不是必需的,仅用于兼容性。此选项能让仅支持 IPv6 的应用程序在双栈环境中与 IPv4 一起工作。这对那些可能不支持仅 IPv6 环境的第三方应用程序最为有用。

    要启用此功能,请执行以下命令:

    4.5.使用 Ports

    Ports 是一组 Makefile、补丁和描述文件的。每一组文件用于在 FreeBSD 上编译并安装某个独立应用程序,被称为一个 port。

    默认情况下,Ports 本身被存储在 /usr/ports 的子目录中。

    警告

    在安装和使用 Ports 之前,请注意:通常不建议将 Ports 与通过 pkg 提供的二进制软件包混用。pkg 默认跟踪的是 Ports 树的季度分支(quarterly branch),而不是 HEAD。某些 port 在 HEAD 中的依赖项,可能与其在季度分支中的不同,这可能会导致 pkg 安装的依赖项与 Ports 安装的依赖项之间产生冲突。如果必须同时使用 Ports 和 pkg,请确保它们使用的是同一分支版本的 Ports 树。

    Ports 包含以软件类别划分的目录,每个类别目录中包含若干应用程序的子目录。每个应用程序的子目录包含一组告诉 FreeBSD 如何编译和安装该程序的文件,这组文件称为 port 骨架(ports skeleton)。每份 port 骨架包含以下文件和目录:

    • Makefile:包含指定如何编译应用程序以及将组件安装到何处的指令。

    • distinfo:包含构建该 port 所需下载文件的名称和校验和。

    • files/:此目录包含为了使程序能在 FreeBSD 上编译和安装所需的补丁;此外也可能包含构建该 port 所用的其他文件。

    • pkg-descr:提供程序的详细描述。

    • pkg-plist:列出该 port 安装的所有文件;它也告诉 Ports 系统在卸载时要删除哪些文件。

    一些 port 还包含 pkg-message 或其他用于处理特殊情况的文件。有关这些文件以及 Ports 的更多信息,请参考 。

    port 本身并不包含实际的源代码(也叫 distfile)。在构建 port 时的 extract 阶段会自动将下载的源代码保存到 /usr/ports/distfiles。

    4.5.1. 安装 Ports

    在通过 port 编译应用程序之前,必须先安装 Ports。如果在安装 FreeBSD 时未选择安装 Ports,可以使用以下方法来安装:

    操作步骤:Git 方法

    如果你需要对 ports 树有更多控制,或需要保留本地修改,或你正在使用 FreeBSD-CURRENT,可以使用 Git 获取 Ports。详细的 Git 使用说明请参考 。

    我们在 Git 命令中加入 --depth 1 参数,以便在克隆时不获取提交历史,这样能节省时间,对于大多数用户而言已经足够。如果你对 ports 树有自己的修改,或出于其他需要需要保留历史记录,则可以省略下面命令中的 --depth 1 参数。

    1. 在使用 Git 克隆 ports 树之前,必须先安装 Git。如果系统上已经有 ports 树,可以通过以下方式安装 Git:

      如果系统上没有 ports 树,或是使用 pkg 来管理软件包,也可以用 pkg 安装 Git:

    2. 克隆 ports 树的 HEAD 分支:

    3. 或者,克隆某个季度分支的 ports 树:

    4. 在完成首次 Git 克隆之后,如需更新 /usr/ports

    4.5.2. 安装 Ports

    本节介绍如何使用 Ports 安装或移除软件的基本方法。关于可用的 make 目标和环境变量的详细说明,请参阅 。

    警告

    在编译任何 port 之前,请务必按照上一节中的说明更新 Ports。由于安装任何第三方软件都可能带来安全漏洞,建议事先在 上查看该 port 是否存在已知安全问题。或者,可以在安装新 port 之前运行 pkg audit -F。此命令也可以配置为在每日安全检查中自动执行安全审计并更新漏洞数据库。详见 和 。

    使用 Ports 编译程序需要系统具备正常的网络连接,并且需要超级用户权限。

    要编译并安装 port,先切换到目标 port 的目录下,然后输入 make install。屏幕上会显示安装进度信息:

    由于 lsof 是一款以提升权限运行的程序,因此在安装过程中会显示安全警告。安装完成后,系统会返回 shell 提示符。

    某些 shell 会缓存 PATH 环境变量所列目录中的可执行命令列表,以加快命令查找速度。使用 tcsh 的用户应在安装新命令后输入 rehash,以便无需指定完整路径即可调用该命令;使用 sh 的用户应使用 hash -r。更多信息请参考各自的 shell 文档。

    在安装过程中,系统会创建一个用于临时编译的子目录。删除该目录可以节省磁盘空间,并减少将来升级该 port 时可能出现的问题:

    注意

    若想省去这一步,可在编译时直接使用命令 make install clean。

    4.5.2.1. 自定义 Ports 安装

    某些 ports 提供构建选项,可用于启用或禁用应用程序组件、设置安全选项,或进行其他定制。例如 和 。如果该 port 依赖其他也提供可配置选项的 port,安装过程中可能会多次暂停并提示用户从菜单中选择选项。为避免多次交互并一次性完成所有配置,可在该 port 的目录中运行 make config-recursive。然后再执行 make install [clean] 以编译并安装该 port。

    技巧

    使用 config-recursive 时,待配置的 port 列表由 all-depends-list 目标生成。建议重复运行 make config-recursive,直到所有依赖项的选项都已定义,且不再弹出配置界面,以确保所有依赖项的选项都已设置。

    要在 port 构建后重新进入构建选项菜单,以便添加、删除或更改选项,有几种方法。一种是进入该 port 所在目录并输入 make config。另一种是使用 make showconfig 查看当前选项。还可以执行 make rmconfig 删除所有已选项,然后重新配置。这些方法及其他选项在 中有详细说明。

    Ports 系统使用 下载源代码文件,它支持多种环境变量。如果 FreeBSD 系统处于防火墙或 FTP/HTTP 代理之后,可能需要设置 FTP_PASSIVE_MODE、FTP_PROXY 和 FTP_PASSWORD 等变量。完整变量列表请参考 。

    对于无法始终连接网络的用户,可以在 /usr/ports 中运行 make fetch 来下载所有 distfiles,也可以在某个类别目录(如 /usr/ports/net)或具体 port 目录中运行该命令。但请注意,如果该 port 有依赖项,则在分类或 port 目录中运行此命令 不会 下载其他分类中依赖项的 distfiles。如需同时下载所有依赖的 distfiles,请使用 make fetch-recursive。

    在少数情况下,如组织有本地 distfiles 仓库,可使用 MASTER_SITES 变量来覆盖 Makefile 中指定的下载路径。例如:

    WRKDIRPREFIX 和 PREFIX 变量可用来覆盖默认的构建目录和安装目录。例如:

    将在 /usr/home/example/ports 下进行编译,并将程序安装到 /usr/local。

    将在 /usr/ports 下进行编译,并将程序安装到 /usr/home/example/local。再如:

    则会同时更改工作目录和安装目录。

    这些变量也可以通过环境变量来设置。如何设置环境变量,请参考所使用 shell 的手册页。

    4.5.3. 移除已安装的 Ports

    已安装的 ports 可以使用 pkg delete 卸载。该命令的使用示例可见于 手册页。

    另外,也可以在该 port 的目录中运行 make deinstall:

    建议在卸载 port 时阅读相关提示信息。如果该 port 有其他依赖它的程序,将会显示相关信息,但卸载过程仍将继续。在这种情况下,可能更好的做法是重新安装该程序,以避免依赖损坏。

    4.5.4. 升级 Ports

    随着时间推移,Ports 中的软件可能会有更新版本。本节说明如何判断哪些软件可以升级,以及如何执行升级操作。

    要判断已安装的 ports 是否有新版本可用,首先确保使用 中描述的命令更新 ports 树。然后执行以下命令列出已过期的 ports:

    重要

    在尝试升级之前,请阅读 /usr/ports/UPDATING 文件,从文件顶部阅读到离上一次升级 ports 或系统安装时间最近的日期。该文件描述了用户在升级 port 时可能遇到的各种问题和所需的额外步骤,例如文件格式变化、配置文件路径变更,或与旧版本不兼容等问题。请记录与需升级的 port 匹配的所有说明,并在执行升级时遵循这些指引。

    4.5.4.1. 升级和管理 Ports 的工具

    Ports Collection 提供了若干实用工具用于执行实际升级操作。每种工具都有其优点和局限。

    以往大多数系统使用的是 Portmaster 和 Portupgrade。Synth 是一款较新的可选工具。

    注意

    应选择哪个工具由系统管理员根据具体情况决定。建议在使用任何这些工具之前先备份数据。

    4.5.4.2. 使用 Portmaster 升级 Ports

    是一个非常小巧的工具,用于升级已安装的 ports。它的设计目标是仅使用 FreeBSD 基系统中已有的工具,而不依赖其他 ports 或数据库。要通过 Ports 安装该工具:

    Portmaster 将 ports 分为以下四类:

    • 根 port(Root port):没有依赖,也不会被其他 ports 依赖。

    • 树干 port(Trunk port):没有依赖,但会被其他 ports 依赖。

    • 分支 port(Branch port):有依赖,且会被其他 ports 依赖。

    • 叶子 port(Leaf port):有依赖,但不会被其他 ports 依赖。

    要列出这些类别并检查可用更新:

    要升级所有已过期的 ports:

    注意

    默认情况下,Portmaster 会在删除旧版本 port 之前创建一个备份包。如果新版本安装成功,它会删除该备份。使用 -b 可以指示 Portmaster 不自动删除备份。加上 -i 可启用交互模式,升级每个 port 前询问用户确认。Portmaster 提供了许多其他选项,详情请阅读 手册页。

    如果升级过程中出现错误,可加上 -f 强制升级并重建所有 ports:

    Portmaster 也可以用于安装新的 ports,会在构建和安装新 port 之前先升级所有依赖项。示例如下:

    更多关于 的信息请参考其 pkg-descr。

    4.5.4.3. 使用 Portupgrade 升级 Ports

    警告

    Portupgrade 已被弃用,并将在不久后移除。

    是另一款用于升级 ports 的工具。它会安装一组应用程序,用于管理 ports。但该工具依赖 Ruby。要安装该 port:

    在使用此工具执行升级前,建议使用 pkgdb -F 扫描已安装的 ports 列表,并修复其报告的所有不一致问题。

    要升级系统上所有过期的 ports,使用 portupgrade -a。或者,加上 -i 逐一确认每个升级:

    若只想升级指定的程序,而不是所有可用 ports,使用 portupgrade pkgname。必须加上 -R 以先升级该程序所依赖的所有 ports:

    加上 -P 后,Portupgrade 会在 PKG_PATH 中列出的本地目录中查找已有的包文件,若找不到,则尝试从远程站点获取。如果本地和远程都无法获取,则会使用 Ports 构建。若希望完全不使用 ports,请使用 -PP,该选项在找不到包时会直接中止:

    若只想获取 port 的 distfiles 或包文件(若加了 -P),不进行构建或安装,可使用 -F。更多选项请参考 portupgrade 的手册页。

    更多关于 的信息可见其 pkg-descr。

    4.5.5. Ports 与磁盘空间

    随着时间推移,使用 Ports 会逐渐占用磁盘空间。在构建并安装某 port 之后,在该 port 的目录中运行 make clean 可以清理临时的 work 目录。如果使用 Portmaster 安装 port,它默认会自动移除该目录,除非指定了 -K 选项。而如果已安装 Portupgrade,以下命令可以移除本地 Ports 副本中所有的 work 目录:

    此外,过时的源代码分发文件(distfiles)会在 /usr/ports/distfiles 中逐渐堆积。若要删除所有不再被任何 port 引用的 distfile,可使用 Portupgrade 提供的命令:

    Portupgrade 也可以移除系统中所有当前安装的 ports 不再引用的 distfile:

    若使用 Portmaster,可执行以下命令:

    默认情况下,该命令是交互式的,会逐个询问用户是否删除某个 distfile。

    除了以上命令之外, 可用于自动化清理那些不再需要的已安装 ports。

    % ifconfig
    em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
            options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>
            ether 00:1f:16:0f:27:5a
            inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1
            inet 192.168.1.19 netmask 0xffffff00 broadcast 192.168.1.255
            media: Ethernet autoselect (1000baseT <full-duplex>)
            status: active
            nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
            options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
            inet6 ::1 prefixlen 128
            inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
            inet 127.0.0.1 netmask 0xff000000
            groups: lo
            nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
    。
  • 它有一个有效的子网掩码(netmask),其中 0xffffff00 等同于 255.255.255.0。

  • 它有一个有效的广播地址,192.168.1.255。

  • 接口的 MAC 地址(ether)是 00:1f:16:0f:27:5a。

  • 物理媒体选择处于自动选择模式(media: Ethernet autoselect (1000baseT <full-duplex>))。

  • 链接状态(status)为 active,表示检测到载波信号。对于 em0,当以太网电缆未插入接口时,status: no carrier 状态是正常的。

  • 内建 IPsec(IP 安全)。

  • 简化的头部结构。

  • 支持移动 IP。

  • IPv6 到 IPv4 的过渡机制。

  • fc00::/7

    唯一本地地址

    唯一本地地址用于本地通信,只能在一组协作站点内路由。

    ff00::/8

    多播

    2000::/3

    全局单播

    所有全局单播地址都从该地址池中分配。前三位比特是 001。

    2001:db8::/32, 3fff::/20

    文档使用

    用于文档的 IPv6 地址前缀。

    ::/128

    未指定

    相当于 IPv4 中的 0.0.0.0。

    ::1/128

    回环地址

    相当于 IPv4 中的 127.0.0.1。

    ::ffff:0.0.0.0/96

    IPv4 映射 IPv6 地址

    低 32 位是 IPv4 地址,用于与 IPv4 主机和路由器的兼容。

    fe80::/10

    链路本地单播

    相当于 IPv4 中的 169.254.0.0/16。

    lo(4)
    ifconfig(8)
    ifconfig(8)
    bsdinstall(8)
    sysrc(8)
    ping(8)
    dhclient(8)
    dhclient(8)
    dhclient(8)
    ping(8)
    RFC4862
    KAME 项目
    RFC4291
    rc.conf(5)
    SLAAC
    sysctl(8)
    :
  • 如需将 /usr/ports 切换到其他季度分支:

  • FreeBSD Porter’s Handbook
    Git 入门指南
    ports(7)
    https://vuxml.freebsd.org/
    pkg-audit(8)
    periodic(8)
    www/firefox
    security/gpgme
    ports(7)
    fetch(1)
    fetch(3)
    pkg-delete(8)
    Git 方法
    ports-mgmt/portmaster
    portmaster(8)
    ports-mgmt/portmaster
    ports-mgmt/portupgrade
    ports-mgmt/portupgrade
    ports-mgmt/pkg_cutleaves
    em0: flags=8822<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
            options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>
            ether 00:1f:16:0f:27:5a
            media: Ethernet autoselect
            status: no carrier
            nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    # ifconfig em0 inet 192.168.1.150/24
    # sysrc ifconfig_em0="inet 192.168.1.150 netmask 255.255.255.0"
    # sysrc defaultrouter="192.168.1.1"
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    # service netif restart && service routing restart
    % ping -c2 www.FreeBSD.org
    PING web.geo.FreeBSD.org (147.28.184.45): 56 data bytes
    64 bytes from 147.28.184.45: icmp_seq=0 ttl=51 time=55.173 ms
    64 bytes from 147.28.184.45: icmp_seq=1 ttl=51 time=53.093 ms
    
    --- web.geo.FreeBSD.org ping statistics ---
    2 packets transmitted, 2 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 53.093/54.133/55.173/1.040 ms
    # sysrc ifconfig_em0="DHCP"
    # dhclient em0
    DHCPREQUEST on em0 to 255.255.255.255 port 67
    DHCPACK from 192.168.1.1
    unknown dhcp option value 0x7d
    bound to 192.168.1.19 -- renewal in 43200 seconds.
    # sysrc background_dhclient="YES"
    # service netif restart
    % ping -c2 www.FreeBSD.org
    PING web.geo.FreeBSD.org (147.28.184.45): 56 data bytes
    64 bytes from 147.28.184.45: icmp_seq=0 ttl=51 time=55.173 ms
    64 bytes from 147.28.184.45: icmp_seq=1 ttl=51 time=53.093 ms
    
    --- web.geo.FreeBSD.org ping statistics ---
    2 packets transmitted, 2 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 53.093/54.133/55.173/1.040 ms
    # ifconfig
    em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
            options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>
            ether 00:1f:16:0f:27:5a
            inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255
            inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1
            media: Ethernet autoselect (1000baseT <full-duplex>)
            status: active
            nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
    # sysrc ifconfig_em0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64"
    # sysrc ipv6_defaultrouter="2001:db8:4672:6565::1"
    # sysrc ifconfig_em0_alias0="inet6 2001:db8:4672:6565::a anycast"
    # sysrc ifconfig_em0_ipv6="inet6 accept_rtadv"
    # sysrc rtsold_enable="YES"
    # sysrc rtadvd_enable="YES"
    # sysrc rtadvd_interfaces="em0"
    em0:\
    	:addrs#1:addr="2001:db8:1f11:246::":prefixlen#64:tc=ether:
    # sysrc ipv6_ipv4mapping="YES"
    # git -C /usr/ports switch 2023Q1
    # cd /usr/ports/devel/git
    # make install clean
    # pkg install git
    # git clone --depth 1 https://git.FreeBSD.org/ports.git /usr/ports
    # git clone --depth 1 https://git.FreeBSD.org/ports.git -b 2023Q1 /usr/ports
    # cd /usr/ports/sysutils/lsof
    # make install
    >> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
    >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
    ===>  Extracting for lsof-4.88
    ...
    [解压输出略]
    ...
    >> Checksum OK for lsof_4.88D.freebsd.tar.gz.
    ===>  Patching for lsof-4.88.d,8
    ===>  Applying FreeBSD patches for lsof-4.88.d,8
    ===>  Configuring for lsof-4.88.d,8
    ...
    [配置输出略]
    ...
    ===>  Building for lsof-4.88.d,8
    ...
    [编译输出略]
    ...
    
    ===>  Installing for lsof-4.88.d,8
    ...
    [安装输出略]
    ...
    ===>   Generating temporary packing list
    ===>   Compressing manual pages for lsof-4.88.d,8
    ===>   Registering installation for lsof-4.88.d,8
    ===>  SECURITY NOTE:
          This port has installed the following binaries which execute with
          increased privileges.
    /usr/local/sbin/lsof
    #
    # make clean
    ===>  Cleaning for lsof-88.d,8
    #
    # cd /usr/ports/directory
    # make MASTER_SITE_OVERRIDE= \
    ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch
    # make WRKDIRPREFIX=/usr/home/example/ports install
    # make PREFIX=/usr/home/example/local install
    # make WRKDIRPREFIX=../ports PREFIX=../local install
    # cd /usr/ports/sysutils/lsof
    # make deinstall
    ===>  Deinstalling for sysutils/lsof
    ===>   Deinstalling
    Deinstallation has been requested for the following 1 packages:
    
    	lsof-4.88.d,8
    
    The deinstallation will free 229 kB
    [1/1] Deleting lsof-4.88.d,8... done
    # pkg version -l "<"
    # cd /usr/ports/ports-mgmt/portmaster
    # make install clean
    # portmaster -L
    ===>>> Root ports (No dependencies, not depended on)
    ===>>> ispell-3.2.06_18
    ===>>> screen-4.0.3
            ===>>> New version available: screen-4.0.3_1
    ===>>> tcpflow-0.21_1
    ===>>> 7 root ports
    ...
    ===>>> Branch ports (Have dependencies, are depended on)
    ===>>> apache22-2.2.3
            ===>>> New version available: apache22-2.2.8
    ...
    ===>>> Leaf ports (Have dependencies, not depended on)
    ===>>> automake-1.9.6_2
    ===>>> bash-3.1.17
            ===>>> New version available: bash-3.2.33
    ...
    ===>>> 32 leaf ports
    
    ===>>> 137 total installed ports
            ===>>> 83 have new versions available
    # portmaster -a
    # portmaster -af
    # portmaster shells/bash
    # cd /usr/ports/ports-mgmt/portupgrade
    # make install clean
    # portupgrade -ai
    # portupgrade -R firefox
    # portupgrade -PP gnome3
    # portsclean -C
    # portsclean -D
    # portsclean -DD
    # portmaster --clean-distfiles
    # git -C /usr/ports pull

    2.6.分配磁盘空间

    接下来的菜单用于确定磁盘空间的分配方法。

    显示不同的分区选项。如:手动

    图 10. 分区选择

    bsdinstall 提供了四种磁盘空间分配方法:

    • Auto (ZFS) 分区可创建一个基于 ZFS 的根文件系统,并可选支持 引导环境 的 GELI 加密。

    • Auto (UFS) 分区可自动设置使用 UFS 文件系统的磁盘分区。

    • Manual 分区能让高级用户从菜单选项中创建自定义分区。

    • Shell 将打开命令行提示符,高级用户可使用命令行工具(如 、 和 )创建自定义分区。

    本节说明了在布置磁盘分区时需要考虑的事项。然后演示了如何使用不同的分区方法。

    2.6.1. 设计分区布局

    默认的文件系统分区布局有一个用于整个系统的文件系统。在使用 UFS 时,如果有足够的磁盘空间或多块磁盘,规划使用多个文件系统是值得的。在布局文件系统时,请记住,硬盘从外圈到内圈的数据传输速度更快。因此,较小且访问频繁的文件系统应靠近硬盘外侧,而较大的分区(如 /usr)应放置在磁盘的内侧。创建分区的顺序建议类似于:/、交换分区、/var 和 /usr。

    /var 分区的大小反映了预期机器的使用情况。此分区用于存放邮箱、日志文件和打印缓存。邮箱和日志文件的大小可能会因用户数量和日志文件保留时间的不同而意外增长。通常情况下,大多数用户的 /var,无需超过约 1 GB 的空闲磁盘空间。

    注意

    有时,/var/tmp 需要大量磁盘空间。当安装新软件时,打包工具会在 /var/tmp 下解压缩软件包的临时副本。如果 /var/tmp 下没有足够的磁盘空间,在安装大型软件包(如 Firefox/LibreOffice)时可能会很棘手。

    /usr 分区存放了许多支持系统的文件,包括 FreeBSD Ports 和系统源代码。建议为此分区分配至少 2 GB 的空间。另外,用户的主目录默认放在 /usr/home,但可以放在其他分区。在默认情况下,/home 是指向 /usr/home 的符号链接。

    在选择分区大小时,请考虑空间需求。当一个分区中空间用尽,而另一个几乎未使用时可能会很麻烦。

    作为经验法则,交换分区的大小应约为物理内存(RAM)大小的两倍。内存较少的系统(交换分区在较大内存配置下可更小)可能在配置更大交换分区时表现更好。配置过小的交换分区可能会导致虚拟内存页面扫描代码效率低下,并在增加更多内存时可能出现问题。

    在配备多块 SCSI 磁盘或多个在不同控制器上运行的 IDE 磁盘的大型机上,建议为每个驱动器都配置交换分区,最多可达四个驱动器。交换分区的大小应大致相同。内核可以处理任意大小,但内部数据结构的规模为最大交换分区的 4 倍。保持交换分区大小相近将使内核能够在磁盘之间最优地划分交换空间。较大的交换空间可能会引发内核关于总配置交换的警告信息。如警告信息所示,通过增加用于跟踪交换分区分配的内存量,可以提高此限制。在强制重启之前,可能更容易从失控程序中恢复。

    通过正确分区,较小的写入密集型分区引入的碎片将不会扩散到主要用于读取的分区。将写入负载较重的分区靠近磁盘边缘将提高这些分区的 I/O 性能。虽然较大分区中的 I/O 性能可能是必要的,但将它们更多地移向磁盘边缘不会比将 /var 移向边缘带来显著的性能提升。

    2.6.2. 使用 UFS 的引导分区

    选择此方法后,将显示可用磁盘的菜单。如果连接了多块磁盘,请选择要安装 FreeBSD 的磁盘。

    图 11. 从多块磁盘中选择

    选择磁盘后,下一菜单提示要么安装到整块磁盘,要么使用空闲空间创建分区。若选择 Entire Disk,则会自动创建填充整块磁盘的一般分区布局。选择 Partition 则会从磁盘上的未使用空间创建分区布局。

    图 12. 选择整块磁盘/分区

    选择 Entire Disk 选项后,bsdinstall 会显示一个对话框,指示磁盘将被擦除。

    图 13. 确认

    下一个菜单显示可用分区方案类型的列表。对于 amd64 计算机,GPT 通常是最合适的选择。对于不兼容 GPT 的旧计算机,应使用 MBR。其他分区方案通常用于不常见或旧计算机。更多信息请参见 。

    图 14. 选择分区方案

    在创建分区布局后,请检查以确保满足安装需求。选择 Revert 将重置分区为其原始值。按 Auto 将重新创建自动 FreeBSD 分区。分区也可以手动创建、修改或删除。当分区正确时,选择 Finish 继续安装。

    图 15. 审阅已创建的分区

    磁盘配置完成后,下一菜单提供最后一次机会在格式化选定驱动器之前进行更改。如果需要更改,请选择 Back 返回到主分区菜单。选择 Revert & Exit 将在不对驱动器进行任何更改的情况下退出安装程序。选择 Commit 可开始安装过程。

    图 16. 最终确认

    要继续安装过程,请转到 。

    2.6.3. 手动分区

    选择此方法将打开分区编辑器:

    图 17. 手动创建分区

    高亮显示安装驱动器(在此示例中为 ada0),然后选择 Create 可显示可用分区方案的菜单:

    图 18. 手动创建分区

    GPT 通常是 amd64 计算机最合适的选择。不兼容 GPT 的较旧计算机应使用 MBR。其他分区方案通常用于不常见或较旧的计算机。

    表 1. 分区方案

    缩写
    说明

    选择并创建分区方案后,再次选择 Create 可创建分区。使用 Tab 可以将焦点移到字段(在循环浏览 OK、Options 和 Cancel 后)。

    图 19. 手动创建分区

    标准 FreeBSD GPT 安装至少使用三个分区,包括 UFS 或 ZFS:

    • freebsd-boot/efi——存放 FreeBSD 启动代码。

    • freebsd-ufs——FreeBSD UFS 文件系统。

    • freebsd-zfs——FreeBSD ZFS 文件系统。更多有关 ZFS 的信息,请参见 。

    有关可用 GPT 分区类型的说明,请参见 。

    可以创建多个文件系统分区。有些人喜欢传统布局,为 /、/var、/tmp 和 /usr 分配单独的分区。

    技巧

    注意,/tmp 可以稍后作为基于内存的文件系统()添加,前提是系统内存足够。

    有关示例,请参见。

    Size 可以用常用缩写输入:K 代表千字节,M 代表兆字节,G 代表吉字节。

    技巧

    正确的扇区对齐能提供最佳性能,将分区大小设置为 4K 字节的整数倍,有助于确保在使用 512 字节或 4K 字节扇区的磁盘上实现对齐。通常,将分区大小设置为 1M 或 1G 的整数倍是最简单的方法,以确保每个分区都从 4K 的整数倍位置开始。有一个例外:用于 BIOS 启动的 freebsd-boot 分区由于传统启动代码的限制,其大小不应超过 512K。此限制不适用于 UEFI 启动。

    如果分区将包含文件系统,则需要一个 Mountpoint。如果只创建单个 UFS 分区,挂载点应为 /。

    Label 是分区的名称。驱动器名称或编号在驱动器连接到不同控制器/端口时可能会变化,但分区标签不会变化。在像 /etc/fstab 这样的文件中使用标签而不是驱动器名称和分区编号,使系统对硬件变化更具兼容性。GPT 标签在连接磁盘时出现在 /dev/gpt/ 中。其他分区方案具有不同的标签功能,其标签出现在 /dev/ 中的不同目录。

    技巧

    在每个分区上使用唯一标签以避免相同标签的冲突。可以在标签中添加计算机名称、用途或位置的一些字母。例如,可以将 UFS 根分区的标签设置为 labroot 或 rootfslab,前提是计算机命名为 lab。

    示例 1. 创建传统拆分文件系统分区

    对于传统的分区布局,其中 /、/var、/tmp 和 /usr 目录在各自的分区上是单独的文件系统,创建一个 GPT 分区方案,然后按如下所示创建分区。所示的分区大小适用于 20G 的目标磁盘。如果目标磁盘上有更多空间,较大的交换分区或 /var 分区可能会很有用。这里显示的标签以 ex 开头表示“示例”,但读者应使用上述说明的其他唯一标签值。

    在默认情况下,FreeBSD 的 gptboot 期望第一个 UFS 分区为 / 分区。

    分区类型
    大小
    挂载点
    标签

    创建自定义分区后,选择 Finish 可继续安装,并转到 。

    2.6.4. 使用 ZFS 根文件系统的引导分区

    此分区模式仅适用于整块磁盘,将清除整块磁盘的内容。主要的 ZFS 配置菜单提供多个选项以控制池的创建。

    图 20. ZFS 分区菜单

    以下是此菜单中选项的概述:

    • Install——使用选定的选项继续安装。

    • Pool Type/Disks——配置 Pool Type 和将构成池的磁盘。自动 ZFS 安装程序目前仅支持创建一个顶级 vdev,除非在条带模式下。要创建更复杂的池,请参阅 中的说明。

    • Rescan Devices——重新填充可用磁盘的列表。

    选择 T 可配置 Pool Type 和将构成池的磁盘。

    图 21. ZFS 池类型

    以下是此菜单中可以选择的 Pool Type 的摘要:

    • stripe——条带化提供所有连接设备的最大存储,但没有冗余。如果仅有一块磁盘故障,池中的数据将永久丢失。

    • mirror——镜像在每块磁盘上存储所有数据的完整副本。镜像提供良好的读取性能,因为数据是从所有磁盘并行读取的。写入性能较慢,因为数据必须写入池中的所有磁盘。允许除了一块磁盘外的所有磁盘故障。此选项至少需要两块磁盘。

    • raid10——条带镜像。提供最佳性能,但存储容量最少。此选项需要偶数块磁盘,至少四块磁盘。

    选择了 Pool Type 后,将显示可用磁盘的列表,系统会提示用户选择一块或多块磁盘以构成池。然后将验证配置,以确保选择了足够的磁盘。如果验证失败,请选择 Change Selection 返回磁盘列表,或选择 Back 更改 Pool Type。

    图 22. 磁盘选择

    图 23. 无效选择

    如果列表中缺少一块或多块磁盘,或在启动安装程序后新加了磁盘,请选择 Rescan Devices 可刷新可用磁盘的列表。

    图 24. 重新扫描设备

    为了避免意外擦除错误的磁盘,可以使用菜单 Disk Info 检查每块磁盘,包括其分区表以及设备型号和序列号等其他信息(如果可用)。

    图 25. 分析磁盘

    选择 N 可配置 Pool Name。输入所需的名称,然后选择 OK 确定名称,或选择 Cancel 返回主菜单来采用默认名称。

    图 26. 池名称

    选择 S 设置交换空间的大小。输入所需的交换分区大小,然后选择 OK 确定,或选择 Cancel 返回主菜单并使用默认值。

    图 27. 交换大小

    若所有选项设置为所需值,选择菜单顶部的选项 >>> Install。安装程序将提供最后一次取消的机会,确认所选驱动器的内容将被销毁以创建 ZFS 池。

    图 28. 最后机会

    如果启用了 GELI 磁盘加密,安装程序将两次提示输入用于加密磁盘的密码短语。然后将开始初始化加密。

    图 29. 磁盘加密密码

    图 30. 初始化加密

    安装过程将正常进行。要继续安装,请访问。

    2.6.5. Shell 模式分区

    在进行高级安装时,bsdinstall 的分区菜单可能无法提供所需的灵活性。高级用户可以从分区菜单中选择 Shell 选项,以手动对驱动器进行分区,创建文件系统,填写 /tmp/bsdinstall_etc/fstab,并在 /mnt 下挂载文件系统。在完成后,输入 exit 可返回 bsdinstall 继续安装。

    freebsd-swap——FreeBSD 交换空间。

    freebsd-ufs

    2G

    /var

    exvarfs

    freebsd-ufs

    1G

    /tmp

    extmpfs

    freebsd-ufs

    使用默认值(剩余磁盘空间)

    /usr

    exusrfs

    Disk Info——此菜单可用于检查每块磁盘,包括其分区表以及设备型号和序列号等其他信息(如可用)。

  • Pool Name——确定池的名称。默认名称为 zroot。

  • Force 4K Sectors?——强制使用 4K 扇区。默认情况下,安装程序将自动创建与 4K 边界对齐的分区,并强制 ZFS 使用 4K 扇区。这在 512 字节扇区的磁盘上是安全的,并且可以确保在 512 字节磁盘上创建的池将来可以添加 4K 扇区的磁盘,无论是作为额外的存储空间还是替换故障磁盘。按 回车键 选择是否激活此选项。

  • Encrypt Disks?——加密磁盘允许用户使用 GELI 对磁盘进行加密。有关磁盘加密的更多信息,请参见 “使用 geli 进行磁盘加密”。按 回车键 选择是否激活此选项。

  • Partition Scheme——选择分区方案。大多数情况下推荐使用 GPT。按 回车键 在不同选项之间进行选择。

  • Swap Size——确定交换空间的大小。

  • Mirror Swap?——是否在磁盘之间镜像交换。请注意,启用镜像交换将破坏崩溃转储。按 回车键 激活或不激活此选项。

  • Encrypt Swap?——是否加密交换。每次系统启动时将使用临时密钥加密交换,并在重启时丢弃。按 回车键 选择是否激活此选项。有关交换加密的更多信息,请参见 “加密交换分区”。

  • raidz1——单重冗余 RAID。允许一块磁盘同时故障。此选项至少需要三块磁盘。

  • raidz2——双重冗余 RAID。允许两块磁盘同时故障。此选项至少需要四块磁盘。

  • raidz3——三重冗余 RAID。允许三块磁盘同时故障。此选项至少需要五块磁盘。

  • APM

    Apple 分区表,供 PowerPC® 使用。

    BSD

    无 MBR 的 BSD 标签,有时称为 危险专用模式,因为非 BSD 磁盘工具可能无法识别它。

    GPT

    GUID 分区表。

    MBR

    主引导记录。

    freebsd-boot

    512K

    freebsd-ufs

    2G

    /

    exrootfs

    freebsd-swap

    4G

    gpart(8)
    fdisk(8)
    bsdlabel(8)
    分区方案
    获取分发文件
    Z 文件系统 (ZFS)
    gpart(8)
    tmpfs(5)
    创建传统拆分文件系统分区
    获取发行版文件
    Shell 模式分区
    获取发行版文件
    显示可以安装 FreeBSD 的磁盘列表
    菜单询问用户是否要使用磁盘上所有可用空间或希望创建分区
    菜单指示用户磁盘上的所有数据将被删除并询问确认
    菜单向用户显示不同类型的分区,并请求选择其中一种
    菜单显示已创建的分区
    菜单指示用户所有更改将写入磁盘,并告知如果决定继续,现有数据将被永久删除。
    显示分区编辑器的菜单。
    显示不同类型分区方案的菜单
    请求类型的菜单
    显示配置 ZFS 池的不同选项的菜单
    请求虚拟设备类型的菜单。如:条带
    请求添加到池的磁盘数量的菜单
    指示未选择足够磁盘的菜单。
    重新设备扫描
    显示分区信息的菜单。
    请求池名称的菜单。
    请求交换内存大小的菜单
    指示用户数据将丢失的菜单
    请求加密设备密码的菜单
    显示加密初始化的菜单。

    exswap

    3.3.用户和基本账户管理

    FreeBSD 允许多个用户同时使用计算机。尽管同一时间只能有一个用户坐在屏幕前使用键盘,但任意数量的用户都可以通过网络登录系统。为了使用系统,每位用户都应拥有自己的用户账户。

    本章将介绍:

    • FreeBSD 系统中不同类型的用户账户;

    • 如何添加、删除和修改用户账户;

    • 如何设置资源访问限制,以控制用户和用户组的权限;

    • 如何创建用户组,并将用户添加为组成员。

    3.3.1. 账户类型

    由于访问 FreeBSD 系统的所有操作都必须通过账户完成,且所有进程均由用户启动,因此用户与账户管理至关重要。

    FreeBSD 中主要有三类账户:系统账户、用户账户,以及超级用户账户。

    3.3.1.1. 系统账户

    系统账户用于运行诸如 DNS、邮件和 Web 服务器等服务。这样做的原因是出于安全考虑;如果所有服务都以超级用户身份运行,它们将可以不受限制地执行操作。

    系统账户的例子如 daemon、operator、bind、news 和 www。

    nobody 是一个通用的非特权系统账户。然而,使用 nobody 的服务越多,该用户关联的文件和进程就越多,从而其潜在权限也逐渐提升。

    3.3.1.2. 用户账户

    用户账户是分配给真实用户的,用于登录和使用系统。每位访问系统的人都应拥有一个唯一的用户账户。这样可以使管理员了解每位用户的操作,并防止用户之间相互干扰配置。

    每位用户可以通过配置默认 shell、编辑器、按键绑定和语言设置等方式,设置适合自己的系统使用环境。

    FreeBSD 系统中的每个用户账户都包含以下信息:

    用户名 用户名是在 login: 提示符处输入的标识。每个用户必须拥有唯一的用户名。创建合法用户名的规则详见 。建议使用不超过八个字符且全部小写的用户名,以保持对旧应用程序的兼容性。

    密码 每个账户都需要设置密码。

    用户 ID(UID) 用户 ID 是用于在 FreeBSD 系统中唯一标识该用户的数字。支持用户名参数的命令会首先将其转换为 UID。建议使用小于 65535 的 UID,因部分软件可能对更大的 UID 兼容性不佳。

    组 ID(GID) 组 ID 是用于唯一标识用户所属主要用户组的数字。组是一种机制,通过 GID(而非 UID)来控制对资源的访问。这可显著减小部分配置文件的体积,并允许用户同时属于多个组。建议使用不超过 65535 的 GID,因更高的 GID 可能会导致某些软件运行异常。

    登录类(Login class) 登录类是组机制的扩展,用于在面向不同用户时提供更大的灵活性。相关内容将在 中进一步讨论。

    密码变更时间 默认情况下,密码不会过期。但也可以为每个用户单独启用密码过期策略,强制其在一段时间后更改密码。

    账户过期时间 FreeBSD 默认不会使账户过期。如需创建具有使用期限的账户(例如学校中的学生账户),可使用 命令指定账户过期时间。若过期,该账户将无法登录,但其目录和文件仍会保留。

    用户全名 用户名是 FreeBSD 用于识别账户的唯一标识,但不一定反映用户的真实姓名。类似注释字段,该信息可以包含空格、大写字符,并超过八个字符。

    家目录 家目录是系统中某个目录的完整路径,是用户登录系统后的起始位置。通常的做法是将所有用户的家目录放在 /home/用户名 或 /usr/home/用户名 下。用户可在其家目录中存储个人文件和子目录。

    用户 shell shell 是用户与系统交互的默认环境。存在多种 shell 类型,有经验的用户通常会有自己的偏好,可以通过账户设置进行配置。

    3.3.1.3. 超级用户账户

    超级用户账户通常称为 root,用于以无限制权限管理系统。因此,不应将其用于日常任务,例如收发邮件、浏览系统和编程。

    与其他用户账户不同,超级用户可以无所限制地操作系统,若误用可能造成严重后果。普通用户的权限则受限,不太可能意外破坏整个系统。因此建议用户使用普通账户进行日常操作,仅在某个命令需要额外权限时再切换为超级用户。

    使用超级用户身份执行命令时应三思而后行,多次确认命令内容,因为一个多余的空格或漏掉的字符都可能导致数据无法恢复。

    获取超级用户权限有多种方式。虽然可以直接以 root 身份登录,但强烈不推荐这么做。

    更好的方式是使用 命令切换为超级用户。如果在执行时指定了 - 参数,用户还会继承 root 用户的环境。执行此命令的用户必须属于 wheel 组,否则命令会失败。此外,还必须知道 root 用户的密码。

    下面的示例中,用户仅为了运行 make install 而临时切换为超级用户。完成后,输入 exit 即可退出超级用户身份并返回普通用户权限。

    示例 1:以超级用户身份安装程序

    内建的 框架适合单一系统或由一位管理员管理的小型网络。另一个选择是安装 软件包或 port。该软件支持操作记录,并允许管理员配置哪些用户可以以超级用户身份运行哪些命令。

    3.3.2. 管理账户

    FreeBSD 提供了多种不同的命令来管理用户账户。最常用的命令已在 中总结,后面还附有一些使用示例。更多细节和使用示例请参考每个工具的手册页。

    表 1. 管理用户账户的工具

    命令
    概要

    3.3.2.1. 添加用户

    推荐使用的添加新用户的程序是 。添加新用户时,此程序会自动更新 /etc/passwd 和 /etc/group。它还会为新用户创建 home 目录,从 /usr/share/skel 复制默认配置文件,并可选地向新用户发送一封欢迎邮件。此工具必须由超级用户运行。

    是交互式的,会逐步引导创建新用户账户。如 所示,输入所需信息或按 Return 接受方括号中的默认值。在此示例中,用户被邀请加入 wheel 组,使其可以通过 成为超级用户。完成后,该工具会提示是创建另一个用户还是退出。

    示例 2. 在 FreeBSD 上添加用户

    输出应类似如下:

    注意

    由于输入密码时不会回显,请在创建用户账户时小心不要输错密码。

    3.3.2.2. 删除用户

    要从系统中彻底删除某用户,请以超级用户身份运行 。该命令会执行以下步骤:

    1. 删除该用户的 项(若有)。

    2. 删除该用户的所有 任务。

    3. 向该用户的所有进程发送 SIGKILL 信号。

    4. 从系统本地密码文件中删除该用户。

    不能用于删除超级用户账户,因为这几乎总是意味着严重破坏。

    默认情况下,该命令以交互模式运行,如下所示:

    示例 3. rmuser 交互式删除账户

    输出应类似如下:

    3.3.2.3. 更改用户信息

    所有用户都可以使用 更改其默认 shell 和账户的个人信息。超级用户可以用此工具更改任意用户的额外账户信息。

    若不带参数(或仅带可选用户名), 会显示一个编辑器用于更改用户信息。用户退出编辑器时,用户数据库将更新为新的信息。

    注意

    除非以超级用户身份运行,否则该工具在退出编辑器时会提示输入用户密码。

    在 一节中,超级用户输入了 chpass jru,正在查看可更改的字段。若 jru 自己运行该命令,仅会显示后六个字段供编辑。这在 中展示。

    示例 4. 以超级用户身份使用 chpass

    输出应类似如下:

    示例 5. 以普通用户身份使用 chpass

    与 是 的链接命令,、 和 也是。由于 NIS 支持是自动的,无需在命令前加 yp。NIS 配置方法见 。

    3.3.2.4. 更改用户密码

    任何用户都可以使用 轻松更改密码。为防止意外或未经授权的更改,该命令在设置新密码前会提示输入原密码:

    示例 6. 更改自己的密码

    输出应类似如下:

    超级用户可以通过指定用户名来更改任意用户的密码。以超级用户身份运行该工具时,不会提示输入当前密码。这可用于用户忘记原密码时更改密码。

    示例 7. 以超级用户身份更改其他用户密码

    输出应类似如下:

    与 一样, 也是 的链接命令,因此 NIS 与这两个命令都兼容。

    3.3.2.5. 创建、删除、修改和显示系统用户与组

    工具可用于创建、删除、修改和显示用户与组。它是系统用户和组文件的前端。 提供了非常强大的命令行选项,适合用于 shell 脚本,但对于新用户来说可能比本节中的其他命令更复杂。

    3.3.3. 管理用户组

    一个用户组是一组用户的列表。一个用户组通过其组名和 GID 来标识。在 FreeBSD 中,内核通过进程的 UID 和其所属的用户组列表来判断该进程被允许执行哪些操作。在大多数情况下,某个用户或进程的 GID 通常指的是该列表中的第一个用户组。

    组名与 GID 的映射关系记录在 /etc/group 中。这个文件是一个纯文本文件,包含四个用冒号分隔的字段。第一个字段是组名,第二个字段是加密密码,第三个字段是 GID,第四个字段是成员的逗号分隔列表。完整的语法描述请参考 。

    超级用户可以使用文本编辑器修改 /etc/group,不过建议使用 进行编辑,因为它可以捕捉一些常见错误。另一种方式是使用 来添加和编辑用户组。例如,要添加一个名为 teamtwo 的用户组并确认其存在:

    警告

    使用 operator 用户组时必须格外小心,因为这可能会授予意想不到的类似超级用户的权限,包括但不限于关机、重启,以及访问该组在 /dev 中的所有条目。

    示例 8:使用 添加用户组

    输出应类似如下:

    在这个例子中,1100 是 teamtwo 的 GID。此时,teamtwo 还没有成员。以下命令将会添加 jru 作为 teamtwo 的成员。

    示例 9:使用 将用户账户添加到一个新用户组中

    输出应类似如下:

    传递给 -M 的参数是一个以逗号分隔的用户列表,用于添加到一个新的(空的)用户组中,或者用于替换现有用户组的全部成员。对用户而言,这种组成员资格不同于密码文件中列出的主用户组(且是额外的)。这意味着使用 的 groupshow 时不会显示该用户,但通过 或类似工具查询信息时则会显示。当使用 将用户添加到组中时,它仅操作 /etc/group,不会从 /etc/passwd 读取其他数据。

    示例 10:使用 向组中添加新成员

    输出应类似如下:

    在这个例子中,传递给 -m 的参数是一个以逗号分隔的用户列表,这些用户将被添加进组中。与前一个示例不同,这些用户是追加添加的,并不会替换已有用户。

    示例 11:使用 来判断用户组成员资格

    输出应类似如下:

    在这个例子中,jru 是 jru 和 teamtwo 这两个用户组的成员。

    关于该命令和 /etc/group 格式的更多信息,请参阅 和 。

    4.4.使用 pkg 管理二进制包

    提供了一个用于操作软件包的接口:注册、添加、删除和升级软件包。

    对于只希望使用 FreeBSD 镜像站提供的预构建二进制包的站点,使用 管理软件包是足够的。

    然而,对于从源代码构建软件的站点,需要一个单独的 。

    由于 只与二进制包一起使用,它不能替代这些工具。那些工具可以用来从二进制包和 Ports 安装软件,而 只安装二进制包。

    4.4.1. 开始使用 pkg

    所有受支持的 FreeBSD 版本现在都包含 /usr/sbin/pkg

    2.8.账户、时区、服务和安全

    2.8.1. 设置 root 密码

    首先,必须设置 root 密码。在输入密码时,屏幕上不会回显正在输入的字符。为防止输入错误,密码需要输入两次。

    图 34. 设置 root 密码

    删除该用户的 home 目录(如果其归用户所有),包括处理通往实际 home 目录路径中的符号链接。

  • 从 /var/mail 中删除属于该用户的邮件文件。

  • 从 /tmp、/var/tmp 和 /var/tmp/vi.recover 中删除所有属于该用户的文件。

  • 从 /etc/group 中所有该用户所属的组中移除用户名。(如果某个组为空,且组名与用户名相同,则该组也会被删除;这是对 adduser(8) 为每个用户创建唯一组的补充。)

  • 删除该用户拥有的所有消息队列、共享内存段和信号量。

  • adduser(8)

    推荐用于添加新用户的命令行应用程序。

    rmuser(8)

    推荐用于删除用户的命令行应用程序。

    chpass(1)

    用于更改用户数据库信息的灵活工具。

    passwd(1)

    用于更改用户密码的命令行工具。

    pw(8)

    可修改用户账户所有方面的强大灵活工具。

    bsdconfig(8)

    带有账户管理支持的系统配置工具。

    passwd(5)
    配置登录类
    pw(8)
    su(1)
    su(1)
    security/sudo
    管理用户账户的工具
    adduser(8)
    adduser(8)
    在 FreeBSD 上添加用户
    su(1)
    rmuser(8)
    crontab(1)
    at(1)
    rmuser(8)
    chpass(1)
    chpass(1)
    以超级用户身份使用 chpass
    以普通用户身份使用 chpass
    chfn(1)
    chsh(1)
    chpass(1)
    ypchpass(1)
    ypchfn(1)
    ypchsh(1)
    网络服务器
    passwd(1)
    chpass(1)
    yppasswd(1)
    passwd(1)
    pw(8)
    pw(8)
    group(5)
    vigr(8)
    pw(8)
    pw(8)
    pw(8)
    pw(8)
    id(1)
    pw(8)
    pw(8)
    id(1)
    pw(8)
    group(5)
    % configure
    % make
    % su -
    Password:
    # make install
    # exit
    %
    # adduser
    Username: jru
    Full name: J. Random User
    Uid (Leave empty for default):   # UID(留空以使用默认值)
    Login group [jru]:               # 登录组
    Login group is jru. Invite jru into other groups? []: wheel
    Login class [default]:          # 登录类
    Shell (sh csh tcsh zsh nologin) [sh]: zsh
    Home directory [/home/jru]:     # home 目录
    Home directory permissions (Leave empty for default):  # home 目录权限(留空使用默认)
    Use password-based authentication? [yes]:             # 使用基于密码的认证?
    Use an empty password? (yes/no) [no]:                 # 使用空密码?
    Use a random password? (yes/no) [no]:                 # 使用随机密码?
    Enter password:                 # 输入密码
    Enter password again:          # 再次输入密码
    Lock out the account after creation? [no]:            # 创建后锁定账户?
    Username   : jru
    Password   : ****
    Full Name  : J. Random User
    Uid        : 1001
    Class      :
    Groups     : jru wheel
    Home       : /home/jru
    Shell      : /usr/local/bin/zsh
    Locked     : no
    OK? (yes/no): yes
    adduser: INFO: Successfully added (jru) to the user database.
    Add another user? (yes/no): no
    Goodbye!
    # rmuser jru
    Matching password entry:
    jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
    Is this the entry you wish to remove? y
    Remove user's home directory (/home/jru)? y
    Removing user (jru): mailspool home passwd.
    # chpass jru
    # 修改 jru 的账户信息数据库
    Login: jru
    Password: *
    Uid [#]: 1001
    Gid [# or name]: 1001
    Change [month day year]:       # 密码更改日期
    Expire [month day year]:       # 账户过期日期
    Class:
    Home directory: /home/jru
    Shell: /usr/local/bin/zsh
    Full Name: J. Random User
    Office Location:               # 办公地点
    Office Phone:                  # 办公电话
    Home Phone:                    # 家庭电话
    Other information:             # 其他信息
    # 修改 jru 的账户信息数据库
    Shell: /usr/local/bin/zsh
    Full Name: J. Random User
    Office Location:               # 办公地点
    Office Phone:                  # 办公电话
    Home Phone:                    # 家庭电话
    Other information:             # 其他信息
    % passwd
    Changing local password for jru.
    Old password:                  # 输入旧密码
    New password:                  # 输入新密码
    Retype new password:           # 再次输入新密码
    passwd: updating the database...
    passwd: done
    # passwd jru
    Changing local password for jru.
    New password:                  # 输入新密码
    Retype new password:           # 再次输入新密码
    passwd: updating the database...
    passwd: done
    # pw groupadd teamtwo
    # pw groupshow teamtwo
    teamtwo:*:1100:
    # pw groupmod teamtwo -M jru
    # pw groupshow teamtwo
    teamtwo:*:1100:jru
    # pw groupmod teamtwo -m db
    # pw groupshow teamtwo
    teamtwo:*:1100:jru,db
    % id jru
    uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
    ,即
    。这是一个小的占位符,仅具有安装真实的
    所需的最小功能。

    注意

    引导过程需要网络连接才能成功。

    运行 pkg(8) 命令行:

    输出应类似于以下内容:

    pkg(7) 将拦截该命令,如果你确认这是你的意图,它将下载 pkg(8) tarball,从中安装 pkg(8),引导本地软件包数据库,然后继续执行你最初请求的命令。

    较新的 pkg(7) 版本理解 pkg -N 作为测试,查看 pkg(8) 是否已安装而不触发安装,反之,使用 pkg bootstrap[-f] 安装 pkg(8)(或强制重新安装)而不执行其他任何操作。

    有关 pkg 使用信息,请参见 pkg(8) 手册页,或运行 pkg 而不带附加参数。其他 pkg 配置选项在 pkg.conf(5) 中有描述。

    每个 pkg 命令参数都在特定的命令手册页中进行了记录。

    例如,要查看 pkg install 的手册页,请运行以下命令:

    本节的其余部分演示了可以使用 pkg(8) 执行的常见二进制软件包管理任务。每个演示的命令都有许多选项,可以自定义其使用方式。请参考命令的帮助或手册页以获取详细信息和更多示例。

    4.4.2. 季度和最新 Ports 分支

    Quarterly 分支为用户提供了更可预测和稳定的 Port 和软件包安装及升级体验。这主要通过只允许非功能性更新来实现。季度分支旨在接收安全修复(这些可能是版本更新,或是提交的回溯)、错误修复和 Port 合规性或框架更改。季度分支在每年的一月、四月、七月和十月的开始从 HEAD 分支切出。分支名称根据它们创建的年份(YYYY)和季度(Q1-4)命名。例如,2023 年一月创建的季度分支命名为 2023Q1。Latest 分支则为用户提供最新版本的软件包。

    要将 pkg(8) 从 Quarterly 切换到 Latest,请运行以下命令:

    然后运行以下命令以更新本地软件包仓库目录以获取 Latest 分支的内容:

    4.4.3. 内核模块仓库

    内核模块仓库能让用户安装可直接使用的内核模块,例如用于图形驱动和特定硬件的模块。从 FreeBSD 14.3 开始,FreeBSD 项目为每个支持的版本提供了预构建的内核模块。若要创建这样的仓库配置(如果尚不存在),请将以下内容添加到 /usr/local/etc/pkg/repos/kmods.conf:

    KMODSFLAVOR 遵循如下模式:kmods_PORTBRANCH_MINORRELEASE。

    例如:

    Kmodsflavor

    FreeBSD 版本
    ports main
    季度 ports

    FreeBSD 14.2-RELEASE

    kmods_latest_2

    kmods_quarterly_2

    FreeBSD 14.3-RELEASE

    kmods_latest_3

    kmods_quarterly_3

    FreeBSD 14.3-STABLE

    kmods_latest

    kmods_quarterly

    FreeBSD 15.0-CURRENT

    kmods_latest

    4.4.4. 配置 pkg

    pkg.conf(5) 是 pkg(8) 工具使用的系统配置文件。该文件的默认位置是 /usr/local/etc/pkg.conf。

    注意

    FreeBSD 不需要 pkg.conf 文件。许多安装在没有 pkg.conf 或者空的 pkg.conf(除了注释行)时也能正常工作。

    以 # 开头的行是注释行,会被忽略。

    该文件采用 UCL 格式。有关 libucl(3) 语法的更多信息,请访问 官方 UCL 网站。

    以下类型的选项是被识别的 - 布尔选项、字符串选项和列表选项。

    如果配置文件中指定以下值之一,则布尔选项被视为启用:YES、TRUE 和 ON。

    4.4.5. 搜索软件包

    要搜索软件包,可以使用 pkg-search(8) 命令:

    输出应该类似于以下内容:

    4.4.6. 安装和获取软件包

    要安装二进制软件包,可以使用 pkg-install(8) 命令。此命令使用仓库数据来确定要安装的软件版本以及是否有任何未安装的依赖项。例如,要安装 curl:

    输出应类似于以下内容:

    新软件包和作为依赖项安装的任何额外软件包可以在已安装软件包列表中查看:

    输出应类似于以下内容:

    要获取软件包并稍后安装或在其他地方安装,可以使用 pkg-fetch(8)。例如,要下载 nginx-lite:

    • -d:用于获取所有依赖项

    • -o:用于指定下载目录

    输出应类似于以下内容:

    要安装下载的软件包,可以使用 pkg-install(8),如下所示:

    4.4.7. 获取已安装软件包的信息

    可以通过运行 pkg-info(8) 来查看系统上已安装的软件包信息。当不带任何选项运行时,它将列出所有已安装的软件包的版本,或者指定的软件包的版本。

    例如,要查看安装的 pkg 版本,可以运行:

    输出应类似于以下内容:

    4.4.8. 升级已安装的软件包

    可以使用 pkg-upgrade(8) 升级已安装的软件包到最新版本:

    此命令将比较已安装版本与仓库目录中可用版本,并从仓库升级它们。

    4.4.9. 审计已安装的软件包

    第三方应用程序中经常发现软件漏洞。为了解决这个问题,pkg 包括了一个内建的审计机制。要检查系统上已安装软件是否存在已知漏洞,可以使用 pkg-audit(8):

    输出应类似于以下内容:

    4.4.10. 移除软件包

    可以使用 pkg-delete(8) 移除不再需要的软件包。

    例如:

    输出应类似于以下内容:

    4.4.11. 自动移除未使用的软件包

    移除一个软件包可能会留下不再需要的依赖项。可以使用 pkg-autoremove(8) 自动检测并移除作为依赖项安装但不再需要的未使用软件包(叶子包):

    输出应类似于以下内容:

    作为依赖项安装的软件包被称为 自动 包。非自动包,即作为独立包而不是作为另一个软件包的依赖项明确安装的软件包,可以通过以下命令列出:

    输出应类似于以下内容:

    pkg prime-list 是在 /usr/local/etc/pkg.conf 中声明的别名命令。还有许多其他命令可用于查询系统的软件包数据库。例如,可以使用命令 pkg prime-origins 获取上述列表的原始 Port 目录:

    输出应类似于以下内容:

    此列表可用于使用构建工具如 ports-mgmt/poudriere 或 ports-mgmt/synth 重新构建系统上安装的所有软件包。

    可以通过以下命令将已安装的软件包标记为自动包:

    待软件包成为叶子包并被标记为自动包,它就会被 pkg autoremove 选中。

    可以通过以下命令将已安装的软件包标记为 非 自动包:

    4.4.12. 移除过时的软件包

    默认情况下,pkg 会将二进制软件包存储在由 pkg.conf(5) 中的 PKG_CACHEDIR 定义的缓存目录中。只保留最新安装的软件包的副本。旧版本的 pkg 会保留所有先前的软件包。要移除这些过时的二进制软件包,可以运行:

    可以通过运行以下命令清空整个缓存:

    4.4.13. 锁定和解锁软件包

    pkg-lock(8) 用于锁定软件包,防止其被重新安装、修改或删除。使用 pkg-unlock(8) 可以解锁已锁定的软件包。这两种操作仅对当前已安装的软件包有效。因此,除非新安装的软件包需要更新已锁定的包,否则无法通过此机制阻止新软件包的安装。

    例如,要锁定 nginx-lite:

    要解锁 nginx-lite:

    4.4.14. 修改软件包元数据

    FreeBSD Ports 中的软件包可能会发生重大版本号变化。为了解决这个问题,pkg 提供了一个内置命令来更新软件包的来源。这个功能在例如将 lang/python3 重命名为 lang/python311 时非常有用,这样 lang/python3 就可以代表版本 3.11。

    要更改上述示例中的软件包来源,可以运行:

    另一个例子是将 lang/ruby31 更新为 lang/ruby32,可以运行:

    然后安装更新后的软件包:

    pkg(8)
    pkg(8)
    Ports 管理工具
    pkg(8)
    pkg(8)
    pkg(7)
    pkg(8)
    2.8.2. 配置网络接口

    接下来,将显示计算机上找到的网络接口列表。选择要配置的接口。

    显示不同网络接口供配置的菜单

    图 35. 选择网络接口

    如果选择以太网接口,安装程序将跳转到菜单选择 IPv4 网络。如果选择无线网络接口,系统将扫描无线接入点:

    显示无线网络扫描的菜单

    图 36. 扫描无线接入点

    无线网络通过服务集标识 (SSID) 进行识别;每个网络都有个简短、独特的名称。在扫描过程中会列出找到的 SSID,然后提供该网络的可用加密类型的概述。如果所需 SSID 未出现在列表中,可选择 Rescan 进行重新扫描。若所需网络仍未出现,请检查天线连接是否存在问题,或尝试将计算机移近接入点。每次更改后都应重新扫描。

    显示不同无线网络供连接的菜单

    图 37. 选择无线网络

    接下来,输入连接到选定无线网络的加密信息。强烈建议使用 WPA2 加密,而不是提供较少安全性的旧加密类型,如 WEP。若网络使用 WPA2,请输入密码,也称为预共享密钥 (PSK)。出于安全原因,输入框中输入的字符将以星号显示。

    请求输入无线网络密码的菜单

    图 38. WPA2 设置

    接下来,选择是否在以太网或无线接口上配置 IPv4 地址:

    指示是否要为选定接口配置 IPv4 的菜单

    图 39. 选择 IPv4 网络

    有两种方法可配置 IPv4。DHCP 会自动正确配置网络接口,如果网络提供了 DHCP 服务器,则应使用。若没有 DHCP 服务器,则需要手动输入地址信息,采用静态配置。

    注意

    请不要乱输网络信息,因为这没用。若没有 DHCP 服务器,请从网络管理员或互联网服务提供商处获取所需网络信息中列出的信息。

    如果可用 DHCP 服务器,请在下一个菜单中选择 Yes 以自动配置网络接口。安装程序会暂停约一分钟,用于查找 DHCP 服务器,获取系统的地址信息。

    指示是否要为选定接口配置 DHCP 的菜单

    图 40. 选择 IPv4 DHCP 配置

    如果没有 DHCP 服务器,请选择 No 并在此菜单中输入以下地址信息:

    请求配置 IPv4 网络的数据的菜单

    图 41.静态 IPv4 配置

    • IP Address——分配给这台计算机的 IPv4 地址。该地址必须是唯一的,不能被局域网上的其他设备使用。

    • Subnet Mask——网络的子网掩码。

    • Default Router——网络默认网关的 IP 地址。

    接下来的界面将询问是否应为接口配置 IPv6。如果 IPv6 可用且需要,请选择 Yes 进行选择。

    指示是否要为选定接口配置 IPv6 的菜单

    图 42. 选择 IPv6 网络

    也有两种方法可配置 IPv6。无状态地址自动配置 (SLAAC) 将自动从本地路由器请求正确的配置信息。更多有关信息,请参阅 rfc4862。静态配置需要手动输入网络信息。

    若 IPv6 路由器可用,请在下个界面中选择 Yes 自动配置网络接口。安装程序会暂停约一分钟,用于查找路由器并获取系统的地址信息。

    指示是否要为选定接口配置 SLAAC 的菜单

    图 43. 选择 IPv6 SLAAC 配置

    如果没有 IPv6 路由器,请选择 No 并在此菜单中输入以下地址信息:

    请求配置 IPv6 网络的数据的菜单

    图 44.静态 IPv6 配置

    • IPv6 Address——分配给这台计算机的 IPv6 地址。该地址必须是唯一的,不能被局域网上的其他设备使用。

    • Default Router——网络默认网关的 IPv6 地址。

    最后一个网络配置菜单用于配置域名系统 (DNS) 解析器,它将主机名转换为网络地址和反向转换。如果使用 DHCP/SLAAC 自动配置了网络接口,Resolver Configuration 值可能已经填写。否则,在 Search 字段中输入本地网络的域名。DNS #1 和 DNS #2 是 DNS 服务器的 IPv4/IPv6 地址。至少需要一个 DNS 服务器。

    请求配置网络 DNS 的数据的菜单

    图 45. DNS 配置

    在接口配置完成后,选择一个位于与 FreeBSD 正在安装的计算机相同区域的镜像站点。当镜像站靠近目标计算机时,可以更快地下载文件,从而减少安装时间。

    技巧

    选择 ftp://download.freebsd.org (Main Site) 将自动路由到最近的镜像。

    请求选择网络镜像的菜单

    图 46. 选择镜像

    2.8.3. 设置时区

    接下来的菜单用于通过选择地理区域、国家/区域和时区来确定正确的本地时间。设置时区可以让系统自动纠正区域时间变化,例如夏令时,并正确执行其他与时区相关的功能。

    下面的示例适用于位于西班牙欧洲大陆时区的机器。选择会根据地理位置而有所不同。

    请求时区区域的菜单

    图 47. 选择区域

    使用方向键选择适当的区域,然后按 回车键。

    请求时区国家/地区的菜单

    图 48. 选择国家/区域

    使用方向键选择适当的国家/区域并按 回车键。

    请求时区的菜单

    图 49. 选择时区

    使用方向键选择适当的时区并按 回车键。

    请求确认所选时区的菜单

    图 50. 确认时区

    确认时区的缩写是否正确。

    请求系统日期的菜单

    图 51. 选择日期

    使用方向键选择适当的日期,然后按 Set Date。还可以通过按 Skip 来跳过日期选择。

    请求系统时间的菜单

    图 52. 选择时间

    使用方向键选择适当的时间,然后按 Set Time。还可以通过按 Skip 来跳过时间选择。

    2.8.4. 启用服务

    下个界面用于配置系统启动时将启动哪些系统服务。所有这些服务都是可选的。只启动系统功能所需的服务。

    显示可用不同服务的菜单

    图 53. 选择要启用的附加服务

    以下是可以在此菜单中启用的服务摘要:

    • local_unbound——启用本机 DNS unbound。请记住,这只是用于本机缓存转发解析器的配置。如果目标是为整个网络设置解析器,请安装 dns/unbound。

    • sshd——安全外壳(SSH)守护进程用于通过加密连接远程访问系统。应仅在允许系统远程登录时才启用此服务。

    • moused——如果要在命令行系统控制台使用鼠标,请启用此服务。

    • ntpdate——启用启动时的自动时钟同步。请注意,该程序的功能现在已在 守护进程中提供,且 工具将很快被弃用。

    • ntpd——网络时间协议(NTP)守护进程,用于自动时钟同步。如果希望将系统时钟与远程时间服务器或池同步,请启用此服务。

    • powerd——系统电源控制实用程序,用于电源控制和节能。

    • dumpdev——崩溃转储在调试系统问题时非常有用,因此建议用户启用它们。

    2.8.5. 启用安全加固选项

    下个菜单用于配置要启用的安全选项。所有这些选项都是可选的,但建议使用。

    显示不同安全加固选项的菜单

    图 54. 选择安全加固选项

    以下是可以在此菜单中启用的选项摘要:

    • hide_uids——隐藏以其他用户(UID)身份运行的进程。防止无权限用户查看其他用户正在运行的进程。

    • hide_gids——隐藏以其他组(GID)身份运行的进程。防止无权限用户查看其他组正在运行的进程。

    • hide_jail——隐藏在 jail 中运行的进程。防止无权限用户查看在 jail 内部运行的进程。

    • read_msgbuf——禁止无权限用户读取内核信息缓冲区。防止无权限用户使用 查看内核日志缓冲区中的信息。

    • proc_debug——禁止无权限用户使用进程调试功能。禁用各种无权限的进程间调试服务,包括某些 procfs 功能、ptrace() 和 ktrace()。请注意,这也会阻止使用诸如 、 和 的调试工具,以及某些脚本语言(如 PHP)中的一些内置调试功能。

    • random_pid——随机化进程的 PID。

    • clear_tmp——在系统启动时清理 /tmp 目录。

    • disable_syslogd——禁用打开 syslogd 网络套接字。在默认情况下,FreeBSD 以安全的方式运行 syslogd——使用 -s。这防止守护进程监听端口 514 上的传入 UDP 请求。启用此选项后,syslogd 将以 -ss 运行,从而阻止 syslogd 打开任何端口。有关更多信息,请参见 。

    • disable_sendmail——禁用 sendmail 邮件传输代理。

    • secure_console——使命令提示符在进入单用户模式时请求 root 密码。

    • disable_ddtrace——DTrace 可以以影响运行内核的模式运行。除非明确启用,否则不允许使用破坏性操作。在使用 DTrace 时,请使用 -w 来启用此选项。有关更多信息,请参见 。

    • enable_aslr——启用地址布局随机化。有关地址布局随机化的更多信息,请参阅。

    2.8.6. 添加用户

    下个界面提示,要创建至少一个用户账户。建议使用用户账户而不要以 root 身份登录系统。在以 root 身份登录时,几乎没有限制和保护措施。以普通用户身份登录更安全。

    选择 Yes 来添加新用户。

    请求是否要向系统添加用户的菜单

    图 55. 添加用户账户

    按照提示输入用户账户的所需信息。示例中所示输入用户信息创建 asample 用户账户。

    请求新用户不同信息的菜单

    图 56. 输入用户信息

    以下是要输入的信息摘要:

    • Username——用户登录时输入的名称。常见的约定是使用名字的首字母与姓氏组合,只要每个用户名在系统中是唯一的。用户名区分大小写,不应包含空格。

    • Full name——用户的全名。可以包含空格,并作为用户账户的概述。

    • Uid——用户 ID。通常留空,以便系统自动分配一个值。

    • Login group——用户的组。通常留空以选用默认值。

    • Invite user into other groups?——用户将作为成员加入的附加组。如果用户需要管理权限,请在此处输入 wheel。

    • Login class——通常留空以选择默认值。

    • Shell——输入所列值之一以设置用户的交互式 shell。有关 shell 的更多信息,请参见 。

    • Home directory——用户的主目录。默认值通常是正确的。

    • Home directory permissions——用户主目录的权限。默认值通常是正确的。

    • Use password-based authentication?——通常选择 yes,以便在登录时提示用户输入密码。

    • Use an empty password?——通常选择 no,因为空/空白密码不安全。

    • Use a random password?——通常选择 no,以便用户在下一个提示中可以设置自己的密码。

    • Enter password——此用户的密码。输入的字符不会在界面上显示。

    • Enter password again——必须再次输入密码以进行验证。

    • Lock out the account after creation?——通常选择 no,以便用户可以登录。

    输入所有详细信息后,将显示摘要以供检查。如果发现错误,输入 no 以进行更正。一切正确后,输入 yes 创建新用户。

    显示新用户信息并请求确认是否正确的菜单

    图 57. 退出用户和组管理

    如果还有更多用户要添加,回答 Add another user? 的问题为 yes。输入 no 可结束添加用户并继续安装。

    有关添加用户和用户管理的更多信息,请参见用户和基本账户管理。

    2.8.7. 最终配置

    在所有内容安装和配置完成后,将提供最后一次修改设置的机会。

    显示在完成安装前进行的不同操作的菜单。例如:添加用户

    图 58. 最终配置

    使用此菜单进行任何更改或进行额外配置,然后完成安装。

    • Add User—— 添加用户中概述。

    • Root Password——在设置 root 密码中概述。

    • Hostname——在设置主机名中概述。

    • Network——在中概述。

    • Services——在中概述。

    • System Hardening——在中概述。

    • Time Zone——在中概述。

    • Handbook——下载、安装 FreeBSD 手册。

    配置完成后,选择 Exit。

    显示安装已完成的菜单,并询问是否要打开 shell 进行手动更改

    图 59. 手动配置

    bsdinstall 会提示需要在重启新系统之前进行的任何额外配置。选择 Yes 以退出到新系统中的 shell,或选择 No 以继续安装的最后一步。

    显示安装已完成并询问是否重启系统或访问 Live CD 的菜单

    图 60. 完成安装

    如果需要进一步的配置或特殊设置,选择 Live CD 以将安装媒体启动为 Live CD 模式。

    如果安装完成,选择 Reboot 以重启计算机,启动新的 FreeBSD 系统。不要忘记移除 FreeBSD 安装媒体,否则计算机可能会再次从中启动。

    当 FreeBSD 启动时,会显示信息信息。系统启动完成后,将显示登录提示。在 login: 提示符下,输入安装过程中添加的用户名。避免以 root 身份登录。有关如何在需要管理访问时成为超级用户的说明,请参见超级用户账户。

    在启动过程中出现的信息可以通过按 Scroll-Lock 来打开回滚缓冲区进行查看。可以使用 PgUp、PgDn 和方向键向上滚动查看信息。完成后,再次按 Scroll-Lock 解锁显示并返回控制台。要在系统运行一段时间后查看这些信息,可以从命令提示符下输入 less /var/run/dmesg.boot。查看后按 q 返回命令行。

    如果在选择要启用的附加服务中启用了 sshd,则第一次启动可能会稍慢,因为系统正在生成 SSH 主机密钥。后续启动会更快。然后将显示密钥的指纹,如以下示例所示:

    有关指纹和 SSH 的更多信息,请参见 OpenSSH。

    FreeBSD 默认不安装图形环境。有关安装和配置图形窗口管理器的更多信息,请参见 X Window 系统。

    正确关闭 FreeBSD 计算机有助于保护数据和硬件免受损坏。在系统没有正确关闭之前,请勿关闭电源! 如果用户是 wheel 组的成员,可以在命令行输入 su,再输入 root 密码以成为超级用户。然后,输入 shutdown -p now,系统可安全关闭,在硬件支持的情况下回自动关机。

    请求输入 root 用户密码的菜单

    译者说明

    术语翻译对照表

    英语
    翻译
    说明

    copyleft

    著佐权

    copyleft 即施加类似于 GPL 这种版权协议的限制,如强制开源等。

    涵盖/涵盖了——>涉及

    允许——>能、能把、能让、把、让、将

    描述——>说明、简介、解释、介绍、讲解、概述、论述、撰写、描写

    一旦——>若、如、如果、假如、xx 后、xx 以后、xx 之后

    The copyleft to 著佐权. The BSD to BSD. The FreeBSD to FreeBSD. The ports to ports. The port to port. The Wrapper to Wrapper. The USB stick to U 盘. The tip to 技巧. The Video Modes to 分辨率. The tarball to 压缩包. The Procedure to 过程. The log rotation to 日志轮替. The Tuning to 调优. Kernel Limits to 内核参数. The jail to jail. The jails to jail. The disk to 磁盘. The bootstrap to 自举. The cluster to 集群/簇. The world to 世界. The reduction to 精选. The Mandatory Access Control to 强制访问控制. The committers to 提交者. The committer to 提交者. The IP masquerading to IP 伪装. The load balancing to 负载均衡. The URL to 网址. The inquiry to 轮询. The USB dongle to USB 适配器. The Ticket to 凭据. The raw device to 裸设备. The image to 镜像. The caution to 当心. The Backspace to 退格键. The keymap to 键盘布局. The key bindings to 组合键. The sticky directories to 目录粘滞位. The fork to 复刻.The hardened to 加固.The Process Accounting to 进程审计. The Disk Organization to 磁盘结构.The issue command to 执行命令.The Patchkit to 补丁包.

    # pkg
    The package management tool is not yet installed on your system.
    Do you want to fetch and install it now? [y/N]
    # pkg help install
    # mkdir -p /usr/local/etc/pkg/repos
    # echo 'FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
    # pkg update -f
    FreeBSD-kmods: {
            url: "pkg+https://pkg.FreeBSD.org/${ABI}/KMODSFLAVOR",
            mirror_type: "srv",
            signature_type: "fingerprints",
            fingerprints: "/usr/share/keys/pkg",
            enabled: yes
    }
    # pkg search nginx
    modsecurity3-nginx-1.0.3       Instruction detection and prevention engine / nginx Wrapper
    nginx-1.22.1_2,3               Robust and small WWW server
    nginx-devel-1.23.2_4           Robust and small WWW server
    nginx-full-1.22.1_1,3          Robust and small WWW server (full package)
    nginx-lite-1.22.1,3            Robust and small WWW server (lite package)
    nginx-naxsi-1.22.1,3           Robust and small WWW server (plus NAXSI)
    nginx-prometheus-exporter-0.10.0_7 Prometheus exporter for NGINX and NGINX Plus stats
    nginx-ultimate-bad-bot-blocker-4.2020.03.2005_1 Nginx bad bot and other things blocker
    nginx-vts-exporter-0.10.7_7    Server that scraps NGINX vts stats and export them via HTTP
    p5-Nginx-ReadBody-0.07_1       Nginx embeded perl module to read and evaluate a request body
    p5-Nginx-Simple-0.07_1         Perl 5 module for easy to use interface for Nginx Perl Module
    p5-Test-Nginx-0.30             Testing modules for Nginx C module development
    py39-certbot-nginx-2.0.0       NGINX plugin for Certbot
    rubygem-passenger-nginx-6.0.15 Modules for running Ruby on Rails and Rack applications
    # pkg install curl
    Updating FreeBSD repository catalogue...
    FreeBSD repository is up to date.
    All repositories are up to date.
    The following 9 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
            ca_root_nss: 3.83
            curl: 7.86.0
            gettext-runtime: 0.21
            indexinfo: 0.3.1
            libidn2: 2.3.3
            libnghttp2: 1.48.0
            libpsl: 0.21.1_4
            libssh2: 1.10.0.3
            libunistring: 1.0
    
    Number of packages to be installed: 9
    
    The process will require 11 MiB more space.
    3 MiB to be downloaded
    
    Proceed with this action? [y/N]
    # pkg info
    ca_root_nss-3.83               Root certificate bundle from the Mozilla Project
    curl-7.86.0                    Command line tool and library for transferring data with URLs
    gettext-runtime-0.21.1         GNU gettext runtime libraries and programs
    indexinfo-0.3.1                Utility to regenerate the GNU info page index
    libidn2-2.3.3                  Implementation of IDNA2008 internationalized domain names
    libnghttp2-1.48.0              HTTP/2.0 C Library
    libpsl-0.21.1_6                C library to handle the Public Suffix List
    libssh2-1.10.0.3               Library implementing the SSH2 protocol
    libunistring-1.0               Unicode string library
    pkg-1.18.4                     Package manager
    # pkg fetch -d -o /usr/home/user/packages/ nginx-lite
    Updating FreeBSD repository catalogue...
    FreeBSD repository is up to date.
    All repositories are up to date.
    The following packages will be fetched:
    
    New packages to be FETCHED:
            nginx-lite: 1.22.1,3 (342 KiB: 22.20% of the 2 MiB to download)
            pcre: 8.45_3 (1 MiB: 77.80% of the 2 MiB to download)
    
    Number of packages to be fetched: 2
    
    The process will require 2 MiB more space.
    2 MiB to be downloaded.
    
    Proceed with fetching packages? [y/N]:
    # cd /usr/home/user/packages/
    # pkg install nginx-lite-1.22.1,3.pkg
    # pkg info pkg
    pkg-1.19.0
    Name           : pkg
    Version        : 1.19.0
    Installed on   : Sat Dec 17 11:05:28 2022 CET
    Origin         : ports-mgmt/pkg
    Architecture   : FreeBSD:13:amd64
    Prefix         : /usr/local
    Categories     : ports-mgmt
    Licenses       : BSD2CLAUSE
    Maintainer     : [email protected]
    WWW            : https://github.com/freebsd/pkg
    Comment        : Package manager
    Options        :
            DOCS           : on
    Shared Libs provided:
            libpkg.so.4
    Annotations    :
            FreeBSD_version: 1301000
            repo_type      : binary
            repository     : FreeBSD
    Flat size      : 33.2MiB
    Description    :
    Package management tool
    
    WWW: https://github.com/freebsd/pkg
    # pkg upgrade
    # pkg audit -F
    Fetching vuln.xml.xz: 100%  976 KiB 499.5kB/s    00:02
    chromium-108.0.5359.98 is vulnerable:
      chromium -- multiple vulnerabilities
      CVE: CVE-2022-4440
      CVE: CVE-2022-4439
      CVE: CVE-2022-4438
      CVE: CVE-2022-4437
      CVE: CVE-2022-4436
      WWW: https://vuxml.FreeBSD.org/freebsd/83eb9374-7b97-11ed-be8f-3065ec8fd3ec.html
    # pkg delete curl
    Checking integrity... done (0 conflicting)
    Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):
    
    Installed packages to be REMOVED:
            curl :7.86.0
    
    Number of packages to be removed: 1
    
    The operation will free 4 MiB.
    
    Proceed with deinstallation packages? [y/N]: y
    [1/1] Deinstalling curl-7.86.0...
    [1/1] Deleting files for curl-7.86.0: 100%
    # pkg autoremove
    Checking integrity... done (0 conflicting)
    Deinstallation has been requested for the following 1 packages:
    
    Installed packages to be REMOVED:
            ca_root_nss-3.83
    
    Number of packages to be removed: 1
    
    The operation will free 723 KiB.
    
    Proceed with deinstalling packages? [y/N]:
    # pkg prime-list
    nginx
    openvpn
    sudo
    # pkg prime-origins
    www/nginx
    security/openvpn
    security/sudo
    # pkg set -A 1 devel/cmake
    # pkg set -A 0 devel/cmake
    # pkg clean
    # pkg clean -a
    # pkg lock nginx-lite
    # pkg unlock nginx-lite
    # pkg set -o lang/python3:lang/python311
    # pkg set -o lang/ruby31:lang/ruby32
    # pkg install -Rf lang/ruby32
    Generating public/private rsa1 key pair.
    Your identification has been saved in /etc/ssh/ssh_host_key.
    Your public key has been saved in /etc/ssh/ssh_host_key.pub.
    The key fingerprint is:
    10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 [email protected]
    The key's randomart image is:
    +--[RSA1 1024]----+
    |    o..          |
    |   o . .         |
    |  .   o          |
    |       o         |
    |    o   S        |
    |   + + o         |
    |o . + *          |
    |o+ ..+ .         |
    |==o..o+E         |
    +-----------------+
    Generating public/private dsa key pair.
    Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
    Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
    The key fingerprint is:
    7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 [email protected]
    The key's randomart image is:
    +--[ DSA 1024]----+
    |       ..     . .|
    |      o  .   . + |
    |     . ..   . E .|
    |    . .  o o . . |
    |     +  S = .    |
    |    +  . = o     |
    |     +  . * .    |
    |    . .  o .     |
    |      .o. .      |
    +-----------------+
    Starting sshd.

    Mandatory Access Control

    强制访问控制

    committers

    提交者

    masquerade

    冒充

    但是 IP masquerading 为 IP 伪装

    remote groups

    异地团体?

    不知道怎么翻译,结合语境远程团队或离岸团队或远程组

    layer 4-7

    第 4-7 层

    load balancing

    负载均衡

    URL

    网址

    Installing Applications: Packages and Ports

    安装应用程序:软件包和 Ports

    glossary

    术语表

    inquiry

    轮询

    connection handle

    连接句柄

    不知道怎么翻译

    channels

    信道

    USB dongle

    USB 适配器

    需要结合语境判断是具体是什么

    Internet

    互联网

    无需加“公开”,互联网在理论上本就是开放的

    Ticket

    凭据

    Wrapper

    Wrapper

    专有名词,维持英文

    Ports Collection

    Ports

    Collection 似乎看起来无用。Ports Collection 实际上就是 Ports,但是单个的软件则为 port

    raw device

    裸设备

    原始设备?

    media

    光盘/设备/介质

    不翻译为不明确的词语“介质”

    PAE(Physical Address Extension)

    物理地址扩展

    embedded boards

    嵌入式板卡

    system

    设备/系统

    MBR

    主引导记录

    GPT

    全局唯一标识分区表

    UEFI

    统一可扩展固件接口

    image

    镜像

    bug

    bug

    专有名词,维持英文

    slices

    分片/切片

    结合语境

    note

    注意

    应该缩进加粗使用

    warning

    警告

    应该缩进加粗使用

    important

    重要

    应该缩进加粗使用

    caution

    当心

    应该缩进加粗使用

    USB stick

    U 盘/优盘

    space

    空格键

    空格键

    Enter

    回车键

    回车键

    Backspace

    退格键

    退格键

    describe

    说明

    tip

    技巧

    应该缩进加粗使用

    keymap

    键盘布局

    fully-qualified

    完全限定

    root-on-ZFS

    使用 ZFS 作为 root 分区/ root 分区使用 ZFS

    advanced users

    专业用户

    print spooler

    打印后台处理程序

    台湾是说法“列印排存器”,列印即打印,排存器不知道是什么东西

    partition schemes

    分区表/分区方案

    stripe

    条带/剥离

    结合具体语境

    drive

    结合语境可能是“磁盘”/驱动器装置/设备

    结合语境

    Distribution Files

    安装文件/分发文件

    结合语境

    Hardening Security

    强化安全性

    scroll-back buffer

    回滚缓冲区

    Network Interfaces

    网络接口/网卡

    Mirror

    镜像站

    build

    构建/编译

    Disk Organization

    磁盘结构

    3.6. Disk Organization

    Video Modes

    分辨率

    key bindings

    组合键

    sticky directories

    目录粘滞位

    tarball

    源码包/压缩文件

    ?

    Quarterly Branche

    季度分支

    Latest Branche

    最新分支

    ports tree

    树无意义,不翻译

    ports skeleton

    ports 框架

    Procedure

    过程

    heckout

    检出

    github 命令参考此处

    log rotation

    日志轮替/日志滚动

    都可以

    fork

    复刻/派生

    github 命令参考此处

    Tuning

    优化/调整/调谐

    # 15.4. 中为“调整”

    Kernel Limits

    内核参数

    内核限制实际上就是内核参数

    boot

    引导

    不是“启动”

    Process Accounting

    进程审计

    “进程记账”看起来不相干。“审计”更符合原意

    hash

    哈希\散列

    有时代指“加密方式”

    Login Classes

    登录分级

    Export Regulations

    出口管制

    principal

    主体

    Kerberos

    realm

    领域

    Kerberos

    hardened

    加固

    如,APK 加固,JAVA 加固

    flag

    标签/标志

    ACL

    programmatic method

    计划任务

    14.10. 监测第三方安全问题

    security advisory

    安全公告

    per-user calls

    每用户调用数

    core files

    核心转储文件

    等于 core dump

    utility

    软件/工具

    实际上就是软件

    jail

    jail

    一般应该小写

    inode

    索引节点

    loopback

    回环

    monitoring

    监控

    issue command

    执行命令

    不是“发出”

    facility

    设施/机制/工具

    Audit Review

    审计复核

    reduction

    精选或精简

    用于安全审计

    disk

    磁盘

    off-site

    离线

    Memory Disks

    内存盘

    用于 18 章,不是闪存设备

    memory-backed disks

    内存盘

    用于 18 章,不是闪存设备

    provider

    provider

    专有名词,A provider is "a disk-like thing which appears in /dev"

    world

    世界

    指除了内核以外的基本系统的所有部分

    sound sink

    声音/音频接收器

    第 7.2 节出现

    bootstrap

    自举

    custom kernel

    定制内核

    stateful firewall

    状态防火墙

    cluster

    集群/族

    ntpd(8)
    ntpdate(8)
    dmesg(8)
    lldb(1)
    truss(1)
    procstat(1)
    syslogd(8)
    dtrace(1)
    维基百科文章
    Shell
    配置网络接口
    启用服务
    启用安全加固选项
    设置时区

    目录

    • FreeBSD 中文手册

    • 编辑日志

    • 译者说明

    • FreeBSD 中文手册

    前言


    第1章 简介

    第2章 安装 FreeBSD

    第3章 FreeBSD 基础

    第4章 安装应用程序:软件包和 Ports

    第5章 X Window 系统

    第6章 FreeBSD 中的 Wayland

    第7章 网络


    第8章 桌面环境

    第9章 多媒体

    第10章 配置 FreeBSD 内核

    第11章 打印

    第12章 Linux 二进制兼容层

    第13章 WINE


    第14章 配置与优化

    第15章 FreeBSD 的引导过程

    第16章 安全

    第17章 jail 与容器

    第18章 强制访问控制

    第19章 安全事件审计

    第20章 存储

    第21章 GEOM: 模块化磁盘转换框架

    第22章 Z 文件系统(ZFS)

    第23章 其他文件系统

    第24章 虚拟化

    第25章 本地化——i18n/L10n 的使用和设置

    第26章 FreeBSD 更新与升级

    第27章 DTrace

    第28章 USB 设备模式/USB OTG


    第29章 串行通信

    第30章 PPP

    第31章 电子邮件

    第32章 网络服务器

    第33章 防火墙

    第34章 高级网络


    附录 A.获取 FreeBSD

    附录 B.书目

    附录 C.网络资源

    附录 D.OpenPGP 密钥


    第一版(2001)
  • 本书的组织结构

  • 本书中使用的一些约定

  • 致谢

  • 2.5.使用 bsdinstall
  • 2.6.分配磁盘空间

  • 2.7.获取安装文件

  • 2.8.账户、时区、服务和安全

  • 2.9.故障排除

  • 2.10.使用 Live CD

  • 3.5.目录结构
  • 3.6.磁盘结构

  • 3.7.文件系统的挂载与卸载

  • 3.8.进程和守护进程

  • 3.9.Shell

  • 3.10.文本编辑器

  • 3.11.设备和设备节点

  • 3.12.手册页

  • 4.5.使用 Ports
  • 4.6.使用 Poudriere 构建软件包

  • 4.7.安装后的注意事项

  • 4.8.如何处理损坏的 port

  • 5.5.配置 X.org
  • 5.6 在 X Window 中使用字体

  • 6.5.Sway 混成器
  • 6.6.使用 Xwayland

  • 6.7.使用 VNC 进行远程连接

  • 6.8.Wayland 登录管理器

  • 6.9.实用工具

  • 7.5.主机名
  • 7.6.DNS

  • 7.7.故障排除

  • 8.5.桌面办公应用
  • 8.6.文档阅读器

  • 8.7.财务

  • 9.5.视频会议
  • 9.6.图像扫描仪

  • 10.5.构建并安装定制内核
  • 10.6.如果发生了错误

  • 11.5.LPD(行式打印机程序)
  • 11.6.其他打印系统

  • 13.5.配置 WINE 安装程序
  • 13.6.WINE 图形化用户管理界面

  • 13.7.多用户 FreeBSD 与 WINE

  • 13.8.FreeBSD 上的 WINE 常见问题

  • 14.5.配置系统日志
  • 14.6.电源和资源管理

  • 14.7.添加交换空间

  • 16.5.安全等级
  • 16.6.文件标志位

  • 16.7.OpenSSH

  • 16.8.OpenSSL

  • 16.9.Kerberos

  • 16.10.TCP 封装器(TCP Wrapper)

  • 16.11.访问控制列表(ACL)

  • 16.12.Capsicum

  • 16.13.进程记账

  • 16.14.资源限制

  • 16.15.监控第三方安全问题

  • 16.16.FreeBSD 安全公告

  • 17.5.瘦 jail
  • 17.6.管理 jail

  • 17.7.更新 jail

  • 17.8.jail 资源限制

  • 17.9.jail 管理器与容器

  • 18.5.可用的 MAC 策略
  • 18.6.用户锁定

  • 18.7.MAC Jail 中的 Nagios

  • 18.8.MAC 框架的故障排除

  • 20.5.创建和使用 CD
  • 20.6.创建和使用 DVD

  • 20.7.创建和使用软盘

  • 20.8.备份的基础知识

  • 20.9.内存盘

  • 20.10.文件系统快照

  • 20.11.磁盘配额

  • 20.12.加密磁盘分区

  • 20.13.加密交换分区

  • 20.14.高可用性存储(HAST)

  • 21.5.软件 RAID 设备
  • 21.6.GEOM Gate 网络设备

  • 21.7.为磁盘设备添加卷标

  • 21.8.通过 GEOM 实现 UFS 日志

  • 22.5.委托管理
  • 22.6.高级主题

  • 22.7.更多资源

  • 22.8.ZFS 特性和术语

  • 24.5.在 FreeBSD 上安装 VirtualBox™
  • 24.6.使用 FreeBSD 上的 QEMU 虚拟化

  • 24.7.使用 FreeBSD 上的 bhyve 虚拟机

  • 24.8.基于 FreeBSD 的 Xen™ 虚拟机

  • 26.5.追踪开发分支
  • 26.6.从源代码更新 FreeBSD

  • 26.7.使用软件包更新 FreeBSD

  • 26.8.多台机器的追踪

  • 26.9.在非 FreeBSD 主机上进行构建

  • 27.5.使用 DTrace
    29.5.拨出服务
  • 29.6.设置串行控制台

  • 30.5.使用 ATM 上的 PPP (PPPoA)
    31.5.修改邮件传输代理
  • 31.6.邮件用户代理

  • 31.7.高级主题

  • 32.5.轻型目录访问协议(LDAP)
  • 32.6.动态主机设置协议(DHCP)

  • 32.7.域名系统(DNS)

  • 32.8.零配置网络(mDNS/DNS-SD)

  • 32.9.Apache HTTP 服务器

  • 32.10.文件传输协议(FTP)

  • 32.11.用于 Microsoft® Windows® 客户端的文件和打印服务(Samba)

  • 32.12.用 NTP 进行时钟同步

  • 32.13.iSCSI target 和 initiator 的配置

  • 33.5.IPFILTER(IPF)
  • 33.6.Blacklistd

  • 34.5.无线自组织(Ad-hoc)模式
  • 34.6.USB 网络共享

  • 34.7.蓝牙

  • 34.8.桥接

  • 34.9.链路聚合与故障转移

  • 34.10.使用 PXE 进行无盘操作

  • 34.11.共用地址冗余协议(CARP)

  • 34.12.VLAN

  • 目录
    概述
    致读者
    第四版
    第三版
    第二版(2004)
    第一部分:快速开始
    1.1.概述
    1.2.欢迎来到 FreeBSD!
    1.3.关于 FreeBSD 项目
    2.1.概述
    2.2.最低硬件要求
    2.3.安装前的准备工作
    2.4.开始安装
    3.1.概述
    3.2.虚拟控制台和终端
    3.3.用户和基本账户管理
    3.4.权限
    4.1.概述
    4.2.软件安装的概述
    4.3.寻找所需的应用程序
    4.4.使用 pkg 管理二进制包
    5.1.概述
    5.2.显卡驱动
    5.3.X Window 系统概览
    5.4.安装 X.org 服务器
    6.1.简介
    6.2.Wayland 概述
    6.3.Wayfire 混成器
    6.4.Hikari 混成器
    7.1.概述
    7.2.设置网络
    7.3.有线网络
    7.4.无线网络
    第二部分:常见任务
    8.1.概述
    8.2.桌面环境
    8.3.浏览器
    8.4.开发工具
    9.1.概述
    9.2.设置声卡
    9.3.音频播放器
    9.4.视频播放器
    10.1.概述
    10.2.为什么要构建定制内核
    10.3.浏览系统硬件
    10.4.配置文件
    11.1.快速入门
    11.2.连接打印机
    11.3.常见的页面描述语言(PDL)
    11.4.直接打印
    12.1.概述
    12.2.配置 Linux 二进制兼容层
    12.3.Linux 用户空间
    12.4.高级主题
    13.1.概述
    13.2.WINE 概述和概念
    13.3.在 FreeBSD 上安装 WINE
    13.4.在 FreeBSD 上运行第一个 WINE 程序
    第三部分:系统管理
    14.1.概述
    14.2.配置文件
    14.3.管理 FreeBSD 中的服务
    14.4.Cron 和 Periodic
    15.1.概述
    15.2.FreeBSD 的引导过程
    15.3.Device Hints
    15.4.关机流程
    16.1.概述
    16.2.简介
    16.3.账户安全
    16.4.入侵检测系统(IDS)
    17.1.概述
    17.2.jail 的类型
    17.3.主机配置
    17.4.传统 jail(厚 jail)
    18.1.概述
    18.2.关键术语
    18.3.了解 MAC 标签
    18.4.规划安全配置
    19.1.概述
    19.2.关键术语
    19.3.审计配置
    19.4.使用审计跟踪
    20.1.概述
    20.2.添加磁盘
    20.3.调整和增加磁盘大小
    20.4.USB 存储设备
    21.1.概述
    21.2.RAID0——条带
    21.3.RAID1——镜像
    21.4.RAID3——带有专用奇偶校验的字节级条带
    22.1.是什么使 ZFS 与众不同
    22.2.快速入门指南
    22.3.zpool 管理
    22.4.zfs 管理
    23.1.概述
    23.2.Linux® 文件系统
    23.3.Windows® 文件系统
    23.4.MacOS® 文件系统
    24.1.概述
    24.2.使用 macOS® 上的 Parallels Desktop 安装 FreeBSD
    24.3.使用 macOS® 上的 VMware Fusion 安装 FreeBSD
    24.4.使用 VirtualBox™ 安装 FreeBSD
    25.1.概述
    25.2.使用本地化
    25.3.寻找 i18n 应用程序
    25.4.特定语言的区域配置
    26.1.概述
    26.2.更新 FreeBSD
    26.3.更新 Bootcode
    26.4.更新文档
    27.1.概述
    27.2.实现上的差异
    27.3.开启 DTrace 支持
    27.4.启用内核外部模块 DTrace
    28.1.概述
    28.2.USB 虚拟串行端口
    28.3.USB 设备模式网络接口
    28.4.USB 虚拟存储设备
    第四部分:网络通讯
    29.1.概述
    29.2.串行术语和硬件
    29.3.终端
    29.4.拨入服务
    30.1.概述
    30.2.配置 PPP
    30.3.PPP 连接的故障排除
    30.4.使用以太网 PPP(PPPoE)
    31.1.概述
    31.2.邮件组件
    31.3.DragonFly 邮件代理(DMA)
    31.4.Sendmail
    32.1.概述
    32.2.inetd 超级服务器
    32.3.网络文件系统(NFS)
    32.4.网络信息系统(NIS)
    33.1.概述
    33.2.防火墙的概念
    33.3.PF
    33.4.IPFW
    34.1.概述
    34.2.网关和路由
    34.3.虚拟主机
    34.4.无线高级身份验证
    第五部分:附录
    A.1.镜像站
    A.2.使用 Git
    A.3.使用 Subversion
    A.4.光盘
    B.1.FreeBSD 相关书籍
    B.2.安全性参考文献
    B.3.UNIX 历史
    B.4.期刊与杂志
    C.1.网站
    C.2.邮件列表
    C.3.Usenet 新闻组
    D.1.官方成员
    术语表
    后记