Авторский канал по DevOps разработке.
Ресурсы, обучения, задачи, шпаргалки.
Ежедневно информация пополняется!
Cотрудничество: @energy_c
Post #1152
1.12K

Почему sudo echo всё равно может вернуть Permission denied?
Часто системный файл пытаются изменить так:
Но команда может завершиться ошибкой доступа, хотя перед echo указан sudo.
Причина в порядке выполнения. sudo запускает с повышенными правами только echo, а перенаправление > обрабатывает текущий shell ещё до запуска команды.
Именно обычный пользователь пытается открыть системный файл для записи.
Для таких случаев удобно использовать tee:
Здесь файл открывает уже tee, запущенный через sudo.
Чтобы не перезаписывать файл, а добавить строку в конец, используйте -a:
Многострочный конфиг можно записать через heredoc:
Кавычки вокруг 'EOF' запрещают shell подставлять переменные и выполнять команды внутри блока. Содержимое будет записано буквально.
➡️ DevOps Ready | #совет
Часто системный файл пытаются изменить так:
sudo echo "PORT=8080" \
> /etc/myapp/app.conf
Но команда может завершиться ошибкой доступа, хотя перед echo указан sudo.
Причина в порядке выполнения. sudo запускает с повышенными правами только echo, а перенаправление > обрабатывает текущий shell ещё до запуска команды.
Именно обычный пользователь пытается открыть системный файл для записи.
Для таких случаев удобно использовать tee:
echo "PORT=8080" |
sudo tee /etc/myapp/app.conf \
> /dev/null
Здесь файл открывает уже tee, запущенный через sudo.
Чтобы не перезаписывать файл, а добавить строку в конец, используйте -a:
echo "LOG_LEVEL=info" |
sudo tee -a /etc/myapp/app.conf \
> /dev/null
Многострочный конфиг можно записать через heredoc:
sudo tee /etc/myapp/app.conf \
> /dev/null <<'EOF'
PORT=8080
LOG_LEVEL=info
CACHE_ENABLED=true
EOF
Кавычки вокруг 'EOF' запрещают shell подставлять переменные и выполнять команды внутри блока. Содержимое будет записано буквально.
➡️ DevOps Ready | #совет
- ❤ 7
- 👍 4
- 🔥 2















