それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

windows とCygwinで始めに知るべきSymlink(シンボリックリンク)の扱い

cygwinシンボリックリンクを作るとWindows側でショートカットとして動作しない。

Windows側でショートカットを作るとCygwin側からシンボリックリンクっぽく動作する。

というわけでCygwinの場合、ショートカットをつかって、Symlinkは避けるべきか。

Cygwinで使えるショートカットの作り方

  1. winsymlinks
  2. mklink
  3. ln

cygwinのショートカットのオススメはこれ

コマンド

mklink /D c:\users\takuya\cygwin c:\cygwin

を実行する。 ln -s は避けるのが無難。

動作についてチョッとだけしらべてみた。

windowsで作ったシンボリックリンクを cmd.exeから見てみた

 C:\Users\takuya のディレクトリ

2011/06/24  03:37    <DIR>          .
2011/06/24  03:37    <DIR>          ..
2011/02/07  16:05    <SYMLINKD>     apps [C:\Users\Public\apps]
2011/06/24  02:58    <DIR>          Desktop

Cygwin側からみてみる

takuya@letsnote:~$ ls -alt | grep app
lrwxrwxrwx  1 Administrators None        17 2月   7 16:05 apps -> /home/Public/apps

ポイントはこんな感じ

cygwinから ln -s すると・・・・

Cygwinから シンボリックリンクを作ってみたら

takuya@letsnote:~/作ったもの$ ln -s /usr/local/bin ./cygwin
takuya@letsnote:~/作ったもの$ ls -l ./cygwin
lrwxrwxrwx 1 takuya None 14 6月  24 03:56 ./cygwin -> /usr/local/bin

cmd.exeで見ると。ファイルになってしまう。

C:\Users\takuya\作ったもの のディレクトリ

2011/06/24  03:56    <DIR>          .
2011/06/24  03:56                42 cygwin

ファイルです、開いてもバイナリしかありません

簡単な解決方法

mklink を使う

冒頭に書いたコマンド mklink (Windows提供)を使う

mklink について

C:\Users\takuya>mklink
シンボリック リンクを作成します。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

        /D          ディレクトリのシンボリック リンクを作成します。既定では、
                    ファイルのシンボリック リンクが作成されます。
        /H          シンボリック リンクではなく、ハード リンクを作成します。
        /J          ディレクトリ ジャンクションを作成します。
        リンク      新しいシンボリック リンク名を指定します。
        ターゲット  新しいリンクが参照するパス (相対または絶対)
                    を指定します。

という感じです。このコマンドはUAC制御化の特権ユーザーでしか動きません。注意が必要ね。ハードリンクが作れるとか,ジャンクションが造れるとかでちょっとワクワクする

mklink /D c:\users\takuya\cygwin c:\cygwin

などとする。ln -s とディレクトリ指定順が反対になる。注意が必要よ。

winsymlinks

```
export CYGWIN="winsymlinks:native"
```
環境変数 cygwin にwinsymlinks を使えば ln -s がショートカットになるので便利です。