Mam plik, który został usunięty, ale nadal jest otwarty przez program. Znalazłem numer i-węzła za pomocą lsof. Jak mogę utworzyć twardy link z powrotem do tego i-węzła?
14
Nie możesz utworzyć linku do niego, ale możesz go odzyskać. Zróbmy eksperyment:
$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt
myfile.txt już nie ma, ale i-węzeł jest utrzymywany przy użyciu polecenia tail. Aby odzyskać plik, najpierw znajdź PID procesu zachowującego i-węzeł:
$ ps auxw | grep tail
sunny 409 0.0 0.0 8532 824 pts/5 S 18:07 0:00 tail -f myfile.txt
PID to 409. chdir do / proc / 409 / fd / i wypisz zawartość:
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)
Katalogi / proc / [PID] / fd / zawierają dowiązania symboliczne do deskryptorów wszystkich plików używanych przez proces. W takim przypadku dowiązanie symboliczne „3” wskazuje na usunięty plik. Aby przywrócić plik, skopiuj zawartość do nowego pliku:
$ cat 3 >/home/mydir/saved_file.txt
aby pobrać cały plik, jeśli jest jeszcze napisany, aby spróbować
tail -c +1 -f
od: /unix/25527/how-to-follow-a-la-tail-fa-binary-file-from-the-beginning
(btw: ln z fd na / proc nie działa, po prostu tego spróbowałem)
źródło
Nie ma przenośnego sposobu na zrobienie tego pod Linuksem. Najlepszym sposobem byłoby prawdopodobnie zatrzymanie wszelkiej aktywności w systemie plików, zabicie programu, który utrzymuje plik otwarty, odmontowanie systemu plików i użycie debugera systemu plików, aby ponownie dołączyć go do katalogu. Jeśli system plików został wyeksportowany przez NFS, przynajmniej niektóre wersje NFS mogą pozwalać na odczyt danych pliku w NFS.
źródło