1. 概要

Linuxで作業している場合、既存のファイルへのリンクを作成できます。 このリンクは、ファイルポインタまたはファイル参照として機能します。基本的に、元のファイルにアクセスするためのショートカットとして機能します。

このチュートリアルでは、さまざまな手法を使用して、Linuxのあるディレクトリから別のディレクトリにすべてのファイルをリンクする方法を学習します。

2. サンプルディレクトリ

使用するsampleディレクトリ内のファイルのリストを見てみましょう。 これは、 ls-lコマンドを使用して実行できます。

$ ls -l sample
total 16
-rw-r--r--@ 1 bhat  bhat  1657 Jul  9  2021 file1.rtf
-rw-r--r--@ 1 bhat  bhat  1657 Jul  9  2021 file2.rtf

sampleディレクトリには、file1.rtffile2.rtfの2つのファイルが含まれています。

このチュートリアルの最終的な目標は、 samplelink、と呼ばれる別のディレクトリにデータを入力して、sampleディレクトリのすべてのファイルへのリンクを含めることです。 しかし、最初に、ソフトリンクについてもう少し学びましょう。

3. ソフトリンクの作成

ソフトリンクは、実際のファイルパスを含むように生成されたファイルです。 元のファイルの内容は保持されません。 lnコマンドを使用してソフトリンクを作成できます。

次に、sampleディレクトリ内にあるfile1.rtfファイルのソフトリンクを作成しましょう。

$ ln -s file1.rtf linkfile1

上記のコマンドを使用して、file1.rtfファイルを指すlinkfile1というソフトリンクを生成しました。 [X3X]-sオプションを指定したlnコマンドは、ファイルのソフトリンクを作成します。

ls-lコマンドを使用して出力を確認できます。

$ ls -l
total 16
-rw-r--r--@ 1 bhat  bhat 1657 Jul  9  2021 file1.rtf
-rw-r--r--@ 1 bhat  bhat 1657 Jul  9  2021 file2.rtf
lrwxr-xr-x  1 bhat  bhat    5 Jan 22 23:15 linkfile1.rtf -> file1.rtf

また、ソフトリンクファイルが作成されると、実際のファイルとは異なるiノード番号が付けられます。 これは、 ls-iコマンドを使用して確認できます。

$ ls -i
12746289 file1.rtf	12745765 file2.rtf	12747072 linkfile1.rtf

または、リンクの名前を指定せずにソフトリンクを作成することもできます。 このアプローチでは、 ln コマンドは、現在の作業ディレクトリに、ターゲットファイルとまったく同じ名前のソフトリンクを生成します。

次に、sampleディレクトリ内にあるfile1.rtfファイルのソフトリンクを作成しましょう。

$ ln -s /sample/file1.rtf

ここでは、file1.rtfファイルのソフトリンクを生成しました。

結果を見てみましょう。

$ ls -l
lrwxr-xr-x  1 bhat  bhat   17 Jan 30 23:32 file1.rtf -> /sample/file1.rtf

ただし、サンプルディレクトリ内から実行した場合、上記の例では目的の結果が得られないことに注意する必要があります。

sampleディレクトリ内で同じコマンドをもう一度実行してみましょう。

$ cd sample
$ ln -s /sample/file1.rtf
ln: ./file1.rtf: File exists

上記の例では、 file1.rtf ファイルのソフトリンクが作成されておらず、「Fileexists」メッセージが出力として受信されていることがわかります。

4. 1つのディレクトリからすべてのファイルをリンクする

あるディレクトリから別のディレクトリにすべてのファイルをリンクするためのいくつかの一般的な解決策について説明しましょう。

4.1. ln-sコマンドの使用

ln -s コマンドを使用して、ディレクトリ内のファイルに対して一度に複数のリンクを作成し、それらを別のディレクトリに保存できます。

次に、ファイルfile1.rtfおよびfile2.rtf sample ディレクトリ内)のソフトリンクをという別のディレクトリ内に生成します。 samplelink

$ ln -s sample/* samplelink

上記のコマンドを使用して、sampleディレクトリ内のすべてのファイルのソフトリンクを生成しました。 (*)は、sampleディレクトリ内のすべてのファイルを表します。 samplelink ディレクトリには、sampleディレクトリからのすべてのファイルへのリンクが含まれているはずです。

$ ls -l samplelink
total 0
lrwxr-xr-x  1 bhat  bhat  16 Jan 23 22:57 file1.rtf -> sample/file1.rtf
lrwxr-xr-x  1 bhat  bhat  16 Jan 23 22:57 file2.rtf -> sample/file2.rtf

4.2. ln-fsコマンドの使用

ln -fs コマンドを使用して、あるディレクトリから別のディレクトリにすべてのファイルをリンクすることもできます。

$ ln -fs  sample/* samplelink

今回は、 sample ディレクトリにあるすべてのファイル( sample / * で示される)のソフトリンクを作成しました。 ここでは、コマンドラインオプション(-fおよび-s)を解析しました。 これは、複数の1文字のオプションを1つのオプション文字列に融合することによって行われます。

オプション-fを指定したlnコマンドは、既存の宛先ファイルを削除し、-sオプションはソフトリンクを作成します。

結果を見てみましょう。

$ ls -l samplelink
total 0
lrwxr-xr-x  1 bhat  bhat  16 Jan 24 14:27 file1.rtf -> sample/file1.rtf
lrwxr-xr-x  1 bhat  bhat  16 Jan 24 14:27 file2.rtf -> sample/file2.rtf

このセクションで説明するアプローチはいずれも、ディレクトリ内の非表示のファイルには機能しないことに注意する必要があります。 

5. 結論

この記事では、lnコマンドを使用して1つのディレクトリから別のディレクトリにすべてのファイルをリンクする方法を学習しました。 さらに、Linuxでファイルのソフトリンクを作成する方法を確認しました。