適切な許可なしにアスタリスクを展開できません


16

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

$ 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コマンドで試してみましたが、「permission denied」ではなく「no such file」エラーが表示されます...

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

回答:


20

*ワイルドカードの展開を行うシェルは、それを入力するシェルです。シェルにディレクトリ内のファイルのリストを読み取る権限がある場合、シェルはに展開さ/temp/sit/build/*/temp/sit/build/filesudo引数ls-lおよびで実行されます/temp/sit/build/file。シェルが一致するものを見つけることができない場合/temp/sit/build/*(一致がないため、またはシェルに一致を表示する許可がないため)、パターンをそのままにsudoして、引数ls-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/代わりに行うことができますが、それは他のパターンに一般化されません。


1

まれに、シェルのグロビングを無効にしていないことを再確認する必要があります。これは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を確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.