-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
。デッドリンクを指すと、次のようになります。-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
スクリプト内のリンクに関するものを決定するために使用しないでください。