Les <,> et >> sont utilisés pour la redirection d'entrée / sortie des commandes - qui est une fonctionnalité fournie par le shell (par exemple, bash). Donc, si vous tapez une commande comme celle-ci, sudo cat > /var/www/info.phple shell qui le reçoit en entrée essaie d'ouvrir le fichier /var/www/info.phpet fournit ce fichier comme sortie standard de la sudocommande. La sudocommande ne sait même pas si sa sortie va sur une console ou est redirigée vers un fichier, car cela est pris en charge par le shell qui l'invoque.
Si le shell dans lequel vous avez tapé votre commande est votre shell de connexion ou un autre shell exécuté dans un terminal avec votre identifiant utilisateur, il a les mêmes privilèges que votre identifiant utilisateur - pas ceux de root.
Donc, dans votre cas, alors que la commande cat est exécutée en tant que root, la copie de sa sortie vers /var/www/info.phpest tentée par le shell s'exécutant en tant qu'utilisateur normal, ce qui, comme prévu, échoue.
Une solution de contournement pour de telles situations consiste à utiliser la teecommande:
sudo tee /var/www/info.php
Cela aura pour effet de mettre tout le texte saisi sur la console jusqu'à ^ D dans le fichier spécifié en paramètre.
Un effet secondaire peut-être indésirable est qu'il teefera également écho à la sortie vers la sortie standard, donc après avoir tapé chaque ligne et appuyé sur Entrée tee, une copie en sera renvoyée. Pour éviter cela, vous pouvez utiliser la variante suivante.
sudo tee /var/www/info.php > /dev/null
Les détails teepeuvent être obtenus via info teeun terminal.