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