現時点では、コマンドを使用してディレクトリシンボリックリンクの内容や情報を検索しようとしたときに何が起こっているのか理解できませんls
。このコマンドには、コマンドラインにリストされているシンボリックリンクに従う-H
オプションがあることがわかります。ls
マニュアルページでは、ls
これはこのオプションを使用する場合にのみ必要とは言いません-l
。私がls symLinkToDir
何かをするなら〜するリンクされたディレクトリの内容を一覧表示します。他のオプションは必要ありません。ただし、これを行うと、そのオプションも含めない限り、リンクls -l symLinkToDir
に関する情報のみが表示されます。-H
私が言う例は次のとおりです。
brian@LinuxBox:~$ ls playground/linkedDir
file4 file5
brian@LinuxBox:~$ ls -l playground/linkedDir
lrwxrwxrwx 1 brian brian 4 Feb 18 16:42 playground/linkedDir -> dir2
brian@LinuxBox:~$ ls -lH playground/linkedDir
total 0
-rw-rw-r-- 1 brian brian 0 Feb 18 16:41 file4
-rw-rw-r-- 1 brian brian 0 Feb 18 16:41 file5
ここで何か理解できませんか?これはただ働く方法が変なのでしょうか?これが実際に機能する方法である場合は、マニュアルページで特定の条件下でシンボリックリンクをたどり、オプションが必要-H
ないと言うべきではありませんか?ご意見ありがとうございます。
答え1
ディレクトリシンボリックリンクの動作は、同様ls
にさまざまなオプションによって異なります。シンボリックリンクアクションオプション(、、)がないと、ディレクトリの内容が表示されますが、すべてシンボリックリンクに関する情報が表示されます。-l
-H
-L
-H
ls symlinkToDir
ls -l symlinkToDir
ls -d symlinkToDir
ls -F symlinkToDir
GNU実装のマニュアルページを読んでいる場合は、完全なls
内容を提供しません。 GNUのマニュアルページは単なる要約です。文書全体は、info ls
現在一般的にHTMLで提供されている情報マニュアル()にあります。また、情報マニュアルでディレクトリシンボリックリンクのデフォルト動作が見つかりませんでしたが、ドキュメントのバグかもしれません。
これFreeBSD マニュアルページ-H
たとえば、より正確ですがデフォルトの動作を見つけるには、オプションの説明を読む必要があります。
-H
コマンドラインでシンボリックリンクに従います。-F
、またはオプションを指定しない場合は、-d
このオプションと見なされます-l
。
もう少し正式な説明が欲しいが、読みにくい場合は、以下をお読みください。POSIX仕様。これは実装によっては拡張されません。
-d、-F、または-lオプションの1つ以上が指定され、-Hおよび-Lオプションが指定されていない場合、名前付きディレクトリー・シンボル・リンク・タイプ・ファイルの各オペランドに対して、lsは次の名前を使用する必要があります。ファイルと要求された関連情報。 -d、-F、または-lオプションが指定されていない場合、または-Hまたは-Lオプションが指定されている場合は、ディレクトリシンボルリンクタイプファイルの名前を指定する各オペランドに対して、lsはディレクトリに含まれるファイル名を作成する必要があります。関連情報。
答え2
明らかにこれPOSIXの要件:
もし一つもないなら-D、- Fまたは-エルオプションを指定するか- 時間または-エルオプションは、ディレクトリー・シンボリック・リンク・タイプ・ファイルの名前を指定する各オペランドに対して、lsがディレクトリーに含まれるファイル名と要求された関連情報を記録することを指定します。
-F
orがなければ、-l
ディレクトリへのリンクが実際のディレクトリのように見えるので、それがあると仮定できます。したがって、ls $link_to_dir
おそらくそれと同じですls $dir
。
link
ディレクトリとリンクは、を指すときにdir
リストで同じように見え、コマンドラインで使用されている場合と同じように動作します。
$ ls
dir link
$ ls dir
bar foo
$ ls link
bar foo
ただし、-F
違いは次のとおりです。
$ ls -F
dir/ link@
$ ls -F dir
bar foo
$ ls -F link
link@