":" 명령은 무엇을 합니까?

":" 명령은 무엇을 합니까?

나는 몇 가지 명령을 읽고있었습니다.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

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

답변2

만약 너라면~하지 않다redefine 은 :기본적으로 no-op이라는 의미를 갖습니다. 다음을 사용하여 해당 문서를 볼 수 있습니다.help :

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

전설에 따르면 오래 전 인터넷 초창기에는 이것이 실행되지 않는 쉘 스크립트에 텍스트를 넣는 방법이었다고 합니다. 즉, 일종의 코멘트입니다. 이에 대한 서면 출처가 없습니다.

관련 정보