EN JA
LN(1)
LN(1) FreeBSD General Commands Manual LN(1)

名称

ln, linkファイルをリンクする

書式

ln [ -L | -P | -s [ -F]][ -f | -iw][ -hnv] source_file [ target_file]

ln [ -L | -P | -s [ -F]][ -f | -iw][ -hnv] source_file ... target_dir

link source_file target_file

解説

ln ユーティリティは、 target_file によって指定されたファイル名のために新しいディレクトリエントリ (リンクされたファイル) を作成します。 target_file は、 source_file と同じファイルモードで作成されます。“コピー”のための記憶域を使い切ることなしに、同時に多くの場所でファイルの複数のコピーを維持することに役立ちます。代わりに、リンクは、オリジナルのコピーを“指し”ます。ハードリンクとシンボリックリンクの 2 つのタイプのリンクがあります。リンクがどのようにファイルを“指す”かは、ハードとシンボリックリンクの違いの 1 つです。

オプションは、次の通りです:

-F
ターゲットファイル (target_file) が既に存在していて、ディレクトリであるなら、リンクができるように、それを削除します。 -F オプションは、 -f または -i オプションのいずれかと共に使用されるべきです。なにも指定されないなら、 -f が暗黙のうちに指定されます。 -s オプションが指定されないなら、 -F オプションは、何もしません。
-L
ハードリンクをシンボリックリンクに作成するとき、シンボリックリンクのターゲットにハードリンクを作成します。これは、デフォルトです。このオプションは、 -P オプションを取り消しします。
-P
ハードリンクをシンボリックリンクに作成するとき、ハードリンクをシンボリックリンク自体に作成します。このオプションは、 -L オプションを取り消しします。
-f
ターゲットファイル (target_file) が既に存在するなら、リンクが行えるように、それをアンリンクします。 ( -f オプションは、それ以前の -i-w オプションを上書きします。)
-h
target_file または target_dir がシンボリックリンクの場合、これを辿りません。これは、 -f オプションと共に使用して、ディレクトリを指すかもしれないシンボリックリンクを置き換える場合に最も有用です。
-i
ln は、ターゲットファイル (target_file) が存在するなら、標準エラーにプロンプトを書き込みます。標準入力から‘ y’または‘ Y’で始まる文字列が入力されると、target_file が既に存在する場合、リンクが成功するように、これをアンリンクします。 ( -i オプションが指定されると、それ以前の -f オプションは、無視されます。)
-n
-h と同様ですが、他の ln の実装との互換性のためにあります。
-s
シンボリックリンクを作成します。
-v
ln を冗長にし、処理するファイルを表示します。
-w
シンボリックリンクのソース (元) が現在存在しないなら、警告します。

デフォルトでは、 ln は、 ハード リンクを作成します。ファイルへのハードリンクは、オリジナルのディレクトリエントリと区別できません。ファイルの参照に使われる名前にかかわらず、そのファイルへのいかなる修正も同じように有効です。ディレクトリは、ハードリンクすることができません、そして、ハードリンクは、ファイルシステムをまたがって橋渡しすることはできません。

シンボリックリンクは、リンク先ファイルの名前を保持します。リンクに対して open(2) 操作を行うと、その参照先ファイルが用いられます。シンボリックリンクに対して stat(2) 操作を行うと、参照先ファイルの情報を返します。リンクそのものの情報を得るには、 lstat(2) を用いなければなりません。 readlink(2) 呼び出しによってシンボリックリンクの内容を読むこともできます。シンボリックリンクによってファイルシステムを拡張したり、ディレクトリを参照したりすることが可能です。

1 個あるいは 2 個の引数が与えられた場合、 ln は、既存のファイル source_file に対するリンクを作成します。 target_file が指定された場合、リンクの名前は、それと同一になります。 target_file は、リンクファイルを置くディレクトリであっても構いません。それ以外の場合は、リンクはカレントディレクトリに置かれます。ディレクトリ名だけが指定された場合は、 source_file のパス名の最後のファイル名が指定されたものとみなします。

2 個以上の引数が与えられた場合、 ln は、指定された全てのファイルを target_dir 内にリンクを作成します。作られるリンクは、リンクされるファイルと同じ名前となります。

本ユーティリティを link として呼び出す場合、正確に 2 個の引数が必要であり、どちらもディレクトリであってはなりません。この単純モードでは、オプションは、指定不可であり、渡された 2 個の引数を使用して link(2) の動作を行います。

使用例

/home/src という名前のシンボリックリンクを作成して、それを /usr/src を指すようにします:

# ln -s /usr/src /home/src

/usr/local/bin/fooprog をファイル /usr/local/bin/fooprog-1.0 へのハードリンクとします:

# ln /usr/local/bin/fooprog-1.0 /usr/local/bin/fooprog

練習として、次のコマンドを試みてください:

# ls -i /bin/[ 
11553 /bin/[ 
# ls -i /bin/test 
11553 /bin/test

両方のファイルは、同じ inode を持っていることに注意してください;すなわち、 /bin/[ は、原則的に test(1) コマンドの別名です。このハードリンクが存在するので、 test(1) は、例えば、 if [ ] コンストラクトを使用して、シェルスクリプトから呼び出されます。

次の例で、 ln への 2 番目の呼び出しは、オリジナルの foo を削除し、 baz を指す置換を作成します:

# mkdir bar baz 
# ln -s bar foo 
# ln -shf baz foo

-h オプションなしで、これは、代わりに bar を指す foo を残して、 foo の内部で、それ自体を指す新しいシンボリックリンク baz を作成します。これは、ディレクトリを渡り歩くことに由来します。

思い出す容易な規則は、 ln のための引数の順序が cp(1) と同じであることです: 最初の引数は、存在する必要があり、2 番目のものが作成されます。

互換性

-h, -i, -n, -v-w オプションは、標準ではなく、スクリプトでそれらの使用することは、勧められません。それらは、単に他の ln の実装との互換性のために提供されています。

-F オプションは、 FreeBSD 拡張で、移植性のあるスクリプトで使用されるべきではありません。

規格

ln ユーティリティは、 IEEE Std 1003.2-1992 (“POSIX.2”) に適合しています。

単純化された link コマンドは、 Version 2 of the Single UNIX Specification (“SUSv2”) に適合しています。

歴史

ln コマンドは、 Version 1 AT&T UNIX で登場しました。
November 2, 2012 FreeBSD