誰かが私に次のことを説明できますか?
$ ls -ld /temp/sit/build/
dr-xr-s--- 3 asdf qwer 4096 Jan 31 2012 /temp/sit/build/
$ ls -ld /temp/sit/build/*
ls: /temp/sit/build/*: Permission denied
明らかに、ここではアスタリスクは使用できません。 sudoコマンドを使用してみましたが、「権限が拒否されました」の代わりに「該当ファイルなし」エラーが発生します...
sudo ls -l /temp/sit/build/*
ls: /temp/sit/build/batch*: No such file or directory
しかし、*を使用しないと、最終的に動作します。
sudo ls -l /temp/sit/build/
total 4
dr-xr-s--- 11 asdf qwer 4096 Oct 3 23:31 file
答え1
ワイルドカード拡張を実行するシェルは、*
ワイルドカード文字を入力するシェルです。シェルにディレクトリ内のファイルのリストを読み取る権限がある場合は、引数を使用して/temp/sit/build/*
に展開して実行します。シェルが一致するものを見つけることができない場合(一致するものがないか、シェルに一致するものを表示する権限がないため)パターンを残して引数、およびを使用して呼び出します。/temp/sit/build/file
sudo
ls
-l
/temp/sit/build/file
/temp/sit/build/*
sudo
ls
-l
/temp/sit/build/*
という名前のファイルがないため、/temp/sit/build/*
そのls
名前をファイルに渡すと、コマンドはエラーを生成します。ls
ワイルドカードを拡張するのではなく、シェルの作業であることを覚えておいてください。
読み取り権限のないディレクトリでワイルドカード拡張を実行するには、sudo
呼び出しではなく起動したシェルで拡張が必要ですsudo
。sudo
シェルは自動的に起動されず、これを明示的に実行する必要があります。
sudo sh -c 'ls -l /temp/sit/build/*'
もちろん、ここでこれを行うことができますが、sudo ls -l /temp/sit/build/
他のモードに一般化されていません。
答え2
まれに、シェルでワイルドカードが無効になっていることを再確認する必要があります。これにより、No such file or directory
ワイルドカード()を使用してファイルを一覧表示しようとする*
と問題が発生する可能性があります。
たとえば、
$ ls /tmp/sit/build/*
/tmp/sit/build/file
$ set -f
$ ls /tmp/sit/build/*
ls: cannot access /tmp/sit/build/*: No such file or directory
$ set +f
$ ls /tmp/sit/build/*
/tmp/sit/build/file
詳細を確認してくださいhelp set
。