"*" 명령의 출력이 부팅되는 이유는 무엇입니까?

"*" 명령의 출력이 부팅되는 이유는 무엇입니까?

명령 을 사용했는데 *다음 오류가 표시되었습니다.

bash: boot: command not found

이 오류는 왜 발생합니까?

답변1

명령줄에 입력한 첫 번째 단어는 셸에서 명령 이름으로 해석됩니다.

쉘은 *파일 이름 와일드카드 문자를 현재 디렉토리에 표시되는 모든 이름으로 확장합니다. 이름은 사전순으로 정렬됩니다.

현재 있는 디렉토리의 이름이 이름 boot입니다. 그냥 들어가라는 뜻이다* 해당 특정 디렉토리에서boot이는 해당 디렉터리의 다른 모든 이름을 명령줄 인수로 사용하여 호출된 명령을 실행하는 것과 같습니다.

boot시스템에서는 현재 에서 호출되는 명령이 없으므로 $PATH쉘에서 해당 명령을 찾을 수 없다고 불평합니다.

그게 다야.

내 시스템의 예( zsh대신 쉘을 실행 bash하지만 그 점에서는 동일하게 작동함):

% cd /
% ls
altroot    bsd        bsd.sp     home       sbin       usr
bin        bsd.booted dev        mnt        sys        var
boot       bsd.rd     etc        root       tmp
% *
zsh: command not found: altroot

just 를 사용할 때 *쉘은 내가 있는 디렉토리의 파일 이름 글로빙 패턴 확장에서 altroot이름 altroot(디렉토리의 이름이 됨)이 먼저 오기 때문에 명명된 명령을 실행하려고 시도합니다.*

파일 이름 글로빙 패턴을 통해 실행할 명령을 선택하는 것은 오류가 발생하기 쉽고 위험하므로 피하는 것이 가장 좋습니다.


어느 정도 관련된 일화로, 나는믿다-i나는 사용자가 중요한 파일이 포함된 디렉토리에 이름이 지정된 파일을 생성하는 것을 보았습니다 . 그래서 그들은 아마도 다음과 같은 것을 가지고 있을 것입니다.

$ ls -l
total 0
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 -i
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 important-file-1.txt
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 important-file-2.txt
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 important-file-3.txt

먼저 어떻게 -i정렬되어 있는지 확인하세요. 즉, rm -rf *이 디렉터리에서 이 작업을 (잘못) 수행하면 다음과 같은 일이 발생합니다.

$ rm -rf *
remove important-file-1.txt? n
remove important-file-2.txt? n
remove important-file-3.txt? n

즉, -i이름이 옵션으로 삽입되어 파일을 삭제하기 전에 확인 메시지가 rm -rf표시됩니다 . rm그런 다음 그들은 작업을 중단할 기회를 가졌습니다.

이것은 재미있는 작은 트릭이지만 실수로 파일을 삭제하는 문제를 해결하는 올바른 방법은 아닙니다. 올바른 해결책은저것문제는 정기적으로 백업을 수행하는 것입니다.

관련 정보