Cette question est liée à Comment récupérer des fichiers supprimés ? mais sa nature est légèrement différente.
Supposons que j'ai un fichier nommé ~/something
ouvrir dans un éditeur de texte. Supposons en outre que j'ouvre un terminal et que j'exécute la commande suivante alors 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 veuille récupérer le fichier. Le fichier est toujours ouvert dans l'éditeur de texte, il n'a donc pas encore été supprimé du disque ou du système de fichiers .
Existe-t-il un moyen de le récupérer ?
Réponse acceptée :
Je ne sais pas s'il existe des éditeurs de texte qui maintiennent 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 dans la 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 le sauvegarder.
Mais ce n'était pas votre question, alors supposons que vous utilisez cat
en tant qu'é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 cat
commande. Vous pouvez changer dans le répertoire correspondant dans le système de fichiers /proc, et dans le fd
sous-répertoire (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!