-f, --canonicalize
canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist
-e, --canonicalize-existing
canonicalize by following every symlink in every component of the given name recursively, all components must exist
-f または -e が何をするのか理解できません。言葉遣いがさっぱりわからない。正規名は基本的に最短の一意の絶対パスです。しかし、名前の構成要素とは何を意味するのでしょうか? サブディレクトリのことですか?ここで「再帰的に」とはどういう意味ですか? 私が理解しているのは、指定された正規名のすべてのサブディレクトリを再帰的に検索することです。しかし、それはシンボリックリンクには意味がありません。
次に、すべてのコンポーネントが存在する必要がある「-e」オプションの意味は何ですか? ここのコンポーネントは何ですか?
誰かが簡単な例を手伝ってくれませんか? ありがとう
ここでの最初のコンポーネントは、パスの要素を意味します。例:
/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それは結果が表示されますがあるので一つのコンポーネントに存在する少なくともされるパスにlolsとで-eすべてのパスので、出力は空になり成分が存在しなければなりません。
そして最後は、複数の存在しないディレクトリがある場合です:
readlink -f lols/lol8/lol10 : <empty output>
readlink -e lols/lol8/lol10 : <empty output>
マップページで説明されているように、出力は空になります: -f : 最後のコンポーネントを除くすべてが存在する必要があります => 尊重されません -o : すべてのコンポーネントが存在する必要があります => 尊重されません
2- ls -l だけを使用しない理由:
file1 という名前のファイルを作成し、link1 という名前のこのファイルへのシンボリックリンクを作成し、link1 から別のシンボリックリンク link2 を作成するとします。
touch file1 : file1
ln -s file1 link1 : link1 -> file1
ln -s link1 link2 : link2 -> link1
次にls -l link2
、出力は次のようになります。 link2 -> link1 そしてreadlink link2
、出力を使用すると、次のようになります。 link1 ; ls -l と同じですが、使用しreadlink -f|-e link2
た場合の出力は次のようになります。したがって、ソースファイルを指します。
では、いつls の代わりにreadlinkを使用するのですか? ネストされたシンボリックリンクがある場合(再帰的読み取り)。ファイル/ディレクトリが別の場所にある場合。
エラーを回避するには、ls の代わりにreadlinkを使用することをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加