Quand un programme a ouvert un fichier, il se fiche de savoir s'il est déplacé, même supprimé. Il ne retient que le file descriptor, qui n'est qu'un identifiant d'inode (pour faire simple) et peu importe si le fichier est déplacé ou supprimé.
Farpaitement ! Jusqu'au moment où tous les fd qui pointent vers l'emplacement sont fermés.
Petite démo rigolote :
~$ cat /dev/random > /tmp/salut & <-- on met des trucs dans un fichier
[1] 9906
~$ rm /tmp/salut <-- on efface le fichier
~$ for i in `seq 1 30`; do df -h /tmp ; sleep 1 ; done <-- on regarde l'espace disque
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 804M 3.1G 21% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 1.1G 2.8G 28% /tmp <-- ça se remplit, pourtant
Filesystem Size Used Avail Use% Mounted on le fichier /tmp/salut n'existe
tmpfs 3.9G 1.4G 2.6G 35% /tmp pas !
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 1.6G 2.3G 41% /tmp Mais le process cat y a accès
Filesystem Size Used Avail Use% Mounted on via un descripteur de fichier :)
tmpfs 3.9G 1.9G 2.1G 48% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 2.1G 1.8G 55% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 2.4G 1.5G 62% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 2.7G 1.3G 69% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 2.9G 987M 75% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 3.2G 719M 82% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 3.4G 452M 89% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 3.7G 186M 96% /tmp <-- ça chauffe !
cat: write error: No space left on device
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 3.9G 0 100% /tmp
[1]+ Exit 1 cat /dev/random > /tmp/salut <-- cat stoppe
Filesystem Size Used Avail Use% Mounted on <-- et hop plein de place
tmpfs 3.9G 4.0K 3.9G 1% /tmp de nouveau
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 4.0K 3.9G 1% /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 4.0K 3.9G 1% /tmp
On peut utiliser lsof pour voir le fd et l'inode :
~$ cat /dev/random > /tmp/salut &
~$ rm /tmp/salut
[1] 10002
~$ lsof -p 10002
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cat 10002 charles cwd DIR 8,2 12288 6033250 /home/charles
cat 10002 charles rtd DIR 8,2 4096 2 /
cat 10002 charles txt REG 8,2 34816 5900785 /usr/bin/cat
cat 10002 charles mem REG 8,2 3719360 5945566 /usr/lib/locale/locale-archive
cat 10002 charles mem REG 8,2 1953112 5901580 /usr/lib/libc.so.6
cat 10002 charles mem REG 8,2 216192 5901565 /usr/lib/ld-linux-x86-64.so.2
cat 10002 charles 0u CHR 136,1 0t0 4 /dev/pts/1
cat 10002 charles 1w REG 0,35 2362441728 4127 /tmp/salut (deleted)
cat 10002 charles 2u CHR 136,1 0t0 4 /dev/pts/1
cat 10002 charles 3r CHR 1,8 0t0 8 /dev/random
Bon au départ je voulais juste faire un peu d'humour avec mon commentaire débile hein :).
[^] # Re: Tu as raison
Posté par cg . En réponse au message accès concurrentiel aux fichiers. Évalué à 6. Dernière modification le 10 mars 2023 à 19:51.
Farpaitement ! Jusqu'au moment où tous les fd qui pointent vers l'emplacement sont fermés.
Petite démo rigolote :
On peut utiliser
lsofpour voir le fd et l'inode :Bon au départ je voulais juste faire un peu d'humour avec mon commentaire débile hein :).