Linux'ta geri aldık mı?


Yanıtlar:


53

Linux (diğer birlikler gibi) yerel olarak geri alma özelliği sağlamaz. Felsefe, gitmişse gitmiş olmasıdır. Önemliyse, yedeklenmiş olması gerekirdi.

Eski sürümlerin kopyalarını otomatik olarak tutan bir sigorta dosya sistemi vardır: tüm iyi dağıtımlarda bulunan copyfs . Tabii ki, bu çok fazla kaynak kullanabilir.

Bu tür kazalara karşı korunmanın en iyi yolu versiyon kontrol sistemi kullanmaktır (cvs, çarşı, darcs, git, mercurial, yıkılma, ...). Öğrenmesi biraz zaman alır, ancak orta ve uzun vadede çok fazla para öder.


1
iyi bir alternatif, devlopment altında olan gofler olabilir
test30

1
Yanlışlıkla henüz kaydetmediğiniz veya kaydetmediğiniz bir dosyayı yanlışlıkla silerseniz veya üzerine yazarsanız, bir CVS bile yardımcı olmaz
xdevs23

14

Ne yazık ki hayır.


19
Bu talihsiz olduğunu düşünüyorum bilmiyorum ... Bir geri alma uygulamak için oldukça az kaynak alır. Bu -iseçeneğin rmvarsayılan olarak etkin olmasını bile sevmem . Unix sistemlerim elimi tutmamalı.
xenoterracide

5
-i varsayılan olarak etkindir ?! dağıtıcım değil efendim!
Stefan

9

Hayır, hiçbir Unix'te büyülü bir geri dönüş yoktur. Unix, ne yaptığınızı bildiğinizi varsayar. Geri Al desteği için bir VCS kullanın (metin editörünüzde de yerleşiktir).

Çoğu dosya sistemi şeffaf bir şekilde yapabilme yeteneğine sahip değildir.

Mac ve Windows'taki zaman makinesi ve sistem geri yükleme işlemi yalnızca yedekleme / değiştirme kontrol sistemleridir.


7

Komut satırında geri alma yoktur. Ancak, komutları rm -ive olarak çalıştırabilirsiniz mv -i. Bu sizi "emin misiniz?" Diye soracaktır. sorguyu yürütmeden önce soru.

Ayrıca bir başlangıç ​​komut dosyasına bir takma ad eklemek de mümkündür (örn. ~/.bashrcVeya /etc/bash.bashrc):

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

Düzenleme: aşağıdaki önerilere göre, varsayılan komutları takma adıma verdiğim tavsiyeyi kaldırdım. Bunun yerine, şimdi yeni komutları tanıtır).


1
+1. sadece buraya eklemek için. Yukarıdaki takma adları ayarladıktan sonra, bazı durumlarda "emin misiniz" komutunu kullanmadan doğrudan doğrudan kaldırmak istiyorsanız, takma adı atlamak için \ rm ve \ mv komutlarını kullanabilirsiniz. -f seçeneğini de kullanabilirsiniz.
Hemant

2
mv -isadece bir dosyanın üzerine yazacağı zaman sorar (bu yararlı ve iğrenç olmayan bir şeydir). Aynı damarda alias cp='cp -i'.
Gilles 'SO- kötülük yapmayı bırak'

8
Rm ve mv'nin diğer adı çok kötü bir fikirdir. (rm hepsinden daha kötüdür.) Asla rm -i demek için rm kullanma alışkanlığı edinmeyin - nihayetinde onu takma adın tanımlanmadığı bir yerde kullanırsınız ve bunun için bir şeyleri silersiniz. İstenirse, her zaman rm -i kullanma alışkanlığı edinin.
msakr

İstenirse, farklı bir ad altında bir diğer ad kullanın. Move = 'mv -i', copy = 'cp -i', symlink = 'ln -si' komutunu kullanıyorum ve rm yerine kullanmak için bir çöp kutusu komutu yüklüyorum. Komut dosyası yazarken hala mv, cp ve rm kullanıyorum, ancak etkileşimli kullanım için bu takma adlar kullanışlıdır.

