👓

Envaderを利用して、シンボリックリンクについて学ぶ

2022/04/08に公開

今回はEnvaderを利用して、シンボリックリンクの作成、削除の方法について学んだので、振り返りを記事にしています。

正直私は、このシンボリックリンクの考え方が苦手ですが、今回実践しながら学ぶことで少しでも理解が深められればと思っています。

Envaderとは、Linux環境を環境構築不要で学べてしまうオンライン学習サービスです。
気になる方はリンクを貼っておきますので、よろしければ参考にどうぞ。

Envader

コース一覧

今回使用したシナリオ

参考にさせていただいた記事と書籍

シンボリックリンク 【symbolic link】 symlink / ソフトリンク / soft link

LinuC教科書(これが地味に重宝しています)

シンボリックリンクとは

特定のファイルやディレクトリを指し示す別のファイルを作成して、そこを通じて本体のファイルやディレクトリを参照できるようにする仕組みのこと。

この表現が私的にはしっくりきました。

シンボリックリンクが持っているのは、リンク元へのポインタのみ。
つまり、シンボリックリンク自体は中身は空っぽで、実際に中身のあるファイルやディレクトリは参照している側にあるということ。

windowsだとショートカットに該当する。

この機能の何が便利かというと、何か設定ファイルを特定のディレクトリへ置いておかなければいけない時に、参照したいファイルは本当は別の場所にある。
などの時に有効的なのかなと感じています。

私は自分のPC環境にNeoVimを導入する時にこのシンボリックリンクの意味が分かりました。

lnコマンド(シンボリックリンクの作成)

シンボリックリンクを貼る時に利用するコマンドがlnコマンド。

以下基本の使い方

ln オプション リンク元(実体) シンボリックリンクの名前 

オプション -s

オプションに-sを使うことでシンボリックリンクを作成することができる。
オプションを指定しない場合には、ハードリンクと言われるシンボリックリンクとは別のリンクが作成される。

実際にコマンドを実行してみる

envader@172-19-1-2:~$ ls
delete.conf

# origin.confとして/etc/origin.confにシンボリックリンクを貼る
envader@172-19-1-2:~$ ln -s /etc/origin.conf origin.conf

# origin.confが作成されている
envader@172-19-1-2:~$ ls
delete.conf  origin.conf

# どこへリンクが向いているか確認
envader@172-19-1-2:~$ ls -l
total 0
lrwxrwxrwx 1 envader envader 16  924  2021 delete.conf -> /etc/delete.conf
lrwxrwxrwx 1 envader envader 16  47 19:48 origin.conf -> /etc/origin.conf

これで、origin.confを参照すると実際には/etc/origin.confが参照されることになる。

本当かどうか確認してみる。

# シンボリックリンクファイル
envader@172-19-1-2:~$ cat origin.conf
[Setting]
stage = "test"
name = "envader"

#  実体のファイル(参照先)
envader@172-19-1-2:~$ cat /etc/origin.conf
[Setting]
stage = "test"
name = "envader"

全く同じ内容が表示されているのが分かるので、ちゃんとシンボリックリンクが作成されている事が確認できる。

iノード番号

ここで頭に入れておいた方が良いと感じたのが、iノード番号と呼ばれるファイルやディレクトリに割り振られている管理番号の存在。

ファイルやディレクトリを作成した場合には、必ずこのiノード番号が割り当てられる。

ls -iで確認できる。

# リンク元(実体)のiノード番号
envader@172-19-1-2:~$ ls -i /etc/origin.conf
1177809 /etc/origin.conf

# シンボリックリンクのiノード番号
envader@172-19-1-2:~$ ls -i origin.conf
1452162 origin.conf

私は同じiノード番号になるのかと思ったのですが、シンボリックリンクのファイルは別のファイルとなるため、リンク元(実体)のiノード番号とは別々の番号が割り当てられているんですね。

あくまでシンボリックリンクはリンク元(実体)のファイルを参照していることになるということ。

シンボリックリンクの削除(unlink)

シンボリックリンクを削除するには、unlinkコマンドを使う。

このコマンドを使うことでシンボリックリンクファイルを削除することができる。
注意したいのが、リンクだけを解消するのではなく、シンボリックリンクファイル自体を削除してしまうこと。

envader@172-19-1-2:~$ ls
delete.conf  origin.conf

# unlinkコマンドを使ってorigin.confファイルを削除
envader@172-19-1-2:~$ unlink origin.conf

# origin.confファイルが削除されている
envader@172-19-1-2:~$ ls
delete.conf

まとめ

シンボリックリンクの作成と削除方法について学びました。

あくまでシンボリックリンクとは、中身が空のファイルを作成していて、シンボリックリンクファイルが参照しているのはリンク先のファイルだということ。

新しくファイルを作成しているので、iノード番号は別の番号が割り当てられること。

ここについての理解が少し深まりました。

最後まで読んでいただきありがとうございました。

Discussion