正規パスの適切な定義は、GNUCoreutilsのドキュメントに記載されています。readlink
'Canonicalize mode'は、これらのいずれも持たない同等のパスを返すように指定されています。
- 自己(。)および親(..)ディレクトリへのハードリンク
- 繰り返しセパレーター(/)
- シンボリックリンク
次の例に示すように、文字列の長さは関係ありません。
readlink -f
Linuxを実行している場合、またはGNU Coreutilsを使用している場合は、 (正規化モード)またはその推奨される同等のコマンドを試しrealpath
て、システム上の一部のプログラムの「絶対パス」と「正規絶対パス」の違いを確認できます。
を使用して、システムで「java」のパスを取得できますwhich
$ which java
/usr/bin/java
ただし、このパスは実際には別のシンボリックリンクへのシンボリックリンクです。このシンボリックリンクチェーンは、を使用して表示できますnamei
。
$ namei $(which java)
f: /usr/bin/java
d /
d usr
d bin
l java -> /etc/alternatives/java
d /
d etc
d alternatives
l java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java
d /
d usr
d lib
d jvm
d java-17-openjdk-amd64
d bin
- java
正規パスは、前述のrealpath
コマンドを使用して見つけることができます。
$ realpath $(which java)
/usr/lib/jvm/java-17-openjdk-amd64/bin/java