アスタリスクは適切な許可なしに拡張することはできません。

アスタリスクは適切な許可なしに拡張することはできません。

誰かが私に次のことを説明できますか?

$ 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/filesudols-l/temp/sit/build/file/temp/sit/build/*sudols-l/temp/sit/build/*

という名前のファイルがないため、/temp/sit/build/*そのls名前をファイルに渡すと、コマンドはエラーを生成します。lsワイルドカードを拡張するのではなく、シェルの作業であることを覚えておいてください。

読み取り権限のないディレクトリでワイルドカード拡張を実行するには、sudo呼び出しではなく起動したシェルで拡張が必要ですsudosudoシェルは自動的に起動されず、これを明示的に実行する必要があります。

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

関連情報