LoginSignup
14
6

More than 3 years have passed since last update.

lnコマンドめっちゃ便利。

Posted at

皆さんこんにちは。

今日はlnコマンドと出会い、とても便利だなと感動しておりました。

今回の流れ

  • lnコマンドとはなんぞや
  • リンクとは
  • ハードリンクとシンボリックリンク
  • シンボリックリンクの使用例

lnコマンドとは?

lnコマンドは、リンクを貼るコマンドです。

リンクとは?

Linuxのファイルシステムではファイルに別名をつけることが出来、この機能をリンクという。別名をつけることを「リンクを貼る」という。

例を出すならば、
「りんご」という物体に、アップルやりんごちゃん、赤い果物など一つの物体に対して別名をつけることです。

またリンクには「ハードリンク」「シンボリックリンク」の2種類存在する。
現在は「シンボリックリンク」が主流になっている。

lnコマンドの使い方

ln [オプション] <リンク元ファイル名> <リンク名>

ハードリンクとシンボリックリンク

ハードリンク

ハードリンクとは、1つのファイルの実態に複数の名前を付ける機能。ハードリンクで追加されたファイル名は、どちらが本物名前で仮の名前などの区別が存在しない。

以下は、appleというファイルを作成し、そのファイルに対して、red_fruitsというハードリンクを作成する例です。

$ touch apple
$ ln apple red_fruits

上記の例により、このディレクトリーにはapplered_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_fruitsappleを指す特殊ファイルであることがわかります。
つまりシンボリックリンク(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コマンドについて書きました。
ニュースを集めてくるプログラムや、日常的に使うプログラムはシンボリックリンクとしてデスクトップに置くのはとても便利だなぁ。と使い道がどんどん湧き上がりました!

最後までありがとうございました。

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6