Linux: ls -l chỉ in các dấu hỏi:


11

Tôi có một vấn đề với việc liệt kê một số thư mục với ls -l:

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

và chỉ ls hoạt động tốt:

$ ls ./directory
file001.txt file002.txt

Chuyện gì thế?

Câu trả lời:


14

Kiểm tra các quyền của ./directory: nếu bạn có quyền đọc nhưng không thực thi quyền trên thư mục này, thì bạn có đủ quyền để đọc danh sách các tệp trong thư mục đó, nhưng bạn thực sự không thể sử dụng các tệp này hoặc nhận thông tin về chúng.

phiên ví dụ:

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

Một số lsphiên bản hiển thị thông báo lỗi khi chúng không thể hiển thị thông tin về tệp.


Nhưng làm thế nào ls có thể biết, tập tin bên trong test thư mục hay không (kiểm tra d char cho '.' Và '..')?
osgx

1
@osgx: Đây là một phần của danh sách tệp, với tên tệp và số inode. man readdirđể biết thêm chi tiết cấp thấp. Lưu ý rằng hành vi này không được chỉ định bởi POSIX.
BatchyX
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.