あるコマンドが機能し、他のコマンドが機能しないのはなぜですか?リモートで関連記事を見つけましたが、わかりません。
$ sudo ls -la /tmp/restricted
total 12
drwxr-x---. 2 root root 42 Mar 17 17:40 .
drwxrwxrwt. 12 root root 12288 Mar 17 17:37 ..
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo1
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo2
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo3
$ sudo ls -a /tmp/restricted/foo*
ls: cannot access /tmp/restricted/foo*: No such file or directory
/tmp/restrictedの権限を750ではなく755に変更すると、両方のコマンドが成功します。
$ sudo chmod 755 /tmp/restricted/
$ sudo ls -la /tmp/restricted
total 12
drwxr-xr-x. 2 root root 42 Mar 17 17:40 .
drwxrwxrwt. 12 root root 12288 Mar 17 17:37 ..
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo1
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo2
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo3
$ sudo ls -a /tmp/restricted/foo*
/tmp/restricted/foo1 /tmp/restricted/foo2 /tmp/restricted/foo3
答え1
を実行すると、sudo ls -la /tmp/restricted
ルートls
として実行してアクセスできます/tmp/restricted
。
を実行すると、sudo ls -a /tmp/restricted/foo*
シェル(ルートとしては実行されません)が拡張を試みます/tmp/restricted/foo*
。あなたの場合は、主張を無視することはできません。ls
引数を使用してrootとして実行すると、/tmp/restricted/foo*
その名前のファイルが存在しないため、表示されるエラーメッセージで失敗します。
シェルがglobを使用しないように強制すると、同じエラーが表示されることがあります(現在のディレクトリにls "*"
実際に名前が付けられたファイルがない場合)。*