# pkg install apache24
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
有关包的更多信息,请参阅 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 网络接口 (em0 和 em1)
% 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 存储库同步。本地源代码更新后,可以编译新的内核和用户空间版本。
二进制更新类似于使用 yum
或 apt-get
更新 Linux® 系统。在 FreeBSD 中,freebsd-update(8) 可用于获取新的二进制更新并安装它们。这些更新可以使用 cron(8) 安排。
使用 cron(8) 安排更新时,在 crontab(1) 中使用 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 等效项 | 目的 |
---|---|---|
|
| 从远程仓库安装软件包 |
|
| 安装本地软件包 |
|
| 列出已安装的软件包 |
|
| 列出 PCI 设备 |
|
| 列出已加载的内核模块 |
|
| 加载/卸载内核模块 |
|
| 跟踪系统调用 |
10. 结论
本文概述了 FreeBSD。有关这些主题以及本文未涵盖的许多主题的更深入的介绍,请参阅 FreeBSD 手册。
最后修改时间:2024 年 8 月 14 日,由 Wolfram Schneider 修改