Ursache
Die Shell interpretiert und erweitert alle Glob-Zeichen (Platzhalter), z. B. das Sternchen. Diese Interpretation des Befehls geschieht in der aktuellen Shell (bevor der sudo
Befehl ausgeführt wird), die keine Leseberechtigung für das Verzeichnis hat. Da die aktuelle Shell keine Dateien finden kann, die dem Glob-Muster entsprechen, wird die Erweiterung des Pfadnamens nicht ausgeführt, und die Shell rm
wird -f
(und /var/log/nginx/ab*
mit einem literalen Stern) als Argumente für den sudo
Befehl übergeben.
Der sudo
Befehl startet wiederum den rm
Befehl, mit dem versucht wird, eine Datei mit einem Pfad von /var/log/nginx/ab*
(ein Sternchen ist ein zulässiges Zeichen für einen Unix-Dateinamen) zu entfernen . Da eine solche Datei nicht existiert, meldet sie den Fehler. Bei GNU rm
ist diese Fehlermeldung explizit. Die vollständige Fehlermeldung zeigt an, dass die zu entfernende (einzelne) Datei nicht vorhanden ist:
rm: cannot remove `/var/log/nginx/ab*': No such file or directory
Lösung
Die Lösung besteht darin, eine neue Shell als Superuser mit den erforderlichen Berechtigungen zum Durchführen der Dateinamenerweiterung zu starten:
sudo bash -c "rm -f /var/log/nginx/ab*"
Der obige Befehl startet eine neue Shell, die als root ausgeführt wird, und die -c
Option wird verwendet, um den von der Shell auszuführenden Befehl zu übergeben. Da der Befehl in Anführungszeichen gesetzt ist, wird das Sternchen von der aktuellen Shell nicht interpretiert und unverändert an die neue Root-Shell übergeben, sodass die Pfadnamen vor dem Starten des rm
Befehls erweitert werden können.