Cannot create a symlink inside of /usr/bin even as sudo [closed]
Asked Answered
E

5

192

When I try to symlink a binary in my /usr/bin folder, I get an Operation not permitted error:

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

Even as sudo, I get this error.

Ewan answered 19/4, 2016 at 22:23 Comment(5)
What's your 1.OS 2.Distribution 3. File system please?Oliana
Mac OSX El Capitan 10.11.4Ewan
Have you tried the following: #32659848 ?Oliana
create instead in /usr/local/bin or /usr/local/sbinGamma
An alias will work a lot better - symlinking can cause a prompt to re-download xcode command line tools.Zither
F
283

Why can't I symlink into /usr/bin?

El Capitan's new System Integrity Protection feature prevents changes to several core parts of OS X, including most of /usr/, even by root.

How can I still add executable files to my path?

Local customizations, such as what you're doing, belong in /usr/local instead. The path /usr/local/bin doesn't exist by default, but you can create it and put custom binaries (and symlinks) in it:

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

Note that while /usr/local/bin doesn't exist by default, it is in the default PATH, so as soon as you create it, it'll be searched for commands.

Disabling SIP

It's also possible to disable System Integrity Protection, but it's generally best to leave it on and do customization in more appropriate locations. An Apple Stack Exchange question has more details on this: What is the Rootless Feature in El-Captain, really?.

Faltboat answered 20/4, 2016 at 5:28 Comment(7)
If I do this and run python it calls the file under /usr/bin/python instead of the file /usr/local/bin/python.Impassable
@DanielW. What is your PATH set to? Normally, /usr/local/bin will be listed before /usr/bin, so it'll take precedence.Faltboat
I had to restart and mangle with brew link then it worked tbh but you are very right with the PATH setting.Impassable
Strange. I have /usr/local/bin prior to /usr/bin in my PATH setting. /usr/bin/python points to v2.7 and /usr/local/bin/python points to v3.9. When I run the command "python --version" it returns "Version 2.7". Precedence... what precedence?Elysha
@muztheaxe Do you have a function or alias overriding python? If you're using bash, run type python (or type -a python for a full list of possible meanings); if you're using zsh, run whence python (or whence -a python).Faltboat
The path was originally set to this: export PATH=/usr/local/opt/[email protected]/bin:$PATH I removed this first directory and then it worked. Made me thing that perhaps something in "[email protected]" may have been a problem. I am lazy and didn't investigate any further.Elysha
+1 to not disabling System Integrity Protection, but symlinking it under /usr/local/bin no longer works, and instead prompts a re-download of xcode command line tools.Zither
U
29

I created the symbolic link for Sublime Text 3 in Mac OS High Sierra as

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

I was also trying to create the symbolic link in "/usr/bin" and was getting Operation Not Permitted.

Then I created the symbolic link in "/usr/local/bin" and there was not error. The symbolic link works fine. Just ensure that "/usr/local/bin" is in the path.

So, it seems the access to "/usr/bin" is restricted.

Unable answered 22/12, 2017 at 13:41 Comment(0)
N
11

Restart the system -> long press cmd + R.  select a terminal from utilities menu type the following command csrutil disable close terminal and restart system.

Nourishing answered 5/9, 2017 at 12:54 Comment(4)
This disables System Integrity Protection. Probably best to find another, more secure solution instead.Makassar
Personally, I think this is the right solution. I see no reason for the OS to block me from symlinking things in this directory or any directory as sudo.Dagoba
Maybe the full solution is to disable it, place the symlink and re-enable csrutil?Impassable
Macs with Apple Silicon need to shut down and be started with the power button held down until the boot options appear.Heteroplasty
S
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 

if you are not able to create symnbolic link due to permission issue, it will be due to "csrutil".after disabling csrutil you can create symbollic link. Follow these steps to disable CSRUtill :

Restart your Mac. Before OS X starts up, hold down Command-R and keep it held down until you see an Apple icon and a progress bar. Release. This boots you into Recovery. From the Utilities(on the top bar)menu, select Terminal. At the prompt type exactly the following and then press Return: csrutil disable Terminal should display a message that SIP was disabled. From the  menu, select Restart.

Strang answered 29/7, 2020 at 13:4 Comment(0)
U
-8

Try running sudo su first then running the command w/ root level.

Urogenital answered 2/12, 2019 at 23:21 Comment(1)
This will not resolve the OPs issue. The problem has to do with the system integrity protection on modern MacOS systems.Searching

© 2022 - 2024 — McMap. All rights reserved.