ここでの最初のコンポーネントは、パスの要素を意味します。例:
/home/user/.ssh => <component1>/<component2>/<component3>
1- 次のようなディレクトリ構造があるとします:
lols
├── lol
├── lol1 -> lol
└── lol2 -> lol1
また、ここに存在しないディレクトリは lols/lol3 になるため、各コマンドの出力を比較できます:
readlink -f lols/lol1 : /lols/lol
readlink -e lols/lol1 : /lols/lol
パスのすべてのコンポーネントが存在するため、ここでの出力は同じになります。
readlink -f lols/lol8 : lols/lol8
readlink -e lols/lol8 : <empty outpyt>
-f を使用しているため、ここでの出力は異なります 1 つのコンポーネントがあるため、結果が表示されます 少なくとも存在する 爆笑のパスで および -e を使用 すべてのパス コンポーネントが存在する必要があるため、出力は空になります .
そして最後の問題は、複数の存在しないディレクトリを持つことです:
readlink -f lols/lol8/lol10 : <empty output>
readlink -e lols/lol8/lol10 : <empty output>
ここでは、マップ ページで説明されているように、出力は空になります:-f :最後のコンポーネント以外はすべて存在する必要があります => 無視されます-o :すべてのコンポーネントが存在する必要があります => 無視されます
2- ls -l のみを使用しない理由:
file1 という名前のファイルを作成し、link1 という名前のこのファイルへの asymlink を作成し、link1 から別のシンボリック リンク link2 を作成するとします。
touch file1 : file1
ln -s file1 link1 : link1 -> file1
ln -s link1 link2 : link2 -> link1
次に ls -l link2
で 出力は次のようになります:link2 -> link1And readlink link2
を使用する場合 出力は次のようになります。 ls -l と同じですが、 readlink -f|-e link2
を使用する場合 出力は次のようになります。 ソースを指します ファイル。
readlink をいつ使うべきか ls の代わりに ?ネストされたシンボリック リンクがある場合 (再帰読み取り)。ファイル/ディレクトリが別の場所にある場合。
readlink を使用することをお勧めします ls の代わりに エラーを避けるために。
これは、最終ターゲットまで複数のホップにわたるルートをたどるリンクにとって意味があります。例:
touch test_file
ln -s test_file test_link
ln -s non_existing_target dead_link
ln -s test_link link1
ln -s dead_link link2
上記では、 link1
test_link
を介して、最終的にファイルにリンクしています 、だから -f
および -e
同じ結果になります。 link2
が無効なリンクを指している場合、次のことがわかります:
> readlink -e link2
> readlink -f link2
/home/thanasis/temp/non_existing_target
dead_link
は、「最後のコンポーネント以外はすべて存在しなければならない」という式の「最後のコンポーネント」です。 -f
-e
の間、存在しないターゲットに解決されます 出力がありません。
man readlink
に注意してください 推奨
realpath
正規化機能に使用する推奨コマンドです
この例では、realpath -m
, (--missing
) readlink -f
に同じ出力を与える .一般的に realpath -e
は、リンクが最終的な既存のターゲット ファイルに解決できるかどうかをテストする方法であり、ここで予想されるエラーが返されます:
> realpath -e link2
realpath: link2: No such file or directory
ls -l
の間 はすべての結果を返し、デッド リンクに対して赤色の出力が表示される可能性があります。オプション -L
も 存在し、リンクを逆参照してターゲットを表示します。これは人間が読み取るためのものであり、決して ls
を使用しないでください スクリプト内のリンクについて何かを決定します。