bashでフォルダやファイルにショートカットを張る方法とは?

Pocket

Bashでフォルダや ファイルにショートカットを張る方法とは?
Bashでフォルダやファイルにショートカットを張る方法とは?

こんにちは!kteruです。

Windowsではフォルダやファイルのショートカットが作成できて便利ですね。

色々とフォルダを探さずに、まさに近道を使って、ファイルやフォルダにアクセスできます。

でもCygwinにはショートカットがありません。

しかし、Cygwinには、Windowsのショートカットと同様のことを行う方法があります。

そのためには、とあるコマンドを入力する必要があります。

その名は「ln」。「ln」は、「link」の省略形です。

昔からあるLinuxやUNIXでは、コマンドの入力が面倒なので、文字数を少なくする習慣がありますですタイ。(-:

それでは、実際のlnの使い方を見ていきましょう。

lnをそのまま使うと、ハードリンクを張ってしまいエラーとなる

試しにハードリンクを張ってみよう

試しにCygwinでハードリンクを張ってみましょう。

lnになにもオプションを付けすに実行するとハードリンクを張ります。

$ ls /cygdrive
c/

$ ln /cygdrive/c .
ln: /cygdrive/c: ディレクトリに対するハードリンクは許可されていません

やはりエラーが出ましたね。

ハードリンクはWindowsのファイル管理システム上にない概念

ハードリンクは、Windowsのファイル管理システム上にない、Linux独自の概念です。

詳細は述べませんが、ハードリンクを張った数だけファイルが増え、そのファイルを削除するには、ハードリンクを張ったすべてのファイルを削除する必要があります。

これは結構混乱の元になりますので、比較的新しいOSであるWindowsでは採用されませんでした。

ln -s と-sオプションを使ってシンボリックリンクにするとOK

シンボリックリンクとは

シンボリックリンクとは、簡単に言えば、リンク先のファイルやフォルダのフルパスをテキストファイルにそのまま書き込んで特殊なファイルであるとのフラグを立てたテキストファイルのことです。

Cygwinがシンボリックリンクのファイルを扱うときに、そのファイルの中に書き込まれたリンク先のフルパスのファイルやフォルダへのアクセスに切り替えます。

このように、単なるフルパスのテキスト情報をファイルに持たせて、OSレベルでファイルアクセスする際にアクセス先のファイルやフォルダを切り替えるという単純な仕組みがシンボリックリンクの良いところです。

ユーザーはシンボリックリンクの中身を何一つ心配する必要がありません。

ただ、「ln -s」と「-s(シンボリック)」オプションを付けて「ln」を呼び出し、リンクを張るだけです。

その後は、シンボリックリンクファイル・フォルダは通常のファイルやフォルダと同等に扱われます。

フォルダにシンボリックリンクを張る

実際にフォルダに対しシンボリックリンクを張ってみましょう。

$ pwd
/home/kteru
$ ln -s /cygdrive/c .
$ ls
c@  bash_history_copied  vagrant/  bin/
$ ls -l
合計 9
-rw-------  1 kteru なし  6975 3月   6 15:25 bash_history_copied
drwxr-xr-x+ 1 kteru kteru    0 11月 28 07:50 bin/
lrwxrwxrwx  1 kteru なし    11 3月   8 11:30 c -> /cygdrive/c/
drwxr-xr-x+ 1 kteru なし     0 12月 29 09:36 vagrant/

上記のコードでは、/cygdrive/c のシンボリックリックをホームフォルダに置きました。

「ls -l」すると、シンボリックリンク「」がきちんと「/cygdrive/c」へ張られていることがわかります。

もちろんシンボリックリンク「c」へ「cd」できます。

$ cd c
$ pwd
/home/kteru/c

カレントフォルダのフルパスを表示する「pwd」コマンドでは、「ホームフォルダ/c」と表示していますね。

「ls」してみれば、「/cygdrive/c」にいることがわかりますので、皆さんも実行されてみてください。

ファイルにシンボリックリンクを張る

次にファイルに対しシンボリックリンクを張ってみましょう。

ダミーのテキストファイルをホームフォルダに作成します。

$ cat > text <<EOF
> this is a
> test text.
> EOF
$ ls
text  c@  bash_history_copied  vagrant/  bin/

次に「ln -s」でテキストファイルに対しシンボリックリンクを張ります。

$ ln -s text symtext
$ ls
symtext@  text  c@  bash_history_copied  vagrant/  bin/

次に、シンボリックリンクを「cat」してみましょう。

$ cat symtext
this is a
test text.

シンボリックリンクを「cat」したときに、きちんとアクセス先が切り替えられ、リンク先の「text」ファイルの内容が表示されていますね。


結論

テキストファイルへのシンボリックリンク
テキストファイルへのシンボリックリンク

ln」コマンドはハードリンクシンボリックリンクを張ることができるコマンドでした。

リンクとはWindowsで言えばショートカットのことで、リンクはショートカットと同等の機能があります。

Cygwinでもショートカットが使えれば、環境が使いやすくなりますね。

ただし、ハードリンクはLinuxやUNIXのファイル管理システムではサポートされていますが、Windwosではサポートされていませんでした。

そのため、Cygwinではシンボリックリンクを使います。シンボリックリンクでも、ショートカットと同等のことを行えましたね。

シンボリックリンクを張る際は、「ln -s」と「ln」(link)に、「-s」(シンボリック)リンクを与えて実行します。

皆さんもぜひ応用して便利にCygwinを使ってください!