シンボリックリンクとは?(Windowsのソフトリンク・ハードリンクの機能)
シンボリックリンクはソフトリンクの1種であり、本体ファイルへ別の場所や別名でアクセスできるリンクです。
シンボリックリンクの特徴・ポイント
・管理者権限のコマンドプロンプトから作成する
・ファイルやフォルダにリンク設定できる
・アクセスしている場所は違うが、ファイルを更新できる
・参照パスがショートカットとは違う
・ローカルのPC以外の場所へもリンクできる
・本体ファイルが無くなるとリンクも切れる
シンボリックリンクのようなソフトリンク以外に、ショートカットやハードリンクなど様々なリンクがありますので一つずつご紹介します。
Windowsのソフトリンク機能シンボリックリンクを知っていますか?
皆さんは「シンボリックリンク」というリンクの使い方をご存知でしょうか。
多くのWindowsユーザーは大部分がショートカットしか使わないのではないかと思います。
逆に言えば、ショートカット以外のリンク自体をそんなに知らないかも知れませんね。
本記事ではソフトリンクの一種である「シンボリックリンク」の特徴、およびそれ以外のハードリンクについてご紹介します。
シンボリックリンクとは
Windowsではファイルやフォルダへのリンク(参照)を行う機能として、ショートカット以外にも様々なリンクがあります。
その一つが「シンボリックリンク」ですね(他にハードリンク・ジャンクションなどあります)。
一見似たような機能ですが、少なくともショートカットの様に本体のファイルやフォルダを直接開くのとは違います。
どちらが良い・悪いというものではなく、その用途に応じて最適なリンク方法を使い分けましょう。
ソフトリンクとハードリンク
シンボリックリンクは一般に「ソフトリンク」と呼ばれています。それに対するのが「ハードリンク」と呼ばれるリンクです。
ソフトリンクは、PCディスク上で扱うファイルやディレクトリを本来の位置に残しつつ、それとは別の場所から或いは別名を付けてアクセスする手段です。
シンボリックリンクやジャンクションがソフトリンクです。
それに対してハードリンクは窓口自体を増やす(複製)ようなリンクになります。
本体の擬態ファイルを作成して同期ができる
シンボリックリンクを開くと、元ファイルの場所へジャンプするのではありません。
シンボリックリンクの中に元ファイルの「擬態」が構成されるようなイメージです。
複製とは違い擬態しているだけなのですが、開いたファイルへの操作が元ファイルにも反映されます。
同期しているので全て連動する
シンボリックリンクはリンク先の元(実体)ファイルが削除されるとリンク先が無くなってしまいます。
しかしシンボリックリンク自体を削除しても、元ファイルは削除されません。
シンボリックリンク内のファイルを削除すると元ファイルも削除されてしまいます。
バックアップと違い、一つの作業ファイルでミスして以前のデータ保存分から元に戻すという事には使えません。
シンボリックリンクの特徴
・リンク先はファイルでもフォルダでもOK
・相対パスでも指定できる
・存在しないファイルに対しても事前に作れる
・ローカルのPC以外の場所(リモートPCの共有フォルダやその中にあるデータ)へもリンクできる
・ファイルサイズが小さくて済む
シンボリックリンクの注意点
シンボリックリンクでは「ファイル」へのリンクと「フォルダ」へのリンクは異なります。
・ファイルへのリンクは、本体ファイルへ直接アクセスします。
・フォルダへのリンクは、シンボリックリンク自体からのアクセスになります。
これを踏まえるとシンボリックリンクはフォルダ自体に設置した方が便利だと個人的に思いますね。
シンボリックリンクの作り方
このシンボリックリンクは、ショートカットの様に「マウスの右クリック」からは作成できません。
コマンドプロンプトを起動して「mklink」というコマンドを使って作成する必要があります。
コマンドプロンプトを使った事が無い人にとっては敷居が高く感じるかも知れませんね。
コマンドプロンプト画面
まずはコマンドプロンプトで作成するリンクの種類をご紹介しましょう。
コマンドプロンプトで作成できるリンクのコマンドと種類
目的 | コマンド |
---|---|
ファイルにシンボリックリンクを作成 | mklink リンク先パス ファイル元パス |
フォルダにシンボリックリンクを作成 | mklink /d リンク先パス フォルダ元パス |
ファイルにハードリンクを作成 | mklink /h リンク先パス ファイル元パス |
フォルダにジャンクションを作成 | mklink /j リンク先パス フォルダ元パス |
シンボリックリンクはmklinkの後に/dを付けるとフォルダへのリンクを作成します。
付けない場合はファイル自体へのリンクを作成します。
フォルダやファイル名が日本語でも全く問題はないので、気にせずそのまま書く様にします。
コマンドプロンプトは管理者権限で実行する
実はコマンドプロンプトをそのまま開いてもmklinkの命令を入れる事はできません。
管理者権限がないと反映されないため、コマンドプロンプトを管理者権限で実行する必要があります。
管理者権限での実行の仕方
Windowsキーを押してパネルが開いた状態で「cmd」と入力しましょう。
この時入力するフィールド自体はありませんが、とにかくキーボードで「cmd」と打ってみましょう。
上記の画面がでますので「管理者として実行」をクリックします。
実行して良いかどうか確認されるので「はい」を選択すると、管理者権限でコマンドプロンプトが表示されます。
管理者権限の実行の方法は他にもいろいろありますので上記は一例です。
コマンドプロンプトへの入力
コマンド入力の書式
ファイルリンク(半角スペースで区切る)
mklink シンボリックリンク名 リンク先ファイル
フォルダリンク(半角スペースで区切る)
mklink /d シンボリックリンク名 リンク先フォルダ
フォルダへのシンボリックリンクの作成例
mklink /d C:\Users\lpeg\Desktop\メモ C:\Users\lpeg\Desktop\webdata\memo
上記コマンドを入力する事で、C:\Users\lpeg\Desktop\webdata\memo というフォルダ位置へのシンボリックリンクを、C:\Users\lpeg\Desktop\メモ に作る事ができます。
コードを入れてEnterすると「リンクが作成されました」と出ます。
シンボリックリンクとショートカットの違い
そもそもショートカットはアクセスするファイルやアプリケーションまでの経路をショートカットします。
しかしシンボリックリンクはユーザー近道をする事が目的ではありません。
システム上の別名パスを作る事ができる
シンボリックリンクは別の位置から別名でファイルにアクセスできる様にする事が目的です。
例えば稼働しているプログラム上でこのシンボリックリンクを「パス」として含める事ができます。
どんなに奥の階層にあるパス(パスが長くなる)でも、シンボリックリンクで身近なところにリンクしておけば、その短くなったパスが使えるのですね。
ショートカットはユーザーが利用、シンボリックリンクはシステムが利用
ショートカットはあくまでユーザーが使うためのものでシステム自体はこの事に深く関知していません。
それに対しシンボリックリンクはシステムが認識できるリンクです。
ショートカットは「ファイル」、シンボリックリンクは「正式なパス」
そもそもショートカット自体は「.link」が付く拡張子のファイルです。
PCがその拡張子ファイルをどのように扱うかはデスクトップアプリケーションの仕様によります。
今のWindowsであれば気にする事なく自在に使えますので気にする事はありません。
それに対しシンボリックリンクは、WindowsOSの正式な「ファイルシステム」です。ですので各アプリケーションに依存しません。
プログラム上で記述される各コード上の「パス」として利用する事ができるのです。
このように根本的に性質が違う事を踏まえておきましょう。
参照パス自体が違う
ショートカットとシンボリックリンクは、フォルダやファイルを開いた時の「ファイルパス」がそれぞれ違います。
通常のショートカットを開けた場合「Cドライブから対象ファイルまで」がパスになります。
シンボリックリンクの場合「Cドライブからシンボリックリンクまで」がパスになっています。
ショートカットはリンク先を追随してくれる
シンボリックリンクはリンク先が移動するとリンク切れしてしまいます。
しかしショートカットは多くの場合、リンク先を追随してくれます。ここは便利ですよね。
ショートカットはエクスプローラーから作成
本来ショートカットは、ファイルエクスプローラーから作成する事ができるものです。
アプリケーションの起動や特定フォルダ・ファイルへ直接アクセスできる様、ショートカットのアイコンをデスクトップ等に置く訳ですね。
シンボリックリンク等はコマンドプロンプトで作成
一方このシンボリックリンクは、先述したようにエクスプローラーからは作成できません。
コマンドプロンプトを起動して「mklink」というコマンドを使って作成する必要があります。
※後述するハードリンクやジャンクションも同様にコマンドプロンプトで作成します。
ハードリンクとは
ハードリンクとは1つのデータを指し示す複数のパスのことを指します。
ファイルと実データは違う
そもそも「ファイル」とはそれ自体がデータなのではなく、対象となるHDDデータの場所を指差す「窓口」です。
対象ファイルを更新したり消したりすると、その対象となるデータ部分が書き換えられたり消去したりする訳です。
ハードリンクとはその窓口となる対象ファイル自体を増やす事を意味します。
通常ファイルのイメージ
■ファイル「file_a.txt」 ↓アクセス [0010110010101001110100100100100100110011001001001] HDDデータ
ハードリンクのイメージ
■実ファイル「file_a.txt」 ■ハードリンク「hardlink_a.txt」 ↓ どちらからもアクセス ↓ [0010110010101001110100100100100100110011001001001] HDDデータ
ハードリンクが作られると、本体もハードリンクもどちらもそのデータへの窓口になります。
例えばAというファイルに対してハードリンク「B」を作成した場合、直接Aを開いてもハードリンクBも同じHDDデータを観に行くようになります。
どちらもリンク窓口なだけなので、更新をすれば反映がされます。
ハードリンクの最大の特徴
ハードリンクの最大の特徴がこのリンク窓口、つまり「リファレンスカウント」の概念です。
ハードリンクの場合はこの「リファレンスカウント」自体を増やします。
リファレンスカウントについて
この時ファイルの実データ(HDD内)は1つのままなのですが、ファイルへの経路(エントリ)数を示す「リファレンスカウント」というものが1つ増えます。
つまりファイルAのハードリンクを一つ作ると、そのファイルAとBともにリンク窓口になり、リファレンスカウントは「2」になるのですね。
このカウントはファイル(リンク窓口)の複製のような意味合いになります。
ハードリンクはリファレンスカウントの数だけ残る
この状態で仮に元のAファイルを削除してもハードリンクBはそのまま残ります。
そしてハードリンクBの方から引き続きファイルへアクセスができるのですね。
ハードリンクBがAの代わりに「窓口」になったイメージです。
これはリファレンスカウントが残っているからですね。
リファレンスカウントが0になるまで無くならない
ハードリンクを1つ作ると合計リファレンスカウントが2になり、その内一つが消されてもカウントは「1」になります。
カウントがゼロにならない限りそのファイルは消えない事を意味しています。
ハードリンクの特徴
・元ファイルのリファレンスカウントを増やす事で窓口の複製が作れる
・同一ファイルシステム内の「ファイル」に対してのみ作成可能。
・存在しないファイルへのリンクは事前に作成できない
・他ディスクやサーバー上の共有ファイルを指す事ができない
ハードリンクは窓口の複製ができて非常に便利ですが、フォルダには使えないのが難点ですね。
シンボリックリンクとハードリンクとの違い
ハードリンクはフォルダにも作れる
便利なハードリンクですが、このリンクはフォルダには作成できません。ファイルに対してのみ作成可能です。
それに対してシンボリックリンクはフォルダにも設定できます、ここは大きな違いです。
リファレンスカウントの概念があるかないか
先ほども説明しましたが、ハードリンクは1つ作るとそのファイルの合計リファレンスカウントが2になります。いわゆる複製された状態です。
ですので、その内一つが消されてもカウントが「1」になるだけで実体としては残ります。
カウントがゼロにならない限りそのファイルは消える事はないのですね。
シンボリックリンクは複製はできない
それに対しシンボリックリンク等のソフトリンクには、リファレンスカウントの概念がありません。
なので本体ファイルを削除してしまうと、リンク先へアクセスできなくなってしまいます。
シンボリックリンクのイメージ
■実ファイル「file_a.txt」←■シンボリックリンク「softlink_a.txt」 ↓アクセス [0010110010101001110100100100100100110011001001001] HDDデータ
シンボリックリンクが窓口となる実ファイルへの「別窓口」となるのに対し、ハードリンクはデータの窓口自体を増やします。
シンボリックリンクのフォルダ自体を消した場合、本体は残ります。
該当ファイルのディスク以外にも作れる
シンボリックリンクは他のディスクや共有された他PCにもリンクを作る事ができます。
しかしハードリンクはその本体ファイルのあるディスク内にしか作れません。
リンクの設置できる範囲はシンボリックリンクの方が広いですね。
ジャンクションとは
ジャンクションとはフォルダの別名パスを作る事ができるリンクです。ハードリンクと違いファイルには作れません。
例えば以前、WindowsXPなどでよく使われていた
・「Document and Setting」
・「Application Data」
・「All Users」
など、上記のパス名に覚えがあると思います。
新しいWindowsになっても、XPの時にあった上記パスにアクセスできる事でまだ使える古いソフトがあるのですね。
それはアクセス時に必要な上記のパス名を「ジャンクション」として登録してあるからです。実際にはこのフォルダは今は存在しません。
マウントの際に便利
例えば、Windowsのc:\shareのフォルダをLinuxでも共有しているとしましょう。
この時、Windowsのc:\data\sampleとc:\share\sampleをジャンクションします。
そうすると、共有対象でなかったWindowsのc:\data\sampleフォルダ内が、共有済みのc:\shareの「sampleフォルダ」として認識され、Linuxで共有できる様になります。
まとめ
以上ショートカット・シンボリックリンク・ハードリンクなどをご紹介しました。
説明としてはわかりにくかったかもしれませんが、簡潔にまとめると以下のような感じです。
用途に応じて使い分けて下さい。
・ショートカットは実体ファイルへ行く経路を短縮する
・ハードリンクはファイルに対してのみ設定可能で、実物ファイルの複製ができる
・シンボリックリンクはフォルダ・ファイル両方に設定可能、擬態しているだけで実物が消えるとリンク切れする
・ジャンクションはフォルダのみに設定可能、擬態しているだけ
通常はショートカットとシンボリックリンクとを明確に使い分けるメリットはあまりない様に思いますが、覚えておいて損はありませんね。
ハードリンクはファイルにしか適用できませんが便利な機能ですので、ぜひ活用してみて下さい。