<,> И >> используются для перенаправления ввода / вывода для команд - это функция, предоставляемая оболочкой (например, bash). Таким образом, если вы наберете подобную sudo cat > /var/www/info.phpкоманду, оболочка, получающая ее в качестве ввода, попытается открыть файл /var/www/info.phpи предоставит этот файл в качестве стандартного вывода sudoкоманды. sudoКоманда даже не знает , будет ли его выход происходит на консоль или перенаправлен в файл, так как это позаботятся оболочки , что вызывает его.
Если оболочкой, в которую вы ввели вашу команду, является ваша оболочка входа в систему или другая оболочка, работающая в терминале с вашим идентификатором пользователя, то у нее те же привилегии, что и у вашего идентификатора пользователя, но не привилегии root.
Так что в вашем случае, хотя команда cat выполняется от имени пользователя root, копирование ее выходных данных /var/www/info.phpвыполняется оболочкой, работающей от имени обычного пользователя, что, как и ожидалось, завершается неудачей.
Обходной путь для таких ситуаций должен использовать teeкоманду:
sudo tee /var/www/info.php
Это приведет к тому, что весь текст, введенный на консоли, будет помещен до ^ D в файл, указанный в качестве параметра.
Один, возможно, нежелательный побочный эффект заключается в том, что teeон также выводит вывод на стандартный вывод, поэтому после того, как вы введете каждую строку и нажмете Enter, вы teeполучите ее копию обратно. Чтобы избежать этого, вы можете использовать следующий вариант.
sudo tee /var/www/info.php > /dev/null
Подробности teeможно узнать через info teeтерминал.