GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment récupérer un fichier que j'ai supprimé mais qui est toujours ouvert quelque part ?

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!

Ubuntu
  1. Rechercher et supprimer des fichiers volumineux ouverts mais supprimés ?

  2. Manière de rediriger la sortie d'un programme et de l'avoir toujours sur Stdout ?

  3. Comment ouvrir un fichier de formulaire PDF indiquant Veuillez patienter… ?

  4. Comment ouvrir un fichier .8 avec Man ?

  5. Récupérer un fichier supprimé ? ?

Comment ouvrir un fichier sous Linux

Comment récupérer des fichiers supprimés dans Ubuntu via TestDisk

Un moyen facile de récupérer des fichiers supprimés dans Ubuntu avec PhotoRec

Comment utiliser Linux pour récupérer des fichiers supprimés

Comment récupérer le stockage de fichiers supprimés mais toujours utilisés sous Linux ?

Avoir désactivé le fichier de configuration du site apache 000-default.conf, mais il semble toujours actif. Pourquoi?