跳到主要内容

在根目录创建文件

前言

根分区自 macOS 10.15(Catalina)起只读,无法直接在 / 下创建文件或目录。官方提供 /etc/synthetic.conf,由内核在启动早期合成虚拟软链接或空目录到根目录(常用于为包管理器建立根目录),详见 man synthetic.conf

synthetic.conf 配置示例

编辑 /etc/synthetic.conf(以 vim 为例,文件不存在会自动创建):

sudo vim /etc/synthetic.conf

写入示例内容创建软链接:

data Users/$USER_NAME/data
data1 Users/$USER_NAME/data1
注意
每行的两项配置前面都不能加 “/”(可以理解系统会帮我们加前缀“/”)。
“data” 与 Users/$USER_NAME/data 之间一定要使用 TAB 进行分隔,否则重启后无效。如果指定目录(如 Users/$USER_NAME/data)不存在记得创建。
示例中的 $USER_NAME 是用户名的意思,别忘记替换为自己用户名,如 foo。
记得重启Mac。

重启后用 ls -l / 查看,根目录下会出现两个软链接目录:

$ ls -l /

...
lrwxr-xr-x 1 root wheel 46 7 24 13:34 data -> Users/ituknown/data
lrwxr-xr-x 1 root wheel 46 7 24 13:34 data1 -> Users/ituknown/data1

synthetic.conf 配置不生效?

如果发现 /data 目录没有被创建,那么一定要仔细检查下你的 /etc/synthetic.conf 文件里的 Tab 分隔符是否被正确配置了。

NOTE
有的机器的 vim 配置了 set expandtab,导致Tab被自动转换成了多个空格。

可在插入模式下先按 CTRL+V 再按 TAB 输入真实 Tab。用 xxd 查看:Tab 的 ASCII 码是 09,空格是 20

以下面的配置为例:

$ cat synthetic.conf
data Users/ituknown/Downloads/data

vim 配置了 set expandtab,导致 TAB 键被替换为空格:

$ xxd /etc/synthetic.conf
00000000: 6461 7461 2020 2020 5573 6572 732f 6974 data Users/it
00000010: 756b 6e6f 776e 2f44 6f77 6e6c 6f61 6473 uknown/Downloads
00000020: 2f64 6174 610a /data.

注意第一行的 2020 2020,TAB 被替换成了 4 个空格。

现在重新使用 vim 编辑配置文件:

sudo vim /etc/synthetic.conf

进入插入模式删掉空格后,按 CTRL+V 进入字面字符输入模式(vim 左下角可能显示 ^),再按 TAB 插入真实 Tab。

保存之后再使用 xxd 命令查看下:

$ xxd /etc/synthetic.conf
00000000: 6461 7461 0955 7365 7273 2f69 7475 6b6e data.Users/itukn
00000010: 6f77 6e2f 446f 776e 6c6f 6164 732f 6461 own/Downloads/da
00000020: 7461 0a ta.

注意看第一行出现了 0955,其中 09 表示的就是 TAB 键!