LN(1)

名前
ln - ファイルへのリンクを作成する

書式
ln [options] source [dest]
ln [options] source... directory

POSIX オプション: [-f]

GNU オプション (簡略形式): [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] [--target-directory=dir] [--help] [--version] [--]

説明
ln コマンドはファイルへのリンクを作成する。特に指定がないとハードリンクを作成する; -s オプションを指定するとシンボリック (もしくはソフト) リンクを作成する。

Unix には通常ハードリンクとソフトリンクと呼ばれる、 2 つの「リンク」の概念がある。 ハードリンクは単にファイルの名前である。 (ファイルは複数の名前を持つことができる。 その最後の名前が削除された場合にのみディスク上から実体が消去される。 ファイルが持つ名前の数は ls(1) コマンドで知ることができる。 「もともと」の名前というものは無い: すべての名前は同じステータスを持っている。 通常、必須では無いが、ファイルの名前はすべてそのファイルシステム内にあり、 それ自身のデータもそこに持っている。

ソフトリンク (もしくはシンボリックリンク、または symlink) というのは まったく違った種類のものである: 実体はパス名を含んだ小さくて特殊なファイルである。 従って、ソフトリンクは異なるファイルシステム上 (たぶん他のマシンからマウントされた NFS) のファイルを指すことができる。 また実際には存在しないファイルを指していても構わない。 (open(2) または stat(2) といったシステムコールにより) アクセスされた場合、 シンボリックリンクへの参照は、オペレーティングシステムのカーネルにより そのパス名で指示されるファイルへの参照として置き換えられる。 (しかし、 rm(1) コマンドや unlink(2) 関数ではリンク自身が削除され、リンクが指しているファイルは削除されない。 lstat(2) や readlink(2) 関数といったシンボリックリンクや、リンクが指しているファイル名のステータスを 得る特殊なシステムコールがある。 その他の色々なシステムコールでは、その操作の対象がシンボリックリンク そのものなのか、それが指しているファイルなのかといったことについて、 オペレーティングシステム間で不明瞭さや違いがある。)

• 1 つのファイルのみ与えられた場合、 そのファイルをカレントディレクトリにリンクする。 つまり、(一番最後におかれた) ファイル名と同じ名前でファイルへのリンクをカレントディレクトリに作る。 (これは GNU での拡張機能である)

• 最後の引き数がすでに存在するディレクトリであった場合、 ln コマンドはそのディレクトリ内に source ファイルで指示されたそれぞれに対するリンクを作る。 その名前は (一番最後におかれた) source ファイルの名前と同じ名前を持つ。 (以下の --no-dereference オプションの説明を参照)

• 引き数にファイルが2つ指定された場合、 source を指す dest という名前のリンクが作成される。 最後の引き数がディレクトリでは無いのに、2 つ以上のファイルが指定された 場合はエラーとなる。

特に指定がないと、 ln コマンドは存在しているファイルや、シンボリックリンクの削除はできない。 (そのため、ロックの目的で使うことができる: dest が存在しない場合のみ正常終了する) -f オプションを指定することで強制的に削除することができる。

今ある実装では、ディレクトリへのハードリンクの作成ができる場合でも、 スーパーユーザーにのみ許される操作としている。 link(2) システムコールや ln コマンドでのディレクトリへのハードリンクの作成を POSIX では禁止している。 (しかし異種のファイルシステムをまたがったハードリンクは禁止していない。)

POSIX オプション

-f  指定したリンクファイルがすでにあった場合は削除する。

GNU オプション

-d, -F, --directory
    スーパーユーザーがディレクトリへのハードリンクを作成するのを許す。

-f, --force
    指定したリンクファイルがすでにあった場合は削除する。

-i, --interactive
    指定したリンクファイルがすでにあった場合は、削除するかどうか問い合わせを行う。

-n, --no-dereference
    明示的にディレクトリにシンボリックリンクしているリンクファイル が指定された場合、それを普通のファイルと同じように扱う。
    リンク先が実際のディレクトリ (どこかへのシンボリックリンクではない) の場合、 そのディレクトリ内にリンクが作成される。 しかしディレクトリへのシンボリックリンクがリンクファイルとして指定された場合、 2 つの可能性がある。 ln コマンドは指定されたリンクファイルを通常のディレクトリのように扱い、 その中にリンクを作成することができる。 もう 1 つは、リンクファイルが非ディレクトリ - シンボリックリンクそのものであるとして扱うことができる。 その場合には、 ln コマンドは新しいリンクを作成する前にシンボリックリンクを削除、 またはバックアップする必要がある。 デフォルトでは、ディレクトリへのシンボリックリンクが指定された場合には、 ディレクトリと同じように扱う。

-s, --symbolic
    ハードリンクの代わりにシンボリックリンクを作成する。 シンボリックリンクをサポートしないシステムでは、 このオプションを指定すると単にエラーメッセージを出力する。

--target-directory=DIR
    コマンドラインの最後の引き数として指定する代わりに、 このオプションでリンク先ディレクトリを指定する。 xargs(1) と一緒に使う場合に便利である。

-v, --verbose
    リンクを作成する前にそれぞれの名前を出力する。

GNU バックアップオプション
GNU 版のプログラム cp, mv, ln, install, patch は、指示すれば上書き、修正、削除といった場合に ファイルのバックアップを作成する。 バックアップファイルを必要とする場合は -b オプションで指示する。 どういう名前にするかは --backup オプションで指定する。 バックアップファイルの名前を、ファイル名の添字の拡張によって 与えるようにしたい場合、この添字を -S オプションで指示する。

-b, --backup[=METHOD]
    上書きもしくは削除の必要がある場合にはファイルのバックアップを作成する。 -b は引き数をとらない点に注意すること。

-S SUFFIX, --suffix=SUFFIX
    SUFFIX をバックアップファイルそれぞれに付け加える。 このオプションが指定されていない場合、環境変数 SIMPLE_BACKUP_SUFFIX に設定されている値が使われる。 SIMPLE_BACKUP_SUFFIX が設定されていない場合、デフォルトは `~' である。

-V METHOD, --version-control=METHOD
    このオプションは推奨されない。 代わりに --backup=METHOD を使うこと。
    バックアップファイルの命名方法を指定する。 METHOD 引き数として `numbered' (または `t')、`existing' (または `nil')、 `never' (または `simple') を指定できる。 このオプションが指定されていない場合、環境変数 VERSION_CONTROL の値が使われる。 VERSION_CONTROL が設定されていない場合、デフォルトのバックアップタイプは `existing' である。

    このオプションは Emacs 変数の `version-control' に対応している。 有効な METHOD は (他と重複しない短縮形が使える):

    t, numbered
        常に番号の添字を持つバックアップが作られる。

    nil, existing
        番号の添字を持つバックアップがすでにある場合には番号の添字を持つバックアップを、そうでない場合には単純なバックアップを作成する。

    never, simple
        常に単純なバックアップが作られる。

GNU 標準オプション

--help
    標準出力に使用方法のメッセージを出力して正常終了する。

--version
    標準出力にバージョン情報を出力して正常終了する。

--  オプションリストを終了する。

環境変数
変数 LANG, LC_ALL, LC_CTYPE, LC_MESSAGES が通常の意味を持つ。

準拠
POSIX 1003.2 に準拠する。 しかし、POSIX 1003.2 (1996) ではソフトリンクについて触れていない。 ソフトリンクは BSD により持ち込まれ、System V release 3 (そしてそれ以前) のシステムでは無い。

関連項目
ls(1), rm(1), link(2), lstat(2), open(2), readlink(2), stat(2), unlink(2)

注意
このページでは fileutils-4.1 パッケージでの ln コマンドについて説明している。 その他のバージョンでは少し違いがあるかもしれない。 修正や追加は aeb@cwi.nl, aw@mail1.bet1.puv.fi, ragnar@ragnar-hojland.com 宛てにメールで連絡してほしい。 プログラムのバグについては bug-fileutils@gnu.org へ報告してほしい。