ln - ファイルへのリンクを作成する

形式

  • ln [-fiRrs] old new
  • ln [-fiRrs] old old ... dir
  • ln -e [-fi] old new

説明

ln は、 既存のファイルまたはファイルのセットへのリンクを作成します。リンク は、同じファイルを参照する新規のディレクトリー項目です。この項目は、現在そのファイルが入っているのと同じディレクトリー内にあっても、また別のディレクトリー内にあっても構いません。結果として、ファイルを参照する新しいパス名が得られます。ファイルは、古いパス名でも新しいパス名でもアクセスすることが できます。両方のパス名の重要性は同じです。どちらかの名前を除去するために rm を使用した 場合、もう一方の名前は依然として残っており、ファイルの内容はその名前によって使用可能です。ファイルの内容は、最後のリンクが除去されるまで、消えることはありません。

ファイルは、自分への任意の数のリンクを持つことができます。したがって、任意のファイルは任意の数の異なったパス名を確立することができます。

構文に示された最初の形式では、new が、既存ファイル old に対する 新しいパス名になります。2 番目の形式の ln は、ディレクトリー dir の下にある すべての old ファイルに対して項目を作成します。例えば、
ln yourdir/* mydir

は、mydir の下に、yourdir の下の すべてのファイルへのリンクを作成します。これらのファイルは、yourdir の 下で持っていたのと同じ名前を mydir の下でも持ちます。コマンド行の最後のオペランドがディレクトリーの名前である場合は、ln は常にこのディレクトリー形式を取ります。 この場合、-r または -R を指定していない限り、どの old の 名前もディレクトリーであってはなりません。

セットアップしようとしているリンクと同じ名前のファイルが、 すでに存在している可能性があります (対立パス名)。 対立するパス名を処理するには、ln は以下のステップに従います。
  • –i を指定した場合、ln は標準エラーに プロンプトを書き込み、対立パス名を取り除くかどうかを尋ねます。応答が肯定的であれば 、ln はその除去を試みます。
  • それ以外の場合、–f が指定されていれば、ln は警告せずに 既存ファイルの除去を試みます。
  • それ以外の場合、ln は診断メッセージを出力します。
  • ln が対立パス名を取り除こうとしている場合は、この段階に進みます。したがって、rm と同じ方法で対立パス名を取り除こうと 試みます。このパス名がファイルへの最後のリンクである場合、ln はパス名に関連した ファイルを削除します。対立パス名を取り除けない場合、ln は新しい リンクの確立を試みません。単に、標準エラーに エラー・メッセージを出力し、他のファイルに対して処理を続けます。
  • 対立パス名を正常に取り除くことができた場合、ln はリンクを確立します。

オプション

-e
ln によって作成されたリンクが外部リンクになることを指定します。外部リンクを作成する目的の 1 つは、NFS クライアントがネットワーク・ファイル・システム機能を介してデータ・セットにアクセスするために使用できるマウント・ポイントを作成することです。これらのオプションのいずれかを -e と一緒に指定した場合、コマンドは失敗します。外部リンクの通常の内容は、階層ファイル・システムの外部のオブジェクト (データ・セットなど) を参照する名前です。ネットワーク・ファイル・システム機能が使用するデータ・セットは、いずれのタイプの MVS™ データ・セットでも構いません。ただし、区分データ・セットの場合は、完全修飾名をすべて大文字で指定してください。例えば、以下のとおりです。
ln -e NOLL.PLIB.PGMA /u/noll/plib/pgma

-e オプションは、-r -R-s とは互いに排他的です。

NFS プロトコルの制限により、-e は NFS で外部リンクを作成しません。 外部リンクを NFS 上に作成する場合は、「z/OS Network File System ガイドおよび解説書」の外部リンクの作成に関するトピックで詳細を参照してください。

外部リンクを使用して、実行可能ロード・モジュールの z/OS® UNIX ファイル名を PDS または PDSE メンバー名にマップすることもできます。外部リンクの定義方法の例は、次のとおりです。
ln -e MYPGM /u/smorg/mylongpgmname
アプリケーションが実行可能ファイルとして /u/smorg/mylongpgmname へのアクセスを試みる場合、カーネルは、現行の MVS 検索順 (Job Pack Queue、STEPLIB/JOBLIB、LPA、LINK LIST) で MYPGM のロードを試みます。外部リンクに対してこのように機能するカーネル・サービスは、次のとおりです。
  • exec() (すべてのフレーバー)
  • spawn() (_spawn2、spawnp、_spawnp2 を含む)
  • loadhfs。すべての DLL 処理およびロケールに使用されます。
外部リンクは、現行の MVS 検索順でプログラムを呼び出すためのシェル・コマンドとして使用できます。
-f
確認を求めずに、すべての対立パス名を削除します。 -i も指定されている場合、 -i-f が コマンド行に指定されている順序に関係なく -i が無視されます。
-i
対立パス名を削除する前に、ユーザーにチェックを求めます。 -f も指定されている場合、-i-f がコマンド行に指定されている順序に関係なく -i が無視されます。
-R
再帰的にファイルをリンクします。すなわち、サブディレクトリー全体の階層を一度にリンクする ことができます。-R は、 -e オプションと互いに排他的です。
-r
-R と同等です。-r-e オプションと互いに排他的です。
-s
シンボリック・リンクを作成します。-r オプションは、 -e オプションと互いに排他的です。

シンボリック・リンクの場合、old は、リンクを作成したい先のフ ァイルを示します。そのファイルは存在していなくてもかまいません。 作成するシンボリック・リンクの名前は新規です。

f1 というファイルがあり、 そのファイルに my_sym というシンボリック・リンクを作成したい場合、 次のように実行します。
ln -s f1 my_sym

対立パス名を削除したいかどうかを ln が尋ねたときに、 「はい」という応答の内容をプログラムがどのように解釈するかは、LC_COLLATE、LC_CTYPE、 および LC_MESSAGES のロケール設定値に影響されます。

/u/user1/name2 へのシンボリック・リンクとして /u/user1/name1 を 定義してから、name1 を呼び出す場合:

  1. シェルが name1 を spawn します。
  2. spawn() は、シンボリック・リンクがすでに確立されていることを知らずに 、name1 のファイルにアクセスします。name2 ハンドルではなく、基礎となる v ノード によって name2 ファイルにアクセスします。
  3. name2 ファイルに関するスティッキー・ビットがオン の場合、spawn()name1 (処理する必要がある 唯一の名前) に関して MVS 検索を実行します。

スティッキー・ビットを伴うシンボリック・リンクおよび外部リンク:

注: DLL およびすべての種類の spawn()exec() は、 このセクションの説明と同じ処理を実行します。exec() の部分は、すべての形式のモジュールのロードに 対応しています。
  1. 外部リンク:

    exec() は、渡されたファイル名に対して stat() を実行します。stat()exec() ではなく、検索を実行します。ファイル名が外部リンクである場合、stat() は、固有の理由コードを示して 失敗し、exec() に外部リンクを読み取らせます。外部リンク名が 有効な PDS メンバー名 (1 から 8 桁の英数字または特殊文字) である場合 、exec() は MVS 検索順序内でモジュールの検索を試みます。見つけることができなかった場合、exec() は失敗します。

    外部リンクは、8 文字より長いか、または PDS メンバー名として受け入れられない 文字を含んでいるファイル名に関して、スティッキー・ビットをオンに設定したい場合 に通常使用します。

  2. シンボリック・リンク:

    exec() は、指定されるファイル名がシンボリック・リンクであり、スティッキー・ビット がオンであることを確認すると、すべてのドット修飾子を切り捨てます。 したがって、基本ファイル名が受け入れ可能な PDS メンバー名である限り 、exec() に MVS 検索順序での検索をさせるための リンクをセットアップする必要はなくなります。

    例えば、java.jll という名前のファイルがある場合、スティッキー・ビットを オンにすると、exec() は JAVA のロードを試みます。exec() は、JAVA を検出 できない場合には、再び、ファイル・システム内の java.jll ファイルを使用します。

    exec() は、最終ファイルの stat() データを見ることができたとしても、シンボリック・リンクが解決した名前を見ることはできない ことに注意してください。

ローカライズ

ln は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_CTYPE
  • LC_MESSAGES
  • LC_SYNTAX
  • NLSPATH

詳しくは、ローカライズを参照してください。

終了値

0
要求されたリンクは、すべて正常に確立された。
1
以下のいずれかによる失敗。
  • 引数の末尾に / があったが、ディレクトリーの名前がなかった
  • ファイルが見つからなかった
  • 入力ファイルを読み取り用に開くことができなかった
  • 出力ファイルを作成できなかった、または出力用に開くことができなかった
  • 新しいリンク・ファイルがすでに存在している。
  • リンクが確立できなかった
  • 入力ファイルで読み取りエラーが発生した。
  • 出力ファイルで書き込みエラーが発生した。
  • 入力ファイルと出力ファイルが同一である。
  • -r を使用しているときに、ファイルにアクセスできなかった
  • -r を使用しているときに、ディレクトリーを読み取れなかった
  • -r を使用しているときに、ディレクトリーを作成できなかった
  • -r を使用しているときに、ターゲットがディレクトリーでない
  • -r を使用しているときに、ソース・ディレクトリーと宛先ディレクトリーが同一である
2
以下のいずれかによる失敗。
  • コマンド行オプションが正しくない。
  • コマンド行の引数が少なすぎる。
  • ターゲットはディレクトリーでなければならないが、そうでない。
  • ターゲット装置にスペースが残っていない。
  • コピーするデータを保持するメモリーがない
  • ターゲット・ファイルを保持するためのディレクトリーを作成できない

メッセージ

以下の エラー・メッセージが出される可能性があります。
link to target name failed
ln は、与えられたファイルまたはディレクトリーへの リンクを確立できませんでした。ユーザーが適切な許可を受けていないか、またはターゲットが存在しないためと考えられます。
source name and target name are identical
ソースとターゲットが実際には同一のファイルです (例えば、UNIX システム上で、リンクが原因で)。この場合、ln は何もしません。
target directory name on different file system than source name
2 つの異なるファイル・システムのファイル間に 正常なリンクを確立することはできません。
target name must be a directory
ターゲット名はディレクトリーである必要があります。
cannot find file name
ファイル名を検出できませんでした。
target file name already exists
ターゲット・ファイル名はすでに存在します。

移植性

POSIX.2 , X/Open 移植性ガイド, UNIX システム.

-f オプションのみが POSIX 標準の一部です。

関連情報

cplocalemvrm