2.2.7 ハードリンク,シンボリックリンクを使用する
Advanced Shellではハードリンク,シンボリックリンクを作成して使用できます。Advanced Shellで使用できるリンクファイルは次のとおりです。
-
ファイルへのハードリンク
-
ファイルへのシンボリックリンク
-
ディレクトリへのシンボリックリンク
以降,UNIX版とWindows版に分けて記載します。
(1) UNIX版
UNIX版のAdvanced ShellではUNIX互換コマンドのlnコマンド,およびOSが提供するコマンドを使用することでハードリンク,シンボリックリンクを作成して,ジョブ定義スクリプト内で使用できます。
(2) Windows版
(a) ハードリンク,シンボリックリンクに対応するファイル,フォルダ
Windows版のAdvanced ShellではUNIX互換コマンドのlnコマンド,およびOSが提供するコマンドを使用することでハードリンク,シンボリックリンクを作成できます。ハードリンク,シンボリックリンクに対応するファイル,フォルダは次のとおりです。
-
UNIX互換コマンド,シェル標準コマンドで扱うファイル,およびフォルダ
-
リダイレクト記号に指定するファイル
-
条件式のファイル属性で指定するファイル,およびフォルダ
また,次に示すファイル,フォルダに対してはハードリンク,シンボリックリンクを作成しないでください。
-
Advanced Shellが提供する各種コマンド
-
Advanced Shellインストール時に作成するファイル,およびフォルダ
-
ジョブ定義スクリプトファイル
-
外部スクリプトファイル
-
初期設定スクリプトファイル
-
子孫ジョブで実行するスクリプトファイル
-
スプールディレクトリ配下のファイル,およびフォルダ
-
一時ファイルディレクトリ配下のファイル,およびフォルダ
-
ログディレクトリ配下のファイル,およびフォルダ
-
環境ファイル
(b) シンボリックリンクを使用する前の確認事項
シンボリックリンクを使用する際は事前に次の点を確認してください。
-
シンボリックリンクを作成,削除,移動,または複製する場合は,シンボリックリンク作成権限を持つユーザーで実行してください。シンボリックリンク作成権限を持たないユーザーはシンボリックリンクに対して操作することはできません。また,ユーザーアカウント制御(UAC)が有効な環境では,シンボリックリンク作成権限を持つユーザーでもシンボリックリンクを作成できません。UACが有効な環境でシンボリックリンクを作成する場合は,シンボリックリンク作成権限を持つユーザーに管理者特権を付与してください。
-
シンボリックリンクを使用する前に,実行するマシンがシンボリックリンクの使用を許可されているか確認してください。シンボリックリンクの使用が許可されているかを確認する方法はWindowsのマニュアルを参照してください。
(3) 注意事項
ハードリンク,シンボリックリンクを使用する際の注意事項を次に示します。
(a) 全プラットフォーム共通の注意事項
-
リンクファイルの名称はAdvanced Shellが提供するコマンドと同じ名称にしないでください。
-
シンボリックリンクファイルのネストの回数がOSの上限を超えた場合の動作は,各OSの仕様に従います。
-
1つのファイルに対して複数のハードリンクを作成できます。しかし,OS,またはファイルシステムによって,1つのファイルに対して作成できるハードリンク数の上限が設けられています。上限を超えた場合はハードリンクの作成に失敗するため,注意してください。
(b) UNIX版の注意事項
カバレージ情報ファイル(ascファイル)の出力先にハードリンク,シンボリックリンクは指定できません。指定した場合,次のように動作します。
-
ascファイルの出力先にシンボリックリンクを指定すると,シンボリックリンクは削除され,同名の通常ファイルが作成されます。
-
1つのascファイルに複数のハードリンクを作成した状態でascファイルを更新しても,ascファイルのカバレージ情報は更新されません。
(c) Windows版の注意事項
-
NTFS以外のファイルシステムにリンクファイルを作成できません。
-
ファイルシステムを保護することを目的とした製品をインストールしている環境では,シンボリックリンクを使用できない場合があります。シンボリックリンクを使用する際はすでにインストールされている製品がシンボリックリンクに対応していることを確認してください。
-
シンボリックリンクを使用し実行ファイルを起動する場合は,シンボリックリンクと実行ファイルの両方の拡張子が「.bat」,「.com」,「.cmd」,「.exe」のどれかである必要があります。ただし,次の書式は実行ファイルを起動する実行プログラムの仕様に従うため,実行権限の判定も実行プログラムの仕様に従います。
-
awkコマンドのsystem関数
-
awkコマンドの書式 コマンド名 | getline [変数名]
-
awkコマンドの書式 print [式[, ... ]] | コマンド名
-
findコマンドの-execプライマリおよび-okプライマリ
-
xargsコマンド
-
-
シンボリックリンクを使用しファイル,フォルダにアクセスする場合は,リンク先のアクセス権限に従います。シンボリックリンク自身にアクセスする場合は,シンボリックリンク自身のアクセス権限に従います。
-
ディレクトリへのシンボリックリンクのリンク先が通常ファイル,またはファイルへのシンボリックリンクのリンク先がディレクトリとなっている場合,リンク先にアクセスできずエラー終了します。
-
リンクファイル対応に伴い,リンクファイルに関する情報も出力します。そのため,lsコマンドなどUNIX互換コマンドの出力形式が一部変更になります。リンクファイルを使用しないで,かつ出力形式を11-00より前に戻したい場合は環境変数ADSH_LINK_SUPPORTにL0を指定してください。
(4) 環境変数ADSH_LINK_SUPPORT(Advanced Shellのリンク対応レベルを定義する)
この製品は,JP1/Advanced Shell 11-00でハードリンクとシンボリックリンクに対応しました。それに伴い,実行結果以外に,出力形式と出力内容を一部変更しています。そのため,JP1/Advanced Shell 11-00より前からこの製品を使用していて,かつリンクファイルを使用しないユーザーは,環境変数ADSH_LINK_SUPPORTの指定を検討してください。
(a) 環境変数に設定できる値
環境変数ADSH_LINK_SUPPORTに指定できる値を次に示します。
値 |
意味 |
---|---|
L0 |
ハードリンク,シンボリックリンクは使用できません。 L0を指定した場合の主な変更点は次のとおりです。
|
L1 |
次の機能でハードリンク,シンボリックリンクを使用することができます。
|
上記以外 |
ジョブ,およびコマンドを実行しないでエラー終了します。 |
環境変数ADSH_LINK_SUPPORTにL0とL1を指定した場合の出力形式の違いを,lsコマンドを例に示します。なお,環境変数OSCMD_DIRにはlsコマンドがインストールされているディレクトリへのパスが格納されていると仮定しています。
-
L0の場合
C:\AS\temp>"%OSCMD_DIR%\ls" -l total 52064 -rw------- Administrator 10200 May 17 10:20 HARDLINK.txt -rw------- Administrators 10200 May 17 10:20 SYMLINK.txt drwx------ Administrator May 17 11:40 TestLog -rw------- Administrator 10200 May 17 10:20 test_data.txt -rw------- Administrator 10200 May 17 11:07 test_result.txt -rwx------ Administrator 11264 Mar 16 14:00 uap.exe
-
L1の場合
C:\AS\temp>"%OSCMD_DIR%\ls" -l total 41864 -rw------- 2 Administrator 10200 May 17 10:20 HARDLINK.txt lrw------- 1 Administrators 0 May 17 12:23 SYMLINK.txt -> .\test_data.txt drwx------ 1 Administrator May 17 11:40 TestLog -rw------- 2 Administrator 10200 May 17 10:20 test_data.txt -rw------- 1 Administrator 10200 May 17 11:07 test_result.txt -rwx------ 1 Administrator 11264 Mar 16 14:00 uap.exe
(b) 注意事項
-
環境変数ADSH_LINK_SUPPORTが未定義の場合は,L1が指定されたと解釈し動作します。
-
環境変数ADSH_LINK_SUPPORTにはL0,またはL1を指定してください。L0,L1以外の値を指定した場合,ジョブ,コマンドは終了コード255でエラー終了します。
-
環境変数ADSH_LINK_SUPPORTはWindows版で有効です。UNIX版では無効です。
-
ジョブ定義スクリプトファイルや環境ファイルで設定した場合,その設定は,ジョブ定義スクリプトから起動する子孫ジョブ,ルートジョブ,別プロセス実行,一部のUNIX互換コマンドにだけ有効となります。