Перенаправление вывода выполняется оболочкой, из которой была вызвана команда . Итак, разбивая все на кусочки, вот что происходит *:
вызывает оболочку sudo echo "options drm_kms_helper poll=N", которая выполняет sudoкоманду с echo "options drm_kms_helper poll=N"командной строкой
Судо запрашивает пароль, открывает суперпользователя оболочку и вызывает echo "options drm_kms_helper poll=N", который запускает echoкоманду передачи его"options drm_kms_helper poll=N"
echo, работающий с rootпривилегиями, выводит строку в стандартный вывод.
echoкоманда завершается, суперпользовательская оболочка завершается, sudoзавершается
оболочка, из которой была вызвана команда, собирает выходные данные и пытается перенаправить их /etc/modprobe.d/local.conf, что доступно для записи только пользователю root. Получает ошибку «Отказано в доступе».
Чтобы узнать, как это исправить, смотрите ответ @shantanu.
(*) - хотя приведенная выше последовательность помогает понять, почему команда терпит неудачу, в действительности все происходит несколько не по порядку: исходная оболочка замечает перенаправление и пытается открыть файл для записи перед вызовом sudo ...команды. При открытии файла происходит сбой, оболочка даже не вызывает команду, которая должна была записать файл (спасибо @PanosRontogiannis за это).
Вот быстрый тест:
$ touch ./onlyroot.txt
$ sudo chown root:root ./onlyroot.txt
$ sudo bash -c "whoami | tee who.txt" > onlyroot.txt
bash: onlyroot.txt: Permission denied
В тесте выше whoami | tee who.txtсобирался создать файл с именем, who.txtсодержащим слово «root». Однако, когда перенаправление вывода завершается неудачно в вызывающей оболочке, файл who.txt также отсутствует, так как команда не была вызвана.
saji@laptop:~$ sudo echo "Hi" [sudo] password for saji: Hi