Windowsにてこういうリンクを作る方法について
- シンボリックリンク
- ハードリンク
これらはCUI(コマンド)上で作れます。
その作り方と扱い方は注意点があるので、
シンボリック・ハードリンクの作り方を紹介
将来の自分自身へもメモも兼ねています。
このページの目次
まずシンボリック・ハードリンクの違いについて
これはこういう違いがあるらしいです。
▼ シンボリックリンク(ソフトリンク)
ソフトリンク (Soft Link) は、コンピュータのディスク上で扱うファイルやディレクトリを、本来の位置にファイルを残しつつそれとは別の場所に置いたり別名を付けてアクセスする手段である。複製とは違い、実体がないこと、ソフトリンクで開いたファイルへの操作が実物のファイルにも反映されること、ファイルサイズが小さいのが特徴。
引用元 : https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%83%AA%E3%83%B3%E3%82%AF
▼ ハードリンクとは
ハードリンクは名前をファイルの実体に直接結びつけるものであるため、ファイルの実体へのアクセスはどの名前からハードリンクをたどっても同じ処理方法となる。ファイルに複数のハードリンクを作ることができるファイルシステムでは、ファイルを削除するというのはハードリンクを削除するという意味で使われる。そのようなシステムではファイルはハードリンクによる参照カウント(リンクカウント)を記録しており、1つのハードリンクが削除された場合でも、別のハードリンクが存在している限り、固有のiノードを持つファイルの実体は削除されずに残る。参照するハードリンクがなくなった時点でファイルが削除される。
引用元 : https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%AA%E3%83%B3%E3%82%AF
さすがWikipedia (笑
端的にまとめるならこうなります。
- シンボリックリンク(ソフトリンク)
実体(中身)がなく、別のファイルへの参照をするためだけのもの。Windowsならショートカットがシンボリックリンクに該当する ※ 訂正:ショートカットとシンボリックは厳密には別物。コメントご指摘ありがとうございます。
- ハードリンク
それ自体に実態があり、別ファイルの分身のようなもの。ハードリンクを削除しても、オリジナルが残っていれば削除されずに残る
もしファイルの内容を参照したいだけならシンボリックリンク、異なる場所で同時にあるファイルの編集・書き込みがしたいならハードリンクを使えばOKです。
シンボリックリンク(soft link)の作り方
Windows的にはショートカットと同義
その作成手順はこういう感じです。
1.管理者権限でコマンドプロンプトを開く
▼ 管理者として実行
そうするとユーザーアカウント制御のダイアログが出てくるので、「はい」を押すと管理者権限でプロンプトを開けます。
2.mklinkコマンドを使用
▼ シンボリックリンクを作る構文
1 2 3 4 5 6 7 8 |
REM ファイルのシンボリック作成 mklink [リンク先] [リンク元] REM ディレクトリをシンボリック作成 mklink /D [リンク先] [リンク元] REM ジャンクションとして作成 mklink /J [リンク先] [リンク元] |
▼ 具体的な作成コマンド例
1 2 |
REM xxx.txtのシンボリックリンク作成 mklink C:\hoge\xxx.txt C:\fuga\xxx.txt |
上のコマンド例でいうなら、C:\fuga\xxx.txtがシンボリックの参照元、C:\hoge\xxx.txtがシンボリックリンク(つまりショートカット)になります。
この引数の順番には少し気を付けた方がいいですね。リンク先が1番目にきて、リンク元(オリジナル)が2番目なのでご注意を・・・
ハードリンク(hard link)を作るには
お次はハードリンクの作り方
これ自体はシンボリックとあまり変わりません。
1.管理者権限でコマンドプロンプトを開く
▼ 管理者として実行
ここまでは全く同じ
2.mklinkコマンドを使用
▼ シンボリックリンクを作る構文
1 2 |
REM ハードリンク作成 mklink /H [リンク先] [リンク元] |
▼ 具体的なコマンド例
1 2 |
REM xxx.txtのシンボリックリンク作成 mklink /H C:\hoge\xxx.txt C:\fuga\xxx.txt |
ただし1つ注意点があるのはハードリンクはディレクトリに対して作成できません。そこがシンボリックリンクとの大きな差かもしれないです。
また作成したハードリンクを削除したからと言って、オリジナルが消えることもないです。飽くまでファイル内容を共有してるだけなので
どのファイルがハードリンク かを見分けるには
さて、ハードリンクで1つ問題点があります。
それは普通のファイルとの見分けがつかないこと!
▼ この画像のように見分けがつかない
上画像では赤枠で囲みましたが、それがハードリンクです。ショートカットみたいに専用マークもないし、ファイル種類からも判別不可能
これは地味に困る問題で、「どれがハードリンクなんだろ?」と混乱する原因にもなります。(もちろんハードリンク削除してもオリジナルには影響ないものの...)
そういう時は次のコマンドを使えばOK
▼ fsutilコマンドを使う
1 |
fsutil hardlink list hoge.txt |
▼ このように一覧表示してくれる
1 2 3 |
\hoge\js\App.js \fuga\js\App.js \$Recycle.Bin\xxxx\$R6OG2O8.js |
上コマンドのように fsutil hardlink list に対してオリジナル(リンク元)のファイルパスを渡します。そうするとハードリンク先が一覧表示可能です。
ここまでのまとめ - mklinkコマンドについて
要するにこういうこと
- シンボリックリンク(soft link)の作り方
コマンド上にて mklink [リンク先] [リンク元] を実行するだけ。もしディレクトリに対して作成したいなら /D または /J オプションを追加すればOK
- ハードリンク(hard link)の作り方
コマンド上にて mklink /H [リンク先] [リンク元] を実行する。ただしハードリンクはディレクトリに対しては作成することができない
その他の細かい注意点は記事内で解説した通りです。
もし間違いなどあればご指摘ください。ではまた