両方のファイルがハードリンクされていますか?

両方のファイルがハードリンクされていますか?

コマンドラインで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のような特別なケースではないかもしれません。

おすすめ記事