Dlaczego znaki zapytania pojawiają się podczas zmiany uprawnień do katalogu?

33

Próbuję tymczasowo zmienić uprawnienia do folderu, którego początkowymi uprawnieniami są

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

do czegoś następującego

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

Zauważysz, że po zmianie uprawnień wszędzie są znaki zapytania. Dlaczego to się dzieje? Zasadniczo chcę przeczytać dziennik dostępu, aby zobaczyć, czy serwer squid-deb-proxy otrzymuje żądania od klienta, czy nie.

zarejestrowany użytkownik
źródło

Odpowiedzi:

38

Aby wyświetlić uprawnienia do katalogu, musisz przekazać -dflagę do ls:

ls -ld squid3

Aby odczytać plik, należy ustawić jego uprawnienie do odczytu. Jednak aby odczytać katalog i listę jego plików, należy ustawić zarówno uprawnienia do odczytu, jak i wykonywania . Jeśli nie są, masz dziwne błędy, takie jak te, których doświadczasz.

Aby ustawić uprawnienia do odczytu plików oraz rekursywnie uprawnienia do odczytu i wykonywania katalogów, użyj tego polecenia:

chmod -R a+rX directoryname

Oto wyjaśnienie tego polecenia:

  • chmod to nazwa polecenia, służy do zmiany uprawnień do plików.
  • -Rto flaga rekurencyjna. Oznacza to, że zastosuj to polecenie do katalogu i wszystkich jego dzieci, i jego dzieci i tak dalej.
  • a oznacza wszystko: zastosuj te uprawnienia właściciela pliku, właściciela grupy pliku i wszystkich innych użytkowników.
  • + oznacza dodać następujące uprawnienia, jeśli jeszcze nie są ustawione.
  • r oznacza uprawnienie do odczytu.
  • Xoznacza uprawnienie do wykonywania, ale tylko dla katalogów. Małe litery xoznaczałyby uprawnienia do wykonywania plików i katalogów.

Więcej informacji można znaleźć na stronie podręcznika dla chmodpoleceniaIkona strony .

Flimm
źródło
1
czy jest coś nie tak z używaniemchmod -R 644 squid*
Zarejestrowany Użytkownik
4
@ Zarejestrowany użytkownik: tak. 644 jest rw-r--r--odpowiedni dla plików, ale nie dla katalogów. rwxr-xr-xW katalogach należy również ustawić uprawnienia do wykonywania, takie jak: lub 755. Wspomniane polecenie anuluje rekurencyjne uprawnienia do wykonywania wszystkich plików i katalogów, co powoduje te błędy.
Flimm
3

Też miałem ten problem. Nie mogłem zrobić chmod lub chown na pliku. Próbowałem go usunąć. Okazuje się, że próba usunięcia go (polecenie rm) spowodowała problem. Najważniejsze jest to, że plik jest współdzielony między dwoma różnymi systemami . Po zamknięciu pliku w innym systemie plik zniknął. Oto więcej szczegółów mojej konfiguracji. system 1: VM maszyny gościa Ubuntu. Tutaj wykonałem polecenie rm. system 2: host systemu Windows 7. W tym miejscu otworzyłem plik za pomocą polecenia less (w cygwin, niekoniecznie jest to istotne).

Alan
źródło
2

Jak powiedziałeś, że Twoim celem jest czytanie /var/log/squid/access.log, najlepszym rozwiązaniem jest sudo less /var/log/squid/access.logpisanie, co oszczędza kłopotów z powtarzaniem chmoddingu.

guntbert
źródło