FreeBSD 快速入门指南(面向 Linux® 用户)

商标

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

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

Intel、Celeron、Centrino、Core、EtherExpress、i386、i486、Itanium、Pentium 和 Xeon 是英特尔公司及其在美国和其他国家/地区的子公司的商标或注册商标。

Linux 是 Linus Torvalds 的注册商标。

UNIX 是 The Open Group 在美国和其他国家/地区的注册商标。

制造商和销售商用来区分其产品的许多名称被宣称为商标。当这些名称出现在本文件中,并且 FreeBSD 项目知道商标声明时,这些名称后面会加上“™”或“®”符号。

摘要

本文档旨在帮助中级到高级 Linux® 用户快速熟悉 FreeBSD 的基础知识。


1. 绪论

本文档重点介绍了 FreeBSD 和 Linux® 之间的一些技术差异,以便中级到高级 Linux® 用户能够快速熟悉 FreeBSD 的基础知识。

本文档假设 FreeBSD 已经安装。有关安装过程的帮助,请参阅 FreeBSD 手册的 安装 FreeBSD 章。

2. 默认 Shell

Linux® 用户经常惊讶地发现 Bash 不是 FreeBSD 中的默认 Shell。事实上,Bash 不包含在默认安装中。相反,Bourne Shell 兼容的 sh(1) 作为默认用户 Shell。在 FreeBSD 13 及更早版本中,root Shell 默认是 tcsh(1),而在 FreeBSD 14 及更高版本中,root Shell 是 sh(1)sh(1) 与 Bash 非常相似,但功能集要小得多。通常,为 sh(1) 编写的 Shell 脚本可以在 Bash 中运行,但反过来并非总是如此。

但是,Bash 和其他 Shell 可使用 FreeBSD 包和端口集合 进行安装。

安装另一个 Shell 后,使用 chsh(1) 更改用户的默认 Shell。建议不要更改 root 用户的默认 Shell,因为未包含在基本发行版中的 Shell 会安装到 /usr/local/bin。如果出现问题,则 /usr/local/bin 所在的文件系统可能无法挂载。在这种情况下,root 将无法访问其默认 Shell,从而阻止 root 登录并解决问题。

3. 包和端口:在 FreeBSD 中添加软件

FreeBSD 提供两种安装应用程序的方法:二进制包和编译端口。每种方法都有自己的优点

二进制包
  • 与编译大型应用程序相比,安装速度更快。

  • 不需要了解如何编译软件。

  • 无需安装编译器。

端口
  • 能够自定义安装选项。

  • 可以应用自定义补丁。

如果应用程序安装不需要任何自定义,则安装包就足够了。如果应用程序需要自定义默认选项,则改为编译端口。如果需要,可以使用 make package 从端口编译自定义包。

所有可用端口和包的完整列表可以在这里找到 这里

3.1. 包

包是预编译的应用程序,是 FreeBSD 中的等效项,类似于基于 Debian/Ubuntu 系统上的 .deb 文件和基于 Red Hat/Fedora 系统上的 .rpm 文件。包使用 pkg 安装。例如,以下命令安装 Apache 2.4

# pkg install apache24

有关包的更多信息,请参阅 FreeBSD 手册的第 5.4 节:使用 pkgng 进行二进制包管理

3.2. 端口

FreeBSD 端口集合是一个框架,其中包含专门针对在 FreeBSD 上从源代码安装应用程序而自定义的 Makefiles 和补丁。安装端口时,系统将获取源代码,应用任何所需的补丁,编译代码并安装应用程序和任何所需的依赖项。

端口集合,有时也称为端口树,可以使用 Git 安装到 /usr/ports。在 FreeBSD 手册的第 4.5.1 节 中可以找到有关安装端口集合的详细说明。

要编译端口,请更改到端口的目录并启动构建过程。以下示例从端口集合安装 Apache 2.4

# cd /usr/ports/www/apache24
# make install clean

使用端口安装软件的好处是可以自定义安装选项。此示例指定还应安装 mod_ldap 模块

# cd /usr/ports/www/apache24
# make WITH_LDAP="YES" install clean

有关更多信息,请参阅 使用端口集合

4. 系统启动

许多 Linux® 发行版使用 SysV init 系统,而 FreeBSD 使用传统的 BSD 风格的 init(8)。在 BSD 风格的 init(8) 下,没有运行级别,并且 /etc/inittab 不存在。相反,启动由 rc(8) 脚本控制。在系统启动时,/etc/rc 读取 /etc/rc.conf/etc/defaults/rc.conf 以确定要启动哪些服务。然后,通过运行位于 /etc/rc.d//usr/local/etc/rc.d/ 中的相应服务初始化脚本,启动指定的服务。这些脚本类似于 Linux® 系统上位于 /etc/init.d/ 中的脚本。

位于 /etc/rc.d/ 中的脚本用于属于“基本”系统的应用程序,例如 cron(8)sshd(8)syslog(3)。位于 /usr/local/etc/rc.d/ 中的脚本用于用户安装的应用程序,例如 Apache 和 Squid。

由于 FreeBSD 是作为完整的操作系统开发的,因此用户安装的应用程序不被视为是“基本”系统的一部分。用户安装的应用程序通常使用 包或端口 安装。为了将它们与基本系统分开,用户安装的应用程序安装在 /usr/local/ 下。因此,用户安装的二进制文件驻留在 /usr/local/bin/ 中,配置文件位于 /usr/local/etc/ 中,等等。

