43 votes

Pourquoi des caractères de point d'interrogation apparaissent-ils lorsque les autorisations d'un répertoire sont modifiées ?

Je essaie de changer temporairement les permissions d'un dossier dont les permissions 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 de ce qui suit

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 permissions, il y a des points d'interrogation partout. Pourquoi cela arrive-t-il? Je veux essentiellement lire le journal d'accès pour voir si le serveur squid-deb-proxy reçoit des demandes des clients ou non.

56voto

Flimm Points 36395

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

ls -ld squid3

Pour lire un fichier, sa permission de lecture doit être définie. Cependant, pour lire un répertoire et la liste de ses fichiers, les permissions de lecture et d'exécution doivent être définies. Sinon, vous obtiendrez des erreurs étranges comme celles que vous rencontrez.

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

chmod -R a+rX nomdurepertoire

Voici une explication de cette commande :

  • chmod est le nom de la commande, utilisée pour changer les permissions des fichiers.
  • -R est le drapeau récursif. Cela signifie appliquer cette commande au répertoire, et à tous ses enfants, et aux enfants de ses enfants, et ainsi de suite.
  • a représente tous : appliquer ces permissions au propriétaire du fichier, au propriétaire du groupe du fichier et à tous les autres utilisateurs.
  • + signifie ajouter les permissions suivantes si elles ne sont pas déjà définies.
  • r signifie la permission de lecture.
  • X signifie la permission d'exécution, mais uniquement sur les répertoires. Une minuscule x signifierait la permission d'exécution sur les fichiers et les répertoires.

Plus d'informations se trouvent dans le manuel de la commande chmod Icône de la page de manuel .

4voto

roctimo Points 834

J'ai eu ce problème aussi. Je ne pouvais pas faire chmod ou chown sur le fichier. J'avais essayé de le supprimer. Il s'avère que le fait d'essayer de le supprimer (commande rm) a causé le problème. Le truc, c'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 Ubuntu. C'est là que j'ai utilisé la commande rm. système 2 : hôte Windows 7. C'est là que j'avais ouvert le fichier en utilisant la commande less (dans cygwin, même si ce n'est pas nécessairement pertinent).

2voto

guntbert Points 12407

Comme vous l'avez indiqué, votre objectif est de lire /var/log/squid/access.log, votre meilleure solution est de taper sudo less /var/log/squid/access.log, ce qui évite la peine de changer les autorisations en boucle.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X