Linux リンクの作成

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Linuxシステムでは、リンクはファイルやディレクトリを参照する強力な手段を提供します。これらのリンクは、ファイル名とディスクに保存されている実際のデータとの間に接続を作成します。リンクを効果的に使用する方法を理解することは、Linuxユーザーやシステム管理者にとって不可欠なスキルです。

この実験では、Linuxにおける2種類のリンクの作成と使用方法を案内します。

  1. ハードリンク:これらは、同じイノード(ディスク上のデータ)を指す追加のディレクトリエントリです。ハードリンクを作成すると、実質的に同じデータに別の名前を付けることになります。

  2. シンボリックリンク(ソフトリンクとも呼ばれます):これらは、名前で他のファイルを指す特殊なファイルです。ハードリンクとは異なり、シンボリックリンクはディレクトリを指すことができ、異なるファイルシステムにまたがることもできます。

この実験の終わりまでに、ln コマンドを使用して両方のタイプのリンクを作成する方法を理解し、Linux環境におけるそれらの実用的なアプリケーションを学ぶことができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cp("File Copying") linux/BasicFileOperationsGroup -.-> linux/mv("File Moving/Renaming") linux/BasicFileOperationsGroup -.-> linux/ln("Link Creating") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/pwd("Directory Displaying") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") subgraph Lab Skills linux/echo -.-> lab-271321{{"Linux リンクの作成"}} linux/ls -.-> lab-271321{{"Linux リンクの作成"}} linux/cp -.-> lab-271321{{"Linux リンクの作成"}} linux/mv -.-> lab-271321{{"Linux リンクの作成"}} linux/ln -.-> lab-271321{{"Linux リンクの作成"}} linux/cat -.-> lab-271321{{"Linux リンクの作成"}} linux/cd -.-> lab-271321{{"Linux リンクの作成"}} linux/pwd -.-> lab-271321{{"Linux リンクの作成"}} linux/mkdir -.-> lab-271321{{"Linux リンクの作成"}} end

作業ディレクトリの作成

このステップでは、リンクの作成を練習するために使用するディレクトリ構造とファイルを作成します。

まず、現在の位置を確認して、正しいディレクトリにいることを確認しましょう。次のコマンドを実行します。

pwd

出力として /home/labex/project が表示されるはずです。もし別のディレクトリにいる場合は、プロジェクトディレクトリに移動します。

cd /home/labex/project

次に、ファイルを保存する linklab という名前の新しいディレクトリを作成しましょう。

mkdir /home/labex/project/linklab

このディレクトリに移動しましょう。

cd /home/labex/project/linklab

次に、リンクの作成を練習するための2つのテキストファイルを作成しましょう。

echo "This is the original file for our link examples." > original.txt

ファイルが正しく作成されたことを確認しましょう。

ls -l

次のような出力が表示されるはずです。

-rw-r--r-- 1 labex labex 46 [date and time] original.txt

また、ファイルの内容を確認しましょう。

cat original.txt

先ほど入力したテキストがターミナルに表示されるはずです。

This is the original file for our link examples.

ハードリンクの作成

ハードリンクは、元のファイルと同じディスク上のデータを指す別の名前です。元のファイルとハードリンクは同じイノード番号を共有します。つまり、異なる名前を持つ同じファイルです。

ハードリンクを作成するには、ln コマンドを使用します。original.txt ファイルに対するハードリンクを作成しましょう。

ln /home/labex/project/linklab/original.txt /home/labex/project/linklab/hardlink.txt

このコマンドは、original.txt へのハードリンクである hardlink.txt という新しいファイルを作成します。次に、ハードリンクが正しく作成されたことを確認しましょう。

ls -li

-i オプションは、各ファイルのイノード番号を表示します。original.txthardlink.txt が同じイノード番号を持っていることがわかるはずです。これは、それらが同じファイルであることを示しています。

出力は次のようになるはずです。

