В чем разница между 'ls' и 'ls -l', когда у меня нет разрешения на выполнение для этого каталога?

11

Я создал каталог с именем folderи забрал разрешение на выполнение.

$ mkdir folder
$ touch folder/innerFile
$ mkdir folder/innerFolder
$ chmod -x folder

Теперь, если я сделаю

$ ls folder

выводит список файлов, но когда я делаю

$ ls -l folder

я получил

ls: innerFile: Permission denied
ls: innerFolder: Permission denied

Это почему?

Shnd
источник
4
Проверьте этот ответ. У него есть ответы на ваш вопрос.
Рамеш
2
«В чем разница между« ls »и« ls -l », если у меня нет разрешения на выполнение в этом каталоге?» В принципе, это то же самое, разница между «LS» и «Ls -l» , когда вы действительно имеете разрешения на выполнение каталога.
G-Man говорит «Восстановить Монику»

Ответы:

18

ls -lв папке пытается statего содержимое, а lsне:

$ strace ls folder -l
...
lstat("folder/innerFolder", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
getxattr("folder/innerFolder", "system.posix_acl_access", 0x0, 0) = -1 ENODATA (No data available)
getxattr("folder/innerFolder", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
lstat("folder/innerFile", {st_mode=S_IFDIR|0755, st_size=40, ...}) = 0
getxattr("folder/innerFile", "system.posix_acl_access", 0x0, 0) = -1 ENODATA (No data available)
getxattr("folder/innerFile", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
...

Вот почему вы получаете «разрешение отказано» с, ls -lа не с ls.

Мур
источник