GNU/Linux >> Linux の 問題 >  >> Linux

readlink -f および -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 を使用しているため、ここでの出力は異なります 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 を使用しないでください スクリプト内のリンクについて何かを決定します。


Linux
  1. Linux –なぜSuだけでなくSuを使用するのですか?

  2. StdoutとStdinを接続することの意味は何ですか?

  3. リダイレクトとパイプ出力?

  1. Linuxで出力をファイルとStdoutにリダイレクトする方法

  2. なぜRm-rfであり、Rmdir -rfではないのですか?

  3. su だけでなく su - を使用するのはなぜですか?

  1. $var対${var}そして引用するか引用しないか?

  2. 出力の検索を制限し、信号13を回避しますか?

  3. Ssh -tオプションがリダイレクト出力にCrとLfを追加するのはなぜですか?