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

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

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

答え2

これは、最終目的地までの2つ以上のホップ経路に沿ったリンクに適している。たとえば、

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。デッドリンクを指すと、次のようになります。-elink2

> 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スクリプト内のリンクに関するものを決定するために使用しないでください。

関連情報