Rm komutu verildiğinde dosyalar nereye gider?


98

Son zamanlarda yanlışlıkla rmbir dizi dosyaya yaptım ve bu dosyaların tam olarak nereye gittiğini düşündürdü?

Bir GUI ile çalışırken, silinen dosyaların Çöp Kutusuna gitmesi gerekir. Bunun karşılığı nedir rmve bir rmkomutu geri almanın bir yolu var mı?


3
İşte olası bir kopyası. Linux üzerinde geri al . Ancak dosyaların nereye gittiğinden, bundan farklı bir yöntem olduğundan emin değilim.
xenoterracide

Yanıtlar:


120

Hiçbir yerde, gitti, kayboldu. Daha spesifik olarak, dosya bağlantısı kesildi. Veriler hala diskte oturuyor, ancak buna bağlanan bağlantı kaldırıldı. Verileri almak mümkündü, ancak günümüzde meta veriler silindi ve hiçbir şey kurtarılamaz.

Bunun için çöp tenekesi yok rm, ne de olmamalı. Bir çöp kutusuna ihtiyacınız varsa, daha yüksek bir arayüz kullanmalısınız. trash-cliUbuntu'da bir komut satırı yardımcı programı var , ancak çoğu zaman Nautilus veya Dolphin gibi GUI dosya yöneticileri standart bir Çöp Kutusu sağlamak için kullanılıyor. Çöp tenekesi standarttır. Dolphin'e atılan dosyalar Nautilus'un Çöp Kutusunda görünecek.

Dosyalar genellikle çöktüğünde olduğu gibi bir yere taşınır ~/.local/share/Trash/files/. rmUNIX / Linux üzerinde komut karşılaştırılabilir delda siler ve yok DOS / Windows üzerinde değil dosyaları Geri Dönüşüm Kutusu'na taşıyın. Gerçekleştirilmesi gereken bir başka şey de, bir dosyayı USB diskiniz gibi dosya sistemlerinde sabit disk sürücünüzden taşımak, gerçekte 1) dosya verilerinin bir kopyası ve ardından 2) orijinal dosyanın bağlantısını kesmektir. Çöp Kutunuzun bu ek kopyalarla doldurulmasını istemezsiniz.


4
Açık bir açıklama için çok teşekkürler. CLI'yı kullanmayı umursamıyorum, joker karakterler kullanırken biraz daha dikkatli olmam gerekiyor. :)
boehj

16
libtrashRm davranışını değiştirmek gibi bir şey kullanırken dikkatli olurdum . Birçok komut dosyası rmdosyaları temizlemek için kullanır ve bu dosyaların Çöp Kutusu'nda görünmesini istemezsiniz. Ben gibi özel komutunu kullanarak tavsiye trashgelen trash-clipaketin. @pedro Bir kere ana dizinde bir dosya * oluşturduğumu eklemeliyim. Yanlışlıkla alıntı yapmıştım * yaratmamalıyım, bu yüzden onu rm * ile birlikte kaldırmaya karar verdim. Yaptıklarımı fark ettiğimde emri çabucak öldürdüm, ama zaten ev dizinimdeki birkaç dosyayı sildim.
penguin359

4
Kabukta çöp tenekesi gibi bir şeyin olması çok nadirdir, bu nedenle yerel makinenize eklerseniz ve buna alışırsanız veya günlük işinizde buna bağlı kalırsanız. Unix'in diğer% 99'unun bazılarını kullanırken başınız belaya girebilir: biri olmadan ...
Johan

3
Sanırım buradaki eve dönüş mesajı, CLI'ing'i çalışma saatlerinde durdurmam ve daha fazla dikkat etmem gerektiğini söylüyor.
boehj

2
@Johan söylediklerini olarak aynı doğrultuda, RedHat (hala mu?) Eskisi gibi komutlar için takma ad ayarlamak cpve mve cp -ive mv -ikök olarak çalıştırırken. Bu, varsayılan davranışı değiştirir, böylece bu komutlar her zaman varolan dosyaların üzerine yazılmadan önce sorulur. Bazı sistem yöneticileri, özellikle bu takma adları kaldırmanızı tavsiye ettiğinden, varsayılan davranışı izleyen başka bir sistemde ölümcül olabilecek sonuca varamazsınız.
penguin359

11

Ext3 / ext4 için, gibi araçları kullanarak dosya kurtarma deneyebilirsiniz extundelete veya ext3grep gitmek bile, ya da karıştırmasını düşük seviyeli yapılarıyla manuel (değil kalbin zayıf); birçok dosya sistemi için henüz üzerine yazılmayan blokları belirli kalıplarla aramayı deneyebilirsiniz (örneğin, sihirli kurtarma diğerlerinin yanı sıra JPEG başlıklarını da arayabilir). Bunların, dosyaları geride bıraktıkları meta verilerden kurtarmak için buluşsal yöntem kullandıklarını, bu nedenle tam kurtarma işleminin garanti edilmediğini unutmayın - bu daha çok son şanslı bir bahistir (çünkü bazı dosyaların izlerinin günlüğe girmesini ve blokların kalmasını gerektirir) henüz üzerine yazılmadı).

