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 .

IEEE/The Open Group                                   2003                                                 LN(P)