【Linux】ln-シンボリックリンクとハードリンクとは|初心者に向けて現役エンジニアが解説

Linux
スポンサーリンク
はづき
はづき

こんにちは!はづきです

文系から一部上場IT企業に就職し、エンジニアをやっています

この記事では「シンボリックリンクとハードリンクとは」という疑問について備忘録を残しています

LinuxでのリンクはWindowsなどの「ショートカット機能」に近いです。任意のファイルにリンクを貼ることで別ディレクトリ配下で参照することができます

リンクの貼り方やその特性について解説します。ご参考ください

※この記事は初心者向けに平易に解説しています。正確な理解をしたい人は専門書・専門家をあたっていただければと思います。また、この記事の情報におけるCPの動作結果については自己責任でお願いします。

※本サイトにはプロモーション・広告が含まれています(はづきのブログより)

スポンサーリンク

ハードリンクとは

ハードリンクは1つのファイルに複数の名前を付けることができるリンクです

ハードリンクを貼ったファイルは、別ディレクトリの配下からでも参照することができます。以下で詳しく解説していきます

ハードリンクの作成方法

実例を交えてハードリンクの機能を解説していきます。練習用に上記の画像のようなディレクトリ構成を作成しました

ハードリンクを使って、storage配下のhardLinkFile1をwork配下でも参照できるようにします。work配下では、hardLinkFile2という名前でハードリンクを貼ります

リンクを貼るためには「ln」コマンドを使います

#カレントディレクトリの確認↓
hazuki@hazukiBlog:~/work$ pwd 
/home/hazuki/work
#リンク元のファイル内容を確認↓
hazuki@hazukiBlog:~/work$ cat ../storage/hardLinkFile1 
ハードリンクの練習をするファイルを作成しました!

#hardLinkFile2という名前のハードリンクを作成↓
#lnコマンド:ln <リンク元のファイル名> <リンク名>
hazuki@hazukiBlog:~/work$ ln ../storage/hardLinkFile1 hardLinkFile2
hazuki@hazukiBlog:~/work$ ls -l
total 4
-rw-r--r-- 1 hazuki hazuki  0 Jun 13 07:59 file1
-rw-r--r-- 1 hazuki hazuki  0 Jun 13 07:59 file2
-rw-r--r-- 2 hazuki hazuki 73 Jun 13 07:52 hardLinkFile2 #←作成された!

#ファイルの中身はリンク元と同じになる↓
hazuki@hazukiBlog:~/work$ cat hardLinkFile2 
ハードリンクの練習をするファイルを作成しました!

ハードリンクの特性を解説

ハードリンクは1つのファイルに複数の名前を付けているだけです。そのため、ファイルの実体は1つしかありません

どのハードリンクから編集をしても、編集されるファイルは同じです。したがって、どのハードリンクからファイルを参照しても同じ中身になります

hazuki@hazukiBlog:~/work$ vi hardLinkFile2 #hardLinkFile2を編集
hazuki@hazukiBlog:~/work$ cat hardLinkFile2 #hardLinkFile2の内容を確認
ハードリンクの練習をするファイルを作成しました!
hardLinkFile2を編集しました!

#リンク元にも編集が反映されている↓
#同様にhardLinkFile1を編集するとhardLinkFile2に変更が反映される
hazuki@hazukiBlog:~/work$ cat ../storage/hardLinkFile1 
ハードリンクの練習をするファイルを作成しました!
hardLinkFile2を編集しました!

ハードリンクを設定すると、全てのハードリンクが消されるまでファイルの実体は消えません

リンク元のファイルを削除してもハードリンクが残っていればそこから参照することができます。完全に削除したい場合は、「リンク元ファイル」と「作成したハードリンク」の全てを削除する必要があります

#リンク元であるhardLinkFile1を削除する
hazuki@hazukiBlog:~/work$ rm ../storage/hardLinkFile1
hazuki@hazukiBlog:~/work$ ls ../storage/

