Поиск по сайту:
Редактирование - это выражение того же, но другими словами. (Алан.Дж.Перлис)

Перенаправление стандартного вывода в файл с помощью sudo и tee

19.07.2023
Перенаправление стандартного вывода в файл с помощью sudo и tee

При попытке изменить файл без разрешения на запись в него вы получите ошибку permission denied. Глобальное изменение разрешения для рассматриваемого файла может быть неправильным подходом, поскольку это может привести к серьезным дырам в безопасности, подумайте о некоторых файлах в /etc.

[andreyex@host ~]$ touch donottouch.txt && sudo chown root donottouch.txt
[andreyex@host ~]$ cat donottouch.txt
[andreyex@host ~]$ echo "change stuff" > donottouch.txt
-bash: donottouch.txt: Permission denied

 

Использование sudo before echo вам не поможет, поскольку перенаправление все равно будет применяться в вашей среде командной строки. Вот несколько подходов к этой проблеме.

Очевидно, что вы можете переключиться на привилегированного пользователя с помощью sudo -i (см. man sudo):

[andreyex@host ~]$ sudo -i
Password:
[root@host ~]$ echo "change stuff" > donottouch.txt

 

К сожалению, этот подход не работает, если вы пытаетесь автоматизировать задачу и не хотите, чтобы скрипт запускался от имени root. Одним из вариантов было бы использовать sudo и корректно вычислять код в однострочном:

[andreyex@host ~]$ sudo sh -c 'echo "change stuff" > donottouch.txt'
[andreyex@host ~]$ cat donottouch.txt
change stuff

 

Лучшим подходом, позволяющим использовать более детализированные разрешения в файле sudoers, было бы использовать комбинацию sudo и tee (она же pipe fitting).

Утилита tee копирует стандартный ввод в стандартный вывод, создавая копию в нулевых или более файлах. Вывод небуферизован.

[andreyex@host ~]$ echo "change stuff" | tee donottouch.txt
-bash: donottouch.txt: Permission denied
[andreyex@host ~]$ echo "change stuff" | sudo tee donottouch.txt
Password:
change stuff
[andreyex@host ~]$ cat donottouch.txt
change stuff

 

Если вы не хотите видеть текст, отображаемый tee, вам просто нужно перенаправить стандартный вывод на /dev/null.

$ echo "change stuff" | sudo tee donottouch.txt >/dev/null
Password:
$ cat donottouch.txt
change stuff

 

Использование tee -a позволит вам добавлять содержимое так же, как вы бы делали с >>.

👉 Вы можете использовать тот же метод непосредственно из vim использования комбинации :w !sudo tee %. Содержимое буфера :w отправляется следующей команде. ! Выполните внешнюю команду и sudo tee будет сделано, как указано выше. % в vim укажите текущее имя файла.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
В прошлом месяце линейка серверных процессоров AMD Epyc получила значительный прирост, поскольку…

Спасибо!

Теперь редакторы в курсе.