ทำไมจึงเป็นไปได้ที่จะลบทั้งระบบไฟล์?


24

หลังจากยอมรับข้อผิดพลาดที่น่าอับอายของการลบระบบไฟล์ทั้งหมดของฉันผ่านการsudo rm -rf /*กู้คืนจากความเสียหายที่น่ากลัวที่ฉันได้ทำและจัดการกับความจริงที่ว่าฉันเพิ่งสูญเสียอายุขัย 6 ปีฉันเริ่มสงสัยว่าทำไมถึงเป็นเช่นนั้น สิ่งที่สามารถทำได้เพื่อป้องกันความผิดพลาดนี้เกิดขึ้น

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

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

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



20
"ทำไมถึงเป็นไปได้ที่จะทำเช่นนั้น?" ทำไมshould'tว่าจะเป็นไปได้หรือไม่ มีเหตุผลที่ดีอย่างสมบูรณ์ในการลบเนื้อหาของลำดับชั้นไดเรกทอรีและมีชุดย่อยจำนวนมาก/ที่เกือบจะไม่ดีเท่าที่จะลบ ( /etc/เช่น) มันไม่ใช่หน้าที่ของrmการตัดสินใจว่าจะลบไดเรกทอรีใดหรือไม่สามารถลบได้ง่าย
chepner

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

3
คำถามที่นี่จริงคืออะไร? ฉันเห็นสาม: (1) ทำไมจึงเป็นไปได้? (2) จะป้องกันได้อย่างไรและ (3) ทำไมไม่ใช้การยืนยัน - พวกเขาไม่เหมือนกันคำถามแรกถามเหตุผลเหตุผลข้อที่สองสำหรับเครื่องมือ (อันที่สามเกี่ยวข้องกับวินาที แต่ก็ยังไม่เหมือนกันจริง ๆ การยืนยันไม่ใช่วิธีเดียวที่จะป้องกันบางสิ่ง)
ilkkachu

10
หากคุณไม่ได้ขอคำชี้แจงจากผู้เขียนคำถามกรุณาอย่าแสดงความคิดเห็นเลย ฉันเห็นความคิดเห็นที่แสดงความยินดีด้วยตนเองมากมายที่นี่อธิบายว่านี่เป็นความผิดของ OP อย่างไรโดยที่ไม่รู้ว่าธงมีความหมายอย่างไรหรือไม่มีข้อมูลสำรองหรืออะไรก็ตาม ฉันดีใจมากที่รู้ว่าผู้ใช้ของเราจำนวนมากฉลาดพอที่จะสำรองข้อมูลและไม่เรียกใช้คำสั่งที่ไม่เข้าใจ มันยอดเยี่ยมมากสำหรับพวกเขา แต่โดยพื้นฐานแล้วเขาก็ไม่ได้ช่วยเหลือ OP ที่คาดว่าจะได้เรียนรู้บทเรียนนี้ในตอนนี้ ดังนั้นให้หยุดการอาบแดดในความสามารถของเราเองและตอบคำถาม
terdon

คำตอบ:


16

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

ไม่สามารถเพิ่มเคสพิเศษเพื่อให้พร้อมrm /*ใช้งานได้เนื่องจากคำสั่ง rm ไม่เห็นในรูปแบบนี้ *สัญลักษณ์แทนจะถูกขยายจากเปลือกก่อนที่จะถูกส่งผ่านไปดังนั้นคำสั่งที่เกิดขึ้นจริงที่ต้องเป็นกรณีพิเศษจะเป็นสิ่งที่ชอบrm rm /bin /boot /dev /etc /home /initrd.img /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var /vmlinuzการเพิ่มรหัสเพื่อตรวจสอบกรณีนี้ (ซึ่งอาจจะแตกต่างกันใน linuxes ที่ต่างกัน) จะเป็นความท้าทายที่ซับซ้อนเช่นเดียวกับการมีแนวโน้มที่จะเกิดข้อผิดพลาดเล็กน้อย linux มาตรฐานrmมีการป้องกันเริ่มต้นจากการทำลายระบบโดยปฏิเสธที่จะลบ/โดยไม่มี--no-preserve-rootตัวเลือก

โดยค่าเริ่มต้นมีการป้องกันสามประการจากการลบระบบของคุณด้วยวิธีนี้:

  1. สิทธิ์ - ผู้ใช้ทั่วไปจะไม่สามารถลบไฟล์สำคัญได้ คุณข้ามสิ่งนี้ด้วย sudo
  2. ไดเรกทอรี - โดยค่าเริ่มต้น rm จะไม่ลบไดเรกทอรี คุณข้ามสิ่งนี้ด้วยแฟล็ก -r
  3. ไฟล์ที่ได้รับการป้องกันการเขียน - โดยค่าเริ่มต้น rm จะขอการยืนยันก่อนที่จะลบไฟล์ที่ป้องกันการเขียน (ซึ่งจะไม่หยุดความเสียหายทั้งหมด แต่อาจให้พรอมต์ก่อนที่ระบบจะไม่สามารถกู้คืนได้) คุณข้ามการป้องกันนี้ด้วยแฟล็ก -f

หากต้องการลบเนื้อหาทั้งหมดของโฟลเดอร์แทนที่จะเรียกใช้rm /path/to/folder/*ให้ทำเช่นrm -rf /path/to/folderนั้นmkdir /path/to/folderเพราะจะทำให้เกิดการ--preserve-rootป้องกันเช่นเดียวกับการลบดอทไฟล์ในโฟลเดอร์


3
"rm คาดว่าจะมีพฤติกรรมที่รู้จักกันดี" และในความเป็นจริงเป็นหนึ่งในเครื่องมือที่ระบุโดยมาตรฐาน POSIX "he * wildcard ถูกขยายโดยเชลล์ก่อนที่จะถูกส่งไปยัง rm" แน่นอนดังนั้นการเพิ่มการตรวจสอบสำหรับพารามิเตอร์ทุกประเภทซึ่งอาจเป็น symlink ไปยังไดเรกทอรีและไฟล์จริงใน/นั้นจะต้องใช้ชุดค่าผสมและข้อควรพิจารณาจำนวนมาก และกลับไปที่ความคิดของมาตรฐานการเพิ่มการตรวจสอบดังกล่าวจะทำลายพฤติกรรมที่สอดคล้องกัน
Sergiy Kolodyazhnyy

นั่นเป็นเหตุผลว่าทำไมsafe-rmเครื่องห่อหุ้มrm: วิธีนี้สามารถตรวจสอบทุกอาร์กิวเมนต์เดียว (แทนที่จะเป็นบรรทัดคำสั่งแบบสุ่มทั้งหมด) ตรวจสอบว่าไม่ใช่รายการที่อยู่ในบัญชีดำที่สามารถกำหนดค่าได้จากนั้นจึงโทรหาrmอาร์กิวเมนต์ที่ยืนยัน ไม่ซับซ้อนและไม่เกิดข้อผิดพลาด
ของหวาน

59

พบsafe-rmติดตั้ง safe-rmกัน“ ห่อหุ้มรอบrmคำสั่งเพื่อป้องกันการลบโดยไม่ตั้งใจ”:

safe-rm ป้องกันการลบไฟล์สำคัญโดยไม่ได้ตั้งใจโดยแทนที่rmด้วย wrapper ซึ่งตรวจสอบข้อโต้แย้งที่กำหนดกับบัญชีดำของไฟล์และไดเรกทอรีที่กำหนดค่าได้ซึ่งไม่ควรลบออก

ผู้ใช้ที่พยายามลบไฟล์หรือไดเรกทอรีที่ได้รับการป้องกันจะไม่สามารถทำได้และจะแสดงข้อความเตือนแทน ( man safe-rm)

หากลิงก์การติดตั้งด้านบนใช้ไม่ได้กับคุณเพียงแค่ใช้sudo apt install safe-rmแทน การกำหนดค่าเริ่มต้นมีไดเรกทอรีระบบอยู่แล้วลองทำดูrm /*:

$ rm /*
safe-rm: skipping /bin
safe-rm: skipping /boot
safe-rm: skipping /dev
safe-rm: skipping /etc
safe-rm: skipping /home
safe-rm: skipping /lib
safe-rm: skipping /proc
safe-rm: skipping /root
safe-rm: skipping /sbin
safe-rm: skipping /sys
safe-rm: skipping /usr
safe-rm: skipping /var
…

อย่างที่คุณเห็นสิ่งนี้จะป้องกันคุณจากการลบ/homeที่ฉันคิดว่าไฟล์ส่วนบุคคลของคุณถูกเก็บไว้ อย่างไรก็ตามจะไม่ป้องกันคุณจากการลบ~หรือไดเรกทอรีย่อยใด ๆ หากคุณลองลบโดยตรง ในการเพิ่ม~/precious_photosไดเรกทอรีให้เพิ่มพา ธ สัมบูรณ์ของมันด้วยไฟล์ tilde ที่แก้ไขแล้วไปยังsafe-rmไฟล์ปรับแต่งของ/etc/safe-rm.confเช่น

echo /home/dessert/precious_photos | sudo tee -a /etc/safe-rm.conf

สำหรับกรณีที่คุณเรียกใช้rmโดยไม่ต้องsudo1และ-fธงมันเป็นความคิดที่ดีที่จะเพิ่มaliasเปลือกของคุณที่ทำให้rm's -iธงเริ่มต้น วิธีนี้rmจะถามทุกไฟล์ก่อนที่จะลบ:

alias rm='rm -i'

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

alias rm='rm -I'

อันตรายทั่วไปของนามแฝงเหล่านี้คือการที่คุณได้รับนิสัยการพึ่งพาพวกเขาอย่างง่ายดายเพื่อช่วยให้คุณประหยัดซึ่งอาจย้อนกลับไม่ดีเมื่อใช้สภาพแวดล้อมที่แตกต่างกัน


1: sudoละเว้นนามแฝงเราสามารถแก้ไขได้โดยกำหนดalias sudo='sudo 'แม้ว่า


25

การยืนยันมีอยู่แล้วปัญหาอยู่-fในคำสั่งนั่นคือ--force; เมื่อผู้ใช้บังคับให้มีการดำเนินการมันควรจะรู้ว่าพวกเขากำลังทำอะไรอยู่

ตัวอย่าง:

 rm -r ./*
 rm: remove write-protected regular file './mozilla_mvaschetto0/WEBMASTER-04.DOC'? N
 rm: cannot remove './mozilla_mvaschetto0': Directory not empty
 rm: descend into write-protected directory './pulse-PKdhtXMmr18n'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-bolt.service-rZWMCb'? n
 rm: descend into write-protected directory './systemd-private-     890f5b31987b4910a579d1c49930a591-colord.service-4ZBnUf'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-fwupd.service-vAxdbk'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-minissdpd.service-9G8GrR'? 
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-ModemManager.service-s43zUX'? nn
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-rtkit-daemon.service-cfMePv'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-systemd-timesyncd.service-oXT4pr'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-upower.service-L0k9rT'? n

มันแตกต่างกับ--forceตัวเลือก: ฉันจะไม่ได้รับการยืนยันใด ๆ และไฟล์จะถูกลบ

ปัญหาคือการรู้คำสั่งและพารามิเตอร์ของมันนำทางมากขึ้นในmanคำสั่ง (เช่นถ้าพบคำสั่งในการกวดวิชา) สำหรับตัวอย่าง: ครั้งแรกที่ฉันเห็นคำสั่งที่tar xzf some.tar.gzฉันถามตัวเองว่า " xzfหมายความว่าอย่างไร? "

จากนั้นฉันอ่าน tar manpage และค้นพบมัน


ฉันไม่คิดว่าเกี่ยวข้องกับที่นี่ ณ จุดที่ rm แรกขอให้มีการป้องกันการเขียนหรือไฟล์อะไรก็ตามมันอาจลบไฟล์สำคัญทั้งหมดไปแล้ว
Jonas Schäfer

1
ดังนั้นโดยส่วนตัวฉันคิดเสมอว่า-fจำเป็นต้องลบโฟลเดอร์ ฉันยังเปิดพรอมต์เพื่อยืนยันและบ่น แต่เรียนรู้ว่า-rจำเป็นต้องใช้ ฉันคิดว่าrm -rfมันกลายเป็นบรรทัดฐานเพราะมันมีประโยชน์มากในสคริปต์ (คุณไม่ต้องการให้สคริปต์ล้มเหลวเพียงเพราะคุณกำลังพยายามลบสิ่งที่ไม่มีอยู่) ดังนั้นคุณจึงเห็นบ่อยครั้ง แต่ฉันคิดว่าเราต้องการ เพื่อให้ระมัดระวังเกี่ยวกับการใช้rm -rเป็น "ค่าเริ่มต้น" ของเราเมื่ออยู่ในเชลล์ (เข้าใจได้ว่าไม่มีสมมติฐาน "ผิดนัด" ที่คุณไม่เข้าใจโดยเฉพาะอย่างยิ่งกับ sudo แต่ผู้คนจะเป็นคนและอย่างน้อยก็ปลอดภัยกว่า)
Captain Man

2
Rmdir เป็นวิธีที่ปลอดภัยที่สุดในการลบโฟลเดอร์
AtomiX84

rmไม่ขอการยืนยันโดยค่าเริ่มต้นมันจะถามเฉพาะสำหรับไดเรกทอรีและไฟล์ที่มีการป้องกันการเขียน หากคุณรันคำสั่งนั้นบนเครื่องของคุณคุณอาจลบไฟล์ของคุณเองจำนวนมาก หากคุณต้องการrmขอการยืนยันคุณจะต้องผ่าน-iพารามิเตอร์ ตัวอย่างเช่น:rm -ir ./*
แดน

8

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


แต่มีสิ่งที่คุณสามารถทำได้เพื่อลดโอกาสของความผิดพลาดเช่นนี้:

  • นามแฝงที่rm='rm -I'จะแจ้งเตือนหากลบมากกว่า 3 สิ่ง
  • alias mv และ cp to mv -iและcp -i(กรณีการใช้งานปกติหลายกรณีสำหรับสิ่งเหล่านี้ไม่เกี่ยวข้องกับการเขียนทับไฟล์ปลายทาง)
  • นามแฝงที่sudo='sudo 'จะทำนามแฝงการขยายบนอาร์กิวเมนต์แรกที่sudo

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

คุณไม่ต้องการที่จะได้รับในนิสัยของการพึ่งพาrm -iหรือ-Iนามแฝงที่จะช่วยให้คุณประหยัด เป็นสายความปลอดภัยที่คุณหวังว่าจะไม่มีวันใช้ ถ้าจริงผมต้องการที่จะโต้ตอบเลือกซึ่งตรงกับที่จะลบหรือผมไม่แน่ใจว่าถ้า glob rm -i .../*whatever*ของฉันอาจตรงกับไฟล์พิเศษบางอย่างผมด้วยตนเองพิมพ์ (เป็นนิสัยที่ดีในกรณีที่คุณเคยอยู่ในสภาพแวดล้อมที่ไม่มีนามแฝง)

ป้องกันนิ้วอ้วนEnterโดยพิมพ์ls -d /*foo*ก่อนจากนั้นกดลูกศรขึ้นและเปลี่ยนเป็นrm -rหลังจากพิมพ์เสร็จแล้ว ดังนั้นบรรทัดคำสั่งจะไม่มีrm -rf ~/คำสั่งที่เป็นอันตรายหรือคล้ายกัน ณ จุดใด ๆ คุณเพียง "arm" โดยการเปลี่ยนlsเป็นrmcontrol-a, alt-d เพื่อไปที่จุดเริ่มต้นของบรรทัดและเพิ่ม-rหรือ-fหลังจากที่คุณพิมพ์~/some/sub/dir/ส่วนหนึ่งของคำสั่งเสร็จแล้ว

ขึ้นอยู่กับสิ่งที่คุณลบเรียกใช้งานจริงls -dก่อนหรือไม่ถ้านั่นจะไม่เพิ่มอะไรกับสิ่งที่คุณเห็นด้วยการกรอกแท็บ คุณอาจเริ่มต้นด้วยrm(โดยไม่ต้อง-rหรือ-rf) จึงเป็นเพียงการควบคุม / การควบคุมขวา (หรือ Alt + F) / พื้นที่ -r/

(คุ้นเคยกับการทุบตีปุ่มลัดแก้ไขที่มีประสิทธิภาพสำหรับการย้ายอย่างรวดเร็วเช่นลูกศรควบคุมหรือ alt + f / b เพื่อย้ายโดยใช้คำและฆ่าคำทั้งหมดด้วย alt + backspace หรือ alt + d หรือ control-w และควบคุม -u เพื่อฆ่าจุดเริ่มต้นของบรรทัดและ control- / เพื่อเลิกทำการแก้ไขถ้าคุณไปหนึ่งก้าวเกินไปและแน่นอนประวัติศาสตร์ลูกศรขึ้นที่คุณสามารถค้นหาด้วย control-r / control-s)

หลีกเลี่ยง-rfหากคุณไม่ต้องการให้เงียบเพื่อแจ้งให้ลบไฟล์แบบอ่านอย่างเดียว

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


6

คำตอบสั้น ๆ ก็คืออย่าเรียกใช้คำสั่งนั้น

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

อย่างที่สองคือคำสั่ง rm เสนอน้ำตาล syntactic ที่เป็นประโยชน์เพื่อลบไฟล์ทั้งหมดภายใต้โฟลเดอร์

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

sudo

ฉันเดาว่าคุณสามารถเพิ่มนามแฝงหรือฟังก์ชั่นเพื่อให้แน่ใจว่าสิ่งนี้จะไม่สามารถทำงานได้


4

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

หรือคุณสามารถสร้างคุก chroot และทำงานภายใน คุณยังคงต้องการการกู้คืนบางอย่างถ้ามันถูกทิ้งในถังขยะ แต่มันจะง่ายขึ้นหากระบบที่ใช้ (ปิดล้อม) ทำงานได้


นี่อาจเป็นคำตอบที่มีประสิทธิภาพที่สุดเนื่องจากสามารถป้องกันความเสียหายแม้แต่สคริปต์ของบุคคลที่สาม คุณต้องกังวลเกี่ยวกับมัลแวร์จริงเท่านั้น
PyRulez

ความคิดในมุมมองอื่น มันคุ้มค่าที่จะถามว่าทำไมคุณต้องทำการลบแบบวนซ้ำในตอนแรก บางทีสิ่งที่จำเป็นจริงๆคือสคริปต์บางตัวในการลบโปรเจ็กต์ ฯลฯ
Loren Rosen

"มันคุ้มค่าที่จะถามว่าทำไมคุณต้องทำการลบแบบเรียกซ้ำในตอนแรก" เพียงเพราะไม่มีคำสั่งในตัวไม่ได้หมายความว่าคุณยังคงทำผิดพลาดไม่ได้ สคริปต์บุคคลที่สามอาจลบไฟล์ทีละไฟล์จากบางไดเรกทอรี และมีวิธีอื่นในการบอร์กระบบที่แตะเพียงไฟล์เดียว อย่างไรก็ตามแทนที่rmด้วยความsafe-rmช่วยเหลืออย่างน้อย
PyRulez

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

... เช่นกันตัวแปรที่chrootจะใช้สิ่งที่คล้ายกับ Docker (ซึ่งฉันคิดว่าใช้จริงchrootภายใต้หน้ากาก) สำหรับไฟล์อื่นที่คุณต้องอ่านให้เมาท์ระบบไฟล์แบบอ่านอย่างเดียว
Loren Rosen

3

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

ปัจจุบันผมชอบที่จะใช้trash(โดยไม่ sudo) จากถังขยะ CLI มันทำหน้าที่เหมือน Recycle Bin จาก Windows ซึ่งคุณสามารถเรียกคืนไฟล์ที่ถูกลบโดยไม่ตั้งใจได้อย่างง่ายดาย อูบุนตูมีโฟลเดอร์ถังขยะและฟังก์ชั่นย้ายไปที่ถังขยะอยู่ในไฟล์แล้ว

แม้ว่าคุณอาจทำผิดพลาดดังนั้นอย่าลืมสำรองระบบไฟล์ทั้งหมดของคุณ

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