คุณควรเข้าใจว่าbashเป็นเพียงแค่สภาพแวดล้อมในการดำเนินการ มันรันคำสั่งที่คุณเรียก - ไม่ใช่ธุรกิจของเชลล์ที่จะรู้ว่าคำสั่งทำอะไรคุณสามารถเรียกใช้ไฟล์ที่คุณต้องการได้ ในกรณีส่วนใหญ่จะไม่ชัดเจนว่าจะเลิกทำเช่น - คุณสามารถ "เลิกเล่น" ภาพยนตร์ได้หรือไม่ คุณสามารถ "ยืนยัน" อีเมลได้หรือไม่? ตัวอย่างเช่น "เลิกทำการเรียกใช้ Firefox" หมายความว่าอย่างไร คุณสามารถปิดได้ แต่บุ๊กมาร์กการดาวน์โหลดและประวัติจะไม่เหมือนเดิม
หากคุณเรียกใช้คำสั่งจะถูกดำเนินการไม่ว่าอะไรก็ตาม มันขึ้นอยู่กับคุณที่จะรู้ว่าคุณกำลังทำอะไรอยู่ โปรดทราบว่านี่ไม่ได้หมายความว่าแต่ละคำสั่งไม่มี "เลิกทำ" ... พวกเขาสามารถทำได้ - คุณยังสามารถเขียนฟังก์ชั่น wrapper ที่ทำบางสิ่งบางอย่างเพื่อปกป้องคุณจากความผิดพลาดที่โง่เขลา
ตัวอย่างเช่นmvสามารถย้อนกลับได้ง่ายเพียงแค่ย้ายไฟล์กลับมาจากที่ที่มันมาเว้นแต่คุณจะเขียนทับบางสิ่ง นั่นคือเหตุผลที่-iเปลี่ยนมีอยู่เพื่อถามคุณก่อนที่จะเขียนทับ ในทางเทคนิคสิ่งที่ตรงกันข้ามcpคือrmยกเว้นว่ามีบางอย่างถูกเขียนทับ (อีกครั้ง-iถามคุณเกี่ยวกับเรื่องนี้) rmเป็นการถาวรมากขึ้นหากต้องการรับไฟล์กลับคุณต้องทำการแฮ็กระดับต่ำกว่าจริง ๆ (มีเครื่องมือสำหรับการทำเช่นนั้น) หากคุณพิจารณาว่าระบบไฟล์เป็นกล่องดำก็ไม่สามารถทำได้ในทางเทคนิค (เฉพาะรายละเอียดของรูปแบบตรรกะและกายภาพของข้อมูลช่วยให้คุณสามารถควบคุมความเสียหายได้) rmหมายความว่าrmถ้าคุณต้องการฟังก์ชั่น "ถังขยะ" นั่นก็แค่mvลงในไดเรกทอรีที่มีการจัดเตรียมไว้ล่วงหน้า (และอาจเป็นบริการที่กำหนดเวลาไว้เพื่อรักษาหรือล้างมัน) - ไม่มีอะไรพิเศษเกี่ยวกับมัน แต่คุณสามารถใช้-iเพื่อแจ้งให้คุณทราบก่อนที่จะลบ คุณอาจใช้ฟังก์ชั่นหรือชื่อแทนเพื่อรวม-iไว้ในคำสั่งเหล่านี้เสมอ
โปรดทราบว่าแอปพลิเคชันส่วนใหญ่จะปกป้องคุณจากการสูญเสียข้อมูลในวิธีที่ต่างกัน โปรแกรมแก้ไขข้อความส่วนใหญ่ (~ ทั้งหมด) จะสร้างไฟล์สำรองด้วย~ในตอนท้ายในกรณีที่คุณต้องการให้เวอร์ชันเก่ากลับมา ในบาง distros lsเป็น aliased โดยค่าเริ่มต้นเพื่อให้มันซ่อน ( -B) แต่พวกเขามี การป้องกันจำนวนมากได้รับจากการจัดการสิทธิ์อย่างถูกต้อง: ไม่ต้องรูทหากคุณไม่จำเป็นต้องสร้างไฟล์แบบอ่านอย่างเดียวหากคุณไม่ต้องการให้เปลี่ยน บางครั้งมันมีประโยชน์ที่จะมีสภาพแวดล้อม "แซนด์บ็อกซ์" - คุณรันสิ่งต่าง ๆ บนสำเนาดูว่ามันใช้ได้หรือไม่แล้วรวมการเปลี่ยนแปลง (หรือละทิ้งการเปลี่ยนแปลง) chrootหรือlxcสามารถป้องกันไม่ให้สคริปต์ของคุณหนีออกจากไดเรกทอรีและทำความเสียหาย
เมื่อคุณพยายามที่จะดำเนินการสิ่งต่าง ๆ เป็นกลุ่ม - ตัวอย่างเช่นถ้าคุณมีคำสั่งค้นหาที่ซับซ้อนในขณะที่วนรอบไปป์ไลน์หรืออะไรทำนองนั้นเป็นความคิดที่ดีที่จะเริ่มechoคำสั่งที่จะดำเนินการก่อน จากนั้นหากคำสั่งนั้นดูสมเหตุสมผลให้ลบechoแล้วเรียกใช้จริง และแน่นอนถ้าคุณไม่แน่ใจเกี่ยวกับสิ่งที่คุณทำจริงๆให้ทำสำเนาก่อน บางครั้งฉันก็แค่สร้าง tarball ของไดเรกทอรีปัจจุบัน
การพูดถึง tarballs - tarbombs และ zipbombs เป็นเรื่องปกติที่น่าเสียดาย (เมื่อผู้คนสร้างไฟล์เก็บถาวรโดยไม่ต้องมีไดเรกทอรีย่อยที่เหมาะสมและเปิดไฟล์ที่กระจายอยู่รอบ ๆ ฉันคุ้นเคยกับการสร้างไดเรกทอรีย่อยด้วยตัวเองก่อนนำออกจากกล่อง (ฉันสามารถแสดงรายการเนื้อหาได้ แต่ฉันขี้เกียจ) ฉันกำลังคิดเกี่ยวกับการสร้างสคริปต์ที่จะสร้างไดเรกทอรีย่อยเฉพาะเมื่อเนื้อหาถูกเก็บถาวรโดยไม่มีไดเรกทอรีย่อย แต่เมื่อมันเกิดขึ้นls -lrtช่วยในการค้นหาไฟล์ล่าสุดเพื่อวางที่พวกเขาอยู่ ฉันเพิ่งยกตัวอย่างนี้ - โปรแกรมสามารถมีผลข้างเคียงมากมายที่เชลล์ไม่มีทางรู้ได้ (เป็นไปได้อย่างไรมันเป็นโปรแกรมที่แตกต่างกันที่เรียกว่า!) วิธีเดียวที่จะหลีกเลี่ยงข้อผิดพลาดได้คือการระมัดระวัง (คิด สองครั้งรันหนึ่งครั้ง)
อาจเป็นคำสั่งที่อันตรายที่สุดคือคำสั่งที่จัดการกับระบบไฟล์: mkfs, fdisk / gdisk และอื่น ๆ พวกเขาสามารถทำลายระบบไฟล์ได้อย่างสมบูรณ์ (แม้ว่าจะมีซอฟต์แวร์ทางนิติวิทยาศาสตร์ที่เหมาะสม ตรวจสอบอุปกรณ์ที่คุณกำลังฟอร์แมตและการแบ่งพาร์ติชันให้ถูกต้องเสมอก่อนเรียกใช้คำสั่ง