通过在 /etc/rc.conf 中添加服务的条目,可以启用服务。系统默认值位于 /etc/defaults/rc.conf 中,这些默认设置将被 /etc/rc.conf 中的设置覆盖。有关可用条目的更多信息,请参阅 rc.conf(5)。安装其他应用程序时,请查看应用程序的安装消息以确定如何启用任何关联服务。

以下 /etc/rc.conf 条目启用 sshd(8),启用 Apache 2.4 并指定 Apache 应以 SSL 启动。

# enable SSHD
sshd_enable="YES"
# enable Apache with SSL
apache24_enable="YES"
apache24_flags="-DSSL"

/etc/rc.conf 中启用服务后,无需重新启动系统即可启动它

# service sshd start
# service apache24 start

如果服务未启用,则可以使用 onestart 从命令行启动它

# service sshd onestart

5. 网络配置

Linux® 使用通用 ethX 标识符来标识网络接口,而 FreeBSD 使用驱动程序名称后跟一个数字。来自 ifconfig(8) 的以下输出显示了两个 Intel® Pro 1000 网络接口 (em0em1)

% ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
        ether 00:50:56:a7:70:b2
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
        ether 00:50:56:a7:03:2b
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active

可以使用 ifconfig(8) 为接口分配 IP 地址。要使配置在重新启动后保持持久性,必须将 IP 配置包含在 /etc/rc.conf 中。以下 /etc/rc.conf 条目指定了主机名、IP 地址和默认网关

hostname="server1.example.com"
ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
defaultrouter="10.10.10.1"

使用以下条目来配置 DHCP 接口

hostname="server1.example.com"
ifconfig_em0="DHCP"

6. 防火墙

FreeBSD 不使用 Linux® IPTABLES 作为其防火墙。相反,FreeBSD 提供三种内核级防火墙可供选择

PF 由 OpenBSD 项目开发,并移植到 FreeBSD。PF 是为了替代 IPFILTER 而创建的,其语法类似于 IPFILTER。PF 可以与 altq(4) 配合使用以提供 QoS 功能。

此示例 PF 条目允许传入 SSH

pass in on $ext_if inet proto tcp from any to ($ext_if) port 22

IPFILTER 是由 Darren Reed 开发的防火墙应用程序。它不特定于 FreeBSD,并且已移植到多个操作系统,包括 NetBSD、OpenBSD、SunOS、HP/UX 和 Solaris。

允许传入 SSH 的 IPFILTER 语法是

pass in on $ext_if proto tcp from any to any port = 22

IPFW 是由 FreeBSD 开发和维护的防火墙。它可以与 dummynet(4) 配合使用,以提供流量整形功能并模拟不同类型的网络连接。

允许传入 SSH 的 IPFW 语法将是

ipfw add allow tcp from any to me 22 in via $ext_if

7. 更新 FreeBSD

更新 FreeBSD 系统有两种方法:从源代码更新或二进制更新。

从源代码更新是最复杂的一种更新方法,但它提供了最大的灵活性。该过程涉及将本地 FreeBSD 源代码副本与 FreeBSD Git 存储库同步。本地源代码更新后,可以编译新的内核和用户空间版本。

二进制更新类似于使用 yumapt-get 更新 Linux® 系统。在 FreeBSD 中,freebsd-update(8) 可用于获取新的二进制更新并安装它们。这些更新可以使用 cron(8) 安排。

使用 cron(8) 安排更新时,在 crontab(1) 中使用 freebsd-update cron 以降低大量机器同时拉取更新的可能性。

0 3 * * * root /usr/sbin/freebsd-update cron

有关源代码和二进制更新的更多信息,请参阅 FreeBSD 手册中 关于更新的章节

8. procfs:已消失但未被遗忘

在某些 Linux® 发行版中,可以查看 /proc/sys/net/ipv4/ip_forward 以确定是否启用了 IP 转发。在 FreeBSD 中,sysctl(8) 用于查看此设置和其他系统设置。

例如,使用以下命令确定 FreeBSD 系统上是否启用了 IP 转发

% sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0

使用 -a 列出所有系统设置

% sysctl -a | more

如果应用程序需要 procfs,请在 /etc/fstab 中添加以下条目

proc                /proc           procfs  rw,noauto       0       0

包括 noauto 将阻止 /proc 在启动时自动挂载。

要挂载文件系统而不重启

# mount /proc

9. 常用命令

以下是一些常用命令的等效项

Linux® 命令(Red Hat/Debian)FreeBSD 等效项目的

yum install package / apt-get install package

pkg install package

从远程仓库安装软件包

rpm -ivh package / dpkg -i package

pkg add package

安装本地软件包

rpm -qa / dpkg -l

pkg info

列出已安装的软件包

lspci

pciconf

列出 PCI 设备

lsmod

kldstat

列出已加载的内核模块

modprobe

kldload / kldunload

加载/卸载内核模块

strace

truss

跟踪系统调用

10. 结论

本文概述了 FreeBSD。有关这些主题以及本文未涵盖的许多主题的更深入的介绍,请参阅 FreeBSD 手册


最后修改时间:2024 年 8 月 14 日,由 Wolfram Schneider 修改