เลิกทำคำสั่งถังขยะ Linux


24

เราสามารถเลิกทำการดำเนินการในเทอร์มินัลตัวอย่างเช่นการลบไฟล์ผ่านrm?

โซลูชั่นที่ได้รับ:

  1. aliasing
  2. ยกเลิกการลบสาธารณูปโภค
  3. อรรถประโยชน์การสำรองข้อมูล
  4. LibTrash
  5. การกำหนดเวอร์ชัน (FUSE)

1
เมื่อวันที่rm: มันเป็นการยกเลิกการลิงก์inodeไฟล์จากมัน คำถาม: "ไฟล์จะไปที่ไหนเมื่อrmออกคำสั่ง" -> unix.stackexchange.com/questions/10883/…อาจเป็นการอ่านที่ดีสำหรับคุณ
erch

คำตอบ:


62

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

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

  1. alias rmi = 'rm -i'

    หากคุณใช้rmiคุณจะได้รับแจ้งให้ยืนยันการลบในอนาคต พยายามหลีกเลี่ยงการพัฒนานิสัยในการกดyทันทีหลังจากที่คุณออกrmiคำสั่งเนื่องจากจะทำให้วัตถุประสงค์ล้มเหลว

  2. คุณสามารถย้ายไฟล์ที่ถูกลบโดยtrshคำสั่งในเทอร์มินัลไปยังถังรีไซเคิลของคุณ (บน KDE และ Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    หากคุณใช้trshคุณจะมีขีด จำกัด "ยกเลิกการลบ" ความสามารถ ระวังให้ดี

    trsh dir1/file1 dir2/file1
    

    อาจยังทำให้ข้อมูลสูญหายไม่สามารถกู้คืนได้


3
+1 เพื่อคำตอบที่ดีกว่า Mine =)
The How-To Geek

9
นามแฝงที่สองนั้นฉลาดมาก +1
LiraNuna

3
ถังขยะ () {mv $ @ ~ / .Trash; } # bash function ไม่ใช่ alias การเปลี่ยนพฤติกรรมที่คาดหวังของ rm เป็นความคิดที่ไม่ดี IMHO
ริชาร์ดฮอสกิ้นส์

20
ความเสี่ยงที่มี aliasing rmไปrm -iคือการที่คุณจะได้รับใช้สุทธิความปลอดภัยที่จะช่วยให้คุณ แล้วคุณไปลงเครื่องอื่นซึ่งไม่ได้มีนามแฝงว่า ...
Dentrasi

3
สำหรับเหตุผลที่ริชาร์ดและ Dentrasi กล่าวถึงฉันชอบที่จะสร้างฟังก์ชั่นที่กำหนดเองหรือนามแฝง->rmi rm -iมันเป็นความผิดพลาดจริง ๆ ที่จะเข้ามาในโปรแกรมที่มีอยู่โดยการใช้นามแฝง
Telemachus

6

ไม่มีถังรีไซเคิลสำหรับบรรทัดคำสั่ง

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


ใช่มีถังขยะสำหรับบรรทัดคำสั่ง ดูถังขยะ -ci ในคำตอบอื่น
Sparhawk

Trash-cli นั้นดีมาก :) และใช้ Trashlib ดีกว่าการย้ายไฟล์
m3nda

5

คุณสามารถใช้ถังขยะถ้าคุณใช้ KDE เมื่อคุณเรียกใช้ gui นี่คือโปรแกรมอรรถประโยชน์บรรทัดคำสั่งสำหรับการลบ / กู้คืนโดยใช้เครื่องมืออำนวยความสะดวกถังขยะ KDE


1
trash-cli ยังใช้งานได้กับถังขยะ GNOME และได้รับการออกแบบมาเพื่อให้ใช้งานร่วมกับตัวเลือก rm ได้ (สำหรับนามแฝง)
Andrea Francia

อย่าลืมทำalias rm=trashเช่นนั้นสกรูบรรทัดคำสั่งทั่วไปของคุณมาพร้อมกับปุ่มเลิกทำ
Ryan C. Thompson

ฉันคิดว่าalias rm=trashอาจเป็นอันตรายหากมีโอกาสคุณจะใช้ระบบของคนอื่นในวันหนึ่งและลืม (หรือ ssh) ปลอดภัยมากเพียงแค่รับใช้เขียนแทนtrash rm
Sparhawk

4

คุณสามารถสร้างrmนามแฝงสำหรับtrashคำสั่ง (คุณจะต้องติดตั้งtrashก่อน) เพิ่มลงใน~/.bashrc:

alias rm='trash'

สิ่งนี้ดีกว่าalias rm='mv --target-directory=$HOME/.Trash'เนื่องจาก ~ / .Trash ไม่ใช่โฟลเดอร์ถังขยะสำหรับ gnome IMHO จะดีกว่าถ้าจะให้trashคิดว่าโฟลเดอร์ถังขยะอยู่ที่ใด

btw ฉันจะได้โพสต์สิ่งนี้ในความคิดเห็น แต่ฉันมีตัวแทนไม่เพียงพอ


5
+1 สำหรับ "ตั้งแต่ ~ / .Trash ไม่ใช่โฟลเดอร์ถังขยะสำหรับ gnome" อย่างไรก็ตาม rm ไม่ควรใช้นามแฝงเป็นถังขยะอย่างใดอย่างหนึ่ง คุณควรใช้ถังขยะแทน RM ถ้านั่นคือสิ่งที่คุณต้องการ
nagul

จริง แต่สำหรับบางคนนิสัยเก่าตายยาก
Alvin Row

'rmtrash' เป็นอีกทางเลือกหนึ่ง
Itachi

3

โซลูชันทางเทคนิคเพิ่มเติมอีกสองรายการยังไม่มีชื่อ:

  1. libtrash : ไลบรารีแบบไดนามิกที่สามารถโหลดไว้ในเชลล์ของคุณซึ่งสกัดกั้นการลบ / ลบ syscalls และย้ายไฟล์ไปยังโฟลเดอร์ถังขยะแทน (คล้ายกับนามแฝง แต่ทำงานกับแอปพลิเคชันใด ๆ เมื่อโหลดไว้ล่วงหน้า)
  2. ระบบไฟล์เวอร์ชัน หากคุณลบ (หรือแก้ไขหรือคัดลอกหรือ ... ) ไฟล์คุณสามารถเปลี่ยนกลับเป็นสถานะเดิมได้ ซึ่งอาจทำได้ด้วยFUSEระบบแฟ้มและเป็นหนึ่งของระบบไฟล์เวอร์ชัน

3

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

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


2

ตัวเลือกที่ 1: ดูยกเลิกการลบลินุกซ์ไฟล์จากระบบไฟล์ ext2 หน้านี้ชี้ไปที่โปรแกรมที่เขียนโดย Sebastian Hetze ของ บริษัท LunetIX ซึ่งยกเลิกการลบไฟล์จากระบบไฟล์ ext2 ตัวอย่างการใช้งาน:

# undelete -d /dev/hdc3 -a 10

คำเตือน:

  • เว็บไซต์เดิมหายไป ลิงค์ด้านบนคือที่เก็บถาวรอินเทอร์เน็ต
  • ไซต์อยู่ในการผสมผสานระหว่างภาษาอังกฤษและภาษาเยอรมัน
  • เครื่องมือดังกล่าวได้รับการออกแบบมาเป็นพิเศษสำหรับระบบไฟล์ ext2 ไม่น่าจะทำงานกับระบบไฟล์ประเภทอื่น ๆ ได้ โดยเฉพาะอย่างยิ่งไม่ได้คนอื่นที่ไม่ใช่ต่อN

ตัวเลือกที่ 2: ฉันมี rsnapshot (rsync) กำลังทำงานอยู่บนเครื่องของฉันซึ่งทำสแน็ปช็อตรายชั่วโมงของโฟลเดอร์ที่ฉันเลือก มันเพิ่มขึ้นทุก ๆ ชั่วโมง 2 ชั่วโมงหรืออะไรก็ตามที่คุณบอกให้ CRON ทำ หลังจากครบทั้งวันมันจะรีไซเคิลภาพรวมเหล่านี้เป็นภาพรวมรายวันหนึ่งรายการและหลังจาก 7 วันในหนึ่งสัปดาห์ ทำให้ฉันสามารถย้อนเวลากลับไปได้ประมาณหนึ่งเดือนหรือมากกว่านั้นทุกชั่วโมง! มันค่อนข้างดีกับพื้นที่ดิสก์เพราะมันสร้างลิงค์สัญลักษณ์ไปยังไฟล์ที่ไม่เคยเปลี่ยน ...


