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


11

环境:OSX Sierra,达尔文内核版本16.3.0

根本问题:我想在中央存储库中使用一堆shell脚本,这些脚本具有#!/ usr / bin / zsh。在我的Mac上,zsh位于/ bin / zsh中。

尝试的解决方案:我想创建一个符号链接

ln -s /bin/zsh /usr/bin/zsh

我的用户帐户具有管理员权限,但是我不是root用户,因此我不希望在此Mac上启用root用户。因此我首先做了一个

sudo su

获取具有root特权的shell,然后执行ln命令。但是我仍然收到错误信息ln:/ usr / bin / zsh:不允许操作

问题:

  • 为什么会收到此错误消息?

  • 我要怎么做才能创建链接?

  • 有没有更好的方法可以实现我的最初目标?注意固定#!行数不是一种选择。


为什么不直接复制/usr/bin/zsh/bin/zsh
Lenniey

1
@Lenniey这样,您将创建一个不会与原始副本一起更新的松散副本。
马里奥(Mario)

@Mario whelp ...你当然是对的。OP:永远不要那样做!;)
Lenniey

1
@Lenniey-复制需要以其他方式进行!如果可以复制,则可以链接。
AFH

@AFH是的,我的评论
很烂

Answers:


15

由于Apple的系统完整性保护,您会收到此消息。系统完整性保护包括对系统以下部分的保护:

/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X

第三方应用程序和安装程序可以继续编写的路径和应用程序包括:

/Applications
/Library
/usr/local

这意味着您可以简单地在其中创建符号链接/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....

2
您已经错过了要点:发问者有将脚本指定#!/usr/bin/zh为shell,因此他寻求的解决方案是将该位置链接到shell实际驻留的位置,但是正如您所说的,他可以防止这样做。除非绕过保护措施,否则唯一的解决方案似乎是脚本的批量编辑。
AFH

好吧,是的,您是对的,他必须编辑脚本(可以通过单个命令来完成)。
17dimitar '17

@Dimitar看看问题:是否有更好的方法实现我的最初目标?注意固定#!行数不是一种选择。
Lenniey

1
注意,我已经修改了答案
13dimitar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.