나는 몇 가지 명령을 읽고있었습니다.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.
전설에 따르면 오래 전 인터넷 초창기에는 이것이 실행되지 않는 쉘 스크립트에 텍스트를 넣는 방법이었다고 합니다. 즉, 일종의 코멘트입니다. 이에 대한 서면 출처가 없습니다.