ln (Unix)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
ln
Original authorAT&T Bell Laboratories
DevelopersVarious open-source and commercial developers
Initial releaseNovember 3, 1971; 54 years ago (1971-11-03)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemUnix, Unix-like, IBM i
    PlatformCross-platform
    TypeCommand
    Licensecoreutils: GPLv3+

    ln is a shell command for creating a link file to an existing file or directory.[1] By default, the command creates a hard link, but with the -s command line option, it creates a symbolic link.[2] Most systems disallow a hard link to a directory since such links could disrupt the structure of a file system and interfere with the operation of other utilities.[3] The command can create a symbolic link to non-existent file.[4]

    The command appeared in Issue 2 of the X/Open Portability Guidelines.[5] The version in GNU Core Utilities was written by Mike Parker and David MacKenzie.[6] The command is available in Windows via UnxUtils[7] and has been ported to IBM i.[8]

    [edit | edit source]

    A link allows more than one path to refer to the same file.

    A hard link is a directory entry that refers to a file's inode (an internal reference). A file can have multiple hard links – each referring to the same inode.[9] Creating a hard link does not copy the contents of the file, but merely causes another name to be associated with the same content. When a hard link is created for a file, a counter in its inode is incremented, and removing a hard link results in decrementing the counter. A file is not deleted (to allow reusing its storage space) until its reference count reaches zero.[1][10] A hard link can only refer to an object on the same file system.[11]

    A symbolic link refers to another file by its path (a symbolic reference).[4] When encountered during pathname resolution, modify the pathname resolution to be taken to the location which the symbolic link contains. The content of a symbolic link is the target path, which can also be examined via the readlink command.[12] A symbolic link may specify a path that does not refer to an existing file. Resolving such a symbolic link will fail until a file is created at its specified path. Also, a symbolic link to an existing file will fail to resolve if the file is moved.[9]

    Per the Single Unix Specification, the ln command is specified in the Shell and Utilities (XCU) document.[13] POSIX includes a similar specification.[5]

    If neither target file nor target directory are specified, links are created in the current working directory.

    Options

    [edit | edit source]

    The specification indicates command line options that must be supported:

    • -f (force) Clobbers an existing file if the output path specifies an existing file
    • -L If a source operand specifies a symbolic link, create a hard link to the link's target file
    • -P If a source operand specifies a symbolic link, create a hard link to the symbolic link file
    • -s Create symbolic links instead of hard links; causes -L and -P to be silently ignored

    If more than one of the mutually-exclusive options -L and -P is specified, the last option specified determines the resulting behavior.

    If the -s option is not specified and neither a -L nor a -P option is specified, the implementation defines which of the -L and -P options is used by default.

    Single file invocation

    [edit | edit source]

    The command creates a new link to the path indicated by source, stored at the path indicated by target. The syntax is as follows:

    ln [-fs] [-L|-P] source target
    

    Multiple file invocation

    [edit | edit source]

    The command creates a new link to each file specified by the source_# operands, stored in an existing directory indicated by target_dir.

    ln [-fs] [-L|-P] source_1 source_2 ... target_dir
    

    Examples

    [edit | edit source]

    The following creates a hard link to file foo called bar.

    ln foo bar
    

    The following creates a symbolic link to file foo called bar.

    ln -s foo bar
    

    See also

    [edit | edit source]

    References

    [edit | edit source]
    1. ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ a b ln – Shell and Utilities Reference, The Single UNIX Specification, Version 5 from The Open Group
    6. ^ ln(1) – Linux General Commands Manual from ManKier.com
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    9. ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    11. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    13. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]