駆け出しエンジニアが曖昧なLinuxを再度復習した内容の一部をアウトプットする記事です。
プログラミング学習を始めて初期の頃にLinux標準教科書をやりましたが、その頃は重要性にイマイチ気付いておらず、、、曖昧な部分が多いまま時間が経ってしまいました。
エンジニアを目指す上で、特にデプロイなどでのインフラ整備の際にLinuxは避けて通れないんだと強く感じました。。。
加えてLinuxを扱いこなせるのって「なんか、凄い格好良い」っていう単純な思考の持ち主であるが故、基礎をもう一度叩き込んで成長していこうと思った訳です、、、
「新しいLinuxの教科書」で学習した内容を基にアウトプットしていきます。
シンボリックリンクとは何ぞや
リンクとは
「ファイルの別名」にあたる。
ファイルに別名を付けること=リンクを張る
ハードリンクとシンボリックリンク
リンクには2種類あり、ハードリンクとシンボリックリンクがある。
両者は似て異なるが、主にシンボリックリンクが使用されるらしいので、ハードリンクについては割愛。
※捕捉を頂きました!
別名を付ける、という観点ではハードリンクとシンボリックリンクで比較すると、シンボリックリンクの方が使われているようですが、
厳密にはリンクとはファイル名とinode番号のつながりのことであり、
そのリンクをディレクトリ上に登録する事をハードリンクと呼ぶようです!(つまりファイルには必ず何かしら名前を付けるので、それ自体もハードリンク。ハードリンクは複数持たせる事が可能なので、別名をつける様な使い方ができる)
詳しくはコメント欄をご覧ください!ハードリンクについて参考にした記事も載せてます!
シンボリックリンクとは
「張られたリンク先へのパスが書かれた小さな特殊ファイル」
あくまでパスが書かれているものであるため、本物のファイルとは全く別のもの。(この点でハードリンクと異なります)
これだけだとパッとしないですね。
使い方
ln -s [リンク元ファイル] [リンク名]
ハードリンクの際は -sオプションをつけないため、sってシンボリックのsかな?と解釈して覚えます。
例えば、カレントディレクトリに
$ ls
example.html
$ cat example.html
Hello World!
Helloooooooooooooo
こんな感じのexample.htmlというファイルがあったとして、このファイルにexampleというリンク名でシンボリックリンクを張ります。
ln -s example.html example
lsコマンドで確認してみましょう。
$ ls
example example.html #exampleというファイルが作成されている
$ ls -l
lrwxr-xr-x 1 username staff 12 5 5 19:13 example -> example.html
-rw-r--r-- 1 username staff 0 5 5 19:13 example.html
新たにexampleという名前のファイルが作成され、ls -lの出力結果からは、
example -> example.html という感じで「どのファイルを指しているのか」を読み取ることができます。
つまり、exampleと言ったらexample.htmlと言ってるのだと解釈することを意味しています
試しにexampleを使ってみます。
$ cat example
Hello World!
Helloooooooooooooo
このように、example.htmlと言わずとも、リンク名を指示するだけで特定のファイルに辿り着くことができています。
これがシンボリックリンクです。
シンボリックリンクの削除
リンクを削除する際は、通常ファイルを削除するのと同じ様にrmコマンドでOK
シンボリックリンクを削除したとしても、これはあくまでパスが書かれた特殊ファイルなので、元のファイルexample.htmlには何の影響もありません。
$ rm example # シンボリックリンクexampleを削除
逆に、シンボリックリンクがある状態で元のexample.htmlが削除されると、シンボリックリンクはリンク先のファイルが見つからないために破損状態になります。
どこで使う
利用用途は様々あるようです。私自身まだ覚えたてなので知らないことも多いかと思いますが、特になるほどと思ったのは、**「長いパス名を省略できる」**という点です。
例えばRailsのタスク管理アプリケーションが深い階層の中にあったとします。(適当です)
home/work/project/rails/todo_app
ここまで深くは無かったですが、私自身、ポートフォリオを配置しているディレクトリに毎回移動してrails sとかを起動していました。
この場合、毎回これだけのパス指定してアプリケーションのディレクトリまで行くのって凄く大変ですよね、、、
そんな時にこのシンボリックリンクが役立ちます。
リンクを張ってみましょう。
# ルートディレクトリで
$ ln -s home/work/project/rails/todo_app todo_app
# todo_appというシンボリックリンク名を張る
$ ls -l todo_app #確認してみます
lrwxr-xr-x 1 username staff 32 5 5 20:58 todo_app -> home/work/project/rails/todo_app
この結果、todo_appと宣言するだけで、それがhome/work/project/rails/todo_appのことであると解釈してくれます。
$ cd todo_app
# これだけでルートディレクトリから一発で移動できる!
他にも、バージョン管理のためにも使われるそうです。複数のバージョンが存在するプログラムがあるとして、最新版を常に利用したいとかの場合に、最新版にだけ"latest"というシンボリックリンクを張っておくことで簡単に最新版のプログラムを利用できるようにするというものです。
終わりに
シンボリックリンク、便利だな〜と思いました。
凄く簡単な内容ですが、覚えておいて損はないと感じたのでアウトプットすることにしました。
エイリアスっていう言葉がよくプログラミング学習で出てきますが、それと似たようなものです。
「総理」「首相」って言われたら2021年5月現在では殆どの人がパッと「菅総理」を思い浮かべると思いますが、それと近いものですかね・・・?
ありがとうございました。