ディレクトリに対する実行権限がない場合、「ls」と「ls -l」の違いは何ですか?

ディレクトリに対する実行権限がない場合、「ls」と「ls -l」の違いは何ですか?

というディレクトリを作成し、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

なぜそんなことですか?

ベストアンサー1

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

おすすめ記事