ls
コマンドを使用しているときに、ディレクトリへのシンボリックリンクの内容または情報を見つけようとすると、現在何が起こっているのか理解できません。オプションがあることを理解しています-H
は、コマンドラインにリストされたシンボリックリンクをたどるls
コマンド用です。 ls
のマニュアルページに記載されていないのは、これは-l
オプション。私が単にls symLinkToDir
it will追加オプションなしでリンクされたディレクトリの内容をリストします。しかし、もし私が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
オプション?ご協力いただき、ありがとうございます。
ディレクトリへのシンボリックリンクでのls
の動作は、-l
および-H
だけでなく、多くのオプションに依存します。シンボリックリンクの動作オプション(-L
、-H
)がない場合、ls symlinkToDir
はディレクトリの内容を表示しますが、ls -l symlinkToDir
、ls -d symlinkToDir
およびls -F symlinkToDir
シンボリックリンクに関する情報をすべて表示します。
GNU ls
の実装)のmanページを読んでいると、完全な話は得られません。GNU manページ単なる要約です。完全なドキュメントは、Infoマニュアル(info ls
)にあります。通常、最近HTMLで利用できます。Infoマニュアルのディレクトリへのシンボリックリンクのデフォルトの動作も見つかりませんが、これはドキュメントのバグ。
たとえば FreeBSDのマニュアルページ の方が正確ですが、デフォルトの動作を見つけるには-H
オプションの説明を読む必要があります。
-H
コマンドラインのシンボリックリンクをたどります。-F
、-d
、または-l
オプションが指定されていない場合、このオプションが想定されます。
より正式な説明が必要な場合(ただし、読みやすくはありません)、 POSIX仕様 を参照してください。これには、実装の拡張機能はありません。
-d、-F、または-lオプションの1つ以上が指定され、-Hオプションも-Lオプションも指定されていない場合、ディレクトリへのシンボリックリンクタイプのファイルを指定する各オペランドに対して、lsはファイルの名前と、要求された関連情報。 -d、-F、または-lオプションのいずれも指定されていない場合、または-Hまたは-Lオプションが指定されている場合、ディレクトリへのシンボリックリンクタイプのファイルを指定する各オペランドに対して、lsはファイルの名前を書き込みます。ディレクトリ内に含まれ、要求された関連情報も含まれます。
どうやらそれは POSIXで必須 :
-d、-F、または-lオプションが指定されている、または-Hまたは-Lオプションが指定され、ディレクトリへのシンボリックリンクタイプのファイルを指定する各オペランドに対して、lsは、ディレクトリ内に含まれるファイルの名前と要求されたファイルの名前を書き込みます。関連情報。
-F
または-l
がない場合、ディレクトリへのリンクは実際のディレクトリと同じように見えるため、ls $link_to_dir
はls $dir
と同じように機能する可能性があるため、私はそれが存在するとしか想定できません。
link
がdir
を指している場合、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@