":" 명령은 무엇을 합니까? [복사]

":" 명령은 무엇을 합니까? [복사]

몇 가지 명령을 읽고 있어요explainshell.com흥미로운 명령을 찾았습니다.

:(){ :|:& };:

나는 현재 OSX그것을 사용하고 있고 내가 찾을 수 있는 유일한 참조는 builtin매뉴얼 페이지( man builtin)에 있지만 외부 명령인지, cshell 또는 sh 명령인지만 명시하므로 도움이 되지 않습니다.

       Command       External    csh(1)    sh(1)
       !             No          No        Yes
       %             No          Yes       No
       .             No          No        Yes
       :             No          Yes       Yes

그렇다면 실행은 무엇을 :하는가?

터미널에는 출력이 없습니다.

$ :
$

답변1

이 경우에는 :명령이 아니라 정의한 함수의 이름입니다. 해당 명령 :(){ :|:& };:은 "포크폭탄"이라고 불리는 것입니다. 이는 이라는 함수를 정의하고 , 해당 함수가 를 호출하고 , 출력을 로 파이핑하고 , 두 번째 인스턴스를 배경으로 배치하는 :것으로 구성되어 있음을 쉘에 알리는 일련의 명령입니다. 마지막 시퀀스에서는 함수 정의를 종료한 다음 호출합니다. 호출할 때마다 셸이 생성하는 속도만큼 빠르게 두 개의 추가 복사본이 실행됩니다 . 이로 인해 모든 시스템 리소스가 소진되어 결국 프로세스 제한이 설정되지 않은 경우 시스템 속도가 느려지거나 충돌하게 됩니다.::;:::

답변2

만약 너라면아니요redefine :의 기본 의미는 작업 없음입니다. 다음 명령을 사용하여 해당 문서를 볼 수 있습니다help :

% help :
:: :
    No effect; the command does nothing.  A zero exit code is returned.

전설에 따르면 오래 전, 인터넷 초창기에는 이것이 실행되지 않고 쉘 스크립트에 텍스트를 넣는 방법이었다고 합니다. 즉, 댓글입니다. 나는 이에 대해 서면 정보를 갖고 있지 않습니다.

관련 정보