<,> Und >> werden für die Eingabe- / Ausgabeumleitung für Befehle verwendet - eine Funktion, die von der Shell bereitgestellt wird (z. B. bash). Wenn Sie also einen Befehl wie sudo cat > /var/www/info.phpdiesen eingeben, versucht die Shell, die diesen als Eingabe empfängt, die Datei zu öffnen /var/www/info.phpund stellt diese Datei als Standardausgabe für den sudoBefehl bereit . Dem sudoBefehl ist nicht einmal bewusst, ob seine Ausgabe an eine Konsole oder in eine Datei umgeleitet wird, da die Shell, die ihn aufruft, dies erledigt.
Wenn die Shell, in die Sie Ihren Befehl eingegeben haben, Ihre Anmeldeshell oder eine andere Shell ist, die in einem Terminal mit Ihrer Benutzer-ID ausgeführt wird, hat sie dieselben Berechtigungen wie Ihre Benutzer-ID - nicht die von root.
Während in Ihrem Fall der Befehl cat als root ausgeführt wird, wird das Kopieren seiner Ausgabe in /var/www/info.phpvon der Shell versucht, die als normaler Benutzer ausgeführt wird, was erwartungsgemäß fehlschlägt.
Eine Problemumgehung für solche Situationen ist die Verwendung des teeBefehls:
sudo tee /var/www/info.php
Dies hat den beabsichtigten Effekt, dass der gesamte an der Konsole eingegebene Text bis zu ^ D in die als Parameter angegebene Datei eingefügt wird.
Ein möglicherweise unerwünschter Nebeneffekt ist, dass teedie Ausgabe auch an die Standardausgabe zurückgegeben wird. Nachdem Sie also jede Zeile eingegeben und die Eingabetaste gedrückt haben, wird teeeine Kopie davon zurückgegeben. Um dies zu vermeiden, können Sie die folgende Variante verwenden.
sudo tee /var/www/info.php > /dev/null
Details teedazu erhalten Sie über info teeein Terminal.