私はLinux Application Server 3.2.0-4-amd64#1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU / Linuxを使用しています。name1.php
、、、name1.html
などという名前の複数のファイルを含むname2.php
ディレクトリに移動し、次のように入力します。
$ sudo ls *.*
私は得る:
ls: cannot access *.*: No such file or directory
私は同じ問題がありますgrep
:
$ grep "TOS.html" *.*
grep: *.*: No such file or directory
なぜそんなことですか?この問題をどのように解決できますか?
編集#1:
$ shopt | grep glob
+ grep glob
+ shopt
dotglob off
extglob on
failglob off
globstar off
nocaseglob off
nullglob off
編集#2:
$ ls -ld;echo --;sudo ls -ld
+ ls --color=auto -ld
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
+ echo --
--
+ sudo ls -ld
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
ベストアンサー1
背景
あなたの問題は、最終的にディレクトリに対する次の権限によって引き起こされると思います。
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
所有者(www-data
)とグループ(root
)にはそれぞれとrwx
がありますr-x
。ただし、他の権限はにのみ設定されています--x
。
つまり、このディレクトリからコマンドを実行できますが、このディレクトリの内容の一覧を読み取ったり実行したりすることはできません。
あなたのシナリオ
このディレクトリでコマンドを実行すると、www-data
他のユーザーになります。sudo
このユーザーをUserXと呼びます。
シェルがこのコマンドをUserXとして呼び出す場合:
$ sudo ls *.*
そして、次を返します。
ls: cannot access *.*: No such file or directory
UserXのシェルはすべてのファイルに拡張しようとします*.*
が、UserXはこのディレクトリの内容を読み取ることができないため、何も返しません。次に、名前がどのテキストファイルとも一致しない*.*
テキストを送信します。sudo ls *.*
*.*
コマンドを実行しようとするとgrep
同じ問題が発生します。同様に、UserXはどのファイルも読み取れないため、grep
テキストファイルを検索するように指示します*.*
が、その名前のファイルを見つけることができません。したがって、メッセージは次のようになります。
アクセス不可。:対応するファイルやディレクトリはありません。
そして
。:対応するファイルやディレクトリはありません。
はい
あなたと同様に、次の設定があるとします。
$ sudo chown nginx.root /tmp/afolder
$ sudo chmod 751 /tmp/afolder/
$ sudo ls -ld /tmp/afolder/
drwxr-x--x 2 nginx root 4096 Nov 23 04:10 /tmp/afolder/
$ sudo touch /tmp/afolder/fakefile.txt
それでは、私の場合は「UserX」で作成しましょうsaml
。
$ id
uid=500(saml) gid=501(saml) groups=501(saml)
次のディレクトリにCDを移動できます。
$ pwd
/tmp/afolder
ただし、そのディレクトリのファイルを一覧表示しようとすると、次のようになります。
$ ls *
ls: cannot access *: No such file or directory
同じ質問sudo
:
$ sudo ls -l *.*
ls: cannot access *.*: No such file or directory
一重引用符で保護された拡張機能を使用してシェルを呼び出すと、目的の*
結果が得られます。
$ sudo bash -c 'ls -l *.*'
-rw-r--r-- 1 root root 0 Nov 23 04:14 fakefile.txt