[System Environment] | ||||||||||||
ファイルへの別名を割り当てるハードリンクを作成する
|
||||||||||||
|
解説 |
UNIXやLinuxなどのOSでは(正確には、それらのOS上で利用されているファイル・システムでは)、「リンク」という、1つのファイルに対して複数の名前を付ける機能が用意されている。あるファイルの実体(データが書き込まれた領域、ファイルの中身のこと)に対して、例えば「c:\user01\mydata.txt」と「c:\data\sample\sampledata.txt」という2つのリンクを作成しておくと、これらのいずれの名前を使っても同じファイルのデータにアクセスできる。名前は複数付けられているが実体は1つなので、一方でデータを更新後に別の名前でアクセスすると、その更新された内容が得られる。
ハードリンクを利用すると、1つのコマンドに2つの名前を付けたり、複数のプロジェクトでファイルを共有したりできる。ファイルをコピーしてデータを共有するのとは違い、常に同じ実体を指しているので、別名で起動しても常に同じものが実行されるし、多くの名前でファイルを共有してもディスク領域を圧迫することがない。
UNIXの場合、リンクには「ハードリンク」と「シンボリック・リンク(ソフトリンク)」の2種類がある(リンクはlnコマンドで作成する)。ハードリンクは、同一のボリューム内で直接リンクを張る場合に利用される機能である。複数のディレクトリ・エントリが1つの実体を指しているが、同一ボリューム内に存在しているので、常にリンク先の実体が存在していることが保証される。これに対しシンボリック・リンクは、Windows OSのショートカット(およびジャンクションやリパース・ポイント)などのように動的に解釈されるため、自由度が高いが、場合によってはリンク先にアクセスできないことがある(詳細は省略)。
Windows OSでもこのハードリンクを利用できるが、ハードリンクを作成するコマンドはWindows 2000以前では用意されていなかった(そのためハードリンクはWindows OSではほとんど使われていない)。だがWindows XP以降のOSにはfsutil.exeというコマンドがあり、これを使ってハードリンクを作成できる。本TIPSではこのハードリンクの作成方法について解説する。なおWindows VistaおよびWindows Server 2008では、より柔軟性の高いシンボリック・リンク機能が新たにサポートされている。詳細についてはTIPS「Windows Vista/Windows Server 2008でシンボリック・リンクを作成する」を参照していただきたい。
Windows OSにおけるハードリンクの制限
Windows OSでもUNIXなどのようなハードリンクが利用できるが、いくらか制限があるのでまとめておく。
- ハードリンクが利用できるのはNTFSボリュームのみである。FATボリューム上にはハードリンクは作成できない。
- ハードリンクはファイルに対してのみ作成できる。フォルダ(ディレクトリ)に対してはハードリンクは作成できない。
- ハードリンクは、同一ボリューム内のファイルに対してのみ作成できる。別ボリュームや別サーバの別ボリューム上のファイルへのハードリンクは作成できない(これはUNIXも同様)。
- あるファイルに対して、いくつのハードリンクが作成されているかを知るコマンドはない(UNIXの場合はlsコマンドでリンク・カウント数を表示できる)。また、どれが最初に作成された実体を持つファイルで、どれが後から作成されたハードリンクかを区別できない。
- ハードリンクを作成するにはコマンド・プロンプト上で作業する必要がある。エクスプローラでは操作できない。
- リンクを作成するコマンドはUNIXとは異なるが、SFU(Microsoft Windows Services for UNIX)に含まれるlnコマンドを使えば、同様に操作できる(SFUについてはTIPS「UNIX互換環境を実現するSFUを利用する」参照)。
操作方法 |
fsutil hardlink createコマンドでハードリンクを作成する
ハードリンクを作成するには、Windows XP以降に用意されているfsutil.exeというコマンドを利用する(このコマンドをWindows 2000上でも利用することはできるようであるが、保証外である)。コマンド・プロンプトを開き、次の書式でコマンドを入力してハードリンクを作成する。なおWindows Vistaの場合は、UACによってfsutil.exeの実行がブロックされるため、管理者権限のあるコマンド・プロンプト上で作業する必要がある(TIPS「Windows Vistaでプログラムを管理者モードで実行する」参照)。
fsutil hardlink create <新しいファイル名> <リンク先のファイル> |
<リンク先のファイル>は既存のファイル名で、それに対して付けたい新しい名前を<新しいファイル名>に指定する(UNIXのlnコマンドとは引数の順番が逆であることに注意)。
例えばカレント・フォルダにtest.txtというファイルが存在する場合、それに対して新たにsample.textというハードリンクを付けたければ(sample.txtという別名でもアクセスできるようにしたければ)、次のように実行する。
C:\Document>fsutil hardlink create /? ……使い方の表示 |
この結果で分かるように、作成されたハードリンクのファイル属性(サイズや更新日付)は元と同じである。いずれの名前でアクセスしても同じものが得られるし、sample.textを更新してからtest.txtを表示させると、内容が変更されていることが確認できる。
なおリンクを張る先は同じフォルダ内でなくてもよいし、1つのファイルに対して2つ以上の多数のハードリンクを作成してもよい。
ハードリンクの削除
ハードリンクを作成するコマンドはあるが、削除するコマンドは特に用意されていない(これもUNIXと同様)。通常のDELコマンドやエクスプローラの削除機能でファイルを削除すれば、リンクは削除される。ただし1つの実体に対して2つ以上のリンクが存在する場合は、ファイルの実体に対するリンク数が1つ減らされ、リンクがすべて削除された時点でファイルの実体が削除/解放される(リンクを削除する順番は任意)。オリジナルのファイル名も1つのリンクと数え、リンク数が0になった時点でファイルの実体が削除されるのである(この時点でディスクの空き領域が増える)。つまりファイルとは、1つの実体と、それに対する(複数の)リンクから構成されていると考えられる。
C:\Document>dir ……削除前の状態の確認 |
Windows Vista/Windows Server 2008のmklinkコマンド
Windows Vista/Windows Server 2008では、リンクを作成するためにmklinkというコマンド(コマンド・プロンプトの内部コマンド)が用意されている。このコマンドでは、ハードリンクだけでなく、ジャンクション(リパース・ポイント)やシンボリック・リンクも作成できる。ハードリンクを作成するには、/hオプションを付けて実行すればよい(ジャンクションについてはTIPS「ジャンクション機能を使ってディスク・ボリュームをマウントする」、シンボリック・リンクについてはTIPS「Windows Vista/Windows Server 2008でシンボリック・リンクを作成する」をそれぞれ参照のこと)。
C:\Document>mklink /h sample2.txt test.txt |
この記事と関連性の高い別の記事
- Windowsのシンボリックリンクとジャンクションとハードリンクの違い(TIPS)
- Windows Vista/Windows Server 2008でシンボリック・リンクを作成する(TIPS)
- Windowsでジャンクション機能を使ってフォルダをマウントする(TIPS)
- これだけは覚えておきたいWindowsのコマンドプロンプトの使い方(TIPS)
- Windowsでリモートサーバ上のシンボリックリンクを有効にする(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
更新履歴 | ||
|
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|