Linux:ls -lは疑問符のみを出力します:


11

ls -lを使用していくつかのディレクトリを一覧表示すると問題があります。

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

そしてちょうどlsはうまくいきます:

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

1
@osgx:これはファイルリストの一部であり、ファイル名とiノード番号が含まれています。man readdirより低レベルの詳細については。この動作はPOSIXでは指定されていないことに注意してください。
BatchyX 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.