このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:リンクを張る:lnコマンド

 ファイルシステムを効果的に管理するためには、ファイルやディレクトリに対して別名を付ける機能であるリンクを理解することが重要です。lnコマンドは、このリンクを作成するための基本的なコマンドです。ここでは、リンクの概念からlnコマンドの使い方、そしてハードリンクとシンボリックリンクの違いについて詳しく解説します。

lnコマンドとは

 lnコマンドは、ファイルやディレクトリに対してリンクを作成するためのコマンドです。リンクを作成することで、同じファイルやディレクトリに対して複数の名前を持たせたり、別の場所からアクセスしやすくしたりすることができます。

リンクとは

 Linuxのファイルシステムでは、ファイルに別名を付けることが可能です。この機能をリンクと呼び、別名を付けることを「リンクを張る」と表現します。リンクには以下の2種類があります。

  • ハードリンク
    ・ファイルの実体に対して複数の名前を付ける機能。
    ・すべてのリンクが同等であり、どれか一つの名前が削除されても他の名前からアクセス可能。
    ・ディレクトリには作成できない、異なるファイルシステム間で作成できないなどの制限がある。
  • シンボリックリンク
    ・他のファイルへのパスを参照する特殊なファイル。
    ・リンク先のファイルやディレクトリが移動・削除されるとリンクが切れる。
    ・ディレクトリにも作成可能で、異なるファイルシステム間でも作成できる。

 シンボリックリンクは、Windowsの「ショートカット」やmacOSの「エイリアス」に似た機能を提供します。現在は、柔軟性の高いシンボリックリンクが主に利用されています。

lnコマンドの基本

【書式】
ln [オプション] <リンク元ファイル名> <リンク名>

  • リンク元ファイル名:リンクを作成したい元のファイルやディレクトリの名前。
  • リンク名:新しく作成するリンクの名前。

ハードリンク

1.ハードリンクの作成

 次の例では、/etc/hostnameをコピーしたfile1に対して、file2という名前でハードリンクを作成します。

user01@ubuntu:~$ cd work
user01@ubuntu:~/work$ cp /etc/hostname file1
user01@ubuntu:~/work$ ln file1 file2
user01@ubuntu:~/work$ ls
file1  file2

これにより、file1file2は同じファイルの実体を参照するようになります。

2.ハードリンクの動作確認

file2を指定して内容を表示すると、file1と同じ内容が表示されます。

user01@ubuntu:~/work$ cat file2
ubuntu

3.ハードリンクの特徴

  • ファイルの実体に対して複数の名前を付ける機能。
  • ハードリンクで追加されたファイル名に、元と仮の区別はなく、どちらも本物の名前です。

4.ハードリンクの削除

file1を削除しても、ファイルの実体はfile2からアクセス可能です。

user01@ubuntu:~/work$ rm file1
user01@ubuntu:~/work$ ls
file2
user01@ubuntu:~/work$ cat file2
ubuntu

5.すべてのハードリンクの削除

すべてのハードリンクが削除されたときに、ファイルの実体も削除されます。

user01@ubuntu:~/work$ rm file2
user01@ubuntu:~/work$ ls
user01@ubuntu:~/work$

シンボリックリンク

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

シンボリックリンクを作成するには、lnコマンドに-sオプションを付けます。

user01@ubuntu:~/work$ cp /etc/hostname file1
user01@ubuntu:~/work$ ln -s file1 file2

2.シンボリックリンクの確認

file2file1へのシンボリックリンクであることが確認できます。

user01@ubuntu:~/work$ ls -l
合計 4
-rw-r--r-- 1 user01 user01 7 10月  1 00:52 file1
lrwxrwxrwx 1 user01 user01 5 10月  1 00:53 file2 -> file1

3.シンボリックリンクの動作確認

file2を指定して内容を表示すると、リンク先のfile1の内容が表示されます。

user01@ubuntu:~/work$ cat file2
ubuntu

4.シンボリックリンクの特徴

  • リンク先のパスを参照する特殊なファイル。
  • リンク先のファイルやディレクトリが削除・移動されると、リンクが切れてアクセスできなくなります。

5.シンボリックリンクの削除

シンボリックリンクを削除しても、リンク先のファイルfile1には影響がありません。

user01@ubuntu:~/work$ rm file2
user01@ubuntu:~/work$ ls
file1

6.壊れたシンボリックリンク

リンク先のファイルが削除されると、シンボリックリンクは壊れた状態になります。

user01@ubuntu:~/work$ ln -s file1 file2
user01@ubuntu:~/work$ rm file1
user01@ubuntu:~/work$ ls -l
合計 0
lrwxrwxrwx 1 user01 user01 5 10月  1 02:19 file2 -> file1
user01@ubuntu:~/work$ cat file2
cat: file2: そのようなファイルやディレクトリはありません

file2は存在しますが、リンク先のfile1がないため、エラーとなります。

7.不要となったファイルの削除

不要となったファイルを削除しておきます。

user01@ubuntu:~/work$ rm file2

まとめ

  • リンクの種類
    ハードリンク:ファイルの実体に複数の名前を付ける。制限がある。
    シンボリックリンク:他のファイルやディレクトリへのパスを参照する。柔軟性が高い。
  • lnコマンドの基本書式
    ・ ln [オプション] リンク元ファイル名 リンク名
    ハードリンクの作成ln ファイル名 新しいリンク名
    シンボリックリンクの作成ln -s ファイル名 新しいリンク名
  • 注意点
    ・ハードリンクはディレクトリには作成できない。
    ・シンボリックリンクはリンク先が削除されると壊れる。
    ・シンボリックリンクの削除はリンク自体のみを削除し、リンク先には影響しない。

 lnコマンドを活用して、ファイルシステム内で効率的にファイルやディレクトリを管理しましょう。リンク機能を正しく理解することで、システム運用や構成管理がより容易になります。