Linux: ls-l hanya mencetak tanda tanya:

11

Saya punya masalah dengan daftar beberapa direktori dengan ls-l:

$ ls -l ./directory
-????????? ? ? ? ?            ? file001.txt
-????????? ? ? ? ?            ? file002.txt

dan hanya berfungsi dengan baik:

$ ls ./directory
file001.txt file002.txt

Apa yang salah?

osgx
sumber

Jawaban:

14

Periksa izin ./directory: jika Anda telah membaca izin tetapi tidak menjalankan izin pada direktori ini, maka Anda memiliki hak yang cukup untuk membaca daftar file di direktori itu, tetapi Anda tidak dapat benar-benar menggunakan file-file ini atau mendapatkan informasi tentang mereka.

contoh sesi:

$ cd /tmp/
$ mkdir /tmp/test
$ touch /tmp/test/file
$ ls -la test/
total 44
drwxr-xr-x  2 myself myself  4096 janv.  5 11:01 .
drwxrwxrwt 42 root   root   54242 janv.  5 11:01 ..
-rw-r--r--  1 myself myself     0 janv.  5 11:01 file
$ chmod a-x /tmp/test # remove execute permission for all
$ ls -la test/
total 0
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? file
$ ls -ld test/
drw-r--r-- 2 myself myself 4096 Jan  5 11:01 test/
$ cat test/file 
cat: test/file: Permission denied
$ chmod a+x /tmp/test # readd execute permission for all
$ ls -la test/
total 44
drwxr-xr-x  2 myself myself  4096 janv.  5 11:01 .
drwxrwxrwt 42 root   root   54242 janv.  5 11:01 ..
-rw-r--r--  1 myself myself     0 janv.  5 11:01 file
$ ls -ld test/
drwxr-xr-x 2 myself myself 4096 Jan  5 11:01 test/
$ cat test/file
$

Beberapa lsversi menampilkan pesan kesalahan ketika mereka tidak dapat menampilkan informasi tentang file.

BatchyX
sumber
Tapi bagaimana saya bisa tahu, apakah file di dalam test direktori atau tidak (periksa d char untuk '.' Dan '..')?
osgx
1
@osgx: Ini adalah bagian dari daftar file, dengan nama file dan nomor inode. man readdiruntuk detail tingkat lebih rendah. Perhatikan bahwa perilaku ini tidak ditentukan oleh POSIX.
BatchyX