Bu nedenle, tüm amaç ve amaçlar için, kaldırılan dosyalar silindi rm- bu araçların önerdiği gibi yanlışlıkları deneyebilirsiniz , ancak bunlara bağlı kalmayın: bunlar her şey başarısız olduğunda denenecek araçlardır. En son yedeklemelerinizi daha iyi araştırın (yedeklemeler yaptınız, değil mi? Çok iyi, yaşa ve öğren ...).


2
Yüksek değerli metin verileri için, kaldırılan dosyayı içeren disk için "ham cihaza" bakmak ve bilinen dizeleri aramak için her zaman genel amaçlı herhangi bir aracı (emacs veya perl) kullanabilirsiniz; Bu şekilde insanlar için Word belgelerini kurtardım; işaretlemeyi kaybederler, ancak metnin çoğunu kurtarabilirler. Açıkçası bu felaket kurtarmadır, "Geri Al" değil.
alexis,

Uygun bir 'manuel' bağlantı: web.archive.org/web/20131221183925/http://…
sjas

8

Etkilerini geri almakla ilgili olarak rm:

Çoğu dosya sisteminin yalnızca verilere olan başvuruyu kaldırdığı ve blokların ücretsiz olduğunu belirttiğinden dolayı, verilerinizi doğrudan aygıttan okumayı deneyebilirsiniz. Biraz şansla dosyalarınızı içeren bloklar başka bir şey için talep edilmedi.

Bu, arama yapmak için oldukça benzersiz bir şeyiniz olduğunu root, sistemde bulunduğunu ve eğer birden fazla dosya sistemi bloğunu (muhtemelen 4k) kapsayan herhangi bir şeyi bir araya getirmeyi tahmin ediyorum (muhtemelen 4k), dosya sistemi başaramazsa oldukça zahmetli olacağını tahmin ediyorum. dosyaları bitişik bloklar halinde koymak için.

Birkaç düz metin dosyasının içeriğini, dosya sisteminin bulunduğu aygıtta dizeleri çalıştırarak ve grepbu dosyalardan büyük bir içeriğe ( -C) sahip bir şey aramayı kullanarak başarıyla kurtardım . (Ve bu olaydan kısa bir süre sonra, şirket yedekleri uygulamak için bazı kaynaklar harcamaya karar verdi)


Bu biraz daha karmaşıktır, örneğin inode içindeki blok göstergeleri sıfırlayarak ext3'ü değiştirmek, ancak evet, doğrudan dosyalara bakmak işe yarayabilir - eğer yeterince küçüklerse ya da bitişik bir bloğa ayrılmışsa. Bu bazen dosya oymacılığı olarak adlandırılır ve magicrescuekendine özgü desenleriyle görüntü veya ses bulmaya çalışan araçlar vardır .
Piskvor

6

rmKomutu kullanarak bir dosyayı sildiğinizde , dosyanın verileri hiçbir zaman silinmez. Başka bir deyişle, veri sistemindeki veri içeren bloklar hala oradadır.

rmKomutu çalıştırdığınızda, sistem o dosyaya ait inode'u kullanılmamış olarak işaretler ve o dosyanın veri bloklarını da kullanılmamış olarak işaretler (ancak silinmez). Ancak ext3bir dosya silindiğinde, inode'daki alanların çoğunu sıfırlar.

Kullanılmayan bu normal işaretleme hız için yapılır ... Aksi takdirde silmek için biraz daha zaman alacaktır. Bu nedenle büyük dosyaların silinmesinin daha hızlı olduğunu not etmiş olabilirsiniz (eğer veri blokları üzerine yazılmamışsa verileri kurtarabilirsiniz).

Daha Fazla Bilgi: İnode Yapısı , Dosya silme nasıl çalışır?


... dosya chattr +s("shred") özniteliği ile açıkça işaretlenmediği sürece . Dosya sistemine, silme sırasında sıfırlanan bu dosyanın üzerine özellikle yazmasını söyler. Yalnızca bazı dosya sistemleri bu özelliği destekleyecektir.
telcoM

3

Unix tarzı dosya sistemlerinde (Linux dahil), dosyalar gerçekten herhangi bir yerde "yer" değildir. Bunun yerine, sistem, büyük bir veri bloğu için ne kadar önemli olduğuna işaret eden hardlinks kullanır. Böylece bir dosya oluşturduğunuzda, ilk hard linkini de yaratırsınız: aslında dosyayı "kaydettiğiniz" yerde bulunan. Daha fazla hardlinks yaparsanız, o zaman sistemin bildiği kadarıyla, dosya aslında aynı anda birkaç yerde var.

Bir dosyayı "sildiğinizde" normalde yalnızca belirttiğiniz yerde bulunan sabit bağlantıyı silersiniz. Bu nedenle sistem çağrısı dosyaları silmek için çağrılır unlink(). Sistem, kendisine hiçbir sabit bağlantı kalmayana kadar dosyayı silmez. Ancak bir kez bu son hardlink yok edildiğinde, veriler de öyle.

Peki, sildiğiniz dosyalar nereye gidiyor? Hala sabit bağlantılar varsa, dosyalar, silmediğiniz sabit bağlantıların olduğu yerlerdir. Sabit bağlantı kalmadıysa, dosyalar gider.


0

Dosya yakın zamanda kaldırıldıysa, ~ / .snapshot dosyasına da bakın.


4
Bu, yalnızca bu özelliği sağlayan bir sihirli dosya sisteminiz varsa (NetApp gibi) veya özel bir rm sürümü kullanıyorsanız işe yarar.
mattdm
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.