OS X won't create any symbolic links, creates aliases instead
Let's try a few experiments, and look at a few things.
In a terminal emulator, such as Terminal.app in /Applications/Utilities, go to your home directory (cd ~
) and create a directory (mkdir [directory]
).
Make sure you go in the directory we just created (cd [directory]
).
cd ~
mkdir directory
cd directory
After that, make a file; a simple text file will do:
echo "This is a simple text file" > originalfile.txt
ls -l@
Now, try creating a hard link, like this:
/usr/bin/ln originalfile.txt hardlink.txt
Then, try creating a symbolic link, like this:
/usr/bin/ln -s originalfile.txt symboliclink.txt
Now, open the directory in Finder with open .
and make an alias.
In the terminal emulator you opened before, another ls
should get us this:
Testarossa:test tonyw$ ls -l@
total 2528
-rw-r--r-- 2 tonyw staff 19 25 Jan 15:51 file.txt
-rw-r--r--@ 1 tonyw staff 426048 25 Jan 15:52 file.txt alias
com.apple.FinderInfo 32
com.apple.ResourceFork 850686
-rw-r--r-- 2 tonyw staff 19 25 Jan 15:51 hard.txt
lrwxr-xr-x 1 tonyw staff 8 25 Jan 15:53 symbolic.txt -> file.txt
The Finder GUI should result in this, too:
Please note that the Finder GUI displays a symbolic link as an alias.
A symbolic link is not the same thing as an alias. A real alias has extended attributes than a symbolic link.
In the Finder GUI, there is no way of telling a hard link is anything but a file.
For any symbolic links, there is an 'l' at the left hand end of the attributes, and the ls
command tells us where it points.
When you try this, exactly what do you get?
OS X can create both, but in different ways. As you seem to be using the word alias it is a file (or directory) shortcut that was created in Finder for anything you see listed there, whereas a symlink (symbolic link) can be created in a shell instance started by your terminal app by using the command:
ln -s <source file path><target file path>
A symlink cannot be created directly in a Finder window (indirectly perhaps by calling an AppleScript script from a shell script or vice-versa).
But there is an ambiguity here because there is another kind of alias, which is a user-defined nickname that you can give to a sequence of shell commands when you open a terminal session. For example in a bash shell window:
$ alias listall=ls -al`
This defines a nickname listall
for the command ls -al
to list all files in the current directory. In this context 'alias' describes command nicknames - alias
is actually a bash shell built-in command for creating such nicknames.
I am not an expert on the OS X filesystem, just a user and scripter, but from what I have read the reason why a Finder alias does not break in OS X is because it contains a unique serial number for its target file (called an inode number, that exists for each file and directory) that is independent of its file path. This means that if you move the target to another directory then the alias will still point to it, whereas a symlink would break because it uses the file path of the target.