8.4.20 lnコマンド(ファイル,またはディレクトリへのリンクファイルを作成する)
形式
- 形式1
-
ln [-f] [-i] [-L] [-n] [-P] [-s] [-T] [-v] [--follow={yes | no}] [--no-exist-directory] [--no-exist-file] リンク先パス名 ... [ターゲット]
- 形式2
-
ln [-f] [-i] [-L] [-n] [-P] [-s] [-v] [--follow={yes | no}] [--no-exist-directory] [--no-exist-file] -t ターゲットディレクトリ名 リンク先パス名 ...
機能
ファイル,またはディレクトリへのリンクファイルを作成します。-sオプションの指定に従って,ハードリンク,またはシンボリックリンクを作成します。
lnコマンドでシンボリックリンクを作成する場合は,シンボリックリンク作成権限を持つユーザーで実行してください。シンボリックリンク作成権限を持たないユーザーではシンボリックリンクを作成できません。また,ユーザーアカウント制御(UAC)が有効な環境では,シンボリックリンク作成権限を持つユーザーでもシンボリックリンクを作成できません。UACが有効な環境でシンボリックリンクを作成する場合は,シンボリックリンク作成権限を持つユーザーに管理者特権を持たせてください。
形式1の場合,引数ターゲットに指定したパスにリンクファイルを作成します。引数ターゲットがディレクトリの場合はディレクトリ内にリンクファイルを作成します。
形式2の場合,ターゲットディレクトリ内にリンクファイルを作成します。
引数
-f
- --force
-
引数ターゲットに指定したファイルがすでに存在する場合,既存のファイルを削除してからリンクファイルを作成します。
-iオプションと同時に指定した場合は,-iオプションの指定が有効となります。
ただし,環境変数ADSH_CMDLN_OPT_I_FにLASTを指定することで最後に指定したオプションを有効にできます。
-i
- --interactive
-
引数ターゲットに指定したファイルがすでにある場合は,削除するかどうか問い合わせをします。標準入力からの応答文字がyまたはYで始まっていれば,既存のファイルを削除しリンクファイルを作成します。それ以外の文字を応答したり,標準入力が使用できない場合は処理を中断します。
-fオプションと同時に指定した場合,-iオプションの指定が有効となります。
ただし,環境変数ADSH_CMDLN_OPT_I_FにLASTを指定することで最後に指定したオプションを有効にできます。
-L
- --logical
-
引数リンク先パス名にシンボリックリンクを指定した場合,シンボリックリンクをたどり,リンク先が示すファイルの実体に対するハードリンクを作成します。ただし,リンク先が示すファイルが存在しない場合は作成しません。
このオプションはハードリンク作成時に有効なオプションです。-sオプションと同時に指定した場合は指定を無視します。
-Lオプション,-Pオプションのどちらも指定しなかった場合,-Lオプションが指定されたものとします。
-Lオプションと-Pオプションを同時に指定した場合,最後に指定したオプションが有効となります。
-n
- --no-dereference
-
意味を持たないオプションです。指定を無視します。
- --follow={yes | no}
-
このオプションは,引数ターゲットに,ディレクトリに対するシンボリックリンクを指定したときの動作を選択するオプションです。
yesを指定した場合,引数ターゲットに指定したディレクトリに対するシンボリックリンクをたどり,リンク先のディレクトリにリンクファイルを作成します。
noを指定した場合,引数ターゲットに指定したディレクトリに対するシンボリックリンクをたどらず,リンクファイル名として扱います。
--followオプションの指定がない場合は,yesが指定されたものとします。
-P
- --physical
-
引数リンク先パス名にシンボリックリンクを指定した場合,シンボリックリンクをたどらず,シンボリックリンク自身のハードリンクを作成します。
このオプションはハードリンク作成時に有効なオプションです。-sオプションと同時に指定した場合は指定を無視します。
-Lオプション,-Pオプションのどちらも指定をしなかった場合,-Lオプションが指定されたものとします。
-Lオプションと-Pオプションを同時に指定した場合,最後に指定したオプションが有効となります。
-s
- --symbolic
-
引数リンク先パス名に指定したファイル,またはディレクトリに対してシンボリックリンクを作成します。
-sオプションの指定がない場合はハードリンクを作成します。ただし,次のハードリンクは作成できません。
-
引数リンク先パス名に指定した対象が存在しない
-
ディレクトリに対するハードリンク
-
UNIXの場合:異なるファイルシステムのファイル
-
Windowsの場合:異なるドライブレターのファイル
-sオプションの指定がある場合はシンボリックリンクを作成します。
- UNIXの場合
-
引数リンク先パス名に指定した対象の有無にかかわらず作成できます。
- Windows
-
引数リンク先パス名に指定した対象が存在しない場合,作成できません。引数リンク先パス名に指定した対象が存在しない状態でシンボリックリンクを作成する場合は--no-exist-directoryオプション,または--no-exist-fileオプションを指定してください。
作成したハードリンクはリンク先のアクセス権限を引き継ぎます。
作成したシンボリックリンクのアクセス権限は次のとおりです。
-
UNIXの場合:全ユーザーに対してフルコントロール
-
Windows:作成するディレクトリのアクセス権限を継承した上で,Everyoneにフルコントロール
-
-t ターゲットディレクトリ名
- --target-directory=ターゲットディレクトリ名
-
リンクファイルを作成するディレクトリを指定します。次のどれかの場合,エラー終了します。
-
-Tオプションと同時に指定した。
-
ターゲットディレクトリ名にディレクトリ,またはディレクトリに対するシンボリックリンクのどちらでもないパスを指定した。
-
存在しないディレクトリをターゲットディレクトリ名に指定した。
-
このオプションを複数指定した。
-
-T
- --no-target-directory
-
引数ターゲットに指定したディレクトリに対するシンボリックリンクをたどらず,リンクファイル名として扱います。
次のどちらかを満たす場合,エラー終了します。
-
引数ターゲットに指定した内容と同名のディレクトリが存在した。
-
-tオプションと同時に指定した。
-
-v
- --verbose
-
引数リンク先パス名と,作成するリンクファイルを標準出力に出力します。出力形式は次のとおりです。
-
ハードリンク作成時
`引数リンク先パス名' => `作成するリンクファイル'
-
シンボリックリンク作成時
`引数リンク先パス名' -> `作成するリンクファイル'
-
- --no-exist-directory
-
- Windowsの場合
-
このオプションを指定すると,シンボリックリンク作成時に,引数リンク先パス名に指定したファイル,ディレクトリが存在しない場合,ディレクトリに対するシンボリックリンクを作成します。
シンボリックリンクが指すディレクトリが存在しない状態で,ディレクトリに対するシンボリックリンクを先行して作成したい場合は,このオプションを指定してください。
なお,次のどちらかを満たす場合,このオプションの指定を無視します。
・引数リンク先パス名に指定したファイル,ディレクトリが存在する。
・-sオプションが指定されていない。
--no-exist-directoryオプションと--no-exist-fileオプションを同時に指定した場合は,最後に指定したオプションが有効になります。
- UNIXの場合
-
指定を無視します。
- --no-exist-file
-
- Windowsの場合
-
このオプションを指定すると,シンボリックリンク作成時に,引数リンク先パス名に指定したファイル,ディレクトリが存在しない場合,ファイルに対するシンボリックリンクを作成します。
シンボリックリンクが指すファイルが存在しない状態で,ファイルに対するシンボリックリンクを先行して作成したい場合は,このオプションを指定してください。
なお,次のどちらかを満たす場合,このオプションの指定を無視します。
・引数リンク先パス名に指定したファイル,ディレクトリが存在する。
・-sオプションが指定されていない。
--no-exist-fileオプションと--no-exist-directoryオプションを同時に指定した場合は,最後に指定したオプションが有効になります。
- UNIXの場合
-
指定を無視します。
- リンク先パス名
-
作成するリンクファイルが指すファイルパス名,またはディレクトリパス名を指定します。リンク先パス名は複数指定できます。リンク先パス名を2つ以上指定する場合は,引数ターゲットにディレクトリを指定する,または形式2によって-tオプションでディレクトリを指定してください。
- ターゲット
-
作成するリンクファイル名,またはリンクファイルを作成するディレクトリ名を指定します。
リンクファイル名を指定した場合,指定したファイル名でリンクファイルを作成します。リンクファイルを作成するディレクトリ名を指定した場合,引数リンク先パス名に指定したファイルと同じ名前のリンクファイルを,指定したディレクトリ配下に作成します。
ターゲットの指定を省略した場合,カレントディレクトリにリンクファイルを作成します。
ディレクトリに対するシンボリックリンクを指定した場合,シンボリックリンクをたどり,リンク先のディレクトリにシンボリックリンクを作成します。ただし,次のどれかを指定することでシンボリックリンクをたどらないでリンクファイル名として扱うことができます。
-
-Tオプション
-
--followオプションにnoを指定する
-
環境変数ADSH_CMDLN_FOLLOWにNOを指定する
-
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了 |
1以上 |
エラー終了 |
注意事項
プラットフォーム共通の注意事項
-
1つのファイルに対して複数のハードリンクを作成できます。しかし,OS,またはファイルシステムによって,1つのファイルに対して作成できるハードリンク数には上限があります。そのため,上限を超えた場合,ハードリンクの作成に失敗します。
-
引数リンク先パス名,または引数ターゲットに指定したシンボリックリンクをたどる際にシンボリックリンクのネストの回数がOSの上限を超えるとエラーとなり,シンボリックリンクの作成に失敗します。
-
引数リンク先パス名,引数ターゲットに指定するファイルパスには,実行するOSに合わせたディレクトリ区切り文字を指定してください。ディレクトリ区切り文字の指定を誤った場合,リンク先をたどることができない場合があります。Advanced Shellで使用できるディレクトリ区切り文字の詳細は「2.2.3(1) Advanced Shellで使用するファイルの一覧」の「ファイルとパスの指定に関する注意事項」に関する説明を参照してください。
-
引数リンク先パス名を相対パスで指定すると,シンボリックリンクは自身が存在するディレクトリを起点として,その位置からリンク先を指すことになります。そのため,カレントディレクトリとシンボリックリンクを作成するディレクトリが異なる場合は注意してください。例を次に示します。
このため,カレントディレクトリとシンボリックリンクを作成するディレクトリが異なる場合は,引数リンク先パス名を絶対パスで指定するか,シンボリックリンクを作成するディレクトリからの相対パスで指定してください。
-
作成するリンクファイルと同名のファイル,ディレクトリが存在する環境で,-fオプションを指定,または-iオプションの応答でy,またはYを返した場合,lnコマンドはリンクファイルを作成するディレクトリに一時ファイルを作成します。このため,lnコマンドの実行を中断すると,一時ファイルが残る場合があります。この場合は手動で削除してください。
-
リンクファイルを作成するディレクトリパス名の長さによっては一時ファイルの作成に失敗することがあります。その際は,既に存在する同名のファイルを削除,または名称を変更するか,作成するリンクファイル名を変更してください。
-
引数ターゲットにディレクトリに対するシンボリックリンクを指定した場合の解釈は,-Tオプション,--followオプション,環境変数ADSH_CMDLN_FOLLOWの指定によって切り替えられます。同時に指定した場合の優先順位は-Tオプション,--followオプション,環境変数ADSH_CMDLN_FOLLOWの順となります。
-
-iオプションと-fオプションを同時に指定した場合,常に-iオプションの指定が有効になります。ただし,環境変数ADSH_CMDLN_OPT_I_FにLASTを指定することで最後に指定したオプションを有効にすることができます。
UNIX版限定の注意事項
次に対するハードリンクを作成することはできません。
-
ディレクトリ
-
存在しないファイル
-
異なるファイルシステムのファイル
Windows版限定の注意事項
-
次に対するハードリンクを作成することはできません。
-
ディレクトリ
-
存在しないファイル
-
異なるドライブレターのファイル
-
-
NTFS以外のファイルシステムにリンクファイルを作成できません。
-
lnコマンドで作成したシンボリックリンクには,作成したディレクトリのアクセス権限を継承した上で,Everyoneにフルコントロールのアクセス権限を付加します。
-
実行ファイルに対してハードリンク,またはシンボリックリンクを作成する場合は,拡張子「.bat」,「.com」,「.cmd」,または「.exe」を付加してください。また,ジョブ定義スクリプト内にも拡張子を付加したリンクファイル名を記述してください。
-
引数リンク先パス名に存在しないファイル,またはディレクトリを指定してシンボリックリンクを作成しようとすると,エラーとなりシンボリックリンクは作成されません。存在しないファイル,またはディレクトリに対してシンボリックリンクを作成する場合は,--no-exist-directory,--no-exist-fileオプションを指定してください。
-
引数ターゲット,またはターゲットディレクトリにはUNC形式を指定できません。指定した場合はエラー終了します。また,引数リンク先パス名にUNC形式を指定して,ハードリンクを作成するとエラー終了します。
-
-fオプション指定時,または-fオプションを指定してy,Yを応答した場合であっても,すでに存在するファイルのアクセス権限によっては削除できないで,新しいリンクファイルの作成に失敗する場合があります。
-
シンボリックリンク作成時にフルコントロールの割り当てに失敗した場合,不当なシンボリックリンクが残る場合があります。
-
ファイルシステムの保護を目的とした製品をインストールしている環境では,シンボリックリンクを使用できない場合があります。ファイルシステムの保護を目的とした製品をインストールしている環境で,このコマンドを使用した場合,「Failed to rename a temporary file」というメッセージを出力し,エラー終了することがあります。また,このメッセージを出力した場合,一時ファイルが残ることがあります。この場合,Advanced Shellが提供するrmコマンドなどを使用して一時ファイルを削除し,シンボリックリンクを再作成してください。
使用例
ファイルへのハードリンクを作成します。
C:\TEMP>%ADSH_OSCMD_DIR%ln test.txt hlink.txt C:\TEMP>%ADSH_OSCMD_DIR%ls -l total 714 -rw------- 2 Administrators 357 Jun 01 15:05 hlink.txt -rw------- 2 Administrators 357 Jun 01 15:05 test.txt
引数ターゲットを省略してファイルへのハードリンクを作成します。
C:\TEMP>%ADSH_OSCMD_DIR%ln testdir\new.txt C:\TEMP>%ADSH_OSCMD_DIR%ls -l total 3572 -rw------- 2 Administrators 3572 Jun 04 11:19 new.txt drwx------ 1 Administrators Jun 04 11:19 testdir C:\TEMP>%ADSH_OSCMD_DIR%ls -l testdir total 3572 -rw------- 2 70247321 3572 Jun 04 11:19 new.txt
ファイルへのシンボリックリンクを作成します。
C:\TEMP>%ADSH_OSCMD_DIR%ln -s test.txt slink.txt C:\TEMP>%ADSH_OSCMD_DIR%ls -l total 357 lrw------- 1 Administrators 0 Jun 01 15:07 slink.txt -> test.txt -rw------- 1 Administrators 357 Jun 01 15:05 test.txt
ディレクトリへのシンボリックリンクを作成します。
C:\TEMP>%ADSH_OSCMD_DIR%ln -s testdir slinkdir C:\TEMP>%ADSH_OSCMD_DIR%ls -l total 0 lrw------- 1 Administrators 0 Jun 01 15:08 slinkdir -> testdir drwx------ 1 Administrators Jun 01 15:05 testdir
オプションエラーのメッセージを表示します。このメッセージは,コマンドを実行するプラットフォームによって異なる場合があります。Windowsの例を次に示します。
C:\TEMP>%ADSH_OSCMD_DIR%ln -z ln: illegal option -- z usage: ln [-f] [-i] [-L] [-n] [-P] [-s] [-T] [-v] [--follow={yes | no}] [--no-exist-directory] [--no-exist-file] linkpath ... [target] ln [-f] [-i] [-L] [-n] [-P] [-s] [-v] [--follow={yes | no}] [--no-exist-directory] [--no-exist-file] -t target_directory linkpath ...