| 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.
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.
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-f and -i options are
specified, only the last one on the command line is honored.-i-f and -i options are
specified, only the last one on the command line is honored.-L-L and -P determines which
behavior is used.
This option is ignored when creating a symbolic link with
-s.
-P-L and -P determines which
behavior is used.
This option is ignored when creating a symbolic link with
-s.
-sIf 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-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.
The following option is supported for /usr/bin/ln only:
-n-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:
-s option is specified,
source_file can also be a directory.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:
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.
| March 22, 2026 | OmniOS |