名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 環境 | 終了ステータス | 属性 | 関連項目 | 注意事項
上記 2 つの形式のうち、第 1 の形式の ln ユーティリティは、source_file が示すファイル用に新しいディレクトリエントリ (リンク) を、target が示す宛先パスに作成します。target が省略されると、カレントディレクトリ内にリンクを作成します。最終オペランドが既存のディレクトリを指していなければ、この第 1 の形式の ln 呼び出しと見なされます。オペランドの数が 3 つ以上で、最終オペランドが既存のディレクトリではない場合、エラーとなります。
第 2 の形式の ln ユーティリティは、source_file オペランドで示された各ファイル用に新しいディレクトリを、target が示す既存のディレクトリの宛先パスに作成します。
ln ユーティリティは、ハードリンクとシンボリックリンクの両方を作成することができます。ハードリンクはファイルへのポインタで、元のディレクトリエントリと区別されません。ファイルに加えられる変更は、そのファイルの参照にどの名前が使用されたかにかかわらず有効です。ハードリンクは、複数のファイルシステムにまたがることはできません。また、ディレクトリも参照することはできません。
デフォルトでは、ln はハードリンクを作成します。source_file は target にリンクされます。target がディレクトリの場合は、target の中に source_file という名前の別のファイルが作成され、元の source_file にリンクされます。
target がファイルの場合は、そのファイルの内容は上書きされます。/usr/bin/ln は、target のモードが書き込み禁止であった場合、そのモード (chmod(1) を参照) を出力し、応答を要求し、標準入力から 1 行を読み取ります。応答が肯定である場合、アクセス権が与えられていればリンクが行われ、アクセス権が与えられていなければコマンドは終了します。
target がファイルで -f オプションが指定されていない場合は、/usr/xpg4/bin/ln は標準エラーに診断メッセージを書き込み、現在の source_file には何も行わず、他の残りの source_file に処理を進めます。
シンボリックリンクはファイルへの間接的なポインタで、そのディレクトリエントリにはリンク先のファイルの名前が書かれています。シンボリックリンクはファイルシステムをまたぐことができ、またディレクトリを参照することもできます。
ハードリンクを作成する時や、リンク元のファイル自体がシンボリックリンクである時、リンク先は、シンボリックリンクのオブジェクト自体 (source_file) へのハードリンクではなく、シンボリックリンクによって参照されているファイルへのハードリンクになります。
target のアクセス権は -l を付けた ls(1) コマンドで表示される アクセス権とは、異なる場合があります。target のアクセス権を表示する場合は、ls –lL を使用してください。詳細については、stat(2) を参照してください。
以下のオプションは、/usr/bin/ln と /usr/xpg4/bin/ln で指定できます。
target のモードで書き込みが禁止されていても、ユーザーに問い合わせることをしないリンクファイル。標準入力が端末でない場合、デフォルトはこの設定になっています。
シンボリックリンクを作成します。
-s オプションに 2 つの引数を指定する場合、target に指定できるのは、既存のディレクトリまたは存在しないファイルです。target がすでに存在し、ディレクトリでもない場合は、エラーが返されます。ファイル名 source_file には、あらゆるパス名を指定でき、それは既存のものである必要はありません。既存のパス名にする場合は、ファイルとディレクトリのいずれも指定でき、また、target とは異なるファイルシステムにあるものを 指定することもできます。target が既存のディレクトリである場合は、ディレクトリ target の中に source_file または source_file の最後の構成要素の名前の付いたファイルが作成されます。このファイルは、source_file を参照するシンボリックリンクです。target が存在しない場合は、target という名前のファイルが作成され、source_file を参照するシンボリックリンクになります。
-s オプションに 3 つ以上の引数を指定する場合は、target は既存のディレクトリでなければなりません。既存のディレクトリでない場合は、エラーが返されます。source_file ごとに、target の中に source_file の最後の構成要素の名前の付いたリンクが作成されます。新しい source_file は、それぞれ、元の source_file へのシンボリックリンクです。ファイルとターゲットは、異なるファイルシステムにあってもかまいません。
以下のオペランドを指定できます。
リンクされるファイルのパス名。これは、通常ファイル、特殊ファイルのどちらでもかまいません。-s オプションが指定された場合には、source_file にはディレクトリを指定することもできます。
新しいディレクトリエントリのパス名、または 新しいディレクトリエントリが作られる既存ディレクトリのパス名。
ファイルが 2 ギガバイト (231 バイト) 以上ある場合の ln の動作については、largefile(5) を参照してください。
ln の実行に影響を与える環境変数 LC_CTYPE、 LC_MESSAGES、 NLSPATH についての詳細は、environ(5) を参照してください。
次の属性については attributes(5) のマニュアルページを参照してください。
ディレクトリへのシンボリックリンクは、予想とは異なった動作をする場合があります。シンボリックリンクに対して ls(1) を実行すると、指定したディレクトリ中のファイルが表示されますが、一方 ls -l はリンク自体の情報を表示します。
example% ln -s dir link example% ls link file1 file2 file3 file4 example% ls -l link lrwxrwxrwx 1 user 7 Jan 11 23:27 link -> dir |
cd(1) を使って、シンボリックリンクを介したディレクトリに変更すると、ファイルシステム中の指定位置に移ることになります。つまり新たな作業ディレクトリの親は、シンボリックリンクの親ではなく、指定されたディレクトリの親になります。以下に示す例で、最終的な作業ディレクトリは /home/user/linktest ではなく /usr である点に注意してください。
example% pwd /home/user/linktest example% ln -s /usr/tmp symlink example% cd symlink example% cd . . example% pwd /usr |
C シェルのユーザーは、cd の代わりに C シェルの組み込みコマンドである pushd や popd を使えば、ディレクトリ移動がこのように複雑になるのを回避できます。
名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 環境 | 終了ステータス | 属性 | 関連項目 | 注意事項