MacOS 对 /usr/bin 目录修改权限问题:operation not permitted
MacOS系统中下载文件、新建项目之后,这些文件权限都会默认是只读状态,这时需要简单的一句权限设置命令就可以解决
sudo chmod -R 777 /your_path # 你要修改文件上层目录的路径
但是在对 usr/bin 目录下的文件进行操作的时候往往会出现错误提示:operation not permitted
例如:对 Xvfb 创建软链接,提示的错误信息:
$ sudo ln -s /usr/X11/bin/Xvfb /usr/bin/Xvfb ln: /usr/bin/Xvfb: Operation not permitted
上面的问题,是因为一些MacOS用户在升级系统之后,电脑启用了SIP(System Integrity Protection),增加了rootless机制,导致即使在root权限下依然无法修改文件。
在必要时候,为了能够修改下面的文件,我们只能关闭该保护机制,步骤如下:
1)重启Mac电脑,过程中按住 command+R,进入恢复分区,然后在 "实用工具" 栏找到 "终端启动运行"
2)打开terminal终端,输入 csrutil disable
3)再次重启Mac电脑,即可对 /usr/bin 目录下文件进行修改
例如: sudo ln -s /usr/X11/bin/Xvfb /usr/bin/Xvfb
4)如果要恢复保护机制,重新进入保护模式,输入 csrutil enable
另一种解决方案
原文:Really, really add /usr/local/bin to the PATH variable on macOS
具体操作步骤:
This comment on github provides a way to achieve that.
Open a Terminal window and copy & paste the following command:
sudo launchctl config user path /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
$ sudo launchctl config user path /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin Configuration applied. You must reboot for changes to take effect.
Then Reboot Your Computer.
The command will set the default environment and add /usr/local/bin
to the PATH variable of the system’s default environment. Hence, the executables under /usr/local/bin
are callable from the default configuration.
1、创建临时目录
错误提示信息:
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pyvirtualdisplay/abstractdisplay.py", line 295, in _wait_for_pipe_text
raise XStartError(
pyvirtualdisplay.abstractdisplay.XStartError: Xvfb program closed. command: ['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '800x600x24', '-displayfd', '5'] stderr: b'_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.\n_XSERVTransSocketUNIXCreateListener: mkdir(/tmp/.X11-unix) failed, errno = 2\n_XSERVTransMakeAllCOTSServerListeners: failed to create listener for local\n_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.\n_XSERVTransSocketUNIXCreateListener: mkdir(/tmp/.X11-unix) failed, errno = 2\n_XSERVTransMakeAllCOTSServerListeners: failed to create listener for local\n_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.\n_XSERVTransSocketUNIXCreateListener: mkdir(/tmp/.X11-unix) failed, errno =
解决办法:
sudo mkdir -p /tmp/.X11-unix
2、对临时目录授权
错误提示信息:
line 295, in _wait_for_pipe_text
raise XStartError(
pyvirtualdisplay.abstractdisplay.XStartError: Xvfb program closed. command: ['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '800x600x24', '-displayfd', '5'] stderr: b'_XSERVTransmkdir: ERROR: Owner of /tmp/.X11-unix must be set to root\n_XSERVTransSocketUNIXCreateListener: mkdir(/tmp/.X11-unix) failed, errno = 1\n_XSERVTransMakeAllCOTSServerListeners: failed to create listener for local\n_XSERVTransmkdir: ERROR: Owner of /tmp/.X11-unix must be set to root\n_XSERVTransSocketUNIXCreateListener: mkdir(/tmp/.X11-unix) failed, errno = 1\n_XSERVTransMakeAllCOTSServerListeners: failed to create listener for local\n_XSERVTransmkdir: ERROR: Owner of /tmp/.X11-unix must be set to
查看临时目录权限:
$ ls -al /tmp/ total 48 drwxrwxrwt 15 root wheel 480 12 17 18:23 . drwxr-xr-x 6 root wheel 192 5 20 2020 .. drwxrwxrwt 2 homer wheel 64 12 17 18:22 .X11-unix drwx------ 3 homer wheel 96 12 17 18:16 .vnc-501
由上可见, /tmp/.X11-unix 临时目录的所有者为 homer 不是root
解决办法:
sudo chown root:wheel /tmp/.X11-unix
然后,再次查看 /tmp/.X11-unix 临时目录权限
$ ls -al /tmp/ total 48 drwxrwxrwt 15 root wheel 480 12 17 18:24 . drwxr-xr-x 6 root wheel 192 5 20 2020 .. drwxrwxrwt 2 root wheel 64 12 17 18:22 .X11-unix drwx------ 3 homer wheel 96 12 17 18:16 .vnc-501
由上可见, /tmp/.X11-unix 临时目录的所有者为 root ,问题解决!
知识拓展
Mac OS 更新到X 11后,El Capitan 加入了Rootless机制,用来对抗恶意程序的破坏。
但是,却不能够再随便的读写类似/usr/bin的很多路径,即便设置 root 权限同样不可以。
Rootless 机制是对抗恶意程序的最后防线,除非特殊需要时我们才将其关闭,否则保持开启状态。
csrutil 命令参数格式:
csrutil enable [--without kext | fs | debug | dtrace | nvram][--no-internal]
等同于csrutil enable –without kext –without fs –without debug –without dtrace –without nvram) B0: [kext] 允许加载不受信任的kext(与已被废除的kext-dev-mode=1等效) B1: [fs] 解锁文件系统限制 B2: [debug] 允许task_for_pid()调用 B3: [n/a] 允许内核调试 (官方的csrutil工具无法设置此位) B4: [internal] Apple内部保留位(csrutil默认会设置此位,实际不会起作用。设置与否均可) B5: [dtrace]解锁dtrace限制 B6: [nvram] 解锁NVRAM限制
csrutil 禁用命令: csrutil disable
csrutil 启用命令: csrutil enable
参考推荐:
苹果电脑 MacBook Pro 连接WIFI 经常断线的解决方法
Linux / MacOS 修改 ls 显示年月日的时间格式
macOS 制作 Catalina 系统的U盘启动安装盘教程
MacBookPro 使用 Time Machine 备份系统实践
MacBookPro 使用 Time Machine 时间机器备份系统
Macbook Pro 如何清空/修改最近路径列表 Recent Places 数量
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2020-12-21 18:02:59
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: MacOS 对 /usr/bin 目录修改权限问题:operation not permitted (米扑博客)