귀하의 기대는 DOS Think / Windows Think를 기반으로하며 잘못되었습니다. MS-DOS, Windows 및 일부 다른 IBM / Microsoft 운영 체제에서 와일드 카드 확장은 명령 자체에서 수행되며 명령 /a
옵션 과 같은 기능은 dir
와일드 카드 확장 중에 속성 필터로 작동합니다. dir
와 같은 와일드 카드를 확장 *
하여 명령 인터프리터가있는 그대로 전달하고, /a
지정된 경우 적절한 필터를 반환 된 내용에 적용합니다. 일부 운영 체제에서는 디렉토리를 열거하기 위해 시스템 호출에 속성 필터를 제공 할 수 있으며 운영 체제 커널 또는 해당 파일 시스템 드라이버가 해당 필터를 적용합니다.
Unices 및 Linux에서 와일드 카드 확장은 셸에 의해 수행되며 권한이 필요하지 않습니다. 루트 디렉토리에서
ls *
어떤 ls
명령 자체가 수신 쉘에서하는 (같은)입니다
LS bin 홈 opt var boot dev tmp 등 lost + found root usr
무엇 -d
/의 --directory
옵션이하는 것은 일반적으로 다음에 무슨 끕니다 . 일반적으로 다음에 발생하는 것은 ls
각 인수를 차례로보고 이들이 디렉토리임을 확인하고 내용을 열거하기로 결정하는 것입니다. 파일 이름을 지정하는 인수의 경우 파일 자체에 대한 정보 만 인쇄합니다. 이 -d
옵션을 사용하면 디렉토리는 파일처럼 취급됩니다. 따라서 ls
파일 인 경우처럼 인수로 전달 된 각 디렉토리에 대한 정보를 인쇄합니다.
그래서 -d
아니다 는 "디렉토리 만 인쇄"옵션을 선택합니다. 실제로 그러한 옵션이 없을뿐만 아니라; 그러한 옵션 은 있을 수 없습니다 . 와일드 카드 확장은 쉘에 의해 수행되며, sh
최소한 POSIX 에서는 쉘 *
이 이름 목록으로 확장 될 때 권한 및 파일 유형 비트를 확인하도록 지시 할 방법이 없습니다 . 혼자 디렉토리의 이름 목록을 얻으려면, 그것은 필요하거나 사용에 find
의해 설명 된 바와 같이, 명령 ztank1013
, 또는 슬래시로 끝나는 경로 이름은 디렉토리 항목을 의미하는 트릭을 사용 .
하여 설명 된대로 Jin
. ( Jin
'트릭 ls
은 인수를받는 명령으로 끝납니다.
ls bin / home / opt / var / boot / dev / tmp / etc / lost + found / root / usr /
패턴이 있기 때문에 */
두 가지 구성 요소로 사실과 일치하는 경로 이름에, 두 번째 존재는 비어, 그렇게되지 확실히 원하는 무슨 일을. 특히 디렉토리를 가리키는 기호 링크를 마치 디렉토리 인 것처럼 취급합니다.)
ls -d
없는 동작은 *
위의 간단한 확장입니다. ls
인수 에 대한 정보 가 없을 때는 기본 인수 인을 가정합니다 .
. 이제 없이-d
옵션에 의해 명명 된 디렉토리의 내용을 상기 행동 리드가 .
열거되고 그 내용에 대한 정보가 표시됩니다. 로-d
옵션, 디렉토리는 .
이 파일했고, 자신의 정보가 그 내용을 열거하기보다는, 표시되는 것처럼 처리됩니다.