シンボリックリンクとは

Linuxを勉強したい人向け シェル/bash

こんにちは。

普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】

今回は、linuxについての解説記事です。

シンボリックリンクとは何か調べる人

シンボリックリンクとは何か調べる人「Linuxのシンボリックリンクとは何ですか?実際にLinux OS上にシンボリックリンクを作成してみたいです。そのため、シンボリックリンクを作るコマンドの使い方とわかりやすい具体例が欲しいです。また、シンボリックリンクを普通のファイルと見分ける方法はありますか?」

こんな悩みを解決します。

この記事を書いている私はIT業界歴12年、うちサーバエンジニア歴6年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやmac、Linuxなど様々なUNIX系環境を扱ってきました。

これまでの経験を踏まえ、コマンドの解説に留まらず実務視点で利用方法を記事にしました。お役にたちましたら幸いです。

本記事の内容

1.シンボリックリンクとは

シンボリックリンクとは何か、Wikipediaより一部引用して解説します。

概要

コンピュータのディスク上で扱うファイルやディレクトリを、本来の位置にファイルを残しつつそれとは別の場所に置いたり”別名”を付けてアクセスする手段である。

複製とは違い、別名では実体がないこと、リンクで開いたファイルへの操作が実物のファイルにも反映されること、ファイルサイズが小さいのが特徴。

OSごとの名称の違い

実際には、各種OSによって名称も異なっており、それぞれ、
・Microsoft Windows – ショートカット
・Mac OS – エイリアス
・Linux/UNIX – シンボリックリンク
・NTFSを搭載したWindows(Windows XP等) – ジャンクション
と呼ばれるものがこれに相当する。

Linux/UNIXにおけるシンボリックリンクとは

Linux/UNIXのシンボリックリンクの作成は「ln」コマンドに「-s」オプションを付けて実行することで行う。

実体へのファイルパスだけを保存しているため、Windowsのショートカットと同じくリンク先ファイルを移動してしまうと無効になってしまう。

これは一方、「存在しないファイルパスを保持するリンクが存在できる」という意味でもある。
→「シンボリックリンク元ファイルを削除する」の項で解説します。

2.シンボリックリンク作成時のlnコマンドの構文

構文は以下の通りです。

ln -s 《シンボリックリンク元》 《シンボリックリンク先》

シンボリック元とシンボリック先の指定は相対パスでも絶対パスでもOKです。

3.シンボリックリンクを作成する

実際にシンボリックリンクを作成する例を示します。file1.txtのシンボリックリンクとしてfile2.txtを作成します。

$ ls
file1.txt
$ ln -s ./file1.txt ./file2.txt
$ ls
file1.txt   file2.txt

4.シンボリックリンクを確認する

lsコマンドでシンボリックリンクの確認をします。ls -lオプションを使って、シンボリックリンクを見分けます。★をみると、file2.txtはfile1.txtのシンボリックリンクだということが判ります。

$ ls -l
-rw-r--r--  1 root  staff  0  2 10  2045 file1.txt
lrwxr-xr-x  1 root  staff  9  7 26 17:54 file2.txt -> file1.txt★

また、ファイル権限(lrwxr-xr-x)の最初のlは、ファイル属性がシンボリックリンクであることを示しています。

5.シンボリックリンクを削除する

シンボリックリンクを削除しても、実体のファイル(file1.txt)が削除されることはありません(★)。

$ ls -l
-rw-r--r--  1 root  staff  0  2 10  2045 file1.txt
lrwxr-xr-x  1 root  staff  9  7 26 17:54 file2.txt -> file1.txt
$ rm file2.txt
$ ls -l
-rw-r--r--  1 includingme  staff  0  2 10  2045 file1.txt★

シンボリックリンク元ファイルを削除する

一方、シンボリックリンクを残したまま実体のファイルだけを消すとどうなるでしょうか?答えは、シンボリックリンク(file2.txt)だけは残ります(★)。

$ ls -l
-rw-r--r--  1 root  staff  0  2 10  2045 file1.txt
lrwxr-xr-x  1 root  staff  9  7 26 18:13 file2.txt -> file1.txt
$ rm file1.txt
$ ls -l
lrwxr-xr-x  1 root  staff  9  7 26 18:13 file2.txt -> file1.txt★
$ cat file2.txt
cat: file2.txt: No such file or directory

このような実態のないシンボリックリンクが残るのは意味がないように思われますが、ファイルマウントした先のファイルに対してシンボリックリンクを作成する場合に効果を発揮します。

マウントしていない場合にもシンボリックリンクは消えずに、マウントした場合だけ有効に使えるシンボリックリンクを作ることができるからです。

おわりに

今回は以上です。lnコマンドを用いたシンボリックリンクの作成方法について解説しました。参考になりますと幸いです。