コマンドラインで2つのファイルがハードリンクされているかどうかはどうすればわかりますか?たとえば、次のように接続します。
$ ls
fileA fileB fileC
$ is-hardlinked fileA fileB
yes
$ is-hardlinked fileA fileC
no
ベストアンサー1
ほとんどのファイルシステムでは、ファイルはそのファイルによって一意に識別されます。インデックスノードしたがって、確認する必要があるのは、2つのファイルのinode番号が同じで、同じファイルシステムにあるかどうかです。
Ash、ksh、bash、およびzshには、ファイル同等演算子と呼ばれるチェックを実行する構成があります-ef
。
[ fileA -ef fileB ] && ! [ fileA -ef fileC ]
高度なケースでは、ls -i /path/to/file
ファイルの inode 番号をリストします。df -P /path/to/file
ファイルがあるファイルシステムを表示します(2つのファイルが同じディレクトリにある場合は同じファイルシステムにあります)。システムに対応するstat
コマンドがある場合は、inodeとファイルシステム番号が表示されることがあります(stat
システムによって異なるため、マニュアルを確認してください)。ディレクトリ内のハードリンクをすばやく移動するには、次のようにしますls -i | sort
(おそらくawkによるパイプ)。
1 すべてのネイティブUnixファイルシステムなどの一部(NTFSなど)。しかし、CramFSのような特別なケースではないかもしれません。