@mahmoudsakr Tamamen haklısın, bu noktayı özledim. Ben de bu komutların diğer isimlerini kullanmıyorum. Onları farklı bir komut olarak takmak en aklı başında seçenek gibi görünüyor!
vdboor

4

Linux / Unix sistemlerinin geri alınmamasının nedeni, çoğu dosya sisteminin bilgilerini kaydetme biçiminden kaynaklanmaktadır. Dosya meta bilgileri, diskin geri kalanında bulunan inode'lara referanslarla diskin önünde saklanır. Genellikle, çoğu dosya sistemi bu meta alandaki bir dosyaya 10 blok atar. İlk 7, ilk 7 düğüme atıfta bulunur. 8'inci ve 9'uncu, inode listelerine (iki kat bağlantılı bloklar) ve 10'uncu liste bir liste listesine (üçlü bağlantılı bloklar) gider. Bu, dosya sisteminden dosya sistemine (ext4, jfs, xfs, vb.) Değişmektedir, ancak bu blok listeleri genellikle 2GB ile birkaç TB arasında herhangi bir yerdeki dosya boyutlarına hitap edebilmektedir.

Ancak, tüm bu bilgiler diskin önünde saklandığından, bir dosya silindiğinde, diskteki inode'lara ait oldukları meta verilere başvurma yolu yoktur. Bunun aksine, FAT32 ve NTFS, bazı başlık bilgilerinin dosyaları kendileri ile birlikte saklar ve hangi blok kümesinin ait olduğunu tanımlamayı kolaylaştırır (bu alan henüz yeni dosyalar tarafından geri kazanılmadığı sürece). Linux çalışmasında, bir şeyi sildiğinizde, hemen hemen her zaman verimlilik için yeni verilerle hemen üzerine yazan ilk şeydir.


2

Gerçekten bir geri alma özelliği istiyorsanız, kaynak kontrolünü kullanın. Subversion aslında tek bir kullanıcı makinede çok iyi çalışıyor. Ev sistemimdeki tüm kişisel dosyalarımı kontrol etmek için kullanıyorum. Afet, haydut bir komut dosyası veya bir komut satırı yazım hatası isabet edene kadar fazlaca görünüyor.


1
Yine de sizi korumaz rm -r .. ;)
Umang

1
@Umang Aslında bunu bir kez git ile yaptım, burada yerel bir depoya koydum ve yanlışlıkla rm -r project.git. Neyse ki, uzak bir sunucuda gerçekleşmesi muhtemel olmayan başka bir sürümde
kalırsanız

1
@ phunehehe ve kim yorumumu + 1'ledi: tamamen yanıldığımı farketmek için DVCS'ye alışkınız. SVN, repoyu (şube olmayan) taahhüt eder. Yani olacak aslında korunmalıdır rm -r .. Gerçekten aptalım.
Umang

2

.Bashrc dosyama eklemek istediğim bir şey, copy ve remove işlevidir. Gibi bir şey:

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

Fakat cprm yazmayı alışkanlık haline getirmemelisiniz.

Açıkçası, sınırlı bir disk alanı varsa, silinen alanın üzerinde tutmanız gerekir.


4
Bunu gerçekten kısaltabilirsin, mv $ 1 ~ / deleted / $ 1
Stefan

Eğer alıntı sağ olsun eğer evet, ve o başka bir 'yeni Belge 1' olan bir dosyayı 'Yeni Doküman 1' üzerine yazacaktır: "$1".
kullanıcı bilinmeyen,

@ userunknown: Deano’da 1 dolar mı demek istiyorsun ve Stefan’ın kodu "$ 1" olarak mı alınıyor?
Tim

@Tim: Evet, yapıyorum.
kullanıcı bilinmeyen

Neden cp ve rm yerine hareket yapmıyorsun?
kullanıcı1559897,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.