FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • 编辑日志
  • FreeBSD 中文文章翻译项目
  • 参与 FreeBSD
  • 提交者指南
  • 构建你自己的 FreeBSD 更新服务器
  • 使用 FreeBSD 开发产品
  • FreeBSD 上的打印服务器(CUPS)
  • FreeBSD 虚拟内存系统设计要素
  • BSD 简介
  • 桥接过滤器
  • 字体与 FreeBSD
  • 面向 FreeBSD 和 UNIX® 的新用户的简介
  • FreeBSD 和固态硬盘
  • FreeBSD 许可政策
  • 面向 Linux® 用户的 FreeBSD 快速入门指南
  • FreeBSD 发布工程
  • FreeBSD 状态报告流程
  • FreeBSD 对闰秒的支持
  • FreeBSD 邮件列表常见问题
  • 如何从 FreeBSD-questions 邮件列表中获得最佳结果
  • 在台机上实现 UFS 日志功能
  • 对 FreeBSD 中 IPsec 功能的独立验证
  • NanoBSD 简介
  • LDAP 身份验证
  • FreeBSD 中的 Linux® 仿真
  • 旧版 FreeBSD 发布工程
  • 镜像 FreeBSD
  • 可插拔认证模块(PAM)
  • Port 导师指南
  • BSD 中的实用 rc.d 脚本编程
  • 问题报告处理指南
  • 在没有远程控制台的情况下远程安装 FreeBSD 操作系统
  • 串口和 UART 教程
  • vinum 卷管理器
  • 使用 FreeBSD 源代码树中的语言服务器进行开发
  • IPsec VPN
  • 为什么要为开源项目选用类 BSD 许可证?
  • 编写 GEOM 类
  • 编写 FreeBSD 问题报告
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 摘要
  • 1. 介绍
  • 2. 默认 Shell
  • 3. Port 和包:在 FreeBSD 中添加软件
  • 3.1. 包
  • 3.2. Port
  • 4. 系统启动
  • 5. 网络配置
  • 6. 防火墙
  • 7. 更新 FreeBSD
  • 8. procfs: 已消失但未被遗忘
  • 9. 常见命令
  • 10. 结论
在GitHub上编辑
导出为 PDF

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

上一页FreeBSD 许可政策下一页FreeBSD 发布工程

最后更新于22小时前

  • 原文:

摘要

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

1. 介绍

本文档突出了 FreeBSD 和 Linux® 之间的一些技术差异,以帮助中级到高级的 Linux® 用户快速熟悉 FreeBSD 的基础知识。

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

2. 默认 Shell

Linux® 用户通常会感到惊讶,因为 FreeBSD 中的默认 shell 不是 Bash。事实上,Bash 并未包含在默认系统中。相反,FreeBSD 使用与 Bourne shell 兼容的 作为默认用户 shell。对于 FreeBSD 13 及之前版本,root 用户的默认 shell 是 ,而对于 FreeBSD 14 及之后版本,则是 。虽然 与 Bash 十分相似,但其功能集要小得多。通常,为 编写的 shell 脚本可以在 Bash 中运行,但反之并不总是成立。

不过,可以通过 FreeBSD 的 来安装 Bash 和其他 shell。

安装了其他 shell 后,可以使用 来更改用户的默认 shell。建议不要更改 root 用户的默认 shell,因为不包含在基础发行版中的 shell 是安装到 /usr/local/bin 目录下的。如果出现问题,可能会导致包含 /usr/local/bin 的文件系统未挂载,在这种情况下,root 用户将无法访问默认 shell,无法登录并修复问题。

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

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

二进制包

  • 相比编译大型应用程序,安装速度更快。

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

  • 不需要安装编译器。

Port

  • 可以自定义安装选项。

  • 可以应用自定义补丁。

如果应用程序的安装无需任何定制,安装二进制包即可。如果应用程序需要定制默认选项,则应编译 Port。必要时,可以通过 make package 从 Port 编译自定义包。

3.1. 包

包是预编译的应用程序,相当于基于 Debian/Ubuntu 系统的 .deb 文件和基于 Red Hat/Fedora 系统的 .rpm 文件。包通过 pkg 安装。例如,以下命令安装 Apache 2.4:

# pkg install apache24

3.2. Port

