คุณสามารถใช้ Terminal เพื่อชนคอมพิวเตอร์ของคุณได้หรือไม่?


48

ผู้ที่ไม่เข้าใจ Terminal มักจะกลัวที่จะใช้เพราะกลัวว่าพวกเขาอาจทำตามคำสั่งและทำให้คอมพิวเตอร์พัง ผู้ที่รู้จักเทอร์มินัลจะรู้ดีว่าไม่ใช่กรณี - โดยปกติเทอร์มินัลจะส่งข้อผิดพลาด แต่จริงๆแล้วมีคำสั่งที่จะทำให้คอมพิวเตอร์ของคุณพังหรือไม่?

คำเตือน: คุณอาจสูญเสียข้อมูลหากคุณพิมพ์เหล่านี้หรือคัดลอกวางโดยเฉพาะอย่างยิ่งsudoและrmคำสั่ง


ผู้ชายบางคนเผลอเช็ดคอมพิวเตอร์ของ บริษัท ทั้งหมดในบรรทัดเดียวฉันเห็นมันบนเว็บไซต์นี้เมื่อสองสามปีก่อนมันเป็นของปลอม แต่มันก็ยังสามารถเกิดขึ้นได้ง่าย ฉันจะเชื่อมโยงถ้าฉันสามารถหาได้
โนอาห์คริสติโน

7
เทอร์มินัลเป็นเพียงส่วนต่อประสานบรรทัดคำสั่งสำหรับการเรียกใช้โปรแกรม มันเป็นทางเลือกให้กับอินเตอร์เฟซผู้ใช้แบบกราฟิก คุณสามารถเรียกใช้โปรแกรมใดก็ได้จากโปรแกรมใดโปรแกรมหนึ่ง คำถามของคุณไม่สมเหตุสมผลนัก คุณควรจะถามแทน: คุณสามารถชนคอมพิวเตอร์ของคุณด้วยการเรียกใช้โปรแกรมหรือไม่?
jamesdlin

"crash" หมายถึงอะไร คำสั่งที่รันในเทอร์มินัลมักจะมีประสิทธิภาพและมักจะ "ทำในสิ่งที่คุณพูดและไม่ใช่สิ่งที่คุณหมายถึง" โดยไม่ถามซึ่งต่างจากคำสั่ง Mac OS X GUI ส่วนใหญ่ แต่ถ้าคุณพยายามอย่างจงใจคุณไม่น่าจะผิดพลาดของเครื่อง (ฉันคิดได้สองสามวิธีในการทำเช่นนั้นโดยเจตนา)
Josh

1
การวางคำสั่งจากเว็บอาจเป็นอันตรายได้ โดยไม่คำนึงถึงความเป็นไปได้ที่จะแขวนเครื่องของคุณ การพิมพ์คำสั่งที่คุณเข้าใจอย่างน้อยไม่ควรเป็นอันตราย มิฉะนั้นหลายวิธีในการขันคอมพิวเตอร์ของคุณ มันเหมือนกับการคลิกที่การตั้งค่าระบบแบบสุ่มใน GUI แต่ใน GUI อย่างน้อยก็มีข้อ จำกัด มากขึ้น wrt อันตรายของการวางคำสั่ง - ข้อความที่คุณเห็นการคัดลอกอาจแตกต่างจากข้อความจริงที่คัดลอกดังนั้นจึงสามารถมีคำสั่งที่เป็นอันตรายซึ่งผสมกัน
akostadinov

คำตอบ:


51

วิธีหนึ่งที่จะผิดพลาดของคอมพิวเตอร์คือการดำเนินการที่เรียกว่าส้อมระเบิด

คุณสามารถรันมันบนระบบยูนิกซ์โดย:

:(){ :|: & };:

มันเป็นคำสั่งที่จะวางไข่กระบวนการซ้ำจนกระทั่ง OS ยุ่งจนไม่ตอบสนองต่อการกระทำใด ๆ อีกต่อไป


49
@bunyaCloven ถ้าผมเข้าใจคำสั่งของคุณอย่างถูกต้องแล้วมันเป็นคำสั่งเพื่อลบโฟลเดอร์ทั้งหมดโดยไม่ต้องแจ้งซึ่งเป็นอันตรายมากถ้าทำงาน ฉันขอให้คุณเขียนคำเตือนเรื่องนี้
แอนดรูว์ต.

80
@AndrewT ผู้คนไม่ควรเพียงพิมพ์คำสั่งแบบสุ่มที่พบบนอินเทอร์เน็ตโดยไม่รู้ตัว (โดยเฉพาะอย่างยิ่งในเธรดที่เรียกว่า "คุณสามารถชนคอมพิวเตอร์ของคุณผ่านทางเทอร์มินัล")
John Hamilton

34
OP ขอความผิดพลาดจากเครื่องเทอร์มินัลไม่ใช่การเช็ด
piersb

16
Fork fork จะสร้างความเสียหายน้อยที่สุดใน Mac OS X เนื่องจากมีขอบเขตด้านบนตามจำนวนกระบวนการ
GDP2

7
@bunyaCloven แทนที่;ด้วย&และคุณจะได้รับการลบไฟล์ทั้งหมดและการทิ้งระเบิดในเวลาเดียวกันและดูว่าระบบใดที่ทำลายก่อน!
Muzer

41

ไม่แน่ใจว่าสิ่งที่คุณหมายถึงเกี่ยวกับ 'ความผิดพลาด' ของคอมพิวเตอร์ - ถ้าคุณจะวลีว่า "ทำให้คอมพิวเตอร์ใช้ไม่ได้" อีกครั้งใช่แล้ว สิ่งที่ต้องทำทั้งหมดคือคำสั่ง stray เดียว - เพียงชั่วขณะที่คุณไม่ได้คิดอย่างชัดเจนเกี่ยวกับสิ่งที่คุณทำคล้ายกับเวลาที่คุณพูดโดยไม่คิดและความเสียหายอาจมหาศาลและเกือบจะทันที ตัวอย่างคลาสสิก:

$ sudo rm -rf /

หากคุณปล่อยให้คำสั่งนั้นรันเป็นเวลาเพียงหนึ่งวินาทีระบบของคุณก็จะสามารถล้างข้อมูลได้เพียงพอที่จะทำให้มันไม่สามารถบูตได้และอาจทำให้ข้อมูลสูญหายได้ อย่าทำมัน


2
และเพียงเพื่อแบ่งปันว่าทำไมฉันต้องการชี้แจงประโยคใหม่ .. เพื่อ 'หยุด' คอมพิวเตอร์ในแบบดั้งเดิม - เพื่อให้ล็อค - คุณต้องให้ CPU ทำงานเพียงพอที่จะตอบสนองไม่ได้ ในเวลาที่เหมาะสมเพื่องานอื่น ๆ .. เช่นการปรับปรุงกราฟิกและย้ายเคอร์เซอร์เช่น ฉันแน่ใจว่ามีวิธีการทำเช่นนั้นจากบรรทัดคำสั่ง
Harv

6
@DonielF -rหมายถึงการลบไฟล์ซ้ำในไดเรกทอรี -fหมายถึง "แรง" ในขณะที่ไม่ขอการยืนยันไม่ว่าจะมีการอนุญาตของไฟล์ใดก็ตาม /เป็นไดเรกทอรีรากของระบบไฟล์ซึ่งหมายความว่ามันจะทำลายทุกอย่างยกเว้นไฟล์พิเศษบางไฟล์ที่ไม่ทำงานเหมือนไฟล์ทั่วไป นอกจากนี้คุณยังมีเวลาค่อนข้างยากในการค้นหาคำสั่งสั้น ๆ ที่จะทำให้ระบบของคุณล้มเหลวโดยไม่ได้รับอนุญาตจาก root / admin
GDP2

11
ฉันลองไปrm -rf /สักครู่แล้วrmบอกว่าถ้าคุณต้องการลบรูทให้ใช้การตั้งค่าสถานะเช่นนั้น ไม่มีข้อมูลสูญหาย rm -rf /มันดูเหมือนว่ามีการรักษาความปลอดภัยในขณะนี้จากการทำงานสุ่มสี่สุ่มห้า
alexyorke

27
- ไม่จำเป็นต้องใช้ค่าสถานะเริ่มต้นตั้งแต่ปี 2549 เพื่อให้ทำงานได้ตามที่คาดหวัง
Encaitar

6
นี่เป็นกรณีที่แท้จริงของโลกซึ่งในเรื่องนี้เกิดขึ้นจริง - เป็นrm -rf มันคล้ายกับกฎหมายหนึ่งที่ผิดพลาดจริงๆ: /
mgarciaisaia

30

สมมติว่าคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่และพยายามทำสำเนาสำรองของฮาร์ดไดรฟ์บางตัว

dd if=/dev/disk1 of=/dev/disk2 

ถ้าคุณผสมมัน (เปลี่ยนถ้าและจาก) มันจะเขียนทับข้อมูลใหม่ด้วยข้อมูลเก่าไม่มีคำถามถาม

มิกซ์อัพที่คล้ายกันสามารถเกิดขึ้นได้ด้วย utils เก็บถาวร และตรงไปตรงมากับอรรถประโยชน์บรรทัดคำสั่งส่วนใหญ่

