Mengapa karakter tanda tanya muncul saat mengubah izin direktori?

33

Saya mencoba mengubah izin folder sementara yang izin awalnya adalah

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

untuk beberapa hal berikut

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

Anda akan melihat setelah perubahan izin ada tanda tanya di mana-mana. Mengapa ini terjadi? Saya pada dasarnya ingin membaca log akses untuk melihat apakah server squid-deb-proxy menerima permintaan dari klien atau tidak.

Pengguna Terdaftar
sumber

Jawaban:

38

Untuk melihat izin dari direktori, Anda perlu untuk lulus -dbendera untuk ls, seperti ini:

ls -ld squid3

Untuk membaca file, izin baca-nya perlu diatur. Namun, untuk membaca direktori dan daftar file-nya, baik izin baca dan eksekusi harus ditetapkan . Jika tidak, Anda mendapatkan kesalahan aneh seperti yang Anda alami.

Untuk mengatur izin baca pada file dan membaca dan menjalankan izin pada direktori secara rekursif, gunakan perintah ini:

chmod -R a+rX directoryname

Berikut penjelasan dari perintah itu:

  • chmod adalah nama perintah, digunakan untuk mengubah izin file.
  • -Radalah bendera rekursif. Ini berarti menerapkan perintah ini ke direktori, dan semua anak-anaknya, dan anak-anak anak-anaknya, dan seterusnya.
  • a singkatan dari semua: terapkan izin ini pemilik file, pemilik grup file, dan semua pengguna lainnya.
  • + berarti menambahkan izin berikut jika belum ditetapkan.
  • r berarti izin baca.
  • Xberarti izin eksekusi, tetapi hanya pada direktori. Huruf kecil xberarti izin eksekusi pada file dan direktori.

Informasi lebih lanjut ditemukan di halaman manual untuk chmodperintahIkon halaman manual .

Flimm
sumber
1
apakah ada yang salah dengan menggunakanchmod -R 644 squid*
Pengguna Terdaftar
4
@ Pengguna Terdaftar: ya. 644 adalah rw-r--r--, yang cocok untuk file, tetapi tidak untuk direktori. Direktori juga harus memiliki set izin eksekusi, seperti ini: rwxr-xr-xatau 755. Perintah yang Anda sebutkan akan menghapus izin eksekusi pada semua file dan direktori secara rekursif, yang menyebabkan kesalahan ini.
Flimm
3

Saya punya masalah ini juga. Saya tidak bisa melakukan chmod atau chown pada file. Saya sudah mencoba menghapusnya. Ternyata mencoba menghapusnya (perintah rm) menyebabkan masalah. Kicker adalah bahwa file tersebut dibagi antara dua sistem yang berbeda . Setelah saya menutup file di sistem lain, file tersebut menghilang. Berikut ini detail konfigurasi saya. sistem 1: VM tamu Ubuntu. Di sinilah saya melakukan perintah rm. sistem 2: host Windows 7. Di sinilah saya membuka file menggunakan perintah less (di cygwin, bukan berarti itu relevan).

Alan
sumber
2

Ketika Anda menyatakan bahwa tujuan Anda adalah membaca /var/log/squid/access.log, solusi terbaik Anda adalah mengetik sudo less /var/log/squid/access.log, yang menyelamatkan kesulitan dari berulang kali chmodding.

Guntbert
sumber