As tags & lt ;, > e > > são usados para redirecionamento de entrada / saída para comandos - que é um recurso fornecido pelo shell (por exemplo, bash). Portanto, se você digitar um comando como sudo cat > /var/www/info.php
, o shell que recebe isso como entrada tentará abrir o arquivo /var/www/info.php
e fornecerá esse arquivo como a saída padrão para o comando sudo
. O comando sudo
nem sequer sabe se sua saída está indo para um console ou redirecionada para um arquivo, porque isso é feito pelo shell que o invoca.
Se o shell em que você digitou seu comando for seu shell de login ou outro shell em execução em um terminal com seu ID de usuário, ele terá os mesmos privilégios que seu ID de usuário - não os de root.
Portanto, no seu caso, enquanto o comando cat é executado como root, a cópia de sua saída para /var/www/info.php
é tentada pelo shell sendo executado como um usuário normal, o que, como esperado, falha.
Uma solução alternativa para essas situações é usar o comando tee
:
sudo tee /var/www/info.php
Isso terá o efeito pretendido de colocar todo o texto digitado no console até ^ D no arquivo especificado como parâmetro.
Um efeito secundário talvez indesejável é que tee
também fará o eco da saída para o stdout, portanto, depois de digitar cada linha e pressione Enter, tee
exibirá uma cópia dela. Para evitar isso, você pode usar a seguinte variante.
sudo tee /var/www/info.php > /dev/null
Detalhes sobre tee
podem ser obtidos via info tee
em um terminal.