如何在 Mac 上的 /usr/bin 中创建符号链接?

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)

  • 你没有抓住重点:提问者有脚本指定 `#!/usr/bin/zh` 作为 shell,所以他寻求的解决方案是将此位置链接到 shell 实际驻留的位置,但正如你所说,他是防止这样做。除非绕过保护,唯一的解决方案似乎是批量编辑脚本。 (2认同)