<,> E >> sono usati per il reindirizzamento input / output per i comandi - che è una caratteristica fornita dalla shell (es. Bash). Quindi, se si digita un comando come quello, sudo cat > /var/www/info.phpla shell che lo riceve come input tenta di aprire il file /var/www/info.phpe fornisce quel file come output standard al sudocomando. Il sudocomando non è nemmeno consapevole se il suo output sta andando su una console o reindirizzato a un file, perché questo è gestito dalla shell che lo invoca.
Se la shell in cui hai digitato il tuo comando è la shell di login o un'altra shell in esecuzione in un terminale con il tuo ID utente, allora ha gli stessi privilegi del tuo ID utente, non quelli di root.
Quindi nel tuo caso, mentre il comando cat viene eseguito come root, la copia del suo output /var/www/info.phpviene tentata dalla shell in esecuzione come un normale utente, che, come previsto, fallisce.
Una soluzione alternativa per tali situazioni è utilizzare il teecomando:
sudo tee /var/www/info.php
Ciò avrà l'effetto previsto di inserire fino a ^ D tutto il testo immesso nella console nel file specificato come parametro.
Un effetto collaterale forse indesiderabile è che teeecheggerà anche l'output sullo stdout, quindi dopo aver digitato ciascuna riga e premuto invio ne teeverrà restituita una copia. Per evitare ciò è possibile utilizzare la seguente variante.
sudo tee /var/www/info.php > /dev/null
I dettagli su teepossono essere ottenuti tramite info teeun terminale.