#リンク元を削除してもhardLinkFile2は参照できる↓
#リンク元・リンク先のファイルを全て消すまでファイルの実体は消えない
hazuki@hazukiBlog:~/work$ cat hardLinkFile2
ハードリンクの練習をするファイルを作成しました!
hardLinkFile2を編集しました!

シンボリックリンクとは

シンボリックリンクもハードリンクと同様に、任意のファイルにリンクを貼ることで別ディレクトリからでも参照できるようにできます

しかし、ファイルの削除についてハードリンクと異なる点があります。その辺りを含めて解説していきます

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

実例を交えてシンボリックリンクの挙動を確認します。練習用に上記のようなディレクトリ構成を用意しました

シンボリックリンクを使って、storage配下のsymbolicLinkFile1をwork配下でも参照できるようにします。work配下では、symbolicLinkFile2という名前でシンボリックリンクを貼ります

シンボリックリンクは、「ln」コマンドに「-s」オプションを付けることで作成できます

#カレントディレクトリの確認↓
hazuki@hazukiBlog:~/work$ pwd
/home/hazuki/work
#リンク元のファイル内容を確認↓
hazuki@hazukiBlog:~/work$ cat ../storage/symbolicLinkFile1
シンボリックリンクの練習をするファイルを作成しました!

#symbolicLinkFile2という名前でシンボリックリンクを作成↓
#lnコマンド -s:ln -s <リンク元のファイル名> <リンク名>
hazuki@hazukiBlog:~/work$ ln -s ../storage/symbolicLinkFile1 symbolicLinkFile2
hazuki@hazukiBlog:~/work$ ls -l
total 0
-rw-r--r-- 1 hazuki hazuki  0 Jun 13 07:59 file1
-rw-r--r-- 1 hazuki hazuki  0 Jun 13 07:59 file2
lrwxrwxrwx 1 hazuki hazuki 28 Jun 13 10:55 symbolicLinkFile2 -> ../storage/symbolicLinkFile1
#シンボリックリンクは「lrwxrwxrwx」と先頭が「l」になる↑
#「symbolicLinkFile2 -> ../storage/symbolicLinkFile1」とリンク元が記載される

#ファイルの中身はリンク元と同じになる↓
hazuki@hazukiBlog:~/work$ cat symbolicLinkFile2
シンボリックリンクの練習をするファイルを作成しました!

シンボリックリンクの特性を解説

シンボリックリンクでは、リンク元のパスを別のファイル名で保持させています

そのため、リンク元のファイルを削除するとファイルの実体が削除され参照できなくなります

また、シンボリックリンクはハードリンクと異なりディレクトリに対しても作成できます

以下で、実行例を確認してみましょう

hazuki@hazukiBlog:~/work$ vi symbolicLinkFile2 #symbolicLinkFile2を編集
hazuki@hazukiBlog:~/work$ cat symbolicLinkFile2 #symbolicLinkFile2の内容を確認
シンボリックリンクの練習をするファイルを作成しました!
symbolicLinkFile2を編集しました!

#リンク元にも編集が反映されている↓
#同様にsymbolicLinkFile1を編集するとsymbolicLinkFile2に変更が反映される
hazuki@hazukiBlog:~/work$ cat ../storage/symbolicLinkFile1
シンボリックリンクの練習をするファイルを作成しました!
symbolicLinkFile2を編集しました!
#リンク元であるsymbolicLinkFile1を削除する
hazuki@hazukiBlog:~/work$ rm ../storage/symbolicLinkFile1
hazuki@hazukiBlog:~/work$ ls ../storage/

#リンク元を削除するとsymbolicLinkFile2は参照できない
hazuki@hazukiBlog:~/work$ cat symbolicLinkFile2
cat: symbolicLinkFile2: No such file or directory

コメント

タイトルとURLをコピーしました