readlink -f および -e オプションは明確に説明されていません。

readlink -f および -e オプションは明確に説明されていません。
-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」オプションですべてのコンポーネントが必要であることはどういう意味ですか?ここでコンポーネントは何ですか?

誰かが簡単な例を助けることができますか?ありがとう

ベストアンサー1

ここで、最初のコンポーネントはパスの要素を表します。例:

/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あるため結果が表示されます。コンポーネント存在する少なくともパスにありますそして- 金利すべてのパスが空であるため、出力は空です。コンポーネントが存在する必要があります。

最後は、存在しないディレクトリが複数あることです。

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出力は以下を指します。源泉文書。

だからいつ使うのかリンクを読む変えるエルエス?入れ子になったときシンボリックリンク(再帰的に読みます)。ファイル/ディレクトリが別の場所にある場合。

だからもっと活用しています。リンクを読む変えるエルエスエラーを避けるため。

おすすめ記事