次のディレクトリのリストがあります。
0 -rw-r--r-- 1 root root 0 Sep 2 15:19 aws.greengrass.LambdaLauncher.log
0 -rw-r--r-- 1 root root 0 Sep 2 15:19 aws.greengrass.LambdaRuntimes.log
0 -rw-r--r-- 1 root root 0 Sep 2 14:53 aws.greengrass.Nucleus.log
80 -rw-r--r-- 1 root root 75017 Sep 2 15:55 greengrass_2022_09_02_15_0.log
40 -rw-r--r-- 1 root root 36930 Sep 2 16:50 greengrass_2022_09_02_16_0.log
216 -rw-r--r-- 1 root root 217065 Sep 2 20:40 greengrass_2022_09_02_20_0.log
96 -rw-r--r-- 1 root root 92764 Sep 2 21:54 greengrass_2022_09_02_21_0.log
64 -rw-r--r-- 1 root root 58307 Sep 2 22:57 greengrass_2022_09_02_22_0.log
48 -rw-r--r-- 1 root root 46475 Sep 6 14:37 greengrass_2022_09_06_14_0.log
16 -rw-r--r-- 1 root root 14845 Sep 6 17:57 greengrass_2022_09_06_17_0.log
40 -rw-r--r-- 1 root root 39037 Sep 6 18:11 greengrass_2022_09_06_18_0.log
184 -rw-r--r-- 1 root root 186318 Sep 6 19:48 greengrass_2022_09_06_19_0.log
12 -rw-r--r-- 1 root root 10793 Sep 6 20:25 greengrass_2022_09_06_20_0.log
124 -rw-r--r-- 1 root root 122363 Sep 6 21:43 greengrass.log
名前がgreengrassで始まるファイルを削除したいと思います。次のワイルドカードコマンドを試しましたが、何も機能しません。
sudo rm /greengrass/v2/logs/greengrass*.*
sudo rm /greengrass/v2/logs/greengrass*
sudo rm /greengrass/v2/logs/greengrass*.log
私は得る:
rm: cannot remove '/greengrass/v2/logs/greengrass*.*': No such file or directory
答え1
今起こっていることはすべて、グローバル拡張に関するものです。
実行時:
sudo rm dir/*
sudoを実行しているシェルは、「*」ワイルドカード文字を拡張しようとします。ディレクトリが読み取れない場合、ワイルドカードはそのままsudoに渡されます。
sudoは実行され、rm
rmdir/*
はグローバル拡張を実行せず、シェル実行のみを実行します。 rmは*
正当ですが、珍しいファイル名であるというファイルを探しています。
sudoを実行しているユーザーがディレクトリを読み取ることができる場合、acutall sudoコマンドは次のようになります。
sudo rm dir/filea dir/fileb dir/filec
これはうまくいきます。ルートをグローバルに拡張するには、次のようにシェルを使用する必要があります。
sudo sh -c "rm dir/*"
その後、sudoは "rm dir / *"コマンドを実行するルートとしてシェルを実行します。シェルはglobを拡張する方法を知っているので「rm dir/filea dir/fileb ...」になります。
答え2
一般ユーザーは/greengrass/v2/logsディレクトリを読むことができますか?そうでない場合は、シェルがファイルのリストと一致するように(ファイルを渡す前にsudo
)ワイルドカードを拡張する必要があり、シェルがディレクトリのrm
内容をリストできない場合はそうしません。
最も簡単な解決策は、おそらくsudo -s
ルートシェルを開き、rm /greengrass/v2/logs/greengrass*.*
そのルートシェルで実行することです。その後、またはControl-Dを使用してexit
ルートシェルを終了し、通常に戻ります。