Перенаправления потоков не подхватывают sudo
Допустим, нужно записать строку в файл:
echo 'string' > file
Если прав на запись нет, то будет ошибка доступа. В таком случае обычно на автомате пробуешь с sudo:
sudo echo 'string' > file
Но это тоже не работает.
Потому что перенаправления выполняются текущей оболочкой. И если у этой оболочки (то есть, у пользователя) нет прав на файл, то sudo не помогает.
Возможные решения:
-
Запустить новую оболочку под
sudoи выполнить команду внутри неё:sudo bash -c "echo 'string' > file" -
Использовать другой способ запуска команды от имени администратора вместе с перенаправлением. Например, положить скрипт в файл и выполнить его через
sudo. Или передать команду через pipe в оболочку сsudo— вариантов много. -
Банально авторизоваться как администратор и делать всё от его имени:
sudo -i -
Если нужно просто записать данные в файл — можно использовать
tee:echo 'string' | sudo tee file
Есть и другие варианты, но суть одна: sudo не влияет на оператор перенаправления.