Belirli bir inode bağlantısı


14

Silinen bir dosyam var, ancak yine de bir program tarafından açık tutuluyor. Lsof kullanarak inode numarasını buldum. Bu inode'a nasıl sabit bir bağlantı oluşturabilirim?

Yanıtlar:


31

Bir bağlantı oluşturamazsınız, ancak geri alabilirsiniz. Bir deney yapalım:

$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt

myfile.txt artık gitti, ancak inode tail komutu ile canlı tutuldu. Dosyanızı geri almak için önce inode'u tutan işlemin PID'sini bulun:

$ ps auxw | grep tail
sunny      409  0.0  0.0   8532   824 pts/5    S    18:07   0:00 tail -f myfile.txt

PID 409'dur. / Proc / 409 / fd / dizinine gidin ve içindekileri listeleyin:

dr-x------ 2 sunny sunny  0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny  0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)

/ Proc / [PID] / fd / dizinleri, işlemin kullandığı tüm dosyaların tanımlayıcılarına dosya bağlantıları içerir. Bu durumda "3" sembolü silinen dosyayı gösterir. Bu nedenle, dosyayı geri yüklemek için içeriği yeni bir dosyaya kopyalayın:

$ cat 3 >/home/mydir/saved_file.txt

Bunu uzak geçmişte bir dosya sistemi hata ayıklayıcısıyla yaptım (örneğin "debugfs dökümü"), ancak konsept aynı.
Gerald Combs

1
güzel cevap, +1
asdmin

Bu benim için işe yaramıyor. '3' ifadesinin "gerçek" bir dosya tanımlayıcı değil, sarkan bir sembolik bağlantı olduğu göz önüne alındığında, her zaman boş bir dosya oluşturur.
Rob Chanter

4
@Rob: Hayır, değil. Dosya tanımlayıcı kullanımdaysa, sembolik bağlantı geçerli verilere işaret eder, aksi halde sembolik bağlantı ilk sırada mevcut olmaz. Dosya kapatıldığında, sembolik bağlantı kaybolur. "3" ten sonra bir boşluğunuz vardı, değil mi? Değilse, dosya tanımlayıcı 3'ün içeriğini geçerli kabukta çıkarırsınız ve bu muhtemelen boştur.
sunny256

1
Bununla ilgili tek sorun, eğer dosya hala yazılıyorsa, yaptığınız kopya kesilecektir. Büyük olasılıkla yazma işleminin durması ile dosyanın kapatılması arasında hiçbir zaman kalmaz, böylece tam bir dosya elde edersiniz.
KayEss


-8

Linux altında bunu yapmanın taşınabilir bir yolu yoktur. En iyi yol muhtemelen dosya sistemindeki tüm aktiviteyi durdurmak, dosyayı açık tutan programı öldürmek, dosya sistemini çıkarmak ve bir dizine yeniden eklemek için bir dosya sistemi hata ayıklayıcı kullanmak olacaktır. Dosya sistemini NFS üzerinden dışa aktardıysanız, NFS'nin en azından bazı sürümleri dosya verilerini NFS üzerinden okumanıza izin verebilir.


2
programı öldürdüğünüzde dosyayı kaybedebilirsiniz
DukeLion
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.