即使使用sudo权限,也无法在/usr/bin目录内创建符号链接

188

当我尝试在/usr/bin文件夹中创建二进制链接时,会出现"Operation not permitted"错误。

 sudo ln -s /usr/bin/python2.7 /usr/bin/python2
ln: /usr/bin/python2: Operation not permitted

即使使用sudo,我仍然会遇到这个错误。


你的操作系统是什么?发行版是哪个?文件系统呢? - Rany Albeg Wein
Mac OSX El Capitan 10.11.4 - egidra
1
你尝试过以下方法吗:https://dev59.com/llwY5IYBdhLWcg3waXEF? - Rany Albeg Wein
1
创建在 /usr/local/bin/usr/local/sbin 中。 - Shayan Amani
一个别名会更好 - 符号链接可能会导致提示重新下载Xcode命令行工具。 - RCross
5个回答

277

为什么我不能在 /usr/bin 中使用符号链接?

El Capitan 的新特性 系统完整性保护 防止对 OS X 的许多核心部分进行更改,包括大多数位于 /usr/ 目录下的文件,即使是超级用户也无法更改。

如何将可执行文件添加到我的路径中?

像你现在做的这样的本地自定义应该放在 /usr/local 中,而不是 /usr/bin。默认情况下不存在路径 /usr/local/bin,但是你可以创建该路径并将自定义的二进制文件(和符号链接)放到里面:

sudo mkdir -p /usr/local/bin
sudo ln -s /usr/bin/python2.7 /usr/local/bin/python2

请注意,虽然/usr/local/bin不是默认存在的文件夹,但它在默认路径中,因此一旦您创建它,系统会搜索其中的命令。

禁用SIP

也可以禁用系统完整性保护(SIP),但最好将其保留并在更合适的位置进行自定义操作。有一个苹果堆栈交换问题详细介绍了此功能:什么是El Capitan中的Rootless功能?


如果我这样做并运行 python,它会调用 /usr/bin/python 下的文件,而不是 /usr/local/bin/python 下的文件。 - Daniel W.
7
@DanielW. 你的 PATH 环境变量设置为什么了?通常情况下,/usr/local/bin 会排在 /usr/bin 的前面,因此它会被优先使用。 - Gordon Davisson
奇怪。我在我的PATH设置中将/usr/local/bin设置在/usr/bin之前。/usr/bin/python指向v2.7,而/usr/local/bin/python指向v3.9。当我运行"python --version"命令时,它返回"Version 2.7"。优先级...优先级是什么? - muz the axe
@muztheaxe 你是否有覆盖python的函数或别名?如果你正在使用bash,请运行type python(或者type -a python以获取可能含义的完整列表);如果你正在使用zsh,请运行whence python(或者whence -a python)。 - Gordon Davisson
路径最初设置为:export PATH=/usr/local/opt/php@7.3/bin:$PATH 我删除了这个第一个目录,然后它就可以工作了。这让我想到"php@7.3"中可能有一些问题。我很懒,没有进一步调查。 - muz the axe
显示剩余2条评论

28

我在Mac OS High Sierra中创建了Sublime Text 3的符号链接,命令如下:

sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/

我之前试图在"/usr/bin"里创建符号链接,但出现了“操作不允许”的错误。

后来我在"/usr/local/bin"里创建了符号链接,并没有出现错误。这个符号链接可以正常工作,只需确保"/usr/local/bin"在路径中即可。

因此,似乎是"/usr/bin"的访问受到了限制。


12

重启系统 - 长按 cmd + R。 从实用程序菜单中选择一个终端。 输入以下命令 csrutil disable。 关闭终端并重启系统。


17
这将禁用系统完整性保护,最好寻找另一个更安全的解决方案。 - MattSidor
17
我认为这是正确的解决方案。我不认为操作系统应该阻止我使用sudo在此目录或任何目录中创建符号链接。 - rjhilgefort
4
也许完整的解决方案是先禁用它,放置符号链接,然后重新启用csrutil? - Daniel W.
2
使用 Apple Silicon 的 Mac 需要关闭电源,并按住电源按钮启动,直到出现启动选项。 - Luke Puplett

2
  1. Create a symbolic link to psql in usr/bin (for mac only)
         command: sudo ln -s /Applications/Postgres.app/Contents/Versions/latest/bin/psql /usr/bin/psql 

如果由于权限问题无法创建符号链接,则可能是由于“csrutil”。禁用csrutil后,您可以创建符号链接。按照以下步骤禁用CSRUtill:
1. 重启您的Mac。 2. 在OS X启动之前,按住Command-R并保持按下,直到您看到苹果图标和进度条。释放。这将使您进入恢复模式。 3. 从“实用工具”(在顶部菜单上)菜单中选择“终端”。 4. 在提示符处输入以下内容,然后按回车键:csrutil disable 5. 终端应显示SIP已禁用的消息。 6. 从菜单中选择“重新启动”。

-8

尝试先运行sudo su,然后以root级别运行命令。


4
这个不会解决原帖作者的问题。问题与现代MacOS系统上的系统完整性保护有关。 - cgseller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接