'chmod -644' définirait l'autorisation de fichier à 000

12

J'avais un fichier avec 644 ( -rw-r--r--) et je voulais le changer en 664 ( -rw-rw-r--), après avoir exécuté:

sudo chmod -664 my_file

les autorisations de fichier ont été définies sur 000 ( ----------).

Essayer de modifier les autorisations pour autre chose que 000 semble ne pas fonctionner. Qu'est-ce que j'oublie ici?

illgoforit
la source
11
Pourquoi avez-vous un -devant 644? Essayez sudo chmod 644 my_file. -644supprimera les droits.
Soren A

Réponses:

34

Vous utilisez -664, utilisez simplement à la 664place. Et n'utilisez jamaissudo lorsque vous n'en avez pas besoin. Si c'est votre dossier, vous n'avez pas besoin sudo:

chmod 644 my_file

Lorsque vous exécutez chmodavec un -avant le mode, vous supprimez ce mode. Voir man chmod(c'est moi qui souligne):

L'opérateur + entraîne l'ajout des bits de mode de fichier sélectionnés aux bits de mode de fichier existants de chaque fichier; - provoque leur suppression ; et = entraîne leur ajout et entraîne la suppression des bits non mentionnés, sauf que les bits d'ID de groupe et d'utilisateur de groupe non mentionnés ne sont pas affectés.

Les chiffres sont les suivants:

  • 1: exécuter
  • 2: écrire
  • 4: lire

Ainsi, un fichier avec des 777autorisations signifie que tout le monde a le droit de faire les trois, puisque 1 + 2 + 4 = 7, et donc définir les autorisations sur 7 signifie autoriser la lecture, l'écriture et l'exécution.

Si vous commencez avec un fichier dont le mode est 777:

$ ls -l my_file 
-rwxrwxrwx 1 terdon terdon 0 May 28 13:45 my_file

Et maintenant, exécutez chmod -644, vous supprimerez les bits 644et vous vous retrouverez avec un fichier dont le mode est 133:

$ chmod -644 my_file; ls -l my_file 
---x-wx-wx 1 terdon terdon 0 May 28 13:45 my_file

En effet, vous avez supprimé 6 (lecture (4) + écriture (2)) des autorisations du propriétaire, ne laissant que 1 (exécution) défini, et 4 (lecture) du groupe et d'autres autorisations. Le résultat est un fichier avec seulement des autorisations d'exécution (1) pour le propriétaire, et des autorisations d'écriture et d'exécution (vous en désactivez 4, en laissant 1 et 3) pour le reste.

Parce que votre fichier avait vraisemblablement les autorisations par défaut pour les nouveaux fichiers, donc 644, lorsque vous avez exécuté chmod -644 my_file, vous avez supprimé tous les bits d'autorisation définis et obtenu un fichier sans autorisations pour personne.

$ ls -l my_file 
-rw-r--r-- 1 terdon terdon 0 May 28 13:45 my_file
$ chmod -644 my_file
$ ls -l my_file 
---------- 1 terdon terdon 0 May 28 13:45 my_file
terdon
la source