lsは「該当するファイルはありません」と言いますが、なぜですか? [コピー]

lsは「該当するファイルはありません」と言いますが、なぜですか? [コピー]

理解できない奇妙な行動があります。ディレクトリ内のいくつかのファイルをリストしたいと思います。

sudo find /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root生産する:

/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/trustdb.gpg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/private-keys-v1.d
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.extra
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx~
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.browser
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.ssh

だから私は.gnupgディレクトリが存在し、その中にファイルがあることを知っています。

sudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root生産する:

total 12
drwx------ 3 root root 4096 Sep 21 14:54 .
drwxr-xr-x 3 root root 4096 Aug 24 18:30 ..
drwxr-xr-x 3 root root 4096 Sep 21 14:54 .gnupg

したがって、ディレクトリ自体にはrwx権限があります。

ただし、コマンドは以下をsudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*提供します。

ls: cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*': No such file or directory

痕跡を確認し続けましたが、何の問題もありませんでした。 rwx 権限と root レベルのアクセス権があります。このディレクトリを一覧表示できない別の要因は何ですか?

私の最終目標は一つを作ることでしたが、chmod 600 /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*それも失敗しました。しかし、今はlsを選択したいと思います。

編集:ちょうど私にショックを受けた。これはファイルグロービングに関連していますか? * sudoの前に拡張するとrootアクセスはできませんか?

ベストアンサー1

正しく指摘したように、拡張順序が問題の原因です。ファイル名に完全に関連するステップは「ファイル名拡張」です。拡張に関してはかなり遅かったが(参照:ここ例えば)実行されます。今後実際にコマンドが呼び出されます。これは、たとえば、およびをls *含むディレクトリから実際に呼び出されることを意味します。file1.txtfile2.txtfile3.txtls file1.txt file2.txt file3.txt

.gnupgこれで問題は、呼び出し元のユーザーにディレクトリに入るために必要な権限がないことです。したがって、ファイル名globの拡張は*失敗します。この場合でなければ特定のシェルオプションの設定*維持されます言葉lsシェルがファイルに対してコマンドを実行しようとするコマンドラインから文字通り*。したがって、エラーメッセージ

cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*'

*ご覧のとおり、insideという名前のファイルにアクセスしようとしています/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/

代わりに、関連するタスクを実行するシェルスクリプトを作成してrootからsudo。どこからでもアクセスできるパス(たとえば)にスクリプトを配置する必要があります/usr/local/bin

おすすめ記事