ไฟล์จะไปที่ไหนเมื่อออกคำสั่ง rm?


98

เมื่อเร็ว ๆ นี้ฉันบังเอิญทำrmกับไฟล์หนึ่งชุดและทำให้ฉันคิดว่าไฟล์เหล่านี้จะจบลงตรงไหน?

กล่าวคือเมื่อทำงานกับ GUI ไฟล์ที่ถูกลบไปที่ถังขยะ มีอะไรเทียบเท่าrmและมีวิธีการยกเลิกrmคำสั่งหรือไม่


3
ที่นี่ซ้ำกันเป็นไปได้ ยกเลิกบนลินุกซ์ แต่ฉันไม่แน่ใจจริงๆว่าไฟล์จะไปที่ไหนแตกต่างจากที่อื่นมาก
xenoterracide

คำตอบ:


120

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

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

ไฟล์มักจะถูกย้ายไปที่อื่นเช่น~/.local/share/Trash/files/เมื่ออยู่ในถังขยะ rmคำสั่งบน Unix / Linux ก็เปรียบได้กับdelใน DOS / Windows ที่จะลบและไม่ได้ย้ายไฟล์ไปยังถังรีไซเคิล อีกสิ่งที่ควรตระหนักคือการย้ายไฟล์ข้ามระบบไฟล์เช่นไปยังดิสก์ USB ของคุณจากฮาร์ดไดรฟ์คือ 1) สำเนาของข้อมูลไฟล์ตามด้วย 2) ยกเลิกการเชื่อมโยงไฟล์ดั้งเดิม คุณไม่ต้องการให้ถังขยะเต็มไปด้วยสำเนาพิเศษเหล่านี้


4
ขอบคุณมากสำหรับคำอธิบายที่ชัดเจน ฉันไม่สนใจการใช้ CLI ฉันแค่ต้องระวังให้มากขึ้นเมื่อใช้ wildcard :)
boehj

16
ฉันจะระมัดระวังด้วยการใช้สิ่งที่ต้องการlibtrashเปลี่ยนพฤติกรรมของ rm มีสคริปต์จำนวนมากที่ใช้rmล้างไฟล์และคุณไม่ต้องการให้ไฟล์เหล่านั้นแสดงในถังขยะ ฉันแนะนำให้ใช้คำสั่งเฉพาะเช่นtrashจากtrash-cliแพ็คเกจ @pedro ฉันควรเพิ่มว่าฉันเคยสร้างไฟล์ * ในไดเรกทอรีบ้านของฉัน ฉันอ้างถึงโดยไม่ตั้งใจ * เมื่อฉันไม่ควรสร้างมันขึ้นมาดังนั้นฉันจึงตัดสินใจลบมันด้วย rm * ตามปกติ เมื่อฉันรู้ว่าสิ่งที่ฉันทำฉันฆ่าคำสั่งอย่างรวดเร็ว แต่มันได้ลบไฟล์จำนวนหนึ่งในโฮมไดเร็กตอรี่ของฉันไปแล้ว.
penguin359

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

3
ฉันคิดว่าข้อความนำกลับบ้านที่นี่คือฉันต้องหยุด CLI'ing ในชั่วโมงและให้ความสนใจที่ดีขึ้น
boehj

2
พร้อมสายเดียวกับสิ่งที่ @Johan กล่าวว่า RedHat ใช้ในการ (ยังไม่?) ตั้งนามแฝงสำหรับคำสั่งเช่นcpและmvเพื่อcp -iและmv -iเมื่อทำงานเป็นราก สิ่งนี้จะเปลี่ยนพฤติกรรมเริ่มต้นดังนั้นคำสั่งเหล่านั้นจะถามก่อนที่จะเขียนทับไฟล์ที่มีอยู่ sysadmins บางตัวแนะนำให้ลบนามแฝงเหล่านั้นโดยเฉพาะดังนั้นคุณจึงไม่ได้คาดหวังว่าพฤติกรรมที่อาจทำให้เสียชีวิตเมื่ออยู่ในระบบอื่นที่ตามหลังพฤติกรรมเริ่มต้น
penguin359

11