[inode number] -rw-r--r-- 2 labex labex 46 [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex 46 [date and time] original.txt

ファイルのパーミッションの後の数字 2 は、イノードを指すハードリンクの数を示しています。original.txthardlink.txt の両方がリンクカウント 2 を表示しています。これは、同じデータを指すファイルが2つあるからです。

これらが本質的に同じファイルであるため、一方のファイルを変更すると他方にも影響することを示しましょう。

echo "This is an added line." >> original.txt
cat hardlink.txt

出力に両方の行が表示されるはずです。

This is the original file for our link examples.
This is an added line.

これは、original.txt への変更が hardlink.txt に反映されることを確認します。

同様に、hardlink.txt を変更すると、その変更は original.txt に反映されます。

echo "Another line added through the hard link." >> hardlink.txt
cat original.txt

出力には、すべての3行が表示されるはずです。

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.

シンボリックリンクの作成

シンボリックリンク(ソフトリンクまたはシンリンクとも呼ばれます)は、ハードリンクとは異なります。シンボリックリンクは、別のファイルを名前で指す独立したファイルです。ターゲットファイルと同じイノードを共有しません。

シンボリックリンクを作成するには、ln コマンドに -s オプションを使用します。original.txt ファイルに対するシンボリックリンクを作成しましょう。

ln -s /home/labex/project/linklab/original.txt /home/labex/project/linklab/symlink.txt

このコマンドは、original.txt へのシンボリックリンクである symlink.txt という新しいファイルを作成します。次に、シンボリックリンクが正しく作成されたことを確認しましょう。

ls -li

出力は次のようになるはずです。

[inode number] -rw-r--r-- 2 labex labex  [size] [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex  [size] [date and time] original.txt
[inode number] lrwxrwxrwx 1 labex labex  [size] [date and time] symlink.txt -> /home/labex/project/linklab/original.txt

symlink.txt のパーミッションの先頭にある l を見てください。これは、それがシンボリックリンクであることを示しています。また、出力にはシンボリックリンクが指すパスが表示されます。original.txtsymlink.txt が異なるイノード番号を持っていることがわかり、これらが別のファイルであることが確認できます。

シンボリックリンクの内容を確認しましょう。

cat symlink.txt

original.txt と同じ内容が表示されるはずです。

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.

シンボリックリンクを通じて別の行を追加しましょう。

echo "This line was added through the symbolic link." >> symlink.txt
cat original.txt

出力には、すべての4行が含まれるはずです。

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.

これは、シンボリックリンクを通じて行われた変更がターゲットファイルに影響することを確認します。

次に、ターゲットファイルを削除した場合に何が起こるかを見てみましょう。

mv original.txt original.txt.bak
cat symlink.txt

次のようなエラーメッセージが表示されるはずです。

cat: symlink.txt: No such file or directory

これは、シンボリックリンクが依然として /home/labex/project/linklab/original.txt を指しているが、そのファイルが存在しなくなったためです。これがハードリンクとシンボリックリンクの重要な違いです。

元のファイルを復元しましょう。

mv original.txt.bak original.txt
cat symlink.txt

ターゲットファイルが再び存在するため、シンボリックリンクは再び機能します。

ハードリンクとシンボリックリンクの違いを理解する

ここでは、ハードリンクとシンボリックリンクの両方を作成したので、それらの主要な違いを比較してみましょう。

ハードリンク:

  1. 元のファイルと同じイノードを共有する
  2. ディレクトリにリンクすることはできない
  3. ファイルシステムの境界を越えることはできない
  4. 元のファイルが削除または移動されても機能し続ける
  5. 内容の変更はすべてのハードリンクに反映される

シンボリックリンク:

  1. ターゲットファイルとは異なる独自のイノードを持つ
  2. ディレクトリにリンクすることができる
  3. ファイルシステムの境界を越えることができる
  4. ターゲットファイルが削除または移動されると無効になる
  5. 本質的には、ターゲットへのパスを含むポインタファイルである

これらの違いのいくつかを例を使って説明しましょう。

まず、許可されていないディレクトリへのハードリンクを作成してみましょう。

mkdir testdir
ln testdir testdir_hardlink

次のようなエラーメッセージが表示されるはずです。

ln: testdir: hard link not allowed for directory

次に、許可されているディレクトリへのシンボリックリンクを作成してみましょう。

ln -s testdir testdir_symlink

ディレクトリのシンボリックリンクを確認しましょう。

ls -la

出力に testdir_symlink -> testdir が表示され、testdir_symlinktestdir へのシンボリックリンクであることがわかります。

元のディレクトリ内にファイルを作成することができます。

echo "This is a test file in the directory." > testdir/testfile.txt

そして、シンボリックリンクを通じてそのファイルにアクセスします。

cat testdir_symlink/testfile.txt

次の内容が表示されるはずです。

This is a test file in the directory.

これは、シンボリックリンクがディレクトリを指し、その内容にアクセスするために使用できることを示しています。

もう1つの重要な違いは、元のファイルを削除するとシンボリックリンクは無効になるが、ハードリンクは無効にならないことです。これは、シンボリックリンクの例ですでに見てきました。ハードリンクでこれを実証してみましょう。

rm original.txt
cat hardlink.txt

次の4行が表示されるはずです。

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.

ハードリンクは、データがディスク上にまだ存在し、ハードリンクがそのデータを引き続き指しているため、引き続き機能します。

しかし、シンボリックリンクは現在無効になっています。

ls -l symlink.txt
cat symlink.txt

symlink.txt はまだ存在するが、存在しないファイルを指しており、それを読み取ろうとするとエラーが発生することがわかります。

ハードリンクから元のファイルを再作成しましょう。

cp hardlink.txt original.txt
cat symlink.txt

シンボリックリンクが指すファイルが再び存在するため、シンボリックリンクは再び機能します。

まとめ

この実験では、Linux の2種類のリンク、ハードリンクとシンボリックリンク(ソフトリンク)について学びました。ln コマンドを使用してこれらのリンクを作成する練習をし、それらの主要な違いを調べました。

この実験でカバーされた要点は以下の通りです。

  1. ハードリンク:

    • オプションなしの ln コマンドを使用して作成される
    • 元のファイルと同じイノードを共有する
    • ディレクトリにリンクすることや、ファイルシステムの境界を越えることはできない
    • 元のファイルが削除されても機能し続ける
    • 内容の変更はすべてのハードリンクに反映される
  2. シンボリックリンク:

    • ln -s コマンドを使用して作成される
    • ターゲットファイルとは異なる独自のイノードを持つ
    • ディレクトリにリンクすることや、ファイルシステムの境界を越えることができる
    • ターゲットファイルが削除または移動されると無効になる
    • ターゲットへのパスを含むポインタファイルである
  3. 実用的なアプリケーション:

    • リンクは、ファイルやディレクトリへのショートカットを作成するのに便利です
    • ファイルの複数バージョンを管理するために使用できます
    • システム管理者は、設定管理にリンクを使用します
    • リンクは、データを複製することなくファイルを整理するのに役立ちます

リンクを効果的に作成して使用する方法を理解することは、Linux ユーザーにとって不可欠なスキルです。これらのツールにより、Linux ファイルシステム内で効率的なファイル管理と整理が可能になります。