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?
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:
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
hala denemek için yazıldıysa tüm dosyayı almak için tail -c +1 -f
from: /unix/25527/how-to-follow-a-la-tail-fa-binary-file-from-the-beginning
(btw: fd on / proc'dan ln çalışmıyor, sadece denedim)
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.