Pourquoi les points d'interrogation apparaissent-ils lorsque vous modifiez les autorisations du répertoire?

33

J'essaie de modifier temporairement les autorisations d'un dossier dont les autorisations initiales sont

user@ubuntu:/var/log$ ls -l squid*
squid3:
total 4
-rw-r----- 1 proxy proxy    0 Jan 16 14:43 access.log
-rw-r----- 1 proxy proxy 1359 Jan 16 14:43 cache.log
ls: cannot open directory squid-deb-proxy: Permission denied

à quelque chose suivant

user@ubuntu:/var/log$ sudo chmod -R 644 squid*
user@ubuntu:/var/log$ ls -l squid*
squid3:
ls: cannot access squid3/cache.log: Permission denied
ls: cannot access squid3/access.log: Permission denied
total 0
-????????? ? ? ? ?            ? access.log
-????????? ? ? ? ?            ? cache.log

squid-deb-proxy:
ls: cannot access squid-deb-proxy/store.log: Permission denied
ls: cannot access squid-deb-proxy/cache.log: Permission denied
ls: cannot access squid-deb-proxy/access.log: Permission denied
total 0
-????????? ? ? ? ?            ? access.log
-????????? ? ? ? ?            ? cache.log
-????????? ? ? ? ?            ? store.log

Vous remarquerez qu'après le changement des autorisations, il y a des points d'interrogation partout. Pourquoi cela arrive-t-il? Je veux fondamentalement lire le journal des accès pour voir si le serveur squid-deb-proxy reçoit les demandes du client ou non.

Utilisateur enregistré
la source

Réponses:

38

Pour afficher les autorisations d'un répertoire, vous devez passer le -ddrapeau à ls, comme ceci:

ls -ld squid3

Pour lire un fichier, son autorisation de lecture doit être définie. Cependant, pour lire un répertoire et la liste de ses fichiers, les autorisations de lecture et d'exécution doivent être définies . S'ils ne le sont pas, vous obtenez des erreurs étranges comme celles que vous rencontrez.

Pour définir l'autorisation de lecture sur les fichiers et les autorisations de lecture et d'exécution sur les répertoires de manière récursive, utilisez cette commande:

chmod -R a+rX directoryname

Voici une explication de cette commande:

  • chmod est le nom de la commande, à utiliser pour modifier les autorisations des fichiers.
  • -Rest le drapeau récursif. Cela signifie appliquer cette commande au répertoire et à tous ses enfants, ainsi qu'aux enfants de ses enfants, etc.
  • a signifie tous: applique ces autorisations au propriétaire du fichier, au propriétaire du groupe du fichier et à tous les autres utilisateurs.
  • + signifie ajouter les autorisations suivantes si elles ne sont pas déjà définies.
  • r signifie la permission de lecture.
  • Xsignifie l'autorisation d'exécution, mais uniquement sur les répertoires. Les minuscules xsignifient l'autorisation d'exécution sur les fichiers et les répertoires.

Vous trouverez plus d'informations dans la page de manuel de la chmodcommandeIcône de page de manuel .

Flimm
la source
1
y a-t-il un problème avec l'utilisationchmod -R 644 squid*
Utilisateur enregistré le
4
@ RegistrededUser: oui. 644 est rw-r--r--, ce qui convient pour les fichiers, mais pas pour les répertoires. Les répertoires doivent également avoir l'autorisation d'exécution, comme ceci: rwxr-xr-xou 755. La commande que vous avez mentionnée désactive l'autorisation d'exécution sur tous les fichiers et répertoires de manière récursive, ce qui provoque ces erreurs.
Flimm
3

J'ai eu ce problème également. Je ne pouvais pas faire chmod ou chown sur le fichier. J'avais essayé de le supprimer. Il s'est avéré que le fait d'essayer de le supprimer (commande rm) était à l'origine du problème. Le kicker est que le fichier est partagé entre deux systèmes différents . Une fois que j'ai fermé le fichier dans l'autre système, le fichier a disparu. Voici plus de détails sur ma configuration. système 1: machine virtuelle invitée Ubuntu. C’est là que j’ai fait la commande rm. système 2: hôte Windows 7. C’est là que j’avais ouvert le fichier en utilisant la commande less (en cygwin, ce n’est pas forcément pertinent).

Alan
la source
2

Comme vous avez indiqué que votre objectif est de lire /var/log/squid/access.log, votre meilleure solution consiste à taper à sudo less /var/log/squid/access.logla machine, ce qui évite les problèmes de modification répétitive.

Guntbert
la source