LN(1V)

NAME
ln - make links (System V compatibility)

SYNOPSIS
/usr/5bin/ln [ -s ] [ -i | -f ] sourcename [ targetname ]
/usr/5bin/ln [ -s ] [ -i | -f ] sourcename1 [ sourcename2 ... ] targetdirectory

DESCRIPTION
A link is a directory entry referring to a file; the same file (together with its size, all its protection information, etc.) may have several links to it. There are two kinds of links: hard links and symbolic links.

By default ln makes hard links. A hard link to a file 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.

The -s option causes ln to create symbolic links. 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 and is relative to the directory containing 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 or even to non-existent files.

Given one or two arguments, ln creates a link to an existing file sourcename. If targetname is given, the link has that name; targetname may also be a directory in which to place the link; otherwise it is placed in the current directory (thus targetname defaults to “.”). If only the directory is specified, the link will be made to the last component of sourcename.

Given more than two arguments, ln makes links in targetdirectory to all the named source files. The links made will have the same name as the files being linked to.

If the target is writable or the target is a symbolic link which cannot be resolved the command will remove the old link before creating the new one. Otherwise (the target is read-only or is a symbolic link referring to a read-only file) the command will ask the user whether the target should be replaced.

OPTIONS

The following options are supported:

-s  Make a symbolic link rather than a hard link.

-f  Do not ask questions. The link is made where possible, removing an existing link if necessary. This is the default if the standard input is not a terminal.

-i  Ask the user before creating each link. The name of the link is printed on the standard output and the user is prompted for a yes or no. If the response (read from the standard input) starts with a “y” the link is created, removing the target first if it already exists, otherwise this link is skipped.

-B  Use the BSD semantics for the command. If -f and -i are not specified and the target already exists the link will not be created.

WARNING
The BSD semantics for ln allow it to be used to manage semaphores. To do this ln is used to create a link to an existing file (or, indeed, a symbolic link with any value). If the link succeeds the shell script which executed it has claimed the semaphore. If the link fails (because the link already exists) the semaphore is already held by another process. To release the semaphore the process simply removes the link.

This works because the ln command creates a link atomically. With the System V semantics this is no longer the case - the command will remove an existing link.

SEE ALSO
ln(1), rm(1), cp(1), mv(1), link(2), readlink(2), stat(2), symlink(2).