Linux: ls -l друкує лише знаки запитання:


11

У мене проблема з переліком деякого каталогу з ls -l:

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

і я просто добре працює:

$ ls ./directory
file001.txt file002.txt

Що не так?

Відповіді:


14

Перевірте дозволи ./directory: якщо ви читали дозволи, але не виконували права доступу до цього каталогу, у вас є достатньо прав для читання списку файлів у цьому каталозі, але ви фактично не можете використовувати ці файли або отримувати інформацію про них.

Приклад сеансу:

$ 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
$

Деякі lsверсії показують повідомлення про помилки, коли вони не можуть відображати інформацію про файли.


Але як ls може знати, чи є файл всередині test каталогу чи ні (перевірте d char для '.' Та '..')?
osgx

1
@osgx: Це частина списку файлів із назвою файлу та номером inode. man readdirдля отримання більш детальних деталей. Зауважте, що ця поведінка не визначена POSIX.
BatchyX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.