Cette question est liée à Comment récupérer des fichiers supprimés? mais elle est de nature légèrement différente.
Supposons que j'ai un fichier nommé ~/something
ouvert dans un éditeur de texte. Supposons en outre que j'ouvre un terminal et exécute la commande suivante pendant que le fichier est toujours ouvert dans l'éditeur de texte:
rm ~/something
Cela supprimera le fichier. Supposons maintenant que j'ai changé d'avis et que je voulais récupérer le fichier. Le fichier est toujours ouvert dans l'éditeur de texte, donc il n'a pas encore été supprimé du disque ou du système de fichiers .
Existe-t-il un moyen de le récupérer?
Je ne sais pas s'il existe des éditeurs de texte qui gardent le fichier ouvert pendant que vous le modifiez. Normalement (c'est-à-dire dans Emacs), le fichier est lu dans un tampon en RAM puis le fichier est fermé. Vous éditez uniquement en RAM. Lorsque vous enregistrez le tampon, le fichier est ouvert, écrit et refermé. Vous pouvez utiliser ps auxw | grep your_editor
pour trouver le PID de votre éditeur, puis lsof -p your_PID
pour voir les fichiers encore ouverts.
En revanche, si le fichier est toujours dans le tampon de votre éditeur, vous pouvez simplement l'enregistrer.
Mais ce n'était pas votre question, alors supposons que vous utilisez cat
comme éditeur, et le fichier est vraiment toujours ouvert:
% 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
Vous pouvez utiliser lsof -n
pour voir tous les fichiers ouverts et grep
pour rechercher votre nom de fichier.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
Dans la deuxième colonne, vous pouvez voir le PID de votre commande cat
. Vous pouvez passer dans le répertoire correspondant du système de fichiers/proc et dans le sous-répertoire fd
(descripteur de fichier):
% 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
Maintenant, vous pouvez simplement copier le "fichier" 1
vers un autre fichier:
% cp 1 ~/tmp/the_old_file.txt
Et voyez, c'est là:
% cat ~/tmp/the_old_file.txt
Hello world!
Enregistrez simplement le fichier dans l'éditeur de texte. Devrait très bien fonctionner.
Soit dit en passant, vous êtes souvent invité avec un message "laisser non enregistré?", Lorsque vous avez toujours le fichier ouvert dans un éditeur et essayez de fermer la fenêtre, car l'éditeur de texte prend également note que le fichier a été supprimé et est actuellement "non enregistré "(Au moins à cet endroit).
(nitstorm, veuillez ne pas utiliser les commentaires pour les réponses;)