皆さんこんにちは。
今日はlnコマンドと出会い、とても便利だなと感動しておりました。
今回の流れ
- lnコマンドとはなんぞや
- リンクとは
- ハードリンクとシンボリックリンク
- シンボリックリンクの使用例
lnコマンドとは?
lnコマンドは、リンクを貼るコマンドです。
リンクとは?
Linuxのファイルシステムではファイルに別名をつけることが出来、この機能をリンクという。別名をつけることを**「リンクを貼る」**という。
例を出すならば、
「りんご」という物体に、アップルやりんごちゃん、赤い果物など一つの物体に対して別名をつけることです。
またリンクには**「ハードリンク」****「シンボリックリンク」**の2種類存在する。
現在は「シンボリックリンク」が主流になっている。
##lnコマンドの使い方
ln [オプション] <リンク元ファイル名> <リンク名>
##ハードリンクとシンボリックリンク
ハードリンク
ハードリンクとは、1つのファイルの実態に複数の名前を付ける機能。ハードリンクで追加されたファイル名は、どちらが本物名前で仮の名前などの区別が存在しない。
以下は、appleというファイルを作成し、そのファイルに対して、red_fruitsというハードリンクを作成する例です。
$ touch apple
$ ln apple red_fruits
上記の例により、このディレクトリーにはappleとred_fruitsというファイルが存在し、二つともappleの内容が表示されます。
つまりappleの中身が変わると、red_fruitsの内容もそれに応じて変わるということです。(同じファイルを指しているため。)
rmコマンドでハードリンクを作成したファイルを削除すると、指定したファイル名だけが取り除かれ、ファイルの実体は残ります。
全てのハードリンクが無くなったときに、ファイル実体も削除される。
シンボリックリンク
シンボリックリンクとは、リンク先のパス名が書かれた小さな特殊ファイルです。
ハードリンクとは違い、リンク先がファイルの実体です。
以下は上の例と同じく、appleというファイルを作成し、そのファイルに対して、red_fruitsというシンボリックリンクを作成する例です。
$ touch apple
$ ln -s apple red_fruits
シンボリックリンクを作成するには、lnコマンドに**-sオプションを付けます。
シンボリックリンクのリンク先を確認するには、[ls -l]**コマンドを指定します。
$ ls -l
-rw-r--r-- 1 eiji staff 0 4 14 16:45 apple
lrwxr-xr-x 1 eiji staff 5 4 14 16:45 red_fruits -> apple
上記を見ると、appleはただのファイルですが、red_fruitsはappleを指す特殊ファイルであることがわかります。
つまりシンボリックリンク(red_fruits)をrmコマンドで削除してもファイルの実体(apple)は消えませんが、先にappleを先に消してしまうとred_fruitsのファイルはcatコマンドで見ることは出来ません。
ここが大きな違いですね。
実に面白いですね。
シンボリックリンクの使用例
このリンクを学んで一つ使い道を学びました。
それは、長いパス名の省略です。
どういうことでしょうか?
以下のコードを見てください。
eiji@MacBook-Pro scrayping_new % ls
README.md data.csv scrayping.py yahoo.py
__pycache__ newsPicks.py venv yomiuri.py
汚いですが、このようなPythonのプロジェクトが入っているフォルダがあるとします。
この時に、このプロジェクトの仮想環境に入るためには、
$source venv/bin/activate
と毎回打たなければなりませんでした。
ここで、シンボリックリンクです。
venv/bin/activateに対して、activateというシンボリックリンクをカレントディレクトリで作成するのです。
つまりコードで表現すると、
$ ln -s venv/bin/activate activate
$ ls
eiji@MacBook-Pro scrayping_new % ls
README.md activate newsPicks.py venv yomiuri.py
__pycache__ data.csv scrayping.py yahoo.py
上記を見たらわかるように、*"activate"*という特殊ファイルが生成され、
eiji@MacBook-Pro scrayping_new % ls -l ac*
lrwxr-xr-x 1 eiji staff 17 4 14 22:17 activate -> venv/bin/activate
このファイルは"venv/bin/activate"のシンボリックリンクである事がわかります。
これで何が便利か?
source activate
それは、仮想環境に入るために長いパスを書く必要がないのです!
最後に
今日はlnコマンドについて書きました。
ニュースを集めてくるプログラムや、日常的に使うプログラムはシンボリックリンクとしてデスクトップに置くのはとても便利だなぁ。と使い道がどんどん湧き上がりました!
最後までありがとうございました。