リンクを削除する
ハードリンクとシェルリンクは、対象がファイルそのものなので、通常のファイルと同じ扱いで削除ができる。ただし、1つのファイルに複数のハードリンクが存在する場合、ファイルの削除コマンド(DELコマンドやRemove-Itemコマンド)は、指定したリンクのみの削除となる。こうしてリンクが減っていき、最後のハードリンクに対して削除コマンドが適用されたとき、ファイル自体が削除される。
シェルリンクはそれ自体が普通のファイルなので、リンクの削除は、シェルリンクファイル(.lnkファイル)を削除するだけでいい。シェルリンクは、エクスプローラー上でのみ有効なので、コマンドラインからは単なるファイルでしかない。
シンボリックリンクの場合、リンク先がファイルなのかディレクトリなのかによってコマンドが異なる。同様にジャンクションの場合、対象がディレクトリであることを認識してコマンドを使う必要がある。
cmd.exeでは、ファイルの削除には、DEL/DELETEあるいはERASEコマンドを使う。複数のコマンドがあるが機能は同じである。これに対して、ディレクトリの削除には、RMDIR/RDコマンドを使う。RDはRMDIRの省略形である。
シンボリックリンクの場合も、リンク先がファイルの場合にはリンクの削除にはDELコマンドを、リンク先がディレクトリの場合には、リンクの削除にRMDIRコマンドを使い分ける必要がある。
DELコマンドの場合、対象にディレクトリを指定すると、暗黙的に「\*」が仮定されるため、対象ディレクトリ内の消去という動作になる。このため、ディレクトリへのシンボリックリンクやジャンクションを消去する場合には、間違ってDELコマンドを使わないように注意が必要だ。
PowerShellでは、過去にシンボリックリンクやジャンクションの扱いが正しくなかったことがあるが、現在のWindows PowerShell(Ver.5.1)、PowerShell(V 7.2)では、予想可能な振る舞いをするようになった。
PowerShell/Windows PowerShellでは、rmもrmdirもともにRemove-Itemコマンドのエイリアスになっている。このRemove-Itemコマンドでは、シンボリックリンクやジャンクションを指定すると、リンクのみを消去するようになっている。
リンクを探す
cmd.exeでは、ジャンクションとシンボリックリンクはDIRコマンドに「<JUNCTION>」「<SYMLINKD>」(シンボリック・リンクでディレクトリの場合)、「<SYMLINK>」(同ファイルの場合)と表示が出る。/Sオプションでサブディレクトリをすべて表示させ、ファイルにリダイレクトしたのち、これらの文字列を探す。
ハードリンクは、cmd.exe上ではファイルごとに調べるしか方法がない。
fsutil hardlink list ファイルパス
というコマンドで指定したファイルにハードリンクがあれば、すべて表示させることができる。しかし、ファイルを1つ1つ指定して調べる必要がある。こうした用途には、PowerShellのほうが向いている。
PowerShell/Windows PowerShellでは、
Get-ChildItem <起点パス> -Recurse | Where-Object LinkType -eq HardLink
として、ハードリンクを持つファイルを探すことが可能だ。最後の部分を「Junction」「SymbolicLink」とすることでジャンクションやシンボリック・リンクを探すことができる。
シンボリックリンクは、簡単にファイルやディレクトリを他の場所から「持ってくる」ことができるため、慣れると多用しがちになる。多くのプログラムは、シンボリック・リンクをファイルやディレクトリとして扱ってくれるので問題はないのだが、バックアップや検索インデックス作成など、ソフトウェアによっては、シンボリック・リンクを意図的に排除、あるいはオプションで扱いを制御していることがあるので注意が必要だ
この連載の記事
-
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る - この連載の一覧へ