Tato otázka souvisí s tématem Jak obnovit smazané soubory? ale má trochu jinou povahu.
Předpokládejme, že mám soubor s názvem ~/something
otevřít v textovém editoru. Dále předpokládejme, že otevřu terminál a spustím následující příkaz, zatímco je soubor stále otevřený v textovém editoru:
rm ~/something
Tím se soubor smaže. Předpokládejme, že jsem si to rozmyslel a chtěl soubor získat zpět. Soubor je stále otevřený v textovém editoru, takže ještě nebyl odstraněn z disku nebo souborového systému .
Existuje nějaký způsob, jak jej obnovit?
Přijatá odpověď:
Nevím, zda existují nějaké textové editory, které udržují soubor otevřený, když jej upravujete. Normálně (tj. v Emacsu) je soubor načten do vyrovnávací paměti v RAM a poté je soubor uzavřen. Upravujete pouze v RAM. Když uložíte vyrovnávací paměť, soubor se otevře, zapíše a znovu zavře. Můžete použít ps auxw | grep your_editor
k nalezení PID vašeho editoru pak lsof -p your_PID
zobrazíte soubory, které jsou stále otevřené.
Na druhou stranu, pokud je soubor stále ve vyrovnávací paměti vašeho editoru, můžete jej uložit.
Ale to nebyla vaše otázka, takže předstírejme, že používáte cat
jako váš editor a soubor je skutečně stále otevřený:
% cat >the_file.txt
Hello world!
^Z
zsh: suspended cat > the_file.txt
% rm the_file.txt
% ls -l the_file.txt
ls: cannot access the_file.txt: No such file or directory
Můžete použít lsof -n
pro zobrazení všech otevřených souborů a grep
pro vyhledání vašeho souboru.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
Ve druhém sloupci můžete vidět PID vaší cat
příkaz. Můžete přejít do odpovídajícího adresáře v souborovém systému /proc a do fd
(deskriptor souboru) podadresář:
% cd /proc/2145/fd
% ls -l
total 0
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 0 -> /dev/pts/4
l-wx------ 1 elmicha elmicha 64 2012-11-07 00:22 1 -> /home/elmicha/tmp/the_file.txt (deleted)
lr-x------ 1 elmicha elmicha 64 2012-11-07 00:22 15 -> /proc/4501/auxv
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 2 -> /dev/pts/4
Nyní stačí zkopírovat „soubor“ 1
do jiného souboru:
% cp 1 ~/tmp/the_old_file.txt
A vidíte, je to tam:
% cat ~/tmp/the_old_file.txt
Hello world!