Почему не хватает прав для перенаправления вывода?
sudo echo "121.0.0.1 test.dev" >> /etc/hosts
sudo применяется только к вызову команды echo, запись в файл выполняется от имени обычного пользователя
правильно сделать такecho "121.0.0.1 test.dev" | sudo tee -a /etc/hosts
echo выполняется от обычного пользователя, ее вывод перенаправляется на вход команды tee, запущенной от имени рута, она входной поток дописывает (-a опция) в конец файла, ну и дублирует в stdout.
получается запись в файл от имени рута.
ибо sudo sh -c 'echo "127.0.0.1\texample.com\n" >> /etc/hosts'
по крайней мере в макоси.