เพียงเพื่อชี้แจง # 1 เฉพาะระบบไฟล์ ext2 มันจะไม่ทำงานบนระบบไฟล์ ext3
nagul


1

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

ดังนั้นคุณติดอยู่กับสามตัวเลือก:

  1. ทำการสำรองข้อมูลอย่างสม่ำเสมอเช่นด้วยคำสั่งเช่น:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. ใช้เครื่องมือควบคุมเวอร์ชันเช่นgitสำหรับการทำงานทั้งหมดของคุณ ในขณะนี้จะไม่ป้องกันกับบ้าrm -rที่ฆ่าพื้นที่เก็บข้อมูลก็จะป้องกันปัญหาปกติที่คุณจะใช้ไม่ได้ดิบgit rmrm

  3. โปรดใช้ความระมัดระวังเป็นพิเศษและไม่ไว้วางใจมากเกินไปในrm -i, trash-cliและเพื่อน ๆ เป็นข้อมูลส่วนใหญ่ที่คุณจะสูญเสียในเปลือกที่คุณจะไม่สูญเสียจากอุบัติเหตุrmแต่ท่อผิด, ไฟล์ที่ส่งออกที่พิมพ์ผิด, ผิดmvและสิ่งคือสิ่งที่จะเขียนทับ ข้อมูลของคุณไม่เพียง แต่ลบ

ทำทั้งสามอย่างเพื่อความปลอดภัยสูงสุด


มันค่อนข้างเฮฮาที่จะเรียกทันสมัย ​​ext2 ระบบไฟล์ที่ใหม่กว่าใช้รูปแบบบนดิสก์ที่ซับซ้อนกว่า ext2 / 3 และต้องยกเลิกการค้นหาตำแหน่งที่ง่ายต่อการหาซึ่งคุณอาจพบไฟล์ที่จะลบออก พวกเขากำลังออกแบบมาสำหรับผู้ที่สำรองข้อมูลของสิ่งที่พวกเขาสนใจ BTW ฉันมักจะใช้ mv และ cp -i เนื่องจากฉันไม่ต้องการปิดบังอะไร ปกติฉันพิมพ์ \ rm เพราะฉันได้ใช้นามแฝงเป็น rm -i ด้วย แต่ฉันไม่ต้องการตอบคำถาม
Peter Cordes

0

ตรวจสอบเรื่องนี้ ... MIGH เป็นประโยชน์http://artmees.github.io/rm/

สมมติว่าคุณทำ

rm very_important_file

จากสถานี การกู้คืนไฟล์นี้เป็นกระบวนการที่น่าเบื่อและไม่ประสบความสำเร็จเสมอไป

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

rm very_important_file
mv very_important_file ~/.Trash/

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

นี่เป็นวิธีนามแฝงที่ละเอียดอ่อน แต่ไม่เสียคุณลักษณะใด ๆ


1
มันต้องการจะดีถ้าคุณสามารถเพิ่มคำอธิบายบางอย่างเป็นสิ่งนี้ไม่และวิธีที่จะนำไปใช้กับคำถามที่อาจจะเพิ่มตัวอย่าง ฯลฯ
slhck


0

สำหรับฉัน (opensuse leap 42.2, pendrive ของ NTFS) PhotoRec - โดยtestdiskผู้สร้าง - ใช้งานได้ :) อย่างไรก็ตามมันไม่ได้กู้คืนชื่อไฟล์

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

ฉันติดตั้งโดยใช้แหล่งเก็บข้อมูลมาตรฐานใน openSUSE

คำแนะนำ


1
ยินดีต้อนรับสู่ Super User! โปรดอ่านวิธีการแนะนำซอฟต์แวร์สำหรับข้อมูลขั้นต่ำที่จำเป็นและคำแนะนำเกี่ยวกับวิธีการแนะนำซอฟต์แวร์ใน Super User เพื่อให้คำตอบของคุณมีประโยชน์แม้ว่าลิงก์ที่ให้ไว้จะมีการแบ่งรายละเอียดเหล่านี้ควรได้รับการแก้ไขในคำตอบของคุณ
ฉันพูดว่า Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.