Почему символы вопросительного знака появляются при изменении разрешений каталога?

33

Я пытаюсь временно изменить разрешения для папки, чьи начальные разрешения

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

после чего-то

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

Вы заметите, после изменения разрешений везде есть вопросительные знаки. Почему это происходит? Я в основном хочу прочитать журнал доступа, чтобы увидеть, получает ли squid-deb-proxy сервер запросы от клиента или нет.

зарегистрированный пользователь
источник

Ответы:

38

Чтобы просмотреть права доступа к каталогу, вам нужно передать -dфлаг lsследующим образом:

ls -ld squid3

Для чтения файла необходимо установить его разрешение на чтение. Однако для чтения каталога и списка его файлов необходимо установить разрешения как на чтение, так и на выполнение . Если это не так, вы получаете странные ошибки, подобные тем, которые вы испытываете.

Чтобы рекурсивно установить разрешение на чтение для файлов и разрешения на чтение и выполнение для каталогов, используйте эту команду:

chmod -R a+rX directoryname

Вот объяснение этой команды:

  • chmod это имя команды, используется для изменения прав доступа к файлам.
  • -Rэто рекурсивный флаг. Это означает применение этой команды к каталогу, всем его дочерним элементам, дочерним элементам и т. Д.
  • a обозначает все: примените эти разрешения к владельцу файла, владельцу группы файла и всем остальным пользователям.
  • + означает добавить следующие разрешения, если они еще не установлены.
  • r означает разрешение на чтение.
  • Xозначает разрешение на выполнение, но только для каталогов. Нижний регистр xбудет означать разрешение на выполнение файлов и каталогов.

Более подробная информация находится на странице руководства для chmodкомандыЗначок Manpage .

Флимм
источник
1
что-то не так с использованиемchmod -R 644 squid*
Зарегистрированный пользователь
4
@RegisteredUser: да. 644 есть rw-r--r--, что подходит для файлов, но не для каталогов. Для каталогов также необходимо установить разрешение на выполнение, например: rwxr-xr-xили 755. Упомянутая вами команда рекурсивно отменяет разрешение на выполнение для всех файлов и каталогов, что приводит к этим ошибкам.
Flimm
3

У меня тоже была эта пробема. Я не мог сделать chmod или chown на файл. Я пытался удалить его. Оказывается, попытка удалить его (команда rm) вызвала проблему. Главное, что файл используется двумя разными системами . Как только я закрыл файл в другой системе, файл исчез. Вот больше деталей моей конфигурации. система 1: гостевая ВМ Ubuntu. Здесь я выполнил команду rm. Система 2: Windows 7 хост. Здесь я открыл файл с помощью команды less (в cygwin это не обязательно важно).

Алан
источник
2

Поскольку вы заявили, что ваша цель - читать /var/log/squid/access.log, ваше лучшее решение - печатать sudo less /var/log/squid/access.log, что избавляет от необходимости многократного chmodding.

guntbert
источник