터미널을 이해하지 못하는 사람들은 종종 자신의 명령을 어기거나 컴퓨터를 손상시킬 수 있다는 두려움 때문에 터미널을 사용하는 것을 두려워합니다. 터미널을 아는 사람들은 그렇지 않다는 것을 잘 알고 있습니다. 일반적으로 터미널은 오류 만 출력합니다. 그러나 실제로 컴퓨터를 손상시키는 명령이 있습니까?
터미널을 이해하지 못하는 사람들은 종종 자신의 명령을 어기거나 컴퓨터를 손상시킬 수 있다는 두려움 때문에 터미널을 사용하는 것을 두려워합니다. 터미널을 아는 사람들은 그렇지 않다는 것을 잘 알고 있습니다. 일반적으로 터미널은 오류 만 출력합니다. 그러나 실제로 컴퓨터를 손상시키는 명령이 있습니까?
sudo
및 rm
명령.답변:
컴퓨터를 충돌시키는 한 가지 방법은 소위 fork-bomb 를 실행하는 것 입니다.
유닉스 시스템에서 다음을 수행하여 실행할 수 있습니다.
:(){ :|: & };:
OS가 너무 바쁠 때까지 재귀 적으로 프로세스를 생성하여 더 이상 어떤 조치에도 응답하지 않는 명령입니다.
;
과를 &
당신은 같은 시간에 모든 파일과 포크 폭탄을 제거에 도착, 먼저 시스템을 나누기 확인할!
'컴퓨터 충돌'에 대해 무슨 뜻인지 잘 모르겠습니다. 컴퓨터를 '사용할 수 없다'라고 다시 말하면 컴퓨터를 사용할 수 없습니다. 확실히 모든 것은 하나의 길 잃은 명령입니다-생각하지 않고 말할 때와 마찬가지로 현재하고있는 일에 대해 명확하게 생각하지 않는 순간, 그 피해는 엄청나고 즉각적입니다. 고전적인 예 :
$ sudo rm -rf /
이 명령을 1 초 동안 만 실행하면 시스템을 완전히 제거하여 부팅 할 수 없게되며 돌이킬 수없는 데이터 손실이 발생할 수 있습니다. 하지마
-r
는 디렉토리에서 파일을 재귀 적으로 삭제하는 것을 의미합니다. -f
주어진 파일의 권한에 관계없이 확인을 요구하지 않는 "강제"를 의미합니다. /
파일 시스템의 루트 디렉토리입니다. 즉, 일반적인 파일처럼 작동하지 않는 일부 특수 파일을 제외하고는 모든 것을 파괴합니다. 또한 루트 / 관리자 권한없이 시스템을 중단시키는 간단한 명령을 찾는 데 어려움을 겪을 수 있습니다.
rm -rf /
잠시 후에 시도 하고 rm
루트를 제거하려면 그런 플래그를 사용한다고 말했다. 데이터가 손실되지 않았습니다. 맹목적으로 달리는 것으로부터 보안 보호가있는 것 같습니다 rm -rf /
.
rm -rf
정말 정말 잘못된 즉, 법적 유사한는 : /
수행중인 작업과 하드 드라이브 백업을 수행하려는 작업을 모르는 경우
dd if=/dev/disk1 of=/dev/disk2
글쎄, 당신이 그것들을 섞으면 (질문과 전환) 새로운 데이터를 오래된 데이터로 덮어 쓸 것입니다.
아카이브 유틸리티에서도 비슷한 혼합이 발생할 수 있습니다. 솔직히 대부분의 명령 줄 유틸리티를 사용하십시오.
시스템이 충돌하는 한 문자 혼합의 예를 원하면이 시나리오를 살펴보십시오. 현재 디렉토리의 모든 파일을 다른 디렉토리로 이동하려고합니다.
mv -f ./* /path/to/other/dir
./
현재 디렉토리를 표시하는 데 배운 사실을 받아들 입니다. 점을 생략하면 모든 파일이 이동 하기 시작 합니다. 시스템 파일 포함 당신이 이것을 sudo하지 않은 것은 운이 좋다. 그러나 'sudo -i'로 어딘가를 읽으면 sudo를 다시 입력 할 필요가 없습니다. 루트로 로그인하십시오. 그리고 지금 당신의 시스템은 당신의 눈 앞에서 스스로를 먹고 있습니다.
그러나 다시 한 번 문자 하나를 엉망으로 만들거나 매개 변수 순서를 섞어서 귀중한 코드 파일을 가비지로 덮어 쓰는 것과 같은 것이 더 문제가된다고 생각합니다.
gcc가 생성하는 어셈블러 코드를 확인하고 싶다고 가정 해 봅시다.
gcc -S program.c > program.s
이미 프로그램이 있고 TAB 완료를 사용한다고 가정합니다. 나는 서둘러 TAB을 두 번 잊어 버립니다.
gcc -S program.c > program.c
이제 program.c에 어셈블러 코드가 있고 더 이상 c 코드가 없습니다. 어떤 사람들에게는 적어도 실제 좌절이지만 다른 사람들에게는 처음부터 시작됩니다.
나는 이것이 실제 "유해"를 일으킬 것이라고 생각합니다. 시스템이 다운되는지는 신경 쓰지 않습니다. 내 데이터가 손실되는 것을 걱정합니다.
불행히도 이러한 조치는 터미널을 올바른 예방책과 함께 사용하는 법을 배울 때까지해야 할 실수입니다.
gcc program.c -o program.c
탭 완성 덕분 에 사용중인 프로그램을 한 번 파괴했습니다 . 그 후 버전 관리를 종교적으로 사용하는 법을 배웠습니다.
커널 패닉을 일으키는 것은 지금까지 본 다른 답변보다 충돌과 더 유사합니다.
sudo dtrace -w -n "BEGIN{ panic();}"
( 여기 에서 가져온 코드 및 Apple 자체 문서에도 있음 )
시도해 볼 수도 있습니다.
sudo killall kernel_task
나는 거기에있는 두 번째 것이 실제로 작동하는지 확인하지 못했습니다 (그리고 실제로 실제로 어떤 작업을 열어두고 싶지는 않습니다).
No matching processes were found
dtrace: system integrity protection is on, some features will not be available
dtrace: description 'BEGIN' matched 1 probe
dtrace: could not enable tracing: Permission denied
dtrace
SIP가 효과적으로 중화 한
kernel_task
정상적인 과정이 아닙니다. 불멸입니다. 자체 오류 (KP라고하며 시스템 전체를 다운시키는 것)를 제외하고는 죽일 수 없습니다. kernel_task
PID는 명목상 0이지만, kill(pid, sig)
syscall에 제공하면 매뉴얼 페이지에 If pid
equals 0이면 sig
호출 프로세스의 프로세스 그룹에있는 모든 프로세스로 전송됩니다. . 따라서 kernel_task
신호 를 보낼 수 없습니다 .
현대의 macOS는 UNIX 시스템이 수천 명의 사용자를 처리하여 시스템 전체를 손상시키지 않기 때문에 권한이없는 사용자 (예 :을 사용하지 않음 ) 로 시스템을 충돌 시키기가 매우 어렵습니다 sudo
. 고맙게도 일반적으로 컴퓨터를 손상시키는 작업을 수행하기 전에 메시지가 표시되어야합니다.
불행히도, 그 보호는 시스템 자체에만 적용됩니다. XKCD 보듯이, 물건을 많이 거기에 당신이 루트 권한 또는 암호를 묻는 메시지 시스템 무결성 보호에 의해 보호되지 않도록 신경을 :
조심스럽게 입력하지 않으면 사용자 계정과 모든 파일을 손상시킬 수있는 많은 것들이 있습니다. 몇 가지 예 :
rm -rf ${TEMPDIR}/*
. 환경 변수의 철자가 있다는 것을 알 때까지 이것은 완전히 합리적 TMPDIR
입니다. TEMPDIR
일반적으로 정의되어 있지 않으므로 이것을 만듭니다 rm -rf /
. 이 없어도 sudo
삭제 권한이있는 항목은 모두 제거되며 일반적으로 전체 홈 폴더가 포함됩니다. 이 작업을 충분히 오래 수행하면 일반적으로 해당 드라이브에 대한 쓰기 권한이 있기 때문에 컴퓨터에 연결된 모든 드라이브를 압축합니다.find ~ -name "TEMP*" -o -print | xargs rm
. find
일반적으로 특정 기준과 일치하는 파일을 찾아 인쇄합니다. 포함하지 않는 -o
이것은 당신이 무엇을 기대할 수행하고로 시작하는 모든 파일을 삭제합니다 TEMP*
( 같은 당신이 경로에 공백이 있지 않는 한 ). 그러나 -o
"또는"(다른 많은 명령 에서처럼 "출력"이 아님)을 의미하여이 명령으로 실제로 모든 파일이 삭제됩니다. 버머.ln -sf link_name /some/important/file
. 때때로이 명령의 구문이 잘못되어, 쓸모없는 기호 링크로 중요한 파일을 행복하게 덮어 씁니다.kill -9 -1
프로그램을 모두 죽여서 빨리 로그 아웃하고 데이터 손실을 일으킬 수 있습니다.find
가 -delete
있다 인수 훨씬 더 안전 에 배관 이상xargs rm
ln -sf
할 수있는 것을 잘 알 것입니다 ... 그리고 그것으로부터 회복하는 방법 :-)
find -print0 | xargs -0
파일 이름에서 이상한 문자를 안전하게 처리 하는 데 사용해야 합니다.
<whatever> | xargs echo <something>
xargs가 실제로 실행할 명령을 미리 보려면 먼저 사용하십시오 . xargs는 CLI가 강력한 이유를 보여주는 훌륭한 예입니다. 성가신 확인과 손 잡기없이 한 번에 많은 항목을 조작 할 수 있습니다. 원하는대로하도록 지시하십시오.
당신이 할 수있는 또 다른 것은 (이전에 실수로 한 것입니다) :
sudo chmod 0 /
루트 사용자를 제외하고 전체 파일 시스템 (모든 명령과 프로그램을 의미 함)에 액세스 할 수 없게됩니다. 즉, 루트 사용자로 직접 로그인하고 파일 시스템을 복원해야하지만 sudo
명령 (또는 그 문제에 대해서는 다른 명령)에 액세스 할 수 없습니다 . 단일 사용자 모드로 부팅하고 파일 시스템을 마운트 및 복원하여 명령 및 파일에 대한 액세스를 복원 할 수 있습니다 chmod 755 /
.
이 작업을 재귀 적으로 수행 chmod -R 0 /
하면 시스템을 사용할 수 없게됩니다. 이 시점에서 올바른 수정은 복구 파티션에서 디스크 유틸리티를 사용하여 디스크 권한 을 복구하는 것 입니다. 파일 시스템의 재귀 적으로 실행 된 경우 파일 시스템의 스냅 샷 또는 백업을 복원하는 것이 좋습니다.
chmod 755 /
시스템이 안전하지 않고 미묘한 방식으로 고장날 수 있습니다. 유일한 전체 복구 chmod 0 /
는 스냅 샷 복원, 백업 복원 및 / 또는 재설치를 통한 것입니다.
-R
플래그 를 사용하지 않으면 재귀 적이 지 않으므로 하위 디렉토리의 권한에 영향을 미치지 않을 것이라고 생각 했습니까?
/
영향을받습니다.
sudo chmod -R 700 /
새 컴퓨터를 사용하면 그렇게하면 훨씬 더 안전해질 것입니다. 놀랍게도 부팅되어 빈 메뉴 표시 줄과 빈 바탕 화면이 생겼습니다. 다른 작업은 없었지만 복구 파티션의 디스크 유틸리티 복원 권한은 실제로 거의 모든 것을 올바르게 설정했습니다!
전화 sudo
가 잘못 되었다고 응답 해야합니다. 이들은 이미 시스템에 대한 관리 액세스를 가정합니다.
시도하십시오 perl -e 'exit if fork;for(;;){fork;}'
. OSX는 이제 이것을 막을 수 있습니다. is가 터미널 응용 프로그램과 하위 프로세스를 종료할지 묻는 사과 거품이 있으면 (거의) 좋습니다.
while true ; do cat /dev/zero > /dev/null & done
또한 매우 편리합니다. 당신이없는 경우 perl
.
for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done
재미있는 작은 CPU 부하 테스트를 수행합니다. 방열판과 팬의 성능이 정상인지 확인하는 데 매우 좋습니다.
물론 백업이 있는지 확인하고 관심있는 파일을 저장 한 후 다음을 입력하십시오. halt
그런 다음 sudo
루트 로 사용한다고 가정하면 Mac이 중단됩니다.
명령 줄의 가장 큰 위험은 데이터 손실입니다. macOS 인터페이스는 수십 년 동안 사람들을 놀라게하지 않고 데이터 나 설정 또는 앱을 파쇄하도록 설계되었습니다. macOS 그래픽 인터페이스는 또한 안전하고 마스터 셸 스크립팅에 대한 학습 곡선 (가파른 것)을 제거하기 위해 존재합니다.
터미널 응용 프로그램이나 ssh로 시작하는 사람들에게주의를 기울이는 보호 기능을 잃어 버렸습니다. 백업이있는 경우 작동하는 것으로 알고 있으며 복원을 수행 할 시간과 자신감 / 기술이 있으면 다이빙을하고 배우고 심지어 부수어야합니다.
sudo kill -9 -1
실수 kill -9 -1
로 루트로 실행되는 펄 스크립트 로 수행했습니다 . 전원 코드를 당기는 것만 큼 빠릅니다. 다시 부팅 할 때 서버는 파일 시스템을 검사하고 계속 올바르게 실행했습니다.
나는 sudo kill -9 -1
커맨드 라인에서 그 명령을 시도하지 않았다 . 프로세스 ID "-1"은 "호출자의 프로세스 그룹에 속하는 모든 프로세스 종료"를 의미하므로 작동하지 않을 수 있습니다.
확실하지 않으면 sudo를 사용하면 init 및 모든 커널을 의미합니다 ...하지만 루트 인 kill -9 -1
경우 전원 코드를 당기는 것처럼 즉시 중지합니다. 그건 그렇고-로그 파일에는 아무것도 나타나지 않습니다. 왜냐하면 그 명령은 서쪽에서 가장 빠른 킬러이기 때문입니다!
실제로 복구하기 위해 시스템 관리자에게 가서 내가 한 일을 알려주었습니다. 해당 서버 (RHEL6)에 로그인 할 방법이 없으므로 하드 재부팅을 수행했습니다.
kill -9 -1
루트로 A 는 루트로 실행되는 모든 프로세스를 종료합니다. 즉 sshd입니다. 이로 인해 즉시 로그 아웃되어 다른 사람이 다시 로그인하지 못했습니다. UID 또는 GID를 변경하지 않으면 init를 포함하여 init로 시작한 모든 프로세스가 종료되었습니다. 시리얼 콘솔을 통한 로그인조차 더 이상 불가능했습니다. ps -eaf | grep root
기본 방식으로 SIGKILL에 반응하면 HD에 대한 기본 쓰기조차 거의 막을 수있는 멋진 프로세스를 보여줍니다.
나는 이것을 내 랩탑에서 지금 시도하지 않을 kill -9 165
것이다.
init
정상적으로 죽일 수는 없지만 모든 게티와 SSH 세션을 죽이고 기계를 사용할 수 없게 만들 수 있습니다. 매직 SysRq를이 깨끗하고 재부팅 허용하지만 :) 그냥 전원주기 종종 쉽게와 FS 저널에 의존해야
예, 시스템을 완전히 파괴 할 수 있습니다. 실수로 sudo
권한으로 무언가를하는 것은 터미널이 의도 한 것과 완전히 다른 것을 지시하는 문자 몇 개를 잊어 버렸는지 여부에 관계없이 게시 된 한 가지 예입니다. 대신 rm
ing 은 5 자 차이입니다. 잘못된 장소에 공간을두면 완전히 다른 일을 할 수 있습니다. 다른 경우에는 겉보기에는 명령이 악성 코드를 난독 화했을 수 있습니다. 인터넷상의 일부 사람들은 코드를 난독 처리하는 데 능숙합니다./
/tmp/\*
HTML을 사용하여 글꼴 크기를 0으로 만들 수있는 명령도 있으므로 클립 보드에 복사 할 때 완전히 무해한 것으로 보이는 것은 실제로 누군가의 git repo를 신뢰할 수있는 소스로 설치하고 맬웨어를 다운로드하는 것일 수 있습니다.
또한 실행할 수있는 명령이 있습니다.이 명령은 악의적 인 용도로 사용되거나 완벽하게 의도되었지만 중요한 파일이나 프로그램을 제거하거나 디스크를 손상시킵니다. 실제로 도구를 잘못 사용하면 부팅 섹터 나 디스크 헤드 또는 기타 여러 가지 문제를 실수로 덮어 쓰는 것처럼 기본적인 작업을 수행 할 수 있습니다.
게시되지 않은 덜 파괴적인 예는에서 바이너리 파일을 여는 것입니다 vi
. 당신이 그것을 시도했다면, 그것은 사용할 수없는 시점까지 터미널을 망칠 수 있음을 알게 될 것입니다 reset
.
또는 다음과 같이 컴퓨터를 정지시키는 명령이 있습니다.
yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & yes >> /dev/null &
당신은 그것을 시도 할 수 있습니다, 그것은 손상을 입히지 않을 것이지만, 프로세서를 멈출 것입니다. 그리고 당신이 생성 한 각 프로세스를 죽여야합니다.
즉, 컴퓨팅에서는 일반적으로 계란 몇 개를 깨지 않으면 오믈렛을 만들 수 없다는 것이 일반적입니다. 터미널에주의를 기울여야하지만, OS를보다 잘 사용할 수있는 유일한 방법은 배우고 연습하는 것입니다.
reset
이진 출력이 인쇄 된 터미널을 정리해야합니다. 또는 새로운 TTY를 생성하십시오
reset
트릭 을 배우는 데 실제로 몇 년이 걸렸습니다 ! 자세한 정보 : unix.stackexchange.com/questions/79684
나는 단지 배쉬 초보자이지만, 당신은 잠시 True를 설정할 수 있습니다. 명령을 수행; 끝난; 대부분의 사람들은 외부 프로세스가 아닌 명령을 중지하는 Ctrl + C를 시도합니다 (Ctrl + Z). 명령이 많은 수를 자신의 힘에 곱하는 것과 같은 무거운 작업이라면 리소스가 엉망이 될 수 있습니다. 그러나 실제로 현대 OS는 일반적으로 그러한 혼란으로부터 보호됩니다.
while true do cat /dev/zero > /dev/null & done
^C
것 또한 while 루프를 죽일 수 있지만, 그것은 단지 인터럽트가 잡힐하기에 너무 빨리 반복합니다. 누르고 있으면 ^C
루프가 끊어 질 수 있습니다. 터미널을 닫으면 역시 :)
확실히 터미널로 입력 한 명령을 사용하여 시스템 충돌이 발생할 수 있습니다.
머피의 법칙에 따르면 수년 동안 모든 종류의 제한과 보호 조치가 적용되어 어려워 질 것입니다. "충분한 능력을 가진 바보에게는 아무것도 없습니다."
"포크 폭탄"과 모든 rm -rf
스크립트 키즈 항목은 고대 유닉스 용으로 알려져 있습니다. Mac OS X을 사용하면 GUI 하위 시스템 부분 ( WindowServer
또는 언급)을 사용하거나 PF
Apple 엔지니어가 가져 왔지만 2008 년 이후 업데이트 된 적이없는 OpenBSD 방화벽과 같은 기능을 사용하면 더 재미있을 수 있습니다 . PF
커널에서 작동하므로 문제가 생길 때 Apple이 " 공황으로 인해 컴퓨터 를 다시 시작했습니다"라고 말하거나 이와 비슷한 것을 알려야합니다.
이것의 최악의 부분은 어디서 당황했는지에 대한 아이디어를 결코 가질 수 없다는 것입니다. Apple이 의미있는 스택 추적을 제공하지 않기 때문입니다. 16 진수의 스택 프레임 반환 주소 만 가질 수 있습니다.
컴퓨터를 "충돌"한다는 말의 의미는 모호합니다. 다른 답변에는 유용한 예가 있지만 그에 대한 확실한 정답은 없습니다. 귀하의 질문이 더 모호하고 일반적이므로 질문의 성격에 초점을 맞추고 더 일반적인 답변을 드리고자합니다.
터미널을 이해하지 못하는 사람들은 종종 자신의 명령을 어기거나 컴퓨터를 망칠 수 있다는 두려움 때문에 터미널을 사용하는 것을 두려워합니다.
커맨드 라인은 양날의 칼이며 종종 매우 날카로운 것 같습니다. CLI의 가장 큰 장점은 새로운 사용자에게 가장 큰 약점이기도합니다. CLI 프로그램은 사용자가 원하는 바를 묻지 않고 사용자가하는 말을합니다. 그들은 종종 확인을 요구하지 않고, 손 잡기 나 대화식 도움을 제공하지 않으며, 옵션이 짧고 간결하며 때로는 혼란스러운 텍스트 기반 문자열입니다. 그것들 은 일반적으로 매우 잘 문서화되어 있으므로 매뉴얼을 읽고 (거의 항상 man <command you are about to run>
) 명령 행을 이해하는 데 시간이 걸립니다.
이 운영 모드는 강력 합니다. 즉, 숙련 된 CLI 사용자는 단일 명령으로 복잡한 작업을 수행하는 긴 명령 "파이프 라인"을 만들 수 있습니다. 작업이 "확실합니까?"라는 메시지를 표시하지 않기 때문입니다. 모든 단계에서, 그것이 말하는 것을 수행합니다. 그러나이 모드에 익숙하지 않고 온라인 도움말을 클릭 하는 GUI에 익숙한 사용자에게는 익숙하지 않고 무섭습니다.
그러나 실제로 컴퓨터를 손상시키는 명령이 있습니까?
CLI를 사용하여 컴퓨터를 "충돌"할 수 있습니까? 아마도. 파괴적인 명령을 잘못 사용하면 데이터가 손실 될 수 있습니다. EG 여기에 많은 대답이 언급되어 있는데 rm
, 파일을 삭제하는 명령입니다. 분명히, 당신은 그 명령으로 데이터 손실을 일으킬 수 있습니다, 그것은 명령이 의도 한 것입니다.
다른 답변에서 지적했듯이 명령 줄을 사용하면 일정 기간 동안 컴퓨터를 거의 사용할 수 없게 만들 수 있습니다. 확인하지 않고 종료하고 프로세스가 확인없이 사용 가능한 리소스를 100 % 사용하도록 설정하고 모든 프로그램을 종료합니다 또는 파일 시스템을 파괴하십시오. 정말로 원한다면 CLI를 사용하여 커널 확장을 만들면 커널이 패닉 상태에 빠질 수 있습니다.
터미널을 통해 액세스되는 명령 줄은 강력한 도구입니다. 종종 GUI보다 터미널을 사용하여 문제를 해결하는 것이 더 빠릅니다. 일부 솔루션은 터미널 명령을 통해서만 사용할 수 있습니다. 그러나 CLI의 핵심은 이해하는 것 입니다. 온라인에서 보는 임의의 명령을 실행하지 마십시오. 매뉴얼 페이지를 읽고 명령이 수행하는 작업을 이해하십시오. 확실하지 않은 경우 명령을 실행하기 전에 다른 사람에게 요청하거나 명령에 대해 자세히 알아보십시오.