賢くなりたいトイプードルの日記

データサイエンス系の話をメインにしていきます

シンボリックリンクの作成・削除方法(ターミナル)

シンボリックリンクってなんなのかよく分からなくて、調べた後もまどろっこしかったので忘れそうです。なので自分用にこれを書きます。

また同じようにシンボリックリンクがよくわからない、または忘れたかたの助けになれば良いなと思います。

きっとPC初心者でもわかるはず。かなり詳しく書いたつもりです。

では早速シンボリックリンクの解説へ。

OSX(Mojave version 10.14.3)です。

シンボリックリンクの概要

シンボリックリンクとは、わかりやすく言うと外にあるファイルを呼び出し可能にするためのもの。

例えばカレントディレクトリが~/Desktop/symbolTest/

にあると、そこからカレントディレクトリを移動せずにホームディレクトリ直下にあるsample.txtを、

$cat sample.txt

というコマンドだけで呼び出すことはできません。(catコマンドは中身を表示するコマンドです。)

呼び出すにはカレントディレクトをホームディレクトリに移動してから、cat sample.txtとコマンドを入力する必要があります。

でもシンボリックリンクを利用すると、ホームディレクトリ以外の場所にいても、ホームディレクトリ直下にあるsample.txtを

$cat sample.txt

だけで呼び出すことができるようになります。

シンボリックリンクの作成方法

コマンドライン上で確認してみます。

$ cd ~/Desktop/
$ mkdir symbolTest
$ cd symbolTest/
$ touch stest.txt
$ mkdir dirX

これでDesktop配下に、stest.txtというテキストファイルとdirXというディレクトリが入ったsymbolTestディレクトリができました。

試しにlsコマンドで中身を確認してみます。

$ ls

dirX stest.txt

$ ls -l

total 0

drwxr-xr-x  2 ohmachi  staff  64  3 12 16:33 dirX

-rw-r--r--  1 ohmachi  staff   0    3 12 16:33 stest.txt

ls -lコマンドの出力の一番右にあるのがそのディレクトリの名前です。

(そのほかの要素については後述。)

次にホームディレクトリ直下にsample.txtを作成します。

$ cd ~
$ cat > sample.txt

echo im god

echo hello

上記のように入力した後にCtrl + Dで保存すると、ホームディレクトリ直下にsample.txtが作成されました。

準備ができたので今からシンボリックリンクを作ります。

$ cd Desktop/symbolTest

Desktop直下のsymbolTestディレクトリに行き、

$ ln -s ~/sample.txt .

このようにコマンドを打つと、シンボリックリンクをカレントディレクトリ(.)に作成できます。

確認してみましょう

$ ls -l

total 0

drwxr-xr-x  2 ohmachi  staff  64  3 12 16:33 dirX

lrwxr-xr-x  1 ohmachi  staff  25  3 12 17:05 sample.txt -> /Users/ohmachi/sample.txt

-rw-r--r--  1 ohmachi  staff   0  3 12 16:33 stest.txt

このように間にlで始まるデータが真ん中に追加されました。

sample.txt -> /Users/ohmachi/sample.txtの部分は、このディレクトリにあるときにsample.txtを呼び出すと、/Users/ohmachi/sample.txtが呼び出されるようになった、ということです。

シンボリックリンクに別名をつけるには

呼び出すのはsample.txtなんだけど違う名前で呼び出したいと言うときは、

$ ln -s ~/sample.txt test.txt

こんな風にその呼び出したい名前を後につければOKです。

確認すると、

$ ls -l

total 0

drwxr-xr-x  2 ohmachi  staff  64  3 12 16:33 dirX

lrwxr-xr-x  1 ohmachi  staff  25  3 12 17:05 sample.txt -> /Users/ohmachi/sample.txt

-rw-r--r--  1 ohmachi  staff   0  3 12 16:33 stest.txt

lrwxr-xr-x  1 ohmachi  staff  25  3 12 17:11 test.txt -> /Users/ohmachi/sample.txt

このように、一番下に新しく追加されました。

では実行してみましょう。

$ cat sample.txt

echo im god

$ cat test.txt

echo im god

うまく結びついてます。

ちなみに、

dirXディレクトリの一番左のdrwxr-xr-xはまずdとrwxr-xr-xに分かれていて、'd'はディレクトリであることを表します。これが'-'ならファイルであることを表し、'l'であればシンボリックリンクであることを表します。

rwxr-xr-xはさらに3文字ずつに分かれています(rwx、r-x、r-x)。それぞれ自分自身、グループ内の人、そのほかの人にできる権限がかかれてあります。

つまり、自分自身はr(読み込み)、w(書き込み)、x(実行)が可能であり、グループ(この出力結果だとstaff)の人はw(書き込み)以外は可能、そのほかの人もw(書き込み)以外は可能であるということを表します。

一つ右にある数字は要素の個数を表します。dirXディレクトリは'dirX'と' . 'があるので、2が表示されています。

そこから右に、順に所有者、グループ、データの大きさ、日時、と続きます。

手元にあるPCの所有者、グループの確認方法は、

$ id

uid=501(ohmachi) gid=20(staff) .....

uidの後の数字はユーザー識別子で、()内の文字列がユーザー名。gidも同様で、数字がグループ識別子で()内がグループ名。

id関連コマンドを使って、ユーザーやグループを追加・変更・削除することもできる。

ユーザの情報を確認するidコマンドの説明

シンボリックリンクの削除方法

削除方法は簡単。

$ unlink test.txt

とすればtest.txtのシンボリックリンクは消えます。

確認すると、

$ ls -l

total 0

drwxr-xr-x  2 ohmachi  staff  64  3 12 16:33 dirX

lrwxr-xr-x  1 ohmachi  staff  25  3 12 17:05 sample.txt -> /Users/ohmachi/sample.txt

-rw-r--r--  1 ohmachi  staff   0  3 12 16:33 stest.txt

ちゃんと消えてますね。

まとめ

シンボリックリンクを作成、削除する方法について解説してみましたが、いかがでしたでしょうか?

コマンドラインをいじることって全くPCを触ったことない人にとってはちょっと怖いと思うんです。実際自分は前のPCで環境変数を消してしまってちょっとした惨事になったことがあります。

でもプログラミングをやろうと思ったら絶対にコマンドラインを学ばないといけないし、うまくコマンドが動いてくれなかったりしてむしゃくしゃしたりもします。

なので、コマンドラインについての教科書を一冊は読んだ方が良いですね。実際読んでみると、PC自体の構造がわかってよかったです。

なのでコマンドラインが弱いと感じている人は本を一冊読むと段違いに学習コストが下がりますよ。

今回参考にした本はこちら