ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- ファイルへのハードリンクまたはシンボリックリンクの作成
/usr/bin/ln [-fns] source_file [target]
/usr/bin/ln [-fns] source_file... target
/usr/xpg4/bin/ln [-fs] source_file [target]
/usr/xpg4/bin/ln [-fs] source_file... target
前述の 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 がファイルで -f オプションが指定されていない場合は、/usr/xpg4/bin/ln は標準エラーに診断メッセージを書き込み、現在の source_file には何も行わず、ほかの残りの source_file に処理を進めます。
シンボリックリンクはファイルへの間接的なポインタで、そのディレクトリエントリにはリンク先のファイルの名前が書かれています。シンボリックリンクはファイルシステムをまたぐことができ、またディレクトリを参照することもできます。
target のアクセス権は -l を付けた ls(1) コマンドで表示されるアクセス権とは、異なる場合があります。target のアクセス権を表示する場合は、ls -lL を使用してください。詳細については、stat(2) を参照してください。
/usr/bin/ln は、target のモードが書き込み禁止であった場合、そのモード (chmod(1) を参照) を出力し、応答を要求し、標準入力から 1 行を読み取ります。応答が肯定である場合、アクセス権が与えられていればリンクが行われ、それ以外の場合、コマンドは終了します。
ハードリンクを作成するときや、リンク元のファイル自体がシンボリックリンクであるとき、リンク先は、シンボリックリンクのオブジェクト自体 (source_file) へのハードリンクではなく、シンボリックリンクによって参照されているファイルへのハードリンクになります。
次のオプションは、/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 へのシンボリックリンクです。ファイルとターゲットは、異なるファイルシステムにあってもかまいません。
次のオプションは、/usr/bin/ln でのみ指定できます。
target が既存のファイルである場合、診断メッセージを標準エラーに書き込んで、残りの source_file に処理を進めます。-f オプションはこのオプションよりも優先されます。これは /usr/bin/ln と /usr/xpg4/bin/ln のデフォルトの動作であるため、指定しても無視されます。
次のオペランドがサポートされています。
リンクされるファイルのパス名。これは、通常ファイル、特殊ファイルのどちらでもかまいません。-s オプションが指定された場合には、source_file にはディレクトリを指定することもできます。
新しいディレクトリエントリのパス名、または新しいディレクトリエントリが作られる既存ディレクトリのパス名。
ファイルが 2G バイト (231 バイト) 以上ある場合の ln の動作については、largefile(5) を参照してください。
ln の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。
次の終了値が返されます。
指定されたファイルはすべて正常にリンクされました。
エラーが発生しました。
属性についての詳細は、attributes(5) を参照してください。
|
|
chmod(1), ls(1), stat(2), attributes(5), environ(5), largefile(5), standards(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
/usr/bin/sh または /usr/bin/csh を使用して、シンボリックリンクを介したディレクトリに変更すると (cd(1) 参照)、ファイルシステム中の指定位置に移ることになります。つまり新たな作業ディレクトリの親は、シンボリックリンクの親ではなく、指定されたディレクトリの親になります。これは、/usr/bin/ksh または /usr/xpg4/bin/sh から、-P オプションを付けて cd を実行するときにも発生します。次に示す例で、最終的な作業ディレクトリは /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 を使えば、ディレクトリ移動がこのように複雑になるのを回避できます。