หากคุณต้องการตัวอย่างของการผสมผสานตัวละครตัวหนึ่งที่จะทำให้ระบบของคุณพังดูสถานการณ์นี้: คุณต้องการย้ายไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันไปยังอีกอันหนึ่ง:

 mv -f ./* /path/to/other/dir

มายอมรับความจริงที่คุณเรียนรู้ที่จะใช้./เพื่อแสดงถึงไดเรกทอรีปัจจุบัน (ฉันทำได้) ถ้าคุณไม่ใส่จุดก็จะเริ่มย้ายไฟล์ทั้งหมดของคุณ รวมถึงไฟล์ระบบของคุณ คุณโชคดีที่คุณไม่ได้ทำสิ่งนี้ แต่ถ้าคุณอ่านที่ไหนสักแห่งด้วย 'sudo -i' คุณจะไม่ต้องพิมพ์ sudo อีกครั้งคุณจะเข้าสู่ระบบในฐานะ root ทันที และตอนนี้ระบบของคุณกำลังกินต่อหน้าต่อตาคุณ

แต่อีกครั้งฉันคิดว่าสิ่งต่าง ๆ เช่นการเขียนทับไฟล์รหัสที่มีค่าของฉันกับขยะเพราะฉันทำตัวละครตัวหนึ่งหรือเพราะฉันผสมคำสั่งของพารามิเตอร์เป็นปัญหามากขึ้น

สมมติว่าฉันต้องการตรวจสอบรหัสแอสเซมเบลอร์ที่ gcc กำลังสร้าง:

gcc -S program.c > program.s

สมมติว่าฉันมีโปรแกรมแล้วและฉันใช้ TAB ที่สมบูรณ์ ฉันรีบแล้วลืม TAB สองครั้ง:

gcc -S program.c > program.c

ตอนนี้ฉันมีรหัสแอสเซมเบลอร์ใน program.c ของฉันและไม่มีรหัส c อีกต่อไป ซึ่งอย่างน้อยก็เป็นความพ่ายแพ้ที่แท้จริงสำหรับบางคน แต่สำหรับคนอื่น ๆ มันเริ่มต้นใหม่จากเวลา

ฉันคิดว่าสิ่งเหล่านี้เป็นสิ่งที่จะทำให้เกิด "อันตราย" ที่แท้จริง ฉันไม่สนใจว่าระบบของฉันจะล่มหรือไม่ ฉันจะดูแลเกี่ยวกับข้อมูลที่สูญหาย

น่าเสียดายที่สิ่งเหล่านี้เป็นข้อผิดพลาดที่จะต้องทำจนกว่าคุณจะเรียนรู้การใช้เครื่องด้วยความระมัดระวังที่เหมาะสม


16
จุดสุดท้ายของคุณคือหนึ่งในหลายเหตุผลว่าทำไมทุกคนควรใช้การควบคุมเวอร์ชัน
คาร์เรน H

4
ฉันเคยทำลายโปรแกรมที่ฉันใช้งานอยู่gcc program.c -o program.cขอขอบคุณอย่างแม่นยำเพื่อให้แท็บสมบูรณ์ ฉันเรียนรู้ที่จะใช้การควบคุมเวอร์ชันอย่างเคร่งครัดหลังจากนั้น
nneonneo

2
คำตอบที่ดีที่สุดจนถึงขณะนี้การโพสต์คำสั่งที่ถูกต้องตามกฎหมายซึ่งอาจเป็นผลมาจากการพิมพ์ผิดที่ง่ายและยังสามารถทำให้เกิดความเสียหายที่สำคัญ
gaazkam

1
"ตอนนี้ฉันมีรหัสแอสเซมเบลอร์ใน program.c ของฉัน" ไม่ คุณไม่มีอะไรเลย. การเปลี่ยนเส้นทางตัดทอนไฟล์ก่อนที่ GCC จะเปิดขึ้น
muru

1
โอ้ฉันดีใจจริง ๆ ที่พวกเขาเพิ่มการปรับปรุงส่วนติดต่อผู้ใช้ใน GCC ไม่นานมานี้ความผิดพลาดครั้งใหญ่ของข้าก็ดี แต่มันก็ดีที่ได้เห็นว่าข้าจะได้รับการปกป้องจากครั้งต่อไป
nneonneo

28

การทำให้เกิดความตื่นตระหนกของเคอร์เนลนั้นคล้ายกับการหยุดทำงานมากกว่าคำตอบอื่น ๆ ที่ฉันได้เห็นที่นี่:

sudo dtrace -w -n "BEGIN{ panic();}"

(รหัสที่นำมาจากที่นี่และพบได้ในเอกสารของ Apple เอง )

คุณอาจลอง:

sudo killall kernel_task

ฉันไม่ได้ตรวจสอบว่าอันที่สองที่ใช้งานได้จริง (และฉันไม่ได้ตั้งใจเพราะตอนนี้ฉันมีงานเปิดอยู่)


2
เพิ่งลองครั้งที่สองใน VM 10.12.3 และมันก็บอกว่า:No matching processes were found
Alexander O'Mara

3
นอกจากนี้คนแรกดูเหมือนจะไม่ทำงานอย่างน้อยถ้าเปิดใช้งาน SIPdtrace: system integrity protection is on, some features will not be available dtrace: description 'BEGIN' matched 1 probe dtrace: could not enable tracing: Permission denied
Alexander O'Mara

@ AlexanderO'Mara ไม่แปลกใจกับผลลัพธ์ของคุณในคำสั่งที่สอง ฉันคิดว่า Mac OS X จะไม่อนุญาตให้คุณใช้กระบวนการเคอร์เนลในลักษณะนี้ ผลลัพธ์สำหรับคำสั่งแรกนั้นคาดว่าจะเป็นเช่นเดียวกับที่dtraceได้รับการอย่างมีประสิทธิภาพโดย SIP
GDP2

1
kernel_taskไม่ใช่กระบวนการปกติ มันเป็นอมตะ ไม่สามารถฆ่าได้ยกเว้นผ่านข้อผิดพลาดของตัวเอง (และจะเรียกว่า KP และทำให้ทั้งเครื่องหมด) kernel_taskPID นั้นคือ 0 แต่ถ้าคุณส่งไปที่kill(pid, sig)syscall หน้า man จะบอกว่าถ้าpidเท่ากับ 0 ดังนั้นsigจะถูกส่งไปยังทุกกระบวนการในกลุ่มกระบวนการของกระบวนการเรียก . ดังนั้นคุณไม่สามารถส่งkernel_taskสัญญาณได้
Iwillnotexist Idonotexist

@IllnotexistIdonotexist ใช่ฉันคิดว่ามากจะเป็นกรณี; ขอบคุณสำหรับข้อมูลแม้ว่า สิ่งที่ดีที่จะมีในใจ
GDP2

19

โมเดิร์น MacOS ทำให้มันยากที่จะเกิดความผิดพลาดเครื่องของคุณเป็นผู้ใช้ที่ด้อยโอกาส (เช่นโดยไม่ต้องใช้sudo) เพราะระบบ UNIX จะหมายถึงการจัดการกับพันของผู้ใช้โดยไม่ต้องแจ้งใด ๆ ของพวกเขาทำลายทั้งระบบ ดังนั้นขอขอบคุณคุณมักจะต้องได้รับแจ้งก่อนที่จะทำสิ่งที่ทำลายเครื่องของคุณ

น่าเสียดายที่การป้องกันนั้นใช้กับระบบเท่านั้น ตามที่ xkcd แสดงให้เห็นมีสิ่งต่าง ๆ มากมายที่คุณใส่ใจเกี่ยวกับสิ่งนั้นที่ไม่ได้รับการคุ้มครองโดยการป้องกันความสมบูรณ์ของระบบสิทธิ์การใช้งานรูทหรือการแจ้งรหัสผ่าน:

XKCD 1200

มีหลายสิ่งที่คุณสามารถพิมพ์ได้ซึ่งจะทำลายบัญชีผู้ใช้และไฟล์ทั้งหมดของคุณหากคุณไม่ระวัง ตัวอย่างบางส่วน:

  • 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 จะฆ่าทุกโปรแกรมของคุณออกจากระบบคุณอย่างรวดเร็วและอาจทำให้ข้อมูลสูญหาย

3
FYI (สำหรับคนอื่นที่อ่านข้อความนี้) findมี-deleteข้อโต้แย้งที่ปลอดภัยกว่าการไปถึงxargs rm
Josh

MacOS ที่ทันสมัยเป็นสิ่งที่ป้องกันการชนได้หรือไม่ ระบบเหล่านี้ส่วนใหญ่มีไว้สำหรับผู้ใช้คนเดียว พวกเขามีสติ maxprocs / cpulimits จริง ๆ หรือไม่ คุณสามารถให้การอ้างอิงได้หรือไม่?
user2497

1
คุณของทุกคนจะรู้ดีความเสียหายที่ln -sfสามารถทำได้ ... และวิธีการกู้คืนจากมัน :-)
Iwillnotexist Idonotexist

1
@ Josh: ขอบคุณที่ชี้ให้เห็น และในกรณีทั่วไปเราควรใช้find -print0 | xargs -0เพื่อจัดการกับตัวละครแปลก ๆ ในชื่อไฟล์อย่างปลอดภัย
nneonneo

1
ตกลง คำแนะนำ xargs ที่มีประโยชน์มากขึ้น: ใช้<whatever> | xargs echo <something>ก่อนเพื่อดูตัวอย่างคำสั่ง xargs ที่จะทำงานจริง xargs เป็นตัวอย่างที่ดีว่าเหตุใด CLI จึงทรงพลังมาก: คุณสามารถใช้งานได้หลายรายการหลายรายการพร้อมกันโดยไม่มีการยืนยันที่น่ารำคาญและการถือครองมือ ... เพียงให้แน่ใจว่าคุณกำลังบอกให้ทำสิ่งที่คุณต้องการ
Josh

16

อีกอย่างที่คุณสามารถทำได้ (ที่ฉันเคยทำผิดพลาดมาก่อน) คือ:

sudo chmod 0 /

สิ่งนี้จะทำให้ระบบไฟล์ทั้งหมดของคุณ (ซึ่งหมายถึงคำสั่งและโปรแกรมทั้งหมด) ไม่สามารถเข้าถึงได้ ... ยกเว้นผู้ใช้รูท ซึ่งหมายความว่าคุณจะต้องเข้าสู่ระบบโดยตรงในฐานะผู้ใช้รูทและกู้คืนระบบไฟล์ แต่คุณไม่สามารถเข้าถึงsudoคำสั่ง (หรือคำสั่งอื่น ๆ สำหรับเรื่องนั้น) chmod 755 /คุณสามารถเรียกคืนการเข้าถึงคำสั่งและไฟล์โดยการบูตเข้าสู่โหมดเดียวที่ผู้ใช้ติดตั้งและการฟื้นฟูระบบไฟล์ที่มี

หากทำซ้ำด้วยchmod -R 0 /สิ่งนี้จะทำให้ระบบใช้ไม่ได้ การแก้ไขที่เหมาะสมที่จุดนั้นคือการใช้ Disk Utility จากพาร์ทิชันการกู้คืนเพื่อซ่อมแซมสิทธิ์ดิสก์ คุณอาจจะดีกว่าเพื่อกู้คืนสแน็ปช็อตหรือการสำรองข้อมูลของระบบไฟล์ของคุณหากการดำเนินการนี้ซ้ำ


8
"คุณสามารถแก้ไขได้โดย ... chmod 755 /" - ไม่คุณไม่สามารถทำได้ ไฟล์จำนวนมากต้องการการอนุญาตที่แตกต่างจาก 755 ทั้งเพื่อความปลอดภัยหรือเพื่อใช้งานได้เลย chmod 755 /จะทำให้ระบบของคุณไม่ปลอดภัยและแตกหักในรูปแบบที่ลึกซึ้ง การกู้คืนแบบเต็มรูปแบบเท่านั้นจากchmod 0 /ผ่านการกู้คืนสแน็ปช็อตการคืนค่าการสำรองข้อมูลและ / หรือติดตั้งใหม่
marcelm

2
@marcelm จุดดี คำแนะนำของฉันเป็นเพียงการคืนค่าการเข้าถึงคำสั่งไม่ใช่เป็นการแก้ไขแบบถาวร ฉันได้อัปเดตคำตอบของฉันเพื่อสะท้อนถึงสิ่งนั้นแล้ว เท่าที่ฉันรู้ chmod จะไม่เรียกซ้ำจนกว่าคุณจะใช้-Rแฟล็ก - ดังนั้นฉันคิดว่าสิทธิ์ของไดเรกทอรีย่อยจะไม่ได้รับผลกระทบหรือไม่
musicman523

5
@marcelm คุณถูกต้อง แต่คำสั่งที่แสดงไม่ซ้ำดังนั้น/จะได้รับผลกระทบเท่านั้น
Andrea Lazzarotto

ฉันเคยsudo chmod -R 700 /เป็นคอมพิวเตอร์เครื่องใหม่คิดว่ามันจะปลอดภัยกว่านี้ถ้าฉันทำอย่างนั้น น่าแปลกที่มันบูทและจบลงด้วยเมนูย่อยและเดสก์ท็อปว่างเปล่า ไม่มีอะไรทำงานได้ แต่ Disk Utility Restore Permissions ได้รับการจัดการเพื่อตั้งเกือบทุกอย่างถูกต้อง!
nneonneo

2
ยูทิลิตี้ @marcelm Disk มีตัวเลือก "แก้ไขสิทธิ์" ซึ่งควรแก้ไขโดยไม่ต้องกู้คืนระบบอย่างสมบูรณ์
Josh

10

คำตอบที่เรียกว่าsudoควรถือว่าไม่ถูกต้อง สิ่งเหล่านี้ถือว่าการเข้าถึงระดับผู้ดูแลระบบ

ลองperl -e 'exit if fork;for(;;){fork;}'ดู OSX อาจมีการป้องกันบางอย่างในขณะนี้ หากมีฟองแอปเปิ้ลถามว่าคุณต้องการที่จะยุติแอป Terminal และการประมวลผลย่อยคุณเกือบจะดี

while true ; do cat /dev/zero > /dev/null & doneยังมีประโยชน์มากโดยเฉพาะอย่างยิ่ง perlถ้าคุณไม่ได้มี

for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & doneจะทำการทดสอบโหลดซีพียูเล็กน้อย ดีมากสำหรับการตรวจสอบว่าฮีทซิงค์และพัดลมของคุณมีระดับ


สิ่งนี้เรียกว่าFork Bombและมีแนวโน้มที่จะทำให้ระบบใช้ไม่ได้ (อาจถือได้ว่าเป็น "ความล้มเหลว") แต่จะไม่ทำให้เกิดความเสียหายถาวร แต่มันน่ารังเกียจ!
Josh

@Josh "แต่จะไม่ทำให้เกิดความเสียหายถาวร" ยกเว้นงานที่ยังไม่ได้เปิดที่ยังไม่ได้บันทึก
reirab

@reirab Josh เพิ่มคำว่า catch 'all' ในคำสั่งของเขา แต่ MacOS นั้นส่วนใหญ่ใช้สำหรับการแก้ไขรูปภาพและวิดีโอในขณะนี้ โปรแกรม Adobe ไม่มีการบันทึกอัตโนมัติหรือไม่
user2497

1
นอกจากนี้งานที่ไม่ได้บันทึกจะมีความเสี่ยงอยู่เสมอจนกว่าจะได้รับการบันทึก หากคอมพิวเตอร์ของคุณจะแสดงผลใช้ไม่ได้แล้วคุณจะไม่สามารถบันทึกสิ่งที่คุณได้เปิด :)
จอช

@Josh MacOS นั้นง่ายมากที่จะบันทึกสิ่งต่าง ๆ มันเป็น🍎-S เสมอ คุณไม่ควรเขียน 'น่าจะเป็น' user
user2497

7

ตรวจสอบให้แน่ใจว่าคุณมีข้อมูลสำรองและบันทึกไฟล์ใด ๆ ที่คุณสนใจจากนั้นพิมพ์ halt

สมมติว่าคุณใช้sudoเป็นรูทเครื่อง Mac จะขัดข้อง

ความเสี่ยงที่ใหญ่ที่สุดจากบรรทัดคำสั่งคือการสูญเสียข้อมูล อินเทอร์เฟซ macOS ได้รับการออกแบบมานานหลายทศวรรษเพื่อไม่ให้คนแปลกใจและฉีกข้อมูลหรือการตั้งค่าหรือแอพ อินเทอร์เฟซกราฟิก macOS ยังมีอยู่เพื่อลบเส้นโค้งการเรียนรู้ (อันชัน) เพื่อความปลอดภัยและการสร้างสคริปต์เชลล์

คุณสูญเสียการป้องกันเหล่านั้นซึ่งเป็นเหตุผลที่ฉันเตือนผู้คนที่เริ่มต้นด้วยแอปเทอร์มินัลหรือ ssh หากคุณมีการสำรองข้อมูลที่คุณรู้ว่ามีผลงานและมีเวลาและความมั่นใจ / ทักษะในการทำการกู้คืนคุณควรดำน้ำและเรียนรู้และแม้แต่ทำลายสิ่งต่าง ๆ


3
คุณพูดว่า "... และแม้แต่ทำลายสิ่งต่าง ๆ " ซึ่งเป็นกรณีการใช้งานที่ดีสำหรับผู้ที่ทำสิ่งที่มีความเสี่ยงในเครื่องเสมือน :)
user3439894

1
ความผิดพลาดนี้จะเป็นอย่างไร มันเพิ่งปิดระบบทันที มันยังล้างข้อมูลเคอร์เนลบัฟเฟอร์ดังนั้นจึงไม่มีการสูญเสียข้อมูล (บันทึก) developer.apple.com/legacy/library/documentation/Darwin/…
Josh

7
sudo kill -9 -1  

ฉันบังเอิญkill -9 -1เขียนสคริปต์ Perl โดยทำงานเป็นรูท มันเร็วเหมือนดึงสายไฟ เมื่อรีบูตเซิร์ฟเวอร์ทำระบบไฟล์ตรวจสอบและทำงานอย่างต่อเนื่อง

ฉันไม่เคยลองsudo kill -9 -1คำสั่งนั้นใน commandline อาจไม่ทำงานเนื่องจาก process-ID "-1" หมายถึง "kill กระบวนการทั้งหมดที่เป็นของกลุ่มกระบวนการของผู้โทร"

ไม่แน่ใจว่าถ้าใช้ sudo นั่นก็หมายความว่า init และเคอร์เนลทุกอย่าง ... แต่ถ้าคุณรูทkill -9 -1จะหยุดทันที - เหมือนดึงสายไฟ โดยวิธีการ - ไม่มีอะไรจะปรากฏใน logfiles เพราะคำสั่งนั้นเป็นนักฆ่าที่เร็วที่สุดในตะวันตก!

จริง ๆ แล้วเพื่อกู้คืนฉันไป sysadmins ของเราและบอกพวกเขาสิ่งที่ฉันทำ พวกเขาทำการรีบูตอย่างหนักเนื่องจากไม่มีวิธีการเข้าสู่ระบบบนเซิร์ฟเวอร์นั้น (RHEL6)

A kill -9 -1ในฐานะที่เป็นรากฆ่าทุกกระบวนการที่ทำงานเป็นราก นั่นคือ sshd นั่นทำให้ฉันออกจากระบบทันทีและป้องกันไม่ให้ทุกคนเข้าสู่ระบบอีกครั้ง กระบวนการใด ๆ ที่เริ่มต้นโดย init - รวมถึง init ถูกฆ่ายกเว้นว่าพวกเขาเปลี่ยน UID หรือ GID แม้แต่การเข้าสู่ระบบผ่านทางคอนโซลอนุกรมก็ไม่สามารถทำได้อีกต่อไป ps -eaf | grep rootแสดงให้เห็นถึงกระบวนการแฟนซีบางอย่างซึ่งหากพวกเขาทำปฏิกิริยากับ SIGKILL ในวิธีการเริ่มต้นจะหยุดการเขียน HD ขั้นพื้นฐาน

ฉันจะไม่ลองตอนนี้บนแล็ปท็อปของฉัน :-) ฉันไม่อยากรู้อยากเห็นพอที่จะค้นพบว่าถ้าkill -9 165([ext4-rsv-conver]) จะหยุดเขียนเป็น HD


คุณไม่สามารถ "ฆ่า" เคอร์เนลและสิ่งนี้ไม่ควรทำให้เกิดการตรวจสอบระบบไฟล์และของตัวเอง คุณฟื้นตัวจากสถานการณ์ได้อย่างไร? คุณทำการรีบูตอย่างหนักหรือไม่? เพราะนั่นอาจเป็นสาเหตุที่ทำให้ระบบไฟล์ตรวจสอบ :)
Josh

คำตอบที่คุณแก้ไขนั้นสมเหตุสมผล คุณไม่สามารถฆ่าได้initตามปกติ แต่คุณสามารถฆ่าเซสชัน gettys และ SSH ทั้งหมดและทำให้เครื่องใช้ไม่ได้ เมจิก SysRqควรจะได้รับอนุญาตให้รีบูตสะอาด แต่ก็มักจะง่ายขึ้นเพียงแค่อำนาจวงจรและพึ่งพาวารสารงบ :)
จอช

5

ใช่คุณสามารถทำลายระบบของคุณได้อย่างสมบูรณ์ การทำสิ่งที่มีsudoสิทธิพิเศษโดยบังเอิญเป็นตัวอย่างหนึ่งที่โพสต์ไว้ไม่ว่าจะเป็นการลืมตัวละครสองสามตัวที่สั่งให้เครื่องเทอร์มินัลทำสิ่งที่แตกต่างไปจากที่คุณตั้งใจไว้อย่างสิ้นเชิง rmไอเอ็นจี/แทนที่จะ/tmp/\*เป็นเพียงความแตกต่าง 5 ตัวอักษร การวางช่องว่างในสถานที่ที่ไม่ถูกต้องอาจทำสิ่งที่แตกต่างอย่างสิ้นเชิงเช่นกัน ในบางครั้งคำแนะนำที่มีความหมายดูเหมือนจะมีโค้ดที่เป็นอันตรายซึ่งทำให้เข้าใจผิด บางคนในอินเทอร์เน็ตใช้โค้ดได้ดีมาก

นอกจากนี้ยังมีคำสั่งที่ใช้ html ซึ่งสามารถทำให้ขนาดฟอนต์เป็นศูนย์ได้ดังนั้นสิ่งที่ดูไร้เดียงสาอย่างสมบูรณ์เมื่อคัดลอกไปยังคลิปบอร์ดอาจเป็นการติดตั้ง git repo ของคนในฐานะแหล่งที่เชื่อถือได้และดาวน์โหลดมัลแวร์

และมีคำสั่งที่คุณสามารถเรียกใช้ที่เปิดให้คุณหาประโยชน์หรืออาจตั้งใจดีอย่างสมบูรณ์ แต่ลบไฟล์หรือโปรแกรมที่สำคัญหรือทำให้ดิสก์ของคุณเสียหาย ในความเป็นจริงการใช้เครื่องมืออย่างไม่ถูกต้องสามารถทำอะไรบางอย่างที่เป็นพื้นฐานโดยไม่ตั้งใจเขียนเหนือเซกเตอร์สำหรับเริ่มระบบของคุณหรือหัวของดิสก์ของคุณหรือปัญหาอื่น ๆ มากมาย

viตัวอย่างของสิ่งที่ทำลายน้อยที่ยังไม่ได้โพสต์จะเปิดไฟล์ไบนารีใน หากคุณเคยพยายามมันคุณจะรู้ว่ามันสามารถเลอะ terminal resetของคุณไปยังจุดที่มันไม่ได้จนกว่าจะเป็น

หรือมีคำสั่งที่จะทำให้เครื่องของคุณชะงักเช่น:

yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & 

คุณสามารถลองสิ่งนั้นมันจะไม่สร้างความเสียหาย แต่มันจะทำให้หน่วยประมวลผลของคุณชะงักและคุณจะต้องฆ่าแต่ละโพรเซสที่คุณวางไข่

อย่างที่บอกไปแล้วว่าในการคำนวณนั้นโดยทั่วไปแล้วคุณจะไม่สามารถสร้างไข่เจียวได้โดยไม่ทำให้ไข่แตก คุณควรระมัดระวังที่เทอร์มินัล แต่วิธีเดียวที่จะทำให้การใช้งาน OS ดีขึ้นคือการเรียนรู้และฝึกฝน


ตัวอย่างแรกของคุณไม่ค่อยเป็นอันตราย เป็นกลุ่มค่อนข้างมีเหตุผลเมื่อแก้ไขไฟล์ไบนารี และในกรณีที่เลวร้ายที่สุดคุณสามารถปิดหน้าต่าง ตัวอย่างที่สองที่มี "ใช่" นั้นน่ารำคาญและจะใช้ CPU ของผู้ใช้ค่อนข้างมาก แต่ระบบจะยังคงตอบสนองได้และคุณสามารถฆ่าหน้าต่างเทอร์มินัลหลักได้อย่างง่ายดาย
nneonneo

1
ฉันไม่เห็นด้วยกับ "เลอะเทอร์มินัลของคุณจนถึงจุดที่มันใช้ไม่ได้จนกว่าคุณจะรีสตาร์ท" - ลองresetที่ควรล้างเทอร์มินัลที่มีเอาต์พุตไบนารี่พิมพ์ออกมา หรือเพิ่งวางไข่ TTY ใหม่
Josh

1
เจ๋ง, nw @JFA ที่จริงแล้วฉันใช้เวลาหลายปีในการเรียนรู้resetเคล็ดลับ! สำหรับข้อมูลเพิ่มเติม: unix.stackexchange.com/questions/79684
Josh

1
@Josh ขอบคุณสำหรับสิ่งนั้นมันเป็นความช่วยเหลือที่ยิ่งใหญ่ เป็นเวลาหลายปีแล้วที่ฉัน: P
JFA

1
@Josh แล้ว 'stty sane ^ M' และ 'tput reset' ก็น่าตื่นเต้นสำหรับคุณเช่นกัน
user2497

4

ฉันเป็นเพียงผู้เริ่มต้นทุบตี แต่คุณสามารถตั้งค่าในขณะที่ True; ทำคำสั่ง; ทำ; คนส่วนใหญ่จะลอง Ctrl + C ที่จะหยุดคำสั่งไม่ใช่กระบวนการภายนอก (ctrl + Z ซึ่งจะต้องถูกฆ่า) ฉันเดาว่าถ้าคำสั่งเป็นการดำเนินการที่หนักหน่วงเช่นการทวีคูณเป็นจำนวนมากกับพลังของตัวเองนั่นอาจทำให้สับสนกับเนื้อหาที่คุณใช้ แต่แท้จริงแล้วระบบปฏิบัติการสมัยใหม่มักจะได้รับการป้องกันจากความยุ่งเหยิงดังกล่าว


2
มันทำงานได้เร็วมากและจะไม่ผิดพลาดอะไรเลย คุณต้องแยกการคำนวณแบบเข้มข้นเพื่อให้เคอร์เนล maxprocs ไม่ทำให้คุณเศร้า ลองwhile true do cat /dev/zero > /dev/null & done
user2497

ขอบคุณ ฉันคาดว่าจะมีการจัดการจำนวนมากเพื่อทำให้คอมพิวเตอร์ทำงานช้าบางครั้งก็เกิดขึ้นกับโปรแกรม java / python ที่ฉันใช้เพื่อการเรียนรู้ของเครื่อง
Ando Jurai

1
cat zero ถึง null bit เป็นการดำเนินการจำนวนมากใน I / O เป็นอย่างน้อย ฉันใช้หนึ่งในแกนหลักของซีพียูเพื่อทำการทดสอบความร้อน
2497

1
และ^C จะฆ่าขณะที่ลูปด้วย แต่เพียงแค่ทำซ้ำเร็วเกินไปสำหรับการขัดจังหวะที่จะถูกจับ การกดค้างไว้^Cอาจทำให้วงแตก ปิดเทอร์มินัลด้วยเช่นกัน :)
Josh

2
@ Josh มันง่ายกว่าที่จะจับ INT ถ้ามีการหยุดชั่วขณะเช่น sleep 0.1 หลังจากงาน cpu-intensive
user2497

3

แน่นอนคุณยังสามารถทำให้ระบบพังโดยใช้คำสั่งที่ป้อนด้วย Terminal

หลายปีที่ผ่านมามันอาจจะยากขึ้นเนื่องจากข้อ จำกัด และมาตรการป้องกันทุกประเภทที่บังคับใช้ แต่ในฐานะกฎหมายของเมอร์ฟี:

"Fork bombs" และrm -rfสิ่งของ kiddies ทั้งหมดนั้นเป็นสิ่งที่รู้จักกันมานานสำหรับ UNIX ด้วย Mac OS X คุณสามารถสนุกไปกับการใช้ส่วนย่อยของระบบ GUI ( WindowServerพูดถึง) หรือสิ่งอื่น ๆ เช่นไฟร์วอลล์ OpenBSD หรือPFที่วิศวกรของ Apple นำเข้ามา แต่ไม่เคยจัดการอัปเดตตั้งแต่ปี 2008 PFทำงานในเคอร์เนลดังนั้นเมื่อถึงเวลาที่จะต้องจับตามองมันถึงเวลาที่ Apple บอกคุณว่า " คุณรีสตาร์ทคอมพิวเตอร์เนื่องจากความตื่นตระหนก" หรืออะไรทำนองนี้

ส่วนที่แย่ที่สุดของเรื่องนี้คือคุณไม่มีทางรู้ได้ว่าเหตุใดจึงต้องตื่นตระหนก - เพราะ Apple ไม่ได้ให้ร่องรอยสแต็คที่มีความหมายใด ๆ คุณสามารถมีเลขฐานสิบหกของที่อยู่ผู้ส่งคืนของสแต็กเฟรมเท่านั้น


คำตอบที่ดีและจุดที่ยอดเยี่ยม ฉันอยากจะเพิ่มรายการวิธีการที่ดีเพื่อให้ OS X ตื่นตระหนกบนฟลอร์เต้นรำที่ฉันชอบ แต่ไม่มีเงื่อนไขที่ชัดเจนเพื่อหลีกเลี่ยงความโง่เขลาของสคริปต์ ฉันยกเลิกการโหลดส่วนขยายเคอร์เนลที่เกี่ยวข้องกับ NFC ทำงานได้ทุกเวลาทันที หนึ่งสามารถทำให้เป็นอาวุธนี้ได้อย่างง่ายดายใน DOS โดยการตั้งเวลานี้ที่จำนวนหารได้เช่น 5 นาที ดังนั้นมันจะบูตจากนั้นจึงทำการกระโดด สิ่งนี้จำเป็นต้องติดตั้งระบบปฏิบัติการใหม่เนื่องจากผู้ดูแลระบบส่วนใหญ่และแม้แต่เทคโนโลยีจะพลาด ...
ฟรานซิสจาก ResponseBase

3

มันเป็นสิ่งที่คลุมเครือเล็กน้อยในสิ่งที่คุณหมายถึงโดย "ขัดข้อง" คอมพิวเตอร์ของคุณ ... และไม่มีคำตอบที่ถูกต้องที่ชัดเจนถึงแม้ว่าจะมีตัวอย่างที่เป็นประโยชน์ในคำตอบอื่น ๆ เนื่องจากคำถามของคุณมีความคลุมเครือและทั่วไปมากกว่าฉันจึงต้องการให้ความสำคัญกับลักษณะของคำถามและให้คำตอบทั่วไปมากขึ้น

ผู้ที่ไม่เข้าใจ Terminal มักจะกลัวที่จะใช้เพราะกลัวว่าพวกเขาอาจทำตามคำสั่งและทำให้คอมพิวเตอร์พัง

ฉันคิดว่าบรรทัดคำสั่งเป็นดาบสองคมและมักจะคมมาก จุดแข็งที่ยิ่งใหญ่ที่สุดของมันยังเป็นจุดอ่อนที่ยิ่งใหญ่ที่สุดสำหรับผู้ใช้ใหม่: โปรแกรม CLI ทำในสิ่งที่คุณพูดโดยไม่ถามว่าจริง ๆ แล้วคุณหมายถึงอะไร บ่อยครั้งที่พวกเขาไม่ขอการยืนยันพวกเขาไม่ได้ให้ความช่วยเหลือในการจับมือหรือการโต้ตอบและตัวเลือกของพวกเขาสั้นกระชับบ่อยครั้งบางครั้งสับสนสตริงข้อความตาม โปรดทราบว่าโดยทั่วไปแล้วพวกเขาจะมีเอกสารที่ดีมากเพียงแค่ต้องอ่านคู่มือ (ซึ่งเกือบจะทุกครั้งman <command you are about to run>) และใช้เวลาในการทำความเข้าใจว่าบรรทัดคำสั่งที่พวกเขากำลังจะเรียกใช้จะทำอะไร

โหมดการทำงานนี้มีประสิทธิภาพ - หมายความว่าผู้ใช้ CLI ที่มีประสบการณ์สามารถสร้างคำสั่งยาว "pipelines" ซึ่งทำงานที่ซับซ้อนด้วยคำสั่งเดียว นี่เป็นเพราะงานจะไม่ถามว่า "คุณแน่ใจหรือไม่?" ทุกย่างก้าวมันทำในสิ่งที่มันบอก แต่สำหรับผู้ใช้ที่ไม่คุ้นเคยกับโหมดนี้และคุ้นเคยกับ GUI ที่ความช่วยเหลือออนไลน์คลิกเพียงครั้งเดียวก็ไม่คุ้นเคยและน่ากลัว

แต่จริงๆแล้วมีคำสั่งที่จะทำให้คอมพิวเตอร์ของคุณพังหรือไม่?

คุณ "ผิดพลาด" คอมพิวเตอร์ของคุณโดยใช้ CLI ได้หรือไม่ อาจจะ. คุณสามารถทำให้ข้อมูลสูญหายได้หากคุณใช้คำสั่งทำลายอย่างไม่ถูกต้อง EG คำตอบมากมายที่นี่พูดถึงrmคำสั่งที่ลบไฟล์ เห็นได้ชัดว่าคุณสามารถทำให้ข้อมูลสูญหายด้วยคำสั่งนั้นเป็นสิ่งที่คำสั่งถูกออกแบบมาให้ทำ

คุณสามารถใช้บรรทัดคำสั่งเพื่อทำให้เครื่องของคุณไม่สามารถใช้งานได้เป็นระยะเวลาหนึ่ง: คุณสามารถปิดเครื่องโดยไม่ต้องยืนยันทำให้กระบวนการใช้ทรัพยากรที่มีอยู่ 100% โดยไม่มีการยืนยันฆ่าโปรแกรมทั้งหมดของคุณ หรือทำลายระบบไฟล์ของคุณ หากคุณต้องการจริงๆคุณสามารถใช้ CLI เพื่อสร้างส่วนขยายเคอร์เนลซึ่งทำให้เคอร์เนลตื่นตระหนก (ซึ่งใกล้เคียงกับ "ความล้มเหลว" ที่ฉันคิดได้)

บรรทัดคำสั่ง (เข้าถึงได้จาก Terminal) เป็นเครื่องมือที่ทรงพลัง บ่อยครั้งที่มันเร็วกว่าในการแก้ปัญหาโดยใช้ Terminal มากกว่า GUI วิธีแก้ปัญหาบางอย่างใช้ได้เฉพาะเมื่อใช้คำสั่งเทอร์มินัล แต่กุญแจสำคัญในการ CLI คือความเข้าใจ อย่าเรียกใช้คำสั่งสุ่มที่คุณเห็นทางออนไลน์ อ่าน man pages และเข้าใจว่าคำสั่งทำอะไร หากคุณไม่แน่ใจให้ถามใครสักคนหรือเรียนรู้เพิ่มเติมเกี่ยวกับคำสั่งก่อนเรียกใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.