What command is used to create a symbolic link/soft link?
┌── ln(1) link, ln -- make links │ ┌── Create a symbolic link. │ │ ┌── the optional path to the intended symlink │ │ │ if omitted, symlink is in . named as destination │ │ │ can use . or ~ or other relative paths │ │ ┌─────┴────────┐ ln -s /path/to/original /path/to/symlink └───────┬───────┘ └── the path to the original file/folder can use . or ~ or other relative paths
$ echo content > original $ ln -s original symlink $ ls -la original symlink -rw-r--r-- 1 grgarside staff 8 28 Jan 18:44 original lrwxr-xr-x 1 grgarside staff 8 28 Jan 18:44 symlink -> original $ cat symlink content
For more information about ln(1) see the man page.
The path to the symlink is optional; if omitted,
ln defaults to making a link with the same name as the destination, in the current directory:
$ cd ~/Documents $ ln -s ../Pictures $ ls -l Pictures lrwxr-xr-x 1 user staff 11 Feb 1 17:05 Pictures -> ../Pictures
To create a symlink to replace a system directory (e.g. if you want to have
/Users pointing to another disk drive), you need to disable System Integrity Protection. You can re-enable it after the symlink is set up.
I know this question is explicitly asking about the Terminal, but if you're in GUI Land and don't want to enter Terminal Land, you can use SymbolicLinker. This puts a "Make Symbolic Link" option in your Services menu in Finder.
As a heads up to anyone, you must use full path names. This wasn't immediately clear to me, as I felt I could symlink relative paths in a folder that I was running the command inside. I could be wrong (I'm a macOS novice).
For example, if I try to symlink my Pictures folder inside of my Downloads folder, while cd'd in my user home directory, this will not work:
Users\stevebauman >_ ln -s Pictures Downloads
Instead, you must use:
Users\stevebauman >_ ln -s /Users/stevebauman/Pictures /Users/stevebauman/Downloads
Unless the source path is relative to your destination, use an absolute path to your source path, and put it in single quotes
$ ln -s '/any file/could have (special chars)/or spaces/test' '/some/other place/file'
You can always figure out the current full unescaped path to something by going to that folder in the terminal, then typing