Öncelikle
lsof nedir bunu açıklayalım.
LSOF(list open files) acık olan dosyaları gösterir.Bunun içersinde açık olan portlarda vardır.
Kullanımında herhangi bir parametre almaksızın sistem tarafından kullanılan bütün açık dosyaları ve portları görüntüler
grep kullanarak herhangibir programın yada dizin içerisindeki açık dosyaları görüntüleyebiliriz.
Lsof kullanarak nasıl dosya kurtarılır....
Linux dosya sistemlerinde bir dosya aslında bu dosyanın hakkında bilgi veren bir linkten ibarettir. Burada dosyaya ait izinler, sahiplik hakları, dosyanın disk üzerinde kapladığı yerin adres bilgileri gibi bir takım özellikler tutulur. Biz rm ile dosyayı sildiğimizde aslında hakkındaki bilgileri işaret eden linki silmiş oluruz. Eğer bu dosyayı kullanan bir uygulama varsa, bu uygulama kapatılıp, dosyaya işaret eden tüm linkler silinmedikçe dosyanın kendisi silinmiş olmaz. İşte biz bunu kullanarak dosyayı kurtarmayı başarabiliriz.
Bu işlemi yapmamızı sağlayan Linux üzerindeki bilinen
/proc dizinidir. Sistem üzerindeki her işlem bu dizin altında bu işleme ait bir isimle bir alt dizinde bulunur. Bu alt dizinde birçok bilgi bulunur, işte bunlar birisi de fd(file descriptor) alt dizinidir. Bu dizin altında dosyanın yapıldığı işleme ait linkler mevcuttur. Dosya silinse bile bilginin bir kopyası
dosyayı çalıştıran işlem devam ettiği sürece burada kalmaya devam eder
/proc/process id/fd/file descriptor
Bu bilgiyi nerede bulabileceğinizi bilmeniz için işlemin id numarasını ve file descriptor'ı bulmanız lazım, işte burada devreye lsof (list open files) uygulaması girer.
lsof ile bilgiyi aldıktan sonra artık tek yapmanız gereken dosyayı /proc dizininden geri kopyalamanız
Bir örnek işlem yapalım :
GODFATHER.MP3 parçasını videolan programı ile açtık dinliyoruz sonra rm komutu ile mp3 ümüzü silelim
rm GODFATHER.MP3
Burada önemli olan dosyayı sildiğiniz anda yürütme işlemini durdurmanız ancak kesinlikle kapatmayın. Durdurmamızın sebebi yürütme işleminin tamamen bitip, yani mp3 dosyasının sonuna gelip, geri getirecek dosyanın /proc dizini altından dahi silinmesidir.lsof | grep GODFATHER
vlc 6379 root 7r REG 8,1 2445061 6752891 /root/.Trash/GODFATHER.MP3 (deleted)
Evet
lsof ile bilgileri gördük. En sondaki deleted ibaresine dikkat edin, dosyanın silindiğini buradan anlayabiliriz. Bu bilgilerden ilk sütundaki dosyayı hangi uygulamanın kullandığını gösterir. 2. sütun process id, 4. sütun ise file descriptor'dır. Tüm bilmemiz gereken bunlar. Gördüğümüz gibi mp3 dosyamızın process id'si 6379, file descriptor'ı ise 7'dir. Şimdi /proc altından bu dosyayı kurtarabiliriz.
cp /proc/6379/fd/7 GODFATHER.MP3
ve
dosyanız geri geldi.
Not : cp komutunu parametre kullanmadan çalıştırın.
Bu belgenin oluşumunda yardımcı olanlara teşekkür ederiz.