FreeBSD Ports 是一套专门为从源代码安装应用程序而定制的 Makefile 和补丁框架。在安装 Port 时,系统会获取源代码、应用所需的补丁、编译代码,并安装应用程序及其所需的依赖项。

要编译一个 Port,请切换到该 Port 的目录并启动构建过程。以下示例展示了如何从 Ports 安装 Apache 2.4:

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

使用 Port 安装软件的一个好处是能够自定义安装选项。例如,以下命令指定还要安装 mod_ldap 模块:

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

4. 系统启动

# 启用 SSHD
sshd_enable="YES"
# 启用带 SSL 的 Apache
apache24_enable="YES"
apache24_flags="-DSSL"

只要在 /etc/rc.conf 中启用了服务,就可以在不重启系统的情况下启动它:

# service sshd start
# service apache24 start

如果某个服务尚未启用,则可以通过命令行使用 onestart 启动它:

# service sshd onestart

5. 网络配置

% 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
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 防火墙,而是提供了三种内核级防火墙的选择:

以下是允许入站 SSH 的 PF 示例条目:

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

允许入站 SSH 的 IPFW 语法如下:

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

7. 更新 FreeBSD

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

从源代码更新是最复杂的更新方法,但却是最灵活的。该过程涉及将本地的 FreeBSD 源代码副本与 FreeBSD Git 仓库同步。在本地源代码更新到最新版本后,就可以编译新的内核和用户空间。

注意

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

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

例如,使用以下命令来确定 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. 结论

可以在 找到所有可用的 Port 和包的完整列表。

有关包的更多信息,请参考 FreeBSD 手册第 5.4 章:。

Ports 有时也称为 Ports 树,可以使用 安装到 /usr/ports。有关安装 Ports 的详细说明,请参见 FreeBSD 手册第 4.5.1 节。

有关更多信息,请参考 章节。

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

/etc/rc.d/ 中的脚本用于那些属于“基本”系统的应用程序,如 、 和 。/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 中的设置进行覆盖。有关可用条目的更多信息,请参见 。安装附加应用程序时,请查看应用程序的安装信息,以确定如何启用相关服务。

以下是 /etc/rc.conf 中的条目,启用 ,启用 Apache 2.4,并指定 Apache 应该以 SSL 启动。

与 Linux® 使用通用的 ethX 标识符来识别网络接口不同,FreeBSD 使用驱动程序名称后跟数字的方式来标识网络接口。以下是 输出的两个 Intel® Pro 1000 网络接口(em0 和 em1)的示例:

可以使用 为接口分配 IP 地址。为了在重启后保持配置不变,必须将 IP 配置包含在 /etc/rc.conf 中。以下是 /etc/rc.conf 中的条目,指定了主机名、IP 地址和默认网关:

PF 由 OpenBSD 项目开发,并移植到 FreeBSD。PF 作为 IPFILTER 的替代品创建,语法与 IPFILTER 类似。PF 可以与 配合使用,提供 QoS 特性。

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

二进制更新类似于使用 yum 或 apt-get 更新 Linux® 系统。在 FreeBSD 中,可以使用 获取新的二进制更新并安装它们。这些更新可以使用 定时。

在使用 定时更新时,请使用 freebsd-update cron 在 中,减少多个机器同时拉取更新的可能性:

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

在一些 Linux® 发行版中,可以通过查看 /proc/sys/net/ipv4/ip_forward 来确定是否启用了 IP 转发。而在 FreeBSD 中,则使用 来查看此项以及其他系统设置。

本文提供了 FreeBSD 的概述。有关这些主题的更深入内容以及本文未涵盖的许多主题,请参考 。

FreeBSD Quickstart Guide for Linux® Users
安装 FreeBSD
sh(1)
tcsh(1)
sh(1)
sh(1)
sh(1)
Port 和包
chsh(1)
这里
使用 pkgng 进行二进制包管理
Git
使用 Ports
init(8)
init(8)
rc(8)
cron(8)
sshd(8)
syslog(3)
Port 和包
rc.conf(5)
sshd(8)
ifconfig(8)
ifconfig(8)
PF
IPFILTER
IPFW
altq(4)
dummynet(4)
freebsd-update(8)
cron(8)
cron(8)
crontab(1)
更新章节
sysctl(8)
FreeBSD 手册