LN(1) OpenBSD Reference Manual LN(1)
ln - make hard and symbolic links to files
ln [-fhns] source_file [target_file]
ln [-fhns] source_file ... [target_dir]
The ln utility creates a new directory entry (linked file) which has the
same modes as the original file. It is useful for maintaining multiple
copies of a file in many places at once without using up storage for the
copies; instead, a link ``points'' to the original copy. There are two
types of links; hard links and symbolic links. How a link points to a
file is one of the differences between a hard and symbolic link.
The options are as follows:
-f Unlink any already existing file, permitting the link to occur.
-h If the target is a symlink to a directory, do not descend into
-n An alias for -h for compatibility with other operating systems.
-s Create a symbolic link.
By default, ln makes ``hard'' links. A hard link to a file is indistin-
guishable from the original directory entry; any changes to a file are
effectively independent of the name used to reference the file. Hard
links may not normally refer to directories and may not span file sys-
A symbolic link contains the name of the file to which it is linked. The
referenced file is used when an open(2) operation is performed on the
link. A stat(2) on a symbolic link will return the linked-to file; an
lstat(2) must be done to obtain information about the link. The
readlink(2) call may be used to read the contents of a symbolic link.
Symbolic links may span file systems, refer to directories, and refer to
Given one or two arguments, ln creates a link to an existing file
source_file. If target_file is given, the link has that name;
target_file may also be a directory in which to place the link. Other-
wise, it is placed in the current directory. If only the directory is
specified, the link will be made to the last component of source_file.
Given more than two arguments, ln makes links in target_dir to all the
named source files. The links made will have the same name as the files
being linked to.
# ln -s /var/www /home/www
Creates a symbolic link named /home/www and points it to /var/www.
# ln /usr/local/bin/fooprog-1.0 /usr/local/bin/fooprog
Hard link /usr/local/bin/fooprog to file /usr/local/bin/fooprog-1.0.
As an exercise, try the following commands:
$ ls -i /bin/[
$ ls -i /bin/test
Note that both files have the same inode; that is, /bin/[ is essentially
an alias for the test(1) command. This hard link exists so test(1) may
be invoked from shell scripts, for example, using the if [ ] construct.
$ mkdir bar baz; ln -s bar foo; ln -shf baz foo
The second call to ln removes the original foo and creates a replacement
pointing to baz. Without the -h option, this would instead leave foo
pointing to bar and inside foo create a new symlink baz pointing to it-
self. This results from directory-walking.
link(2), lstat(2), readlink(2), stat(2), symlink(2), symlink(7)
An ln utility appeared in Version 3 AT&T UNIX.
Since the source_file must have its link count incremented, a hard link
cannot be created to a file which is flagged immutable or append-only
OpenBSD 3.6 December 30, 1993 2