เมื่อเร็ว ๆ นี้ฉันบังเอิญทำrm
กับไฟล์หนึ่งชุดและทำให้ฉันคิดว่าไฟล์เหล่านี้จะจบลงตรงไหน?
กล่าวคือเมื่อทำงานกับ GUI ไฟล์ที่ถูกลบไปที่ถังขยะ มีอะไรเทียบเท่าrm
และมีวิธีการยกเลิกrm
คำสั่งหรือไม่
เมื่อเร็ว ๆ นี้ฉันบังเอิญทำrm
กับไฟล์หนึ่งชุดและทำให้ฉันคิดว่าไฟล์เหล่านี้จะจบลงตรงไหน?
กล่าวคือเมื่อทำงานกับ GUI ไฟล์ที่ถูกลบไปที่ถังขยะ มีอะไรเทียบเท่าrm
และมีวิธีการยกเลิกrm
คำสั่งหรือไม่
คำตอบ:
หายไปไหนหายไปไหน โดยเฉพาะอย่างยิ่งไฟล์จะถูกยกเลิกการเชื่อมโยง ข้อมูลยังคงอยู่ที่นั่นบนดิสก์ แต่ลิงก์ไปยังข้อมูลนั้นจะถูกลบออก เคยเป็นไปได้ที่จะดึงข้อมูล แต่ทุกวันนี้ข้อมูลเมตาถูกล้างและไม่มีอะไรที่กู้คืนได้
ไม่มีถังขยะสำหรับrm
และไม่ควรมี หากคุณต้องการถังขยะคุณควรใช้อินเทอร์เฟซระดับสูงกว่า มียูทิลิตีบรรทัดคำสั่งในtrash-cli
Ubuntu แต่ตัวจัดการไฟล์ GUI ส่วนใหญ่เช่น Nautilus หรือ Dolphin ใช้เพื่อจัดทำถังขยะมาตรฐาน ถังขยะสามารถเป็นมาตรฐานได้ ไฟล์ที่อยู่ในถังขยะใน Dolphin จะปรากฏในถังขยะจาก Nautilus
ไฟล์มักจะถูกย้ายไปที่อื่นเช่น~/.local/share/Trash/files/
เมื่ออยู่ในถังขยะ rm
คำสั่งบน Unix / Linux ก็เปรียบได้กับdel
ใน DOS / Windows ที่จะลบและไม่ได้ย้ายไฟล์ไปยังถังรีไซเคิล อีกสิ่งที่ควรตระหนักคือการย้ายไฟล์ข้ามระบบไฟล์เช่นไปยังดิสก์ USB ของคุณจากฮาร์ดไดรฟ์คือ 1) สำเนาของข้อมูลไฟล์ตามด้วย 2) ยกเลิกการเชื่อมโยงไฟล์ดั้งเดิม คุณไม่ต้องการให้ถังขยะเต็มไปด้วยสำเนาพิเศษเหล่านี้
libtrash
เปลี่ยนพฤติกรรมของ rm มีสคริปต์จำนวนมากที่ใช้rm
ล้างไฟล์และคุณไม่ต้องการให้ไฟล์เหล่านั้นแสดงในถังขยะ ฉันแนะนำให้ใช้คำสั่งเฉพาะเช่นtrash
จากtrash-cli
แพ็คเกจ @pedro ฉันควรเพิ่มว่าฉันเคยสร้างไฟล์ * ในไดเรกทอรีบ้านของฉัน ฉันอ้างถึงโดยไม่ตั้งใจ * เมื่อฉันไม่ควรสร้างมันขึ้นมาดังนั้นฉันจึงตัดสินใจลบมันด้วย rm * ตามปกติ เมื่อฉันรู้ว่าสิ่งที่ฉันทำฉันฆ่าคำสั่งอย่างรวดเร็ว แต่มันได้ลบไฟล์จำนวนหนึ่งในโฮมไดเร็กตอรี่ของฉันไปแล้ว.
cp
และmv
เพื่อcp -i
และmv -i
เมื่อทำงานเป็นราก สิ่งนี้จะเปลี่ยนพฤติกรรมเริ่มต้นดังนั้นคำสั่งเหล่านั้นจะถามก่อนที่จะเขียนทับไฟล์ที่มีอยู่ sysadmins บางตัวแนะนำให้ลบนามแฝงเหล่านั้นโดยเฉพาะดังนั้นคุณจึงไม่ได้คาดหวังว่าพฤติกรรมที่อาจทำให้เสียชีวิตเมื่ออยู่ในระบบอื่นที่ตามหลังพฤติกรรมเริ่มต้น
สำหรับ ext3 / ext4 คุณสามารถลองกู้คืนไฟล์โดยใช้เครื่องมือเช่นextundeleteหรือext3grepหรือแม้กระทั่งไปยุ่งกับโครงสร้างระดับต่ำด้วยตนเอง (ไม่ใช่สำหรับคนที่ใจอ่อน); สำหรับระบบไฟล์จำนวนมากคุณสามารถลองค้นหาบล็อกที่ยังไม่ได้เขียนทับด้วยรูปแบบบางอย่าง (เช่นmagicrescueสามารถค้นหาส่วนหัว JPEG ได้ในบางกรณี) โปรดทราบว่าสิ่งเหล่านี้กำลังใช้ฮิวริสติกเพื่อกู้คืนไฟล์จากเมตาดาต้าที่ถูกทิ้งไว้ดังนั้นการกู้คืนแบบเต็มจึงไม่รับประกันว่าจะเป็นการเดิมพันที่มีโอกาสครั้งสุดท้ายมากกว่า ยังไม่ได้เขียนทับ)
ดังนั้นสำหรับเจตนาและวัตถุประสงค์ทั้งหมดไฟล์ที่ถูกลบrm
ไปจะหมดไป - คุณสามารถลองใช้ความพิศวงเช่นเดียวกับที่เครื่องมือเหล่านี้มีให้ แต่ไม่ได้ขึ้นอยู่กับมัน: นี่คือเครื่องมือที่จะลองเมื่อทุกอย่างล้มเหลว ขุดข้อมูลสำรองล่าสุดของคุณให้ดีขึ้น (คุณได้ทำการสำรองข้อมูลใช่ไหมอยู่แล้วและเรียนรู้ ... )
เกี่ยวกับการเลิกทำผลกระทบของrm
:
เนื่องจากระบบไฟล์ส่วนใหญ่จะลบการอ้างอิงไปยังข้อมูลและระบุว่าบล็อกนั้นว่างคุณสามารถลองค้นหาข้อมูลของคุณได้โดยตรงจากอุปกรณ์ โชคดีที่บล็อกที่มีไฟล์ของคุณไม่ได้ถูกอ้างสิทธิ์เพื่อสิ่งอื่น
สิ่งนี้ถือว่าคุณมีบางสิ่งที่ไม่เหมือนใครในการมองหาว่าคุณมีroot
ในระบบและฉันเดาว่าการรวมกันอะไรก็ตามที่มีบล็อกระบบไฟล์มากกว่าหนึ่งบล็อก (อาจเป็น 4k) อาจจบลงด้วยความลำบากถ้าระบบไฟล์ไม่จัดการ เพื่อวางไฟล์ในบล็อกที่ต่อเนื่องกัน
ฉันกู้คืนเนื้อหาของไฟล์ข้อความธรรมดาสองไฟล์ได้สำเร็จโดยการรันสตริงบนอุปกรณ์ที่ระบบไฟล์เปิดอยู่และใช้การgrep
ค้นหาบางสิ่งจากไฟล์เหล่านั้นที่มีบริบทขนาดใหญ่ ( -C
) (และหลังจากเหตุการณ์นั้นไม่นาน บริษัท ก็ตัดสินใจใช้ทรัพยากรบางอย่างในการใช้การสำรองข้อมูล)
magicrescue
นั้นพยายามค้นหาภาพหรือเสียงด้วยรูปแบบที่แตกต่าง
เมื่อใดก็ตามที่คุณลบไฟล์โดยใช้rm
คำสั่งข้อมูลของไฟล์จะไม่ถูกลบ กล่าวอีกนัยหนึ่งบล็อกในระบบไฟล์ที่มีข้อมูลยังคงอยู่ที่นั่น
สิ่งที่เกิดขึ้นคือเมื่อคุณรันrm
คำสั่งระบบจะทำเครื่องหมาย inode ที่เป็นของไฟล์นั้นว่าไม่ได้ใช้งานและบล็อกข้อมูลของไฟล์นั้นก็ยังไม่ได้ใช้เช่นกัน (แต่ไม่ได้เช็ดออก) อย่างไรก็ตามext3
ค่าศูนย์ส่วนใหญ่ใน inode เมื่อไฟล์ถูกลบ
การทำเครื่องหมายปกติที่ไม่ได้ใช้จะทำเพื่อความเร็ว ... ไม่เช่นนั้นการลบจะใช้เวลามากกว่า นั่นเป็นเหตุผลที่คุณอาจสังเกตเห็นว่าการลบแม้ไฟล์ขนาดใหญ่จะเร็วกว่า (คุณสามารถกู้คืนข้อมูลได้หากบล็อกข้อมูลนั้นไม่ได้ถูกเขียนทับ)
รายละเอียดเพิ่มเติม: โครงสร้าง Inode , วิธีการทำงานของการลบไฟล์
chattr +s
แอตทริบิวต์ ("shred") มันบอกระบบไฟล์ที่จะเขียนทับไฟล์นี้โดยเฉพาะกับศูนย์เมื่อลบ ระบบไฟล์บางระบบเท่านั้นที่จะรองรับแอตทริบิวต์นั้น
ในระบบไฟล์สไตล์ Unix (รวมถึงบน Linux) ไฟล์ไม่ได้ "ที่" จริงๆ ระบบจะใช้ฮาร์ดลิงก์เพื่อชี้ให้เห็นถึงจำนวนข้อมูลจำนวนมหาศาล ดังนั้นเมื่อคุณสร้างไฟล์คุณจะต้องสร้างฮาร์ดลิงก์แรกขึ้นมาด้วย: ไฟล์ที่อยู่ในตำแหน่งที่คุณ "บันทึก" ไฟล์ไว้ หากคุณสร้างฮาร์ดลิงก์มากขึ้นเท่าที่ระบบจะทราบไฟล์นั้นมีอยู่จริงในหลาย ๆ ที่พร้อมกัน
เมื่อคุณ "ลบ" ไฟล์โดยปกติแล้วคุณจะลบฮาร์ดลิงก์ที่มีอยู่ในสถานที่ที่คุณระบุเท่านั้น unlink()
นี่คือเหตุผลที่เรียกระบบเพื่อลบไฟล์ที่เรียกว่า ระบบจะไม่ลบไฟล์จริง ๆ จนกว่าจะไม่มีฮาร์ดลิงก์ทิ้งไว้ แต่เมื่อ hardlink สุดท้ายถูกทำลายดังนั้นข้อมูลก็คือ
ดังนั้นไฟล์ที่คุณลบจะไปที่ไหน หากยังคงมีฮาร์ดลิงก์ไฟล์เหล่านั้นจะอยู่ในทุกที่ของฮาร์ดลิงก์ที่คุณไม่ได้ลบ หากไม่มีฮาร์ดลิงก์เหลืออยู่ไฟล์จะหายไป
ดูที่ ~ / .snapshot ด้วยหากไฟล์นั้นถูกลบไปเมื่อเร็ว ๆ นี้