GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi Rm peut-il supprimer les fichiers en lecture seule ?

Si je crée un fichier puis que je modifie ses autorisations en 444 (lecture seule), pourquoi rm peut le supprimer ?

Si je fais ceci :

echo test > test.txt
chmod 444 test.txt
rm test.txt

rm me demandera si je veux supprimer le fichier protégé en écriture test.txt . Je me serais attendu à ce que rm ne peux pas supprimer un tel fichier et qu'il faudrait que je fasse un chmod +w test.txt première. Si je fais rm -f test.txt puis rm supprimera le fichier sans même demander, même s'il est en lecture seule.

Quelqu'un peut-il clarifier? J'utilise Ubuntu 12.04/bash.

Réponse acceptée :

Tous les rm a besoin d'une autorisation d'écriture et d'exécution sur le répertoire parent. Les autorisations du fichier lui-même ne sont pas pertinentes.

Voici une référence qui explique le modèle d'autorisations plus clairement que jamais :

Toute tentative d'accès aux données d'un fichier nécessite une autorisation de lecture. Toute
tentative de modification des données d'un fichier nécessite une autorisation en écriture. Toute
tentative d'exécution d'un fichier (un programme ou un script) nécessite l'autorisation d'exécution

Étant donné que les répertoires ne sont pas utilisés de la même manière que les fichiers normaux,
les autorisations fonctionnent légèrement (mais seulement légèrement) différemment. Une tentative
de lister les fichiers d'un répertoire nécessite une autorisation de lecture pour le
répertoire, mais pas pour les fichiers qu'il contient. Une tentative d'ajouter un fichier à un
répertoire, de supprimer un fichier d'un répertoire ou de renommer un fichier, tous
nécessitent une autorisation d'écriture pour le répertoire, mais (peut-être étonnamment)
pas pour les fichiers à l'intérieur. L'autorisation d'exécution ne s'applique pas aux
répertoires (un répertoire ne peut pas être également un programme). Mais ce
bit d'autorisation est réutilisé pour les répertoires à d'autres fins.

L'autorisation d'exécution est nécessaire sur un répertoire pour pouvoir y accéder
(c'est-à-dire pour faire d'un répertoire votre répertoire de travail actuel).

Execute est nécessaire sur un répertoire pour accéder aux informations "inode" des
fichiers qu'il contient. Vous en avez besoin pour rechercher un répertoire afin de lire les
inodes des fichiers qu'il contient. Pour cette raison, l'autorisation d'exécution sur
un répertoire est souvent appelée autorisation de recherche.


Linux
  1. Comment puis-je copier récursivement des fichiers par extension de fichier, en préservant la structure des répertoires ?

  2. Comment puis-je supprimer un fichier ou un répertoire nommé \ ?

  3. Puis-je renommer des fichiers dans un répertoire avec Vim ?

  4. Pourquoi ne puis-je pas créer de fichiers de plus de 2 Go sous Linux ?

  5. Je ne peux pas supprimer les fichiers 'rm:can can remove X Read-only file system'

Comment supprimer (supprimer) un fichier ou un répertoire sous Linux

Pourquoi les fichiers ne peuvent-ils pas être manipulés par inode ?

Supprimer uniquement les fichiers dans le répertoire sous linux PAS les répertoires

commande linux pour vider tous les fichiers d'un répertoire

Impossible de supprimer un répertoire sous Unix

Comment puis-je supprimer les fichiers en double dans des arborescences de répertoires distinctes ?