ln コマンド
目的
ファイルをリンクします。
構文
ファイルをファイルにリンクする
ln [ -f | -n ] [ -s ] [ -P | -L ] SourceFile [ TargetFile ]
1 つ以上のファイルをディレクトリーにリンクする
ln [ -f | -n ] [ -s ] [ -P | -L ] SourceFile ... TargetDirectory
説明
ln コマンドは、SourceFile パラメーターで指定されたファイルを、TargetFile パラメーターで指定されたファイルまたは TargetDirectory パラメーターで指定された別のディレクトリー内の同じファイル名にリンクします。デフォルトでは、ln コマンドはハード・リンクを作成します。 ln コマンドを使用してシンボリック・リンクを作成するには、-s フラグを指定します。
シンボリック・リンクはファイルへの間接ポインターで、そのディレクトリー・エントリーにはリンク先のファイルの名前が含まれます。 シンボリック・リンクは複数のファイルシステムにおよび、複数のディレクトリーを参照する場合もあります。
ファイルを新しい名前にリンクする場合、リストできるファイルは 1 つだけです。 ディレクトリーにリンクする場合は、複数のファイルをリストできます。
TargetFile パラメーターはオプションです。 ターゲット・ファイルを指定しないと、ln コマンドは、現行ディレクトリーに新しいファイルを作成します。 この新しいファイルは、SourceFile パラメーターで指定されたファイルの名前を継承します。 例 5 を参照してください。
-P フラグを指定した場合や、ソース・ファイルがシンボリック・リンクの場合、ln コマンドは linkat() サブルーチンのように動作します。 この場合、SourceFile パラメーターは Path1 引数、ターゲット宛先パスは linkat() サブルーチンの Path2 引数です。 パラメーター値 DirFileDescriptor1 と DirFileDescriptor2 はいずれも AT_FDCWD に設定され、linkat() サブルーチンの Flag パラメーターは 0 に設定されます。
-L フラグを指定した場合や、ソース・ファイルがシンボリック・リンクの場合、ln コマンドは linkat() サブルーチンのように動作します。 この場合、SourceFile パラメーターは Path1 引数、ターゲット宛先パスは linkat() サブルーチンの Path2 引数です。 パラメーター値 DirFileDescriptor1 と DirFileDescriptor2 はいずれも AT_FDCWD に設定され、linkat() サブルーチンの Flag パラメーターは AT_SYMLINK_FOLLOW に設定されます。
ハード・リンク作成時のデフォルト動作を変更するために -s フラグを指定して別名を作成する場合 (例えば、alias ln=' ln -L')、-L フラグと -P フラグは無視されます。 SourceFile パラメーター値は作成されたシンボリック・リンクの内容として使用されるストリングとして働き、ソース・ファイルはファイルとして存在する必要がないためです。
注:
- -s フラグを使用せずにファイルシステムを通してファイルをリンクすることはできません。
- TargetDirectory が既にディレクトリーへのシンボリック・リンクである場合、ln コマンドは既存のターゲットをファイルとして扱います。これは、ln -fs somepath/lname symdir などのコマンドは、symdir への既存のシンボリック・リンクに従わず、somepath/lname から symdir に新しいシンボリック・リンクを作成するということを意味しています。
フラグ
項目 | 説明 |
---|---|
-f | ln コマンドに既に存在する宛先パスを置換させます。 宛先パスが既に存在していて -f フラグが指定されなければ、ln コマンドは新しいリンクを作らずに、診断メッセージを標準エラーに書き込み、残りの SourceFiles のリンクを続行します。 |
-L | シンボリック・リンク・タイプのファイルを命名する各 SourceFile パラメーターのシンボリック・リンクによって参照されるファイルへのハード・リンクを作成します。 |
-n | リンクが既存ファイルである場合に、ファイルの内容に上書きしないことを指定します。 -f フラグはこのフラグをオーバーライドします。 これがデフォルトの動作です。 |
-P | シンボリック・リンク・タイプのファイルを命名する各 SourceFile パラメーターのシンボリック・リンクへのハード・リンクを作成します。 |
-s | ln コマンドはシンボリック・リンクを作成させます。
シンボリック・リンクはリンク先のファイルの名前を含みます。
参照されたファイルはリンク上でオープン操作を実行するときに使われます。
シンボリック・リンクに対する stat 呼び出しはリンク先のファイルを戻すので、lstat 呼び出しを行ってリンクに関する情報を得なければなりません。
readlink 呼び出しを使ってシンボリック・リンクの内容を読み取ることができます。
シンボリック・リンクはファイルシステム間で行うことができ、ディレクトリーを参照することができます。
注: -s フラグに SourceFile パラメーターを指定するときは、絶対パス名を使用しなければなりません。 絶対パス名が指定されないと、SourceFile パラメーターと TargetFile パラメーターが異なるディレクトリーに存在する場合は、その結果が予想できないことがあります。 シンボリック・リンクを作成する前にソース・ファイルが存在している必要はありません。 |
終了状況
このコマンドは次の終了値を戻します。
項目 | 説明 |
---|---|
0 | 指定されたファイルはすべて正常にリンクされました。 |
>0 | エラーが発生しました。 |
例
- 別のリンク (別名) をファイルに作成するには、次のように入力します。
これによって、chap1 が新しい名前 intro にリンクされます。 intro が存在しないと、そのファイル名が作成されます。 intro が存在すると、ファイルは chap1 へのリンクによって置換されます。 これで、chap1 と intro は同じファイルを参照する 2 つのファイル名になります。 どちらか 1 つが変更されると、他の 1 つも変更されます。 どちらか 1 つのファイル名を rm コマンドで削除しても、そのファイルは別のファイル名で残っているので、ファイル自体は削除されません。ln -f chap1 intro
- ファイルを別のディレクトリー内の同じ名前にリンクするには、次のように入力します。
これによって index が新しい名前 manual/index にリンクされます。ln index manual
注: 例 1 の intro はファイルの名前ですが、例 2 の manual は既に存在するディレクトリーです。
- 複数のファイルを別のディレクトリー内の名前にリンクするには、次のように入力します。
これによって chap2 が新しい名前 /home/manual/chap2 にリンクされ、jim/chap3 が同じく新しい名前 /home/manual/chap3 にリンクされます。ln chap2 jim/chap3 /home/manual
- パターン・マッチング文字を指定して ln コマンドを使用するには、次のように入力します。
これによって、manual ディレクトリー内のすべてのファイルが現行ディレクトリーである . (ドット) ディレクトリーにリンクされ、 それらのファイルには manual ディレクトリーで付けられていたファイル名と同じ名前が付けられます。ln manual/* .
注: アスタリスクとピリオドの間にはスペースを入力しなければなりません。
- シンボリック・リンクを作成するには、次のように入力します。
これによって、現行ディレクトリーにシンボリック・リンク toc が作成されます。 toc ファイルは /tmp/toc ファイルを指します。 /tmp/toc ファイルが存在すると、cattoc コマンドはその内容をリストします。ln -s /tmp/toc toc
TargetFile パラメーターを指定しないで同じ結果を得るには、次のように入力します。
ln -s /tmp/toc
- toc ファイルのシンボリック・リンクへのハード・リンクを作成するには、次のように入力します。
ln -P toc target
- シンボリック・リンクによって参照される /tmp/toc ファイルへのハード・リンクを作成するには、次のように入力します。
ln -L toc target
ファイル
項目 | 説明 |
---|---|
/usr/bin/ln | ln コマンドが入っています。 |