Перенаправления потоков не подхватывают sudo

Допустим, нужно записать строку в файл:

echo 'string' > file

Если прав на запись нет, то будет ошибка доступа. В таком случае обычно на автомате пробуешь с sudo:

sudo echo 'string' > file

Но это тоже не работает.

Потому что перенаправления выполняются текущей оболочкой. И если у этой оболочки (то есть, у пользователя) нет прав на файл, то sudo не помогает.

Возможные решения:

  1. Запустить новую оболочку под sudo и выполнить команду внутри неё:

    sudo bash -c "echo 'string' > file"
    
  2. Использовать другой способ запуска команды от имени администратора вместе с перенаправлением. Например, положить скрипт в файл и выполнить его через sudo. Или передать команду через pipe в оболочку с sudo — вариантов много.

  3. Банально авторизоваться как администратор и делать всё от его имени:

    sudo -i
    
  4. Если нужно просто записать данные в файл — можно использовать tee:

    echo 'string' | sudo tee file
    

Есть и другие варианты, но суть одна: sudo не влияет на оператор перенаправления.