Étant donné un utilisateur non root "joshua", en tant que root, j'ai créé un fichier appelé "foo" dans le répertoire personnel de joshua (/ home / johsua /); cela ressemble à ceci:
-rw-r--r-- 1 root root 0 12-19 21:00 foo
puis supprimez-le en tant que joshua, je peux le supprimer avec succès.
Je m'attendrais à ce que joshua n'ait pas assez de permission pour le supprimer. Est-ce une sorte d'héritage des autorisations? Ma plateforme est Debian 5.0.7.
sudo
ou autre élévation de privilèges. Vous avez probablement oublié quelque chose.Réponses:
L'utilisateur n'a pas supprimé le fichier, le système l'a fait. L'utilisateur a simplement supprimé le fichier de son propre répertoire. Le système a supprimé le fichier car son nombre de références est tombé à zéro. Il se trouve juste que l'utilisateur supprimant le fichier du répertoire tombe à zéro son nombre de références. (Si le fichier était lié à un autre répertoire en dur ou si un descripteur avait été ouvert sur le fichier, il n'aurait pas été supprimé.)
Le système supprime automatiquement les fichiers lorsque leur nombre de références tombe à zéro. Le propriétaire du fichier n'a pas d'importance. Il existe de nombreuses façons pour une personne autre que le propriétaire d'un fichier de ramener le nombre de références du fichier à zéro.
La suppression d'un fichier d'un répertoire (appelée «dissociation») est une opération sur le répertoire. La dissociation d'un fichier réduit son nombre de références.
De même, un utilisateur autre que le propriétaire peut fermer la dernière poignée d'un fichier qui n'est lié à aucun répertoire. La fermeture de cette poignée supprimerait également le fichier, car le nombre de références tomberait à nouveau à zéro.
la source
rm
commande brouille un peu les eaux, car ilrm
s'agit d'une abréviation de "supprimer", et les utilisateurs sont formés à penserrm
comme une opération de "suppression". De nombreux utilisateurs l'utilisentrm
tous les jours sans savoir que l'opération qu'ils effectuent réellement est un "dissociation" et non une "suppression". Par conséquent, il n'est pas vraiment surprenant que de nombreux utilisateurs trouvent ce comportement surprenant lorsqu'ils le rencontrent pour la première fois.rm
commande supprime en fait un fichier ou un répertoire d'un répertoire. C'est pire sur Windows où la commande est appeléedel
, car elle supprimait un fichier mais sur les machines Windows modernes (depuis NT4), c'est aussi une opération de dissociation.Première supposition: pour supprimer un fichier, vous avez besoin d'autorisations d'écriture sur le dossier contenant. Essayez donc / home / johsua / foo / bar, donnez 755 à foo et 644 à bar.
la source