
현재로서는 명령을 사용하여 디렉토리 심볼릭 링크의 내용이나 정보를 찾으려고 할 때 무슨 일이 일어나고 있는지 이해할 수 없습니다 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 옵션 중 하나 이상이 지정되고 -H 및 -L 옵션이 지정되지 않은 경우 명명된 디렉토리 기호 링크 유형 파일의 각 피연산자에 대해 ls는 다음의 이름을 써야 합니다. 파일과 요청된 관련 정보. -d, -F 또는 -l 옵션이 지정되지 않거나 -H 또는 -L 옵션이 지정된 경우 디렉토리 기호 링크 유형 파일의 이름을 지정하는 각 피연산자에 대해 ls는 디렉토리에 포함된 파일 이름을 작성해야 하며 모든 요청 관련 정보.
답변2
분명히 이것은POSIX 요구 사항:
만약 하나도 없다면-디,-에프, 또는-엘옵션을 지정하거나-시간또는-엘옵션은 디렉토리 기호 링크 유형 파일의 이름을 지정하는 각 피연산자에 대해 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@