สำหรับ ext3 / ext4 คุณสามารถลองกู้คืนไฟล์โดยใช้เครื่องมือเช่นextundeleteหรือext3grepหรือแม้กระทั่งไปยุ่งกับโครงสร้างระดับต่ำด้วยตนเอง (ไม่ใช่สำหรับคนที่ใจอ่อน); สำหรับระบบไฟล์จำนวนมากคุณสามารถลองค้นหาบล็อกที่ยังไม่ได้เขียนทับด้วยรูปแบบบางอย่าง (เช่นmagicrescueสามารถค้นหาส่วนหัว JPEG ได้ในบางกรณี) โปรดทราบว่าสิ่งเหล่านี้กำลังใช้ฮิวริสติกเพื่อกู้คืนไฟล์จากเมตาดาต้าที่ถูกทิ้งไว้ดังนั้นการกู้คืนแบบเต็มจึงไม่รับประกันว่าจะเป็นการเดิมพันที่มีโอกาสครั้งสุดท้ายมากกว่า ยังไม่ได้เขียนทับ)

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


2
สำหรับข้อมูลข้อความที่มีมูลค่าสูงคุณสามารถใช้เครื่องมือทั่วไปที่มีประสิทธิภาพ (แม้แต่ emacs หรือ perl) เพื่อดู "อุปกรณ์ดิบ" สำหรับดิสก์ที่มีไฟล์ที่ถูกลบออกและค้นหาสตริงที่รู้จัก ฉันกู้คืนเอกสาร Word สำหรับคนด้วยวิธีนี้แล้ว พวกเขาสูญเสียการมาร์กอัป แต่สามารถกู้คืนข้อความส่วนใหญ่ได้ เห็นได้ชัดว่านี่คือการกู้คืนความเสียหายไม่ใช่ "เลิกทำ"
alexis

ลิงก์ 'ด้วยตนเอง' ที่เหมาะสม: web.archive.org/web/20131221183925/http://…
sjas

8

เกี่ยวกับการเลิกทำผลกระทบของrm:

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

สิ่งนี้ถือว่าคุณมีบางสิ่งที่ไม่เหมือนใครในการมองหาว่าคุณมีrootในระบบและฉันเดาว่าการรวมกันอะไรก็ตามที่มีบล็อกระบบไฟล์มากกว่าหนึ่งบล็อก (อาจเป็น 4k) อาจจบลงด้วยความลำบากถ้าระบบไฟล์ไม่จัดการ เพื่อวางไฟล์ในบล็อกที่ต่อเนื่องกัน

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


มันซับซ้อนกว่าเล็กน้อยเช่นโดย ext3 zeroing out ตัวชี้บล็อกใน inode แต่ใช่ค้นหาไฟล์โดยตรงอาจใช้งานได้ - ถ้ามันเล็กพอหรือจัดสรรในบล็อกที่ต่อเนื่องกัน บางครั้งเรียกว่าการแกะสลักไฟล์และมีเครื่องมือเช่นmagicrescueนั้นพยายามค้นหาภาพหรือเสียงด้วยรูปแบบที่แตกต่าง
Piskvor

6

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

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

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

รายละเอียดเพิ่มเติม: โครงสร้าง Inode , วิธีการทำงานของการลบไฟล์


... เว้นเสียแต่ว่าไฟล์นั้นจะถูกทำเครื่องหมายอย่างชัดเจนด้วยchattr +sแอตทริบิวต์ ("shred") มันบอกระบบไฟล์ที่จะเขียนทับไฟล์นี้โดยเฉพาะกับศูนย์เมื่อลบ ระบบไฟล์บางระบบเท่านั้นที่จะรองรับแอตทริบิวต์นั้น
telcoM

3

ในระบบไฟล์สไตล์ Unix (รวมถึงบน Linux) ไฟล์ไม่ได้ "ที่" จริงๆ ระบบจะใช้ฮาร์ดลิงก์เพื่อชี้ให้เห็นถึงจำนวนข้อมูลจำนวนมหาศาล ดังนั้นเมื่อคุณสร้างไฟล์คุณจะต้องสร้างฮาร์ดลิงก์แรกขึ้นมาด้วย: ไฟล์ที่อยู่ในตำแหน่งที่คุณ "บันทึก" ไฟล์ไว้ หากคุณสร้างฮาร์ดลิงก์มากขึ้นเท่าที่ระบบจะทราบไฟล์นั้นมีอยู่จริงในหลาย ๆ ที่พร้อมกัน

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

ดังนั้นไฟล์ที่คุณลบจะไปที่ไหน หากยังคงมีฮาร์ดลิงก์ไฟล์เหล่านั้นจะอยู่ในทุกที่ของฮาร์ดลิงก์ที่คุณไม่ได้ลบ หากไม่มีฮาร์ดลิงก์เหลืออยู่ไฟล์จะหายไป


0

ดูที่ ~ / .snapshot ด้วยหากไฟล์นั้นถูกลบไปเมื่อเร็ว ๆ นี้


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