第 1.4 节 Linux 用户迁移指南
FreeBSD 与 Linux 不同之处
FreeBSD 仍然使用古老的 BSD init 而非 systemd;BSD init 与传统的 SysVinit 也不大相同——BSD 没有运行级别(runlevel),也没有
/etc/inittab
,均由 rc 控制。FreeBSD 所有用户 shell 默认均是 sh(14 之前 root 为 csh,普通用户为 sh),而非 bash(如果你喜欢,亦可切换为 bash 或 zsh);
FreeBSD 基本系统几乎不包含任何与 BSD 协议不兼容的软件(你可以自己额外安装)。
思考题
FreeBSD 致力于去 GNU 化,这意味着基本系统不使用 glibc、GCC 等软件。
你认为是 BSD 一直在去 GNU 化,还是 Linux 一直在 GNU 化?
FreeBSD 的用户配置文件和系统配置文件严格分离,即内核和基本系统与第三方应用程序是完全分离的;
FreeBSD 项目是作为一个完整的操作系统维护的,而非内核与 userland 单独维护;也就是说如果你要使用 FreeBSD,那么就只有一个 FreeBSD 可选;
FreeBSD 没有 free 命令也不支持安装这个包(FreeBSD 已不使用 procfs),FreeBSD 基本系统自带的文本编辑器有 ee 和 vi(不是软链接到 vim 的 vi,是真实的 nvi),没有预装 wget,而是 fetch。
参考文献
Comparison of init systems,各大 init 对比图
GPL Software in FreeBSD Base,FreeBSD 基本系统中的 GPL 软件
FreeBSD 的缺陷
FreeBSD 无论社区还是开发者都秉持着“慢就是快,快就是慢”的哲学思想。正因为秉持这一思想,让很多事物不被匆忙对待,有更多的时间来审视一切。但这是一个后工业化的时代,很多人认为“欲速则不达”只是一种落伍的软件工程理论,而更偏好于敏捷开发。
我们的确需要花些时间慢下来,审视自己的一切,无论知识还是自我。花些时间在路旁的花朵石子上面,也许并不是浪费时间,无所事事。FreeBSD 系统总体上不够现代化,缺乏现代操作系统应有的实现,比如 sdio 到了 FreeBSD 13 才有了实现、TCP 堆栈也远远落后于 Linux。
FreeBSD 没有为用户提供一个带 GUI 的基本系统,甚至显卡驱动都需要自己通过 Ports 编译安装(因为 drm 是 GPL,无法进入基本系统,目前在重写);
FreeBSD 的驱动水平较差,直到最近才将将支持 WIFI 6 的网卡,比如 AX210;
FreeBSD 的开发者非常少,这意味着你的 Bug 可能很久都无法得到解决,不是所有软件包都能时刻保持最新版;
FreeBSD 的资料相对较少,中文资料更少,除了本文以外的简体中文资料几乎为 0;
由于 systemd 不兼容 Linux 以外的操作系统,导致很多软件比如 NetworkManager 无法移植,桌面环境的组件也无法完善;
FreeBSD 社区友好度相比普通开源社区仍有所欠缺。
由于 FreeBSD 项目的基本目标和设计问题,FreeBSD 基本系统不包含一般 Linux 中常用的一些软件和命令,比如没有
lspci
、free
。有些可以自己安装,有些则不行;FreeBSD 的两个文件系统 ZFS 与 UFS 都只能扩大不能缩小,一个奇怪的设计;
FreeBSD 缺乏上层应用软件设计,即使底层有类似 docker 的技术 jail 也没能发展起来;FreeBSD 的虚拟化技术 Byhve 也很难用,没有一个前端的 GUI 来控制,设定参数也缺乏一个统一的教程。
我们现在称为容器技术的概念最初出现在 2000 年,当时称为 FreeBSD jail,这种技术可将 FreeBSD 系统分区为多个子系统(也称为 Jail)。Jail 是作为安全环境而开发的,系统管理员可与企业内部或外部的多个用户共享这些 Jail。2001 年,通过 Jacques Gélinas 的 VServer 项目,隔离环境的实施进入了 Linux 领域。在完成了这项针对 Linux 中多个受控制用户空间的基础性工作后,Linux 容器开始逐渐成形并最终发展成了现在的模样。2008 年,Docker 公司凭借与公司同名的容器技术通过 dotCloud 登上了舞台。—— 什么是 Linux 容器?
基本对比
命令替代/软件替代
因为 Linux 广泛使用的也是 GNU 工具,因此只要理论上不是依赖于特定的 Linux 函数库,该工具都可以在 FreeBSD 上运行。
lsusb
lsusb
pkg install usbutils
或 cd /usr/ports/sysutils/usbutils/ && make install clean
显示 USB 信息
粗略地可以用 cat /var/run/dmesg
lspci
pciconf
pkg install pciutils
或 cd /usr/ports/sysutils/pciutils/ && make install clean
显示 PCI 信息
粗略地可以用 cat /var/run/dmesg
lsblk
lsblk
pkg install lsblk
或 cd /usr/ports/sysutils/lsblk/ && make install clean
显示磁盘使用情况
/
free
freecolor
pkg install freecolor
或 cd /usr/ports/sysutils/freecolor/ && make install clean
显示内存使用情况
FreeBSD 未提供 free
命令,因为其依赖 Linux 特性,由包procps
提供,但是 FreeBSD 早已不使用procfs
。如实在需要 free
,可以用 https://github.com/j-keck/free
其他替代命令是 vmstat
lscpu
lscpu
pkg install lscpu
或 cd /usr/ports/sysutils/lscpu/ && make install clean
显示处理器信息
/
glibc
bsdlibc
/
C 库
/
GCC
LLVM + Clang
/
编译器、编译链工具
非要用也可以pkg install gcc
vim
vim
pkg install vim
或 cd /usr/ports/editors/vim/ && make install clean
文本编辑器
FreeBSD 默认的vi
并不被软连接到vim
,而是真正的nvi
wget
wget
pkg install wget
或 cd /usr/ports/ftp/wget/ && make install clean
下载器
系统默认的下载工具是fetch
bash
bash
pkg install bash
或 cd /usr/ports/shells/bash/ && make install clean
shell
系统默认的root shell
是csh
,修改会导致配置输入法环境变量时遇到困难以及可能会无法进入恢复模式
NetworkManager
networkmgr
pkg install networkmgr
或 cd /usr/ports/net-mgmt/networkmgr/ && make install clean
网络连接工具
NetworkManager 依赖 systemd
无法直接移植
lsmod
kldstat
/
列出已加载的内核模块
/
strace
truss
/
跟踪系统调用
/
modprobe
加载内核模块:kldload
、卸载内核模块:kldunload
/
加载内核模块、卸载内核模块
/
最后更新于
这有帮助吗?