use*_*428 14 sudo shell symbolic-link ln su
环境:OSX Sierra,Darwin Kernel Version 16.3.0
根本问题:我想在中央存储库中使用一堆 shell 脚本,它们有一个 #!/usr/bin/zsh。在我的 Mac 上,zsh 位于 /bin/zsh 中。
尝试的解决方案:我想创建一个符号链接
ln -s /bin/zsh /usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)
我的用户帐户具有管理员权限,但我不是 root,我不想在这台 Mac 上启用 root 用户。因此我首先做了一个
sudo su
Run Code Online (Sandbox Code Playgroud)
获取具有 root 权限的 shell,然后执行ln命令。但是我仍然收到错误消息ln: /usr/bin/zsh: Operation not allowed。
问题:
为什么我会收到此错误消息?
我需要做什么来创建链接?
有没有更好的方法来实现我最初的目标?请注意,修复 #! 线不是一种选择。
13d*_*tar 18
您收到此消息是因为 Apple 的系统完整性保护。系统完整性保护包括对系统以下部分的保护:
/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X
Run Code Online (Sandbox Code Playgroud)
第三方应用程序和安装程序可以继续写入的路径和应用程序包括:
/Applications
/Library
/usr/local
Run Code Online (Sandbox Code Playgroud)
这意味着您可以简单地在 /usr/local/bin
(它仍然在您的 $PATH 中)。
但是,您似乎特别需要在/usr/bin
. 您可以通过禁用系统完整性保护来实现它(请不要这样做,只需编辑脚本..)。您可以通过以下方式禁用它(我自己还没有测试过!!!):
Click the ? menu.
Select Restart...
Hold down command-R to boot into the Recovery System.
Click the Utilities menu and select Terminal.
Type csrutil disable and press return.
Close the Terminal app.
Click the ? menu and select Restart....
Run Code Online (Sandbox Code Playgroud)