Provided by: manpages-posix_2.16-1_all bug

NAME

       ln - link files

SYNOPSIS

       ln [-fs] source_file target_file

       ln [-fs] source_file ... target_dir

DESCRIPTION

       In  the  first synopsis form, the ln utility shall create a new directory entry (link) at the destination
       path specified by the target_file operand. If the -s option  is  specified,  a  symbolic  link  shall  be
       created for the file specified by the source_file operand. This first synopsis form shall be assumed when
       the final operand does not name an existing directory; if more than two operands are  specified  and  the
       final is not an existing directory, an error shall result.

       In  the  second  synopsis  form,  the  ln utility shall create a new directory entry (link), or if the -s
       option is specified a symbolic link, for each file specified by a source_file operand, at  a  destination
       path in the existing directory named by target_dir.

       If the last operand specifies an existing file of a type not specified by the System Interfaces volume of
       IEEE Std 1003.1-2001, the behavior is implementation-defined.

       The corresponding destination path for  each  source_file  shall  be  the  concatenation  of  the  target
       directory  pathname,  a  slash character, and the last pathname component of the source_file.  The second
       synopsis form shall be assumed when the final operand names an existing directory.

       For each source_file:

        1. If the destination path exists:

            a. If the -f option is not specified, ln shall write a diagnostic  message  to  standard  error,  do
               nothing more with the current source_file, and go on to any remaining source_files.

            b. Actions  shall  be performed equivalent to the unlink() function defined in the System Interfaces
               volume of IEEE Std 1003.1-2001, called using destination as the path argument. If this fails  for
               any  reason,  ln  shall  write  a  diagnostic message to standard error, do nothing more with the
               current source_file, and go on to any remaining source_files.

        2. If the -s option is specified, ln shall create a symbolic link named  by  the  destination  path  and
           containing  as  its  pathname  source_file. The ln utility shall do nothing more with source_file and
           shall go on to any remaining files.

        3. If source_file is a symbolic link, actions shall be performed equivalent to the link() function using
           the  object  that  source_file references as the path1 argument and the destination path as the path2
           argument. The ln utility shall do nothing more with source_file and shall  go  on  to  any  remaining
           files.

        4. Actions  shall be performed equivalent to the link() function defined in the System Interfaces volume
           of IEEE Std 1003.1-2001 using source_file as the path1 argument, and  the  destination  path  as  the
           path2 argument.

OPTIONS

       The  ln  utility  shall  conform  to  the  Base Definitions volume of IEEE Std 1003.1-2001, Section 12.2,
       Utility Syntax Guidelines.

       The following option shall be supported:

       -f     Force existing destination pathnames to be removed to allow the link.

       -s     Create symbolic links instead of hard links.

OPERANDS

       The following operands shall be supported:

       source_file
              A pathname of a file to be linked. If the -s option is specified, no restrictions on the  type  of
              file or on its existence shall be made. If the -s option is not specified, whether a directory can
              be linked is implementation-defined.

       target_file
              The pathname of the new directory entry to be created.

       target_dir
              A pathname of an existing directory in which the new directory entries are created.

STDIN

       Not used.

INPUT FILES

       None.

ENVIRONMENT VARIABLES

       The following environment variables shall affect the execution of ln:

       LANG   Provide a default value for the internationalization variables that are unset or  null.  (See  the
              Base  Definitions  volume of IEEE Std 1003.1-2001, Section 8.2, Internationalization Variables for
              the  precedence  of  internationalization  variables  used  to  determine  the  values  of  locale
              categories.)

       LC_ALL If  set  to  a  non-empty  string value, override the values of all the other internationalization
              variables.

       LC_CTYPE
              Determine the locale for the interpretation of sequences of bytes of text data as characters  (for
              example, single-byte as opposed to multi-byte characters in arguments).

       LC_MESSAGES
              Determine  the locale that should be used to affect the format and contents of diagnostic messages
              written to standard error.

       NLSPATH
              Determine the location of message catalogs for the processing of LC_MESSAGES .

ASYNCHRONOUS EVENTS

       Default.

STDOUT

       Not used.

STDERR

       The standard error shall be used only for diagnostic messages.

OUTPUT FILES

       None.

EXTENDED DESCRIPTION

       None.

EXIT STATUS

       The following exit values shall be returned:

        0     All the specified files were linked successfully.

       >0     An error occurred.

CONSEQUENCES OF ERRORS

       Default.

       The following sections are informative.

APPLICATION USAGE

       None.

EXAMPLES

       None.

RATIONALE

       Some historic versions of ln (including the one specified by the SVID) unlink the destination file, if it
       exists,  by  default.  If the mode does not permit writing, these versions prompt for confirmation before
       attempting the unlink. In these  versions  the  -f  option  causes  ln  not  to  attempt  to  prompt  for
       confirmation.

       This  allows ln to succeed in creating links when the target file already exists, even if the file itself
       is not writable (although the directory must be). Early proposals specified this functionality.

       This volume of IEEE Std 1003.1-2001 does not allow the ln utility to unlink existing destination paths by
       default for the following reasons:

        * The  ln  utility has historically been used to provide locking for shell applications, a usage that is
          incompatible with ln unlinking the destination path by default. There was no  corresponding  technical
          advantage to adding this functionality.

        * This  functionality  gave  ln  the  ability  to destroy the link structure of files, which changes the
          historical behavior of ln.

        * This functionality is easily replicated with a combination of rm and ln.

        * It is not historical practice in many systems;  BSD  and  BSD-derived  systems  do  not  support  this
          behavior.  Unfortunately, whichever behavior is selected can cause scripts written expecting the other
          behavior to fail.

        * It is preferable that ln perform in the same manner as the link() function, which does not permit  the
          target to exist already.

       This  volume of IEEE Std 1003.1-2001 retains the -f option to provide support for shell scripts depending
       on the SVID semantics. It seems likely that shell scripts would not be written to handle prompting by  ln
       and would therefore have specified the -f option.

       The  -f option is an undocumented feature of many historical versions of the ln utility, allowing linking
       to directories. These versions require modification.

       Early proposals of this volume of IEEE Std 1003.1-2001 also required a -i option, which behaved like  the
       -i  options  in  cp  and  mv,  prompting  for  confirmation before unlinking existing files. This was not
       historical practice for the ln utility and has been omitted.

FUTURE DIRECTIONS

       None.

SEE ALSO

       chmod() , find , pax , rm , the System Interfaces volume of IEEE Std 1003.1-2001, link(), unlink()

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition,
       Standard  for  Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers,
       Inc  and  The  Open Group. In the event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .