Apakah kita memiliki undo di Linux?


Jawaban:


53

Linux (seperti halnya perangkat lain) tidak secara asli menyediakan fitur undo. Filsafatnya adalah jika hilang, hilang. Jika itu penting, itu seharusnya didukung.

Ada sistem file sekering yang secara otomatis menyimpan salinan versi lama: copyfs , tersedia di semua distribusi yang baik. Tentu saja, itu bisa menggunakan banyak sumber daya.

Cara terbaik untuk melindungi dari kecelakaan semacam itu adalah dengan menggunakan sistem kontrol versi (cvs, bazaar, darcs, git, lincah, subversi, ...). Butuh sedikit waktu untuk belajar, tetapi terbayar luar biasa dalam jangka menengah dan panjang.


1
alternatif yang baik mungkin gitfs, yang berada di bawah devlopment
test30

1
Nah jika Anda secara tidak sengaja menghapus atau menimpa file yang belum Anda stage atau komit, maka CVS pun tidak membantu
xdevs23

14

Sayangnya tidak ada.


19
Saya tidak tahu bahwa saya menganggap ini malang ... Butuh beberapa sumber daya untuk menerapkan pembatalan. Saya bahkan tidak suka -iopsi rmaktif diaktifkan secara default. Sistem Unix saya seharusnya tidak memegang tangan saya.
xenoterracide

5
-Aku diaktifkan secara default ?! bukan distro saya, tidak pak!
Stefan

9

Tidak ada pembatalan ajaib di Unix mana pun. Unix berasumsi bahwa Anda tahu apa yang Anda lakukan. Untuk Undo support gunakan VCS (editor teks Anda mungkin juga memilikinya).

Sebagian besar filesystem tidak memiliki kemampuan untuk melakukannya secara transparan.

Mesin waktu dan pengembalian sistem di mac dan windows masing-masing hanyalah sistem kontrol cadangan / perubahan.


7

Tidak ada undo di baris perintah. Namun Anda dapat, menjalankan perintah sebagai rm -idan mv -i. Ini akan meminta Anda dengan "Anda yakin?" pertanyaan sebelum mereka menjalankan perintah.

Dimungkinkan juga untuk menambahkan alias untuk itu ke skrip startup (misalnya ~/.bashrcatau /etc/bash.bashrc):

alias remove='rm -i'
alias move='mv -i'

Sunting: dengan saran di bawah, saya telah menghapus saran saya ke alias perintah default. Sebaliknya, itu memperkenalkan perintah baru sekarang).


1
+1. tambahkan saja di sini. Setelah mengatur alias di atas, jika dalam beberapa kasus Anda ingin langsung menghapus tanpa konfirmasi "Anda yakin", Anda dapat menggunakan \ rm dan \ mv untuk mem-bypass alias. Anda juga dapat menggunakan opsi -f.
Hemant

2
mv -imeminta hanya ketika itu akan menimpa file (yang membuatnya berguna dan tidak menjengkelkan). Dengan nada yang sama alias cp='cp -i',.
Gilles 'SANGAT berhenti menjadi jahat'

8
Mengasingkan rm dan mv adalah ide yang sangat buruk. (rm lebih buruk dari semua.) Jangan pernah terbiasa menggunakan rm untuk berarti rm -i - Anda akhirnya akan menggunakannya di suatu tempat di mana alias tidak didefinisikan dan Anda akan menghapus sesuatu untuk selamanya. Jika Anda suka diminta, biasakan menggunakan rm -i sepanjang waktu.
msakr

Jika Anda suka diminta, gunakan alias dengan nama lain. Saya menggunakan move = 'mv -i', salin = 'cp -i', symlink = 'ln -si', dan instal perintah trash untuk menggunakan alih-alih rm. Saya masih menggunakan mv, cp, dan rm secara langsung ketika scripting, tetapi untuk penggunaan interaktif alias ini berguna.

@ Mahmoudsakr Anda sepenuhnya benar, saya melewatkan poin itu. Saya juga tidak memiliki perintah ini. Mengasingkan mereka sebagai perintah yang berbeda sepertinya merupakan pilihan paling waras!
vdboor

4

Alasan mengapa sistem Linux / Unix tidak memiliki pembatalan penghapusan berasal dari cara kebanyakan filesystem menyimpan informasi mereka. Semua informasi meta file disimpan di depan disk dengan referensi ke inode pada disk lainnya. Biasanya, sebagian besar sistem file mengalokasikan 10 blok ke file di area meta ini. 7 pertama merujuk ke 7 inode pertama. Yang ke-8 dan ke-9 pergi ke daftar inode (blok yang dobel-kaitkan) dan yang ke-10 pergi ke daftar daftar (blok-blok yang terhubung tripply). Ini bervariasi dari sistem file ke sistem file (ext4, jfs, xfs, dll.) Tetapi daftar blok ini biasanya dapat mengatasi ukuran file di mana saja dari 2GB hingga beberapa TB.

Tetapi karena semua informasi ini disimpan di bagian depan disk, ketika file dihapus, tidak ada cara untuk merujuk inode pada disk ke meta-data yang mereka gunakan. Sebaliknya FAT32 dan NTFS sebenarnya menyimpan beberapa informasi header dengan file-file itu sendiri sehingga lebih mudah untuk mengidentifikasi file apa yang digunakan oleh set blok (selama ruang itu belum direklamasi oleh file yang lebih baru). Dalam pekerjaan Linux, ketika Anda menghapus sesuatu, hampir selalu hal pertama yang segera ditimpa oleh data baru untuk efisiensi.


2

Jika Anda benar-benar menginginkan fitur undo, gunakan kontrol sumber. Subversi sebenarnya bekerja dengan sangat baik pada mesin pengguna tunggal. Saya menggunakannya untuk mengontrol semua file pribadi saya di sistem rumah saya. Sepertinya berlebihan, sampai bencana, skrip nakal atau hit ketik perintah baris.


1
Itu tidak akan melindungi Anda dari itu rm -r .. ;)
Umang

1
@ Unmang saya benar-benar melakukannya sekali dengan git, di mana saya menyimpan repositori lokal dan tidak sengaja rm -r project.git. Untungnya jika Anda menyimpan versi lain di server jauh yang tidak mungkin terjadi
phunehehe

1
@ phunehehe dan siapa pun yang memberi +1 pada komentar saya: kami terlalu terbiasa dengan DVCS untuk menyadari bahwa saya sepenuhnya salah. SVN berkomitmen untuk repo (yang bukan cabang). Jadi, Anda akan benar-benar dilindungi rm -r .. Benar-benar bodoh dari saya.
Umang

2

Satu hal yang saya ingin tambahkan ke .bashrc saya adalah fungsi salin dan hapus. Sesuatu seperti:

cprm(){
    cp -p $1 ~/deleted/$1
    rm $1
}

Tapi Anda harus membiasakan mengetik cprm bukan rm.

Tentunya Anda harus tetap di atas area yang dihapus jika Anda memiliki ruang disk yang terbatas.


4
Anda dapat benar-benar mempersingkat menjadi mv $ 1 ~ / dihapus / $ 1
Stefan

ya, dan itu akan menimpa file 'Dokumen baru 1' dengan satu sama lain 'Dokumen baru 1', jika Anda mendapatkan mengutip kanan: "$1".
pengguna tidak diketahui

@userunknown: maksud Anda $ 1 dalam kode Deano's dan Stefan harus dikutip sebagai "$ 1"?
Tim

@ Tim: Ya, saya lakukan.
pengguna tidak diketahui

Mengapa tidak bergerak, bukan cp dan rm?
user1559897

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.