ฉันเปลี่ยนชื่อไฟล์ไม่กี่ไฟล์ในหนึ่งชุดสคริปต์ มีวิธียกเลิกการเปลี่ยนแปลงโดยไม่ต้องเปลี่ยนชื่อกลับหรือไม่
Linux จัดเตรียมวิธีการดั้งเดิมundo
หรือไม่?
ฉันเปลี่ยนชื่อไฟล์ไม่กี่ไฟล์ในหนึ่งชุดสคริปต์ มีวิธียกเลิกการเปลี่ยนแปลงโดยไม่ต้องเปลี่ยนชื่อกลับหรือไม่
Linux จัดเตรียมวิธีการดั้งเดิมundo
หรือไม่?
คำตอบ:
Linux (เช่นเดียวกับคนอื่น ๆ ) ไม่ได้มีคุณสมบัติการยกเลิก ปรัชญาคือถ้ามันหายไปมันก็หายไป หากเป็นสิ่งสำคัญก็ควรสำรองไว้
มีระบบไฟล์ฟิวส์ที่เก็บสำเนารุ่นเก่าโดยอัตโนมัติคือcopyfsซึ่งมีอยู่ในดิสทริบิวชันที่ดีทั้งหมด แน่นอนว่าสามารถใช้ทรัพยากรได้มากมาย
วิธีที่ดีที่สุดในการป้องกันอุบัติเหตุดังกล่าวคือการใช้ระบบควบคุมเวอร์ชัน (cvs, bazaar, darcs, git, mercurial, subversion, ... ) ใช้เวลาเรียนรู้น้อย แต่ก็จ่ายผลตอบแทนออกอย่างน่ากลัวในระยะกลางและระยะยาว
น่าเสียดายที่ไม่มี
-i
ตัวเลือกในการrm
เปิดใช้งานโดยค่าเริ่มต้น ระบบ Unix ของฉันไม่ควรจับมือฉัน
ไม่มีการเลิกทำเวทมนต์ใน Unix ใด ๆ Unix ถือว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่ สำหรับการเลิกทำการสนับสนุนให้ใช้ VCS (โปรแกรมแก้ไขข้อความของคุณอาจมีไว้ในตัวด้วย)
ระบบไฟล์ส่วนใหญ่ไม่มีความสามารถในการทำอย่างโปร่งใส
เครื่องย้อนเวลาและการกู้คืนระบบบน mac และ windows ตามลำดับเป็นเพียงระบบสำรองข้อมูล / เปลี่ยนการควบคุม
ไม่มีการเลิกทำในบรรทัดคำสั่ง แต่คุณสามารถเรียกใช้คำสั่งเป็นและrm -i
mv -i
สิ่งนี้จะแจ้งให้คุณทราบว่า "คุณแน่ใจหรือ คำถามก่อนที่พวกเขาดำเนินการคำสั่ง
นอกจากนี้ยังเป็นไปได้ที่จะเพิ่มชื่อแทนสำหรับสคริปต์เริ่มต้น (เช่น~/.bashrc
หรือ/etc/bash.bashrc
):
alias remove='rm -i'
alias move='mv -i'
แก้ไข: ตามคำแนะนำด้านล่างฉันได้ลบคำแนะนำของฉันเพื่อนามแฝงคำสั่งเริ่มต้น แต่จะแนะนำคำสั่งใหม่ทันที)
mv -i
แจ้งให้เฉพาะเมื่อมันจะเขียนทับไฟล์ (ซึ่งทำให้มันมีประโยชน์และไม่น่ารังเกียจ) ในหลอดเลือดดำเดียวกันalias cp='cp -i'
.
เหตุผลที่ระบบ Linux / Unix ไม่มีการยกเลิกการลบเกิดจากวิธีที่ระบบไฟล์ส่วนใหญ่จัดเก็บข้อมูลของพวกเขา ข้อมูลเมตาไฟล์จะถูกเก็บไว้ที่ด้านหน้าของดิสก์โดยอ้างอิงกับ inodes ในส่วนที่เหลือของดิสก์ โดยทั่วไประบบไฟล์ส่วนใหญ่จัดสรร 10 บล็อกให้กับไฟล์ในพื้นที่เมตานี้ 7 ตัวแรกอ้างถึง inodes 7 ตัวแรก อันดับที่ 8 และ 9 ไปที่รายการของ inodes (บล็อคที่ถูกเชื่อมโยงเป็นทวีคูณ) และอันดับที่ 10 ไปที่รายการของรายการ (บล็อกที่เชื่อมโยง tripply) สิ่งนี้แตกต่างจากระบบไฟล์ไปยังระบบไฟล์ (ext4, jfs, xfs, ฯลฯ ) แต่รายการบล็อกเหล่านี้มักจะสามารถระบุขนาดไฟล์ได้ทุกที่ตั้งแต่ 2GB ถึงหลาย TB
แต่เนื่องจากข้อมูลทั้งหมดนี้ถูกเก็บไว้ที่ด้านหน้าของดิสก์เมื่อไฟล์ถูกลบจึงไม่มีวิธีการอ้างอิง inodes บนดิสก์กับเมตาดาต้าใดที่พวกเขาใช้อยู่ ในทางตรงกันข้าม FAT32 และ NTFS จะเก็บข้อมูลส่วนหัวจริง ๆ ด้วยตัวไฟล์เองทำให้ง่ายต่อการระบุไฟล์ที่ชุดของบล็อกที่ใช้เป็นของ (ตราบเท่าที่ยังไม่มีการเรียกคืนพื้นที่โดยไฟล์ใหม่ ๆ ) ในการทำงานของ Linux เมื่อคุณลบบางสิ่งมันเกือบจะเป็นสิ่งแรกที่ข้อมูลใหม่จะถูกเขียนทับได้ทันทีเพื่อประสิทธิภาพ
หากคุณต้องการคุณลักษณะการเลิกทำจริงๆให้ใช้การควบคุมแหล่งที่มา การโค่นล้มใช้งานได้ดีกับเครื่องผู้ใช้เพียงเครื่องเดียว ฉันใช้มันเพื่อควบคุมไฟล์ส่วนบุคคลทั้งหมดของฉันในระบบที่บ้านของฉัน ดูเหมือนว่า overkill จนเกิดความเสียหายสคริปต์อันธพาลหรือคำสั่งพิมพ์ผิดบรรทัด
rm -r .
แม้ว่า ;)
rm -r project.git
จริงผมไม่ได้ว่าเมื่อมีคอมไพล์ที่ฉันให้พื้นที่เก็บข้อมูลในท้องถิ่นและตั้งใจ โชคดีถ้าคุณเก็บรุ่นอื่นบนเซิร์ฟเวอร์ระยะไกลที่น่าจะเกิดขึ้น
rm -r .
จริง ฉันโง่จริงๆ
สิ่งหนึ่งที่ฉันต้องการเพิ่มลงใน. bashrc ของฉันคือฟังก์ชันคัดลอกและลบ สิ่งที่ต้องการ:
cprm(){
cp -p $1 ~/deleted/$1
rm $1
}
แต่คุณจะต้องติดนิสัยในการพิมพ์ cprm ไม่ใช่ rm
เห็นได้ชัดว่าคุณจะต้องอยู่ด้านบนของพื้นที่ที่ถูกลบหากคุณมีพื้นที่ จำกัด
"$1"
ถ้าคุณได้รับข้อความขวา:
GitFS เป็นระบบไฟล์ที่ใช้ฟิวส์ซึ่งจะคำนวณdiff
s ระหว่างเวอร์ชันโดยอัตโนมัติและอนุญาตให้เรียกคืน / เรียกดูไฟล์เหล่านั้น
หน้าเว็บ: https://www.presslabs.com/gitfs