ls -d는 무엇을 의미합니까?

ls -d는 무엇을 의미합니까?

매뉴얼 페이지에 들어갔고 ls옵션 항목은 -d다음과 같습니다.

-d, --directory 내용 대신 디렉토리 항목을 나열하고 기호 링크를 역참조하지 않습니다.

그래서 저는 이 ls -d명령이 주어진 디렉토리의 모든 디렉토리를 보여줄 것이라고 생각했습니다. 그러나 나는 디렉토리로 가서 두 가지 다른 명령을 시도했습니다.

  1. 디렉토리 가져오기:: ls -l | grep ^d작동하며 7개의 디렉토리가 모두 표시됩니다.

  2. 디렉터리 가져오기 ls -d: 이 작업은아니요7개 디렉터리 표시 중 점은 1개만 표시됨.

이 옵션을 잘못 사용하고 있는 것인지, 아니면 그 의미를 잘못 이해한 것인지 모르겠습니다. -d이 옵션의 실제 의미와 사용법은 무엇입니까?

답변1

ls -d디렉토리 또는 심볼릭 링크에 대한 정보를 표시합니다. 이 정보는 (간단히 말해서) 해당 경로입니다. 논리적 가정은대표하다목차왜냐하면 제가 접한 UNIX 용어의 가장 기본적인 정의는 "디렉토리 나열"이기 때문입니다.

표면적으로 이것은 별로 효과가 없어 보일 수 있습니다. 현재 2개의 하위 디렉터리가 있는 디렉터리에 있다고 가정합니다.

documents music

옵션 없이 사용하면 ls documents콘텐츠 목록이 표시됩니다.문서위에서 정확하게 지적하셨듯이. 를 사용하면 ls -d documents이름만 인쇄됩니다. 폴더 경로는 현재 위치에 상대적이므로 이름과 동일합니다.문서! 이는 확장될 수 있으며(기본 사용법에서는 다소 중복되지만) ls -d $PWD/*작업 디렉토리(따라서 PWD - 이전 작업 디렉토리)를 포함하는 모든 파일과 폴더를 표시합니다.

* 연산자와 함께 사용하면 유용한 기능이 있습니다. 즉, ls -d */현재 작업 디렉터리의 디렉터리만 표시됩니다.

초점을 돌려심볼릭 링크정의의 일부 ls -d ~(물결표 확장)를 사용하는 경우 현재 HOME 디렉토리에 대한 경로가 인쇄됩니다. 그런 다음 이는 OS에 따라 다른 응용 프로그램에서 사용될 수 있으며 몇 가지 실제 용도가 있습니다. 명령문을 추가로 수정하거나 ls -d ~your-username해당 사용자에게 HOME 경로를 제공할 수 있습니다. 또 다른 예는 Apache 서버 환경에서 볼 수 있는데, 여기서 사용자 이름은 호스팅 공간(HOME 디렉터리와 반대)에 대한 경로를 유사하게 표시하는 데 사용됩니다.ls -d ~another-usernamels -d ~root

이와 함께 사용할 수 있는 다양한 기능이 있지만 이 연산자의 핵심 기능은 위에 설명되어 있습니다. 간단히 말해서 -d는 디렉터리/경로 정보를 표시하도록 특별히 설계된 연산자입니다. 더 자세히 조사하고 싶다면 ls 함수(일부 -d 함수 포함)를 사용하는 좋은 코드 생성기가 있습니다.LS 코드 생성기.

답변2

ls옵션이나 아무것도 없이 자체적으로 "현재 디렉토리를 나열"합니다. 기본적으로 "디렉토리 나열"은 그 안에 포함된 파일을 나타냅니다.

지정된 디렉터리의 파일을 나열하는 대신 이 -d플래그 변경은 디렉터리 자체에 대한 정보를 나열합니다. ls당신이 잘못 생각하는 것처럼 "현재 디렉토리 내의 디렉토리"를 참조하지 않습니다. 이는 단순히 "현재 디렉터리"를 나타냅니다.

그렇기 ls -d때문에 ..

답변3

용어는 확실하지 않지만 ls -d는 다음에 나오는 내용에 대한 정보만 나열합니다. 즉, 디렉토리 목록을 확장하지 않습니다.

ls -ld /usr/bin

그러면 /usr/bin 자체에 대한 출력이 한 줄만 제공됩니다.

그리고

ls -ld *

pwd의 각 파일이나 디렉터리에 대한 정보만 제공되지만 해당 내용을 나열하기 위해 디렉터리가 확장되지는 않습니다.

이미 언급했듯이 find를 사용하여 디렉토리를 나열할 수 있으며 원하는 경우 ls -d를 계속 사용할 수 있습니다.

find /usr/bin -type d -exec ls -ld {} \;

확실하지 않은 경우를 대비하여 /usr/bin 아래에서 모든 디렉토리를 찾으십시오.

답변4

ls -dls -d .명령을 실행하기 전과 마찬가지로 lsbash 쉘은 모든 와일드카드 문자를 확장합니다. 이 -d옵션은 ls인수가 디렉터리인지 파일인지에 관계없이 해당 내용이 아닌 전달된 인수에 대한 정보만 나열하도록 지시합니다.

ls .*더 설명하려면 예를 들어 보세요. .접두사가 붙은 모든 파일과 디렉터리가 나열될 것으로 예상됩니다 . 그러나 bash가 와일드카드를 확장하면 and도 *포함됩니다 .. ..명령의 출력을 검사하여 bash 확장의 출력을 확인할 수 있습니다 echo .*. ls .*bash 확장 * ( 및 포함 ) .이후에 수신된 각 인수 에 대해 ..인수가 디렉토리인 경우 내용이 나열됩니다. 결과는 예상한 것과 다른 출력입니다.

ls -d .*반대로 사용하는 경우 "-d" 옵션은 디렉터리인 경우에도 해당 내용이 아닌 인수의 세부 정보만 나열하도록 지시합니다. 이제 예상되는 결과가 나올 것입니다.

관련 정보