- NetBSD Manual Pages
LN(1) NetBSD General Commands Manual LN(1)
Powered by man-cgi (2021-06-01).
Maintained for NetBSD
by Kimmo Suominen.
Based on man-cgi by Panagiotis Christias.
ln -- link files
ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] source_file [target_file]
ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] source_file ... target_dir
The ln utility creates a new directory entry (linked file) for the file
name specified by target_file. The target_file will be created with the
same file modes as the source_file. It is useful for maintaining multi-
ple 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 sym-
The options are as follows:
-F If the target file already exists and is a directory, then remove
it so that the link may occur. The -F option should be used with
either -f or -i options. If none is specified, -f is implied. The
-F option is a no-op unless -s option is specified.
-L When creating a hard link to a symbolic link, create a hard link to
the target of the symbolic link. This is the default. This option
cancels the -P option.
-P When creating a hard link to a symbolic link, create a hard link to
the symbolic link itself. This option cancels the -L option.
-f If the target file already exists, then unlink it so that the link
may occur. (The -f option overrides any previous -i and -w
-h If the target_file or target_dir is a symbolic link, do not follow
it. This is most useful with the -f option, to replace a symlink
which may point to a directory.
-i Cause ln to write a prompt to standard error if the target file
exists. If the response from the standard input begins with the
character `y' or `Y', then unlink the target file so that the link
may occur. Otherwise, do not attempt the link. (The -i option
overrides any previous -f options.)
-n Same as -h, for compatibility with other ln implementations.
-s Create a symbolic link.
-v Cause ln to be verbose, showing files as they are processed.
-w Warn if the source of a symbolic link does not currently exist.
By default, ln makes hard links. A hard link to a file is indistinguish-
able from the original directory entry; any changes to a file are effec-
tively independent of the name used to reference the file. Directories
may not be hardlinked, and hard links may not span file systems.
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 and may refer to directories.
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; otherwise
it is placed in the current directory. If only the directory is speci-
fied, 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.
Create a symbolic link named /home/src and point it to /usr/src:
# ln -s /usr/src /home/src
Hard link /usr/local/bin/fooprog to file /usr/local/bin/fooprog-1.0:
# ln /usr/local/bin/fooprog-1.0 /usr/local/bin/fooprog
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.
In the next example, the second call to ln removes the original foo and
creates a replacement pointing to baz:
# mkdir bar baz
# ln -s bar foo
# ln -shf baz foo
Without the -h option, this would instead leave foo pointing to bar and
inside foo create a new symlink baz pointing to itself. This results
An easy rule to remember is that the argument order for ln is the same as
for cp(1): The first argument needs to exist, the second one is created.
The -h, -i, -n, -v and -w options are non-standard and their use in
scripts is not recommended. They are provided solely for compatibility
with other ln implementations.
The -F option is a FreeBSD extension and should not be used in portable
link(2), lstat(2), readlink(2), stat(2), symlink(2), symlink(7)
The ln utility conforms to IEEE Std 1003.2-1992 (``POSIX.2'').
An ln command appeared in Version 1 AT&T UNIX.
NetBSD 9.3 April 20, 2017 NetBSD 9.3