"ls -L" このリンクが指すファイル名ではなく、リンク自体の名前を印刷するのはなぜですか?

ソフトリンクの「長い」リストを実行すると、ls -lソフトリンクのファイルプロパティが表示されます。ls -lL(または)を実行すると、ls -l --dereferenceファイル属性はリンクが指すファイルの属性になりますが、lsリンク自体の名前は出力され続けます。ページmanにはこれについて何も言及されていません。ページにはinfo理由を説明せず、lslsリンクが指すファイル名ではなく、リンク自体の名前はまだ印刷されています」とのみ表示されます。私はこれが意図的な選択だと思いますが、この行動の根拠を知っている人はいますかls -L

ベストアンサー1

リンクのもう一方の端にあるファイル名は、あなたが使用しているものではないかもしれませんls

リンク自体の名前の代わりにシンボリックリンク先の名前を表示するには、2つの問題があります。

  1. ファイルが存在しません。ディレクトリリストにシンボリックリンクのターゲット名が表示されている場合は、そのディレクトリ内のファイル名と考えることができますが、そうではありません。ターゲットの名前は、そのディレクトリにあるファイルにアクセスするために使用する名前ではありません。そのファイル名を持つファイルが(そのディレクトリに)存在しないか、最悪の場合は、その名前でアクセスするときに完全に異なる可能性があります。ファイル(またはディレクトリなど)。

  2. ファイル名が同じと思われる場合があります。シンボリックリンクのターゲット名が表示されている場合は、そのディレクトリの他のファイル名と同じであることがわかりますが、Unixシステムでは不可能です。

lsそのような場合、リストを検証するために使用する必要がないユーザーに混乱を招き、その-Lオプションが意味をなさなくなります-L

これ(いいえターゲット名の表示)もPOSIXで指定された動作であり、非常に明確です。

すべてのシンボリックリンク(コマンドラインで名前が付けられているかファイル階層で見つかったか)のファイル情報とファイルタイプを評価し、リンク自体ではなくリンクが参照するファイルのシンボリックリンクになるようにします。ただし、lsリンクが参照するファイルではなく、リンク自体の名前を記入する必要があります。-Lと一緒に使用すると、-lシンボリックリンクの内容を長い形式で作成します(STDOUTセクションを参照)。

これは、根拠セクションでこれ以上議論されない。POSIXlsマニュアル

おすすめ記事