前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决mac根路径/只读问题

解决mac根路径/只读问题

原创
作者头像
liliane
修改2023-01-20 16:51:50
8.3K1
修改2023-01-20 16:51:50
举报
文章被收录于专栏:liliane随笔

导语

macOS Catalina 对根路径(/)设置了只读保护机制,以防止意外覆盖关键的操作系统文件。然而,作为开发人员,我们的程序不可避免会有操作 /xxx/xxx 文件的需求,最常见的如写日志,日志要输出到 /data/log/,因为路径不可执行写操作,无法创建对应的日志路径,会报日志文件不存在,尝试手动创建,会提示:Read-only file system。关于该问题,网上有很多文章,但大多无法直接帮助我们解决问题,在此做个记录,希望有所帮助。

基本思路

  1. 关闭完整性保护机制(SIP)
  2. 将具有读写权限的文件夹软链到根路径指定文件夹

为什么关闭 SIP 后,还要创建 links,不应该是直接就能读写根路径?下文会介绍,关闭 SIP 后,大概率还是无法执行写操作,就算能够写,为了保证安全性,最后还是需要打开 SIP,因此,需要通过步骤2,长期解决问题。

下面介绍具体操作和踩坑点,看看为什么如此简单的问题会卡在许多程序员?

关闭完整性保护机制

  1. 重启 mac
  2. 进入 recovery 模式(关于这一点,网上千篇一律,开机时长按:command + r,或者 command + option + r,或者 command + option + shift + r,自己尝试了 n 次,无法生效,最后,在参考文献2中,找到了答案,Apple M1 Mac 进入recovery 模式的方式是,开机长按电源键,直至出现启动选项。
  3. 选择“磁盘工具”,在左上角,选择“实用工具”>“终端”
  4. 进入终端,执行 csrutil disable
  5. 重启 mac
  6. 查看 csrutil status,显示如下,即为关闭 SIP 成功。
代码语言:javascript
复制
System Integrity Protection status: disabled.

看多数文章中的介绍,关闭 SIP 后,可以通过 sudo mount -uw /,重新以可读可写的方式挂载文件系统,它可以将分区挂载到linux的一个文件夹下,从而将分区和该文件夹关联起来,访问这个文件夹就相当于访问这个分区了。但是,重启挂载会失效,需要重新挂载。可以通过“修改/etc/fstab”,来解决重启失效的问题。

然而,在 mac 下,mount -uw /,并不能成功,提示如下:

代码语言:javascript
复制
mount_apfs: volume could not be mounted: Operation not permitted
mount: / failed with 77

无法 mount,就尝试绕道 link 解决。

将具有读写权限路径link到/文件夹

关闭 SIP 后,在用户目录下 mkdir ~/data,尝试 sudo ln -s ~/data /data,发现仍然提示:Read-only file system。

查阅资料发现,mac link到根路径,需要通过修改 /etc/synthetic.conf 实现。例如,将 ~/data 连接到 /data。

sudo vim /etc/synthetic.conf,添加记录如下:

代码语言:javascript
复制
data /Users/$用户名/data

$用户名 为自己的用户名。注意,中间要用 tab 分隔。保存后,查看 / 目录如下:

最后,别忘记重新打开 SIP,方法同步骤1,命令改为 csrutil enable 即可。

参考文献

  1. 关于苹果只读文件系统
  2. 如何解决 command+r 不生效
  3. 解决关闭SIP后仍无法创建文件夹
  4. 如何在根路径创建links文件

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • 基本思路
    • 关闭完整性保护机制
    • 参考文献
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档