LN(1) User Commands LN(1)
ln - make hard or symbolic links to files
/usr/bin/ln [-fins] [-L | -P] source_file [target]
/usr/bin/ln [-fins] [-L | -P] source_file... target
/usr/bin/ln [-fins] [-L | -P] -T source_file target
/usr/xpg4/bin/ln [-fis] [-L | -P] source_file [target]
/usr/xpg4/bin/ln [-fis] [-L | -P] source_file... target
/usr/xpg4/bin/ln [-fis] [-L | -P] -T source_file target
In the first synopsis form, the ln utility creates a new directory
entry (link) for the file specified by source_file, at the destination
path specified by target. If target is not specified, the link is made
in the current directory. This first synopsis form is assumed when the
final operand does not name an existing directory; if more than two
operands are specified and the final one is not an existing directory,
an error will result.
In the second synopsis form, the ln utility creates a new directory
entry for each file specified by a source_file operand, at a
destination path in the existing directory named by target.
The ln utility may be used to create both hard links and symbolic
links. A hard link is a pointer to a file and is indistinguishable
from the original directory entry. Any changes to a file are effective
independent of the name used to reference the file. Hard links may not
span file systems and may not refer to directories.
ln by default creates hard links. source_file is linked to target. If
target is a directory, another file named source_file is created in
target and linked to the original source_file. If -T is specified then
a file is not created in target. Rather, target is treated as though a
file has been specified with respect to path construction.
If target is an existing file and the -f option is not specified, ln
will write a diagnostic message to standard error, do nothing more with
the current source_file, and go on to any remaining source_files.
A symbolic link is an indirect pointer to a file; its directory entry
contains the name of the file to which it is linked. Symbolic links
may span file systems and may refer to directories.
File permissions for target may be different from those displayed with
an -l listing of the ls(1) command. To display the permissions of
target, use ls -lL. See stat(2) for more information.
/usr/bin/ln
If /usr/bin/ln determines that the mode of target forbids writing, it
prints the mode (see chmod(1)), asks for a response, and reads the
standard input for one line. If the response is affirmative, the link
occurs, if permissible. Otherwise, the command exits.
When creating a hard link and the source file is itself a symbolic
link, the target will be a hard link to the symbolic link itself, not
the referenced file. In other words, when neither -L or -P are
specified /usr/bin/ln acts as though -P was specified.
/usr/xpg4/bin/ln
When creating a hard link, and the source file is itself a symbolic
link, the target will be a hard link to the file referenced by the
symbolic link, not to the symbolic link object itself (source_file).
In other words, when neither -L or -P are specified, /usr/xpg4/bin/ln
acts as though -L was specified.
The following options are supported for both /usr/bin/ln and
/usr/xpg4/bin/ln:
-f Links files without questioning the user, even if the mode of
target forbids writing. If both the -f and -i options are
specified, only the last one on the command line is honored.
-i Interactively prompt the user about how to proceed when target
already exists. An affirmative response means that target
should be removed so that a link can be created. Any other
answer will prevent the overwriting. If both the -f and -i
options are specified, only the last one on the command line is
honored.
-L Create hardlinks to the item a symbolic link points to. If a
symbolic link pointed to a file, the resulting hardlink would
be a hardlink to that same file. This option may be specified
multiple times. The last instance of -L and -P determines
which behavior is used.
This option is ignored when creating a symbolic link with -s.
-P Create hardlinks to a symbolic link itself. If a symbolic link
pointed to a file, the resulting hardlink would be to the
symbolic link and not the file. This option may be specified
multiple times. The last instance of -L and -P determines
which behavior is used.
This option is ignored when creating a symbolic link with -s.
-s Creates a symbolic link.
If the -s option is used with two arguments, target may be an
existing directory or a non-existent file. If target already
exists and is not a directory, an error is returned.
source_file may be any path name and need not exist. If it
exists, it may be a file or directory and may reside on a
different file system from target. If target is an existing
directory, a file is created in directory target whose name is
source_file or the last component of source_file. This file is
a symbolic link that references source_file. If target does
not exist, a file with name target is created and it is a
symbolic link that references source_file.
If the -s option is used with more than two arguments, target
must be an existing directory or an error will be returned.
For each source_file, a link is created in target whose name is
the last component of source_file. Each new source_file is a
symbolic link to the original source_file. The files and
target may reside on different file systems.
-T Treat target as a file. Normally when the target is a
directory then the resulting link is created inside of target.
The -T option instructs ln to always treat the target as though
it is a file and so the resulting link would never be treated
as something inside of target if it is a directory. It is only
ever usable with exactly one source_file and one target.
For example, consider a directory which contains a directory
named amd64 and a symlink named 64 which points to the
directory amd64. Invoking as -sT amd64 64 ensures that one
never descends into the directories in question and allows one
to target the top-level 64 symlink. Without -T this would
result in the creation of a symlink amd64/amd64.
/usr/bin/ln
The following option is supported for /usr/bin/ln only:
-n If target is an existing file, writes a diagnostic message to
stderr and goes on to any remaining source_files. The -f and -i
options override this option. This is the default behavior for
/usr/bin/ln and /usr/xpg4/bin/ln and is silently ignored.
The following operands are supported:
source_file A path name of a file to be linked. This can be either a
regular or special file. If the -s option is specified,
source_file can also be a directory.
target The path name of the new directory entry to be created,
or of an existing directory in which the new directory
entries are to be created.
See largefile(7) for the description of the behavior of ln when
encountering files greater than or equal to 2 Gbyte (2^31 bytes).
See environ(7) for descriptions of the following environment variables
that affect the execution of ln: LANG, LC_ALL, LC_CTYPE, LC_MESSAGES,
and NLSPATH.
The following exit values are returned:
0 All the specified files were linked successfully
>0 An error occurred.
Committed
Enabled
chmod(1), ls(1), stat(2), attributes(7), environ(7), largefile(7),
standards(7)
A symbolic link to a directory behaves differently than you might
expect in certain cases. While an ls(1) command on such a link
displays the files in the pointed-to directory, entering ls -l displays
information about the link itself:
example% ln -s dir link
example% ls link
file1 file2 file3 file4
example% ls -l link
lrwxrwxrwx 1 user 7 Jan 11 23:27 link -> dir
When you change to a directory (see cd(1)) through a symbolic link,
using /usr/bin/sh or /usr/bin/csh, you wind up in the pointed-to
location within the file system. This means that the parent of the new
working directory is not the parent of the symbolic link, but rather,
the parent of the pointed-to directory. This will also happen when
using cd with the -P option from /usr/bin/ksh or /usr/xpg4/bin/sh. For
instance, in the following case, the final working directory is /usr
and not /home/user/linktest.
example% pwd
/home/user/linktest
example% ln -s /usr/tmp symlink
example% cd symlink
example% cd ..
example% pwd
/usr
C shell users can avoid any resulting navigation problems by using the
pushd and popd built-in commands instead of cd.
illumos March 22, 2026 illumos
NAME
ln - make hard or symbolic links to files
SYNOPSIS
/usr/bin/ln [-fins] [-L | -P] source_file [target]
/usr/bin/ln [-fins] [-L | -P] source_file... target
/usr/bin/ln [-fins] [-L | -P] -T source_file target
/usr/xpg4/bin/ln [-fis] [-L | -P] source_file [target]
/usr/xpg4/bin/ln [-fis] [-L | -P] source_file... target
/usr/xpg4/bin/ln [-fis] [-L | -P] -T source_file target
DESCRIPTION
In the first synopsis form, the ln utility creates a new directory
entry (link) for the file specified by source_file, at the destination
path specified by target. If target is not specified, the link is made
in the current directory. This first synopsis form is assumed when the
final operand does not name an existing directory; if more than two
operands are specified and the final one is not an existing directory,
an error will result.
In the second synopsis form, the ln utility creates a new directory
entry for each file specified by a source_file operand, at a
destination path in the existing directory named by target.
The ln utility may be used to create both hard links and symbolic
links. A hard link is a pointer to a file and is indistinguishable
from the original directory entry. Any changes to a file are effective
independent of the name used to reference the file. Hard links may not
span file systems and may not refer to directories.
ln by default creates hard links. source_file is linked to target. If
target is a directory, another file named source_file is created in
target and linked to the original source_file. If -T is specified then
a file is not created in target. Rather, target is treated as though a
file has been specified with respect to path construction.
If target is an existing file and the -f option is not specified, ln
will write a diagnostic message to standard error, do nothing more with
the current source_file, and go on to any remaining source_files.
A symbolic link is an indirect pointer to a file; its directory entry
contains the name of the file to which it is linked. Symbolic links
may span file systems and may refer to directories.
File permissions for target may be different from those displayed with
an -l listing of the ls(1) command. To display the permissions of
target, use ls -lL. See stat(2) for more information.
/usr/bin/ln
If /usr/bin/ln determines that the mode of target forbids writing, it
prints the mode (see chmod(1)), asks for a response, and reads the
standard input for one line. If the response is affirmative, the link
occurs, if permissible. Otherwise, the command exits.
When creating a hard link and the source file is itself a symbolic
link, the target will be a hard link to the symbolic link itself, not
the referenced file. In other words, when neither -L or -P are
specified /usr/bin/ln acts as though -P was specified.
/usr/xpg4/bin/ln
When creating a hard link, and the source file is itself a symbolic
link, the target will be a hard link to the file referenced by the
symbolic link, not to the symbolic link object itself (source_file).
In other words, when neither -L or -P are specified, /usr/xpg4/bin/ln
acts as though -L was specified.
OPTIONS
The following options are supported for both /usr/bin/ln and
/usr/xpg4/bin/ln:
-f Links files without questioning the user, even if the mode of
target forbids writing. If both the -f and -i options are
specified, only the last one on the command line is honored.
-i Interactively prompt the user about how to proceed when target
already exists. An affirmative response means that target
should be removed so that a link can be created. Any other
answer will prevent the overwriting. If both the -f and -i
options are specified, only the last one on the command line is
honored.
-L Create hardlinks to the item a symbolic link points to. If a
symbolic link pointed to a file, the resulting hardlink would
be a hardlink to that same file. This option may be specified
multiple times. The last instance of -L and -P determines
which behavior is used.
This option is ignored when creating a symbolic link with -s.
-P Create hardlinks to a symbolic link itself. If a symbolic link
pointed to a file, the resulting hardlink would be to the
symbolic link and not the file. This option may be specified
multiple times. The last instance of -L and -P determines
which behavior is used.
This option is ignored when creating a symbolic link with -s.
-s Creates a symbolic link.
If the -s option is used with two arguments, target may be an
existing directory or a non-existent file. If target already
exists and is not a directory, an error is returned.
source_file may be any path name and need not exist. If it
exists, it may be a file or directory and may reside on a
different file system from target. If target is an existing
directory, a file is created in directory target whose name is
source_file or the last component of source_file. This file is
a symbolic link that references source_file. If target does
not exist, a file with name target is created and it is a
symbolic link that references source_file.
If the -s option is used with more than two arguments, target
must be an existing directory or an error will be returned.
For each source_file, a link is created in target whose name is
the last component of source_file. Each new source_file is a
symbolic link to the original source_file. The files and
target may reside on different file systems.
-T Treat target as a file. Normally when the target is a
directory then the resulting link is created inside of target.
The -T option instructs ln to always treat the target as though
it is a file and so the resulting link would never be treated
as something inside of target if it is a directory. It is only
ever usable with exactly one source_file and one target.
For example, consider a directory which contains a directory
named amd64 and a symlink named 64 which points to the
directory amd64. Invoking as -sT amd64 64 ensures that one
never descends into the directories in question and allows one
to target the top-level 64 symlink. Without -T this would
result in the creation of a symlink amd64/amd64.
/usr/bin/ln
The following option is supported for /usr/bin/ln only:
-n If target is an existing file, writes a diagnostic message to
stderr and goes on to any remaining source_files. The -f and -i
options override this option. This is the default behavior for
/usr/bin/ln and /usr/xpg4/bin/ln and is silently ignored.
OPERANDS
The following operands are supported:
source_file A path name of a file to be linked. This can be either a
regular or special file. If the -s option is specified,
source_file can also be a directory.
target The path name of the new directory entry to be created,
or of an existing directory in which the new directory
entries are to be created.
USAGE
See largefile(7) for the description of the behavior of ln when
encountering files greater than or equal to 2 Gbyte (2^31 bytes).
ENVIRONMENT VARIABLES
See environ(7) for descriptions of the following environment variables
that affect the execution of ln: LANG, LC_ALL, LC_CTYPE, LC_MESSAGES,
and NLSPATH.
EXIT STATUS
The following exit values are returned:
0 All the specified files were linked successfully
>0 An error occurred.
INTERFACE STABILITY
Committed
CODE SET INDEPENDENCE
Enabled
SEE ALSO
chmod(1), ls(1), stat(2), attributes(7), environ(7), largefile(7),
standards(7)
NOTES
A symbolic link to a directory behaves differently than you might
expect in certain cases. While an ls(1) command on such a link
displays the files in the pointed-to directory, entering ls -l displays
information about the link itself:
example% ln -s dir link
example% ls link
file1 file2 file3 file4
example% ls -l link
lrwxrwxrwx 1 user 7 Jan 11 23:27 link -> dir
When you change to a directory (see cd(1)) through a symbolic link,
using /usr/bin/sh or /usr/bin/csh, you wind up in the pointed-to
location within the file system. This means that the parent of the new
working directory is not the parent of the symbolic link, but rather,
the parent of the pointed-to directory. This will also happen when
using cd with the -P option from /usr/bin/ksh or /usr/xpg4/bin/sh. For
instance, in the following case, the final working directory is /usr
and not /home/user/linktest.
example% pwd
/home/user/linktest
example% ln -s /usr/tmp symlink
example% cd symlink
example% cd ..
example% pwd
/usr
C shell users can avoid any resulting navigation problems by using the
pushd and popd built-in commands instead of cd.
illumos March 22, 2026 illumos