
나는 Red Hat Linux의 터미널에서 장난을 치고 있었고 별표( *
)를 입력한 후 return 키를 입력하면 내 디렉토리에 있는 프로그램 중 하나가 실행되었습니다. 왜?
내 추측으로는 유닉스가 이를 와일드카드로 처리하여 첫 번째 알파벳 프로그램을 실행했다는 것이다. my_program.exe
및는 one_of_my_programs.program
파일 이름만 입력하여 실행할 수 있으므로 와일드카드 연산자는 가능한 모든 파일을 나타냅니다 . 프로그램은 알파벳 순으로 먼저 나오므로 Unix는 이를 실행합니다. 이것이 올바른 판단인가?
답변1
귀하의 해석이 정확합니다. 나머지 파일은 매개변수 목록으로 표시됩니다.
프로그램에 실행 가능 비트가 설정되어 있고 현재 디렉터리가 목록에 있는 경우에만 이 작업을 수행합니다 PATH
.
이해에 도움이 될 수 있는 몇 가지 참고 사항:-
- 입력하는 경우
./*
해당PATH
항목은 필수 사항이 아닙니다. . *
or 를 입력하고. ./*
첫 번째로 일치하는 파일이 스크립트인 경우 실행 가능하거나 현재 디렉토리가 있을 필요가 없습니다PATH
( 이외의 쉘에서는 해당되지 않을 수 있음bash
).
답변2
이는 이것이 변수 .
의 일부임을 나타냅니다 PATH
. 이는 보안상의 이유로 정말 나쁜 생각입니다(당연히 Windows는 이를 수정할 수 없는 기본값으로 만들어야 했습니다).
rm
그러나 이 "제안"은 약간만 유효합니다. 현재 디렉터리에 파일 이름이 있으면 *
다음을 실행해도 문제가 없습니다.기본 rm
:
/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$
보시다시피, rm
실행된 파일은 현재 디렉터리(비어 있고 실행할 수 없는 파일)가 아니라 시스템의 기본 /bin/rm
.
와일드카드가 포함된 경우 항상 명령을 다시 확인하세요. 다음은 지금까지 읽은 것 중 가장 무서운 메시지 중 하나입니다.
rm: cannot remove '.o': No such file or directory
전화를 걸어본 결과입니다
rm * .o
, 사람이 생각해 낼 수 있는 가짜 공간의 최악의 배치입니다.