ls 명령에서 별표의 동작에 대해 혼란스러워함

ls 명령에서 별표의 동작에 대해 혼란스러워함

Centos와 Debian에서 이것을 시도했습니다.

ls 명령의 *는 재귀 검색을 의미합니까?

디렉터리 이름을 입력하기 시작하고 탭을 클릭하면 다음이 표시됩니다.

# ls /etc/rc<tab>
rc0.d/    rc1.d/    rc2.d/    rc3.d/    rc4.d/    rc5.d/    rc6.d/    rc.local  rcS.d/

경로에 별표를 추가하면 동일한 내용이 표시될 것이라고 생각했지만 재귀적으로 검색됩니다.

# ls /etc/rc*
/etc/rc.local

/etc/rc0.d:
K50netconsole  K90network

/etc/rc1.d:
K50netconsole  K90network

/etc/rc2.d:
K50netconsole  S10network

/etc/rc3.d:
K50netconsole  S10network
...

Windows dir 명령은 /etc/rc*와 일치하는 디렉토리만 표시합니다. 탭 키를 사용하지 않고 ls에서 이 동작을 어떻게 얻을 수 있습니까?

****수정/업데이트:

좋아, 이제 *는 명령이 아닌 bash에 의해 해석된다는 것을 이해하지만 항상 "파일 및 폴더 항목 열거"로 해석됩니다. 아니면 다른 컨텍스트에서 사용하면 다른 작업을 수행합니까? 그렇다면 뭔가 큰 일이 있는 걸까요? bash의 if 문은 "파일 및 폴더 이름을 반환하기 위해 *가 파일 시스템 경로와 함께 사용되는 경우, *가 rpm과 함께 사용되는 경우(예:rpm -qa 게시물*)는 패키지 이름 등을 반환합니다."

답변1

별표는 ls명령에 도달하기 전에 확장되므로 다음과 같습니다.

ls /etc/rc0.d    /etc/rc1.d   /etc/rc2.d    /etc/rc3.d    /etc/rc4.d ...

각 디렉토리의 내용을 별도로 나열합니다.

ls -d /etc/rc*디렉토리 내의 파일 목록을 표시하지 않는 명령을 사용하거나 확장자만 표시하는 명령을 사용할 수 있습니다 echo /etc/rc*.

답변2

기본적으로 ls디렉토리 매개변수로 호출하면 디렉토리의 내용이 표시됩니다. 이 옵션을 사용하여 이 동작을 변경할 수 있습니다 -d. ~에서man ls

-d, --directory
       list  directory entries instead of contents, and do not derefer‐
       ence symbolic links

관련 정보