フォルダーがあるとしましょう。/var/log/nginx
保護されています(rootが所有し、他の誰もそのルートに読み書きできません)。須藤を使ってもSudo rm -f /var/log/nginx/ab*
「そのようなファイルまたはディレクトリはありません」を取得せずに。これを行うには、実際にルートシェルをロードする必要がありますか、それとも他の方法がありますか?
シェルは、アスタリスクなどのグロブ文字(ワイルドカード)を解釈して展開します。コマンドのこの解釈は、ディレクトリの読み取り権限がない現在のシェル(Sudo
コマンドが実行される前)で行われます。現在のシェルはglobパターンに一致するファイルを見つけることができないため、パス名の展開は実行されず、シェルはrm
、-f
、および/var/log/nginx/ab*
(リテラルアスタリスク付き)を渡します。 Sudo
コマンドの引数として。
次に、Sudo
コマンドはrm
コマンドを起動し、パスが/var/log/nginx/ab*
のファイルを削除しようとします(アスタリスクはUnixファイル名の有効な文字です)。このようなファイルは実際には存在しないため、失敗を報告します。 GNU rm
の場合、このエラーメッセージは明示的です。以下のfullエラーメッセージは、削除される(単一の)ファイルが存在しないことを示します。
rm: cannot remove `/var/log/nginx/ab*': No such file or directory
解決策は、ファイル名の展開を実行するために必要な権限を持つスーパーユーザーとして新しいシェルを起動することです。
Sudo bash -c "rm -f /var/log/nginx/ab*"
上記のコマンドは、rootとして実行される新しいシェルを開始し、-c
オプションを使用して、シェルによって実行されるコマンドを渡します。コマンドが引用符で囲まれているため、アスタリスクは現在のシェルによって解釈されず、そのまま新しいルートシェルに渡され、rm
コマンドを起動する前にパス名を展開できるようになります。
ファイル名に問題があるか、ファイル名にスペースが含まれている可能性があります。
したがって、次の回避策を試してください。
先行してみてください--
オプションの終了を示します。例:
Sudo rm -vf -- /var/log/nginx/ab*
find
を使用します:
Sudo find /var/log/nginx -name "ab*" -print -delete
Linuxでファイルが保護されていると思われる場合は、最初に保護を解除してみてください。
chattr -i ab*