Это довольно простой вопрос, по крайней мере, так кажется, о разрешениях sudo в Linux.
Часто я просто хочу добавить что- /etc/hosts
либо в подобный файл или в другой файл, но в конечном итоге не могу, потому что и то, >
и другое >>
запрещено, даже с правами root.
Есть ли какое - то образом , чтобы сделать эту работу без необходимости su
или sudo su
в корень?
echo 'tmpfs /tmp tmpfs defaults 0 0' | sudo tee /etc/fstab
бы сделатьtee -a
вместоtee --append
.-a
--append
флага ( ) команда перезапишет весь файл с заданной строкой, а не добавит его в конец.Проблема в том, что оболочка выполняет перенаправление вывода, а не sudo или echo, поэтому это делается обычным пользователем.
Попробуйте следующий фрагмент кода:
источник
sh
, echo может интерпретировать escape-последовательности как\t
внутри одинарных кавычек. Вы могли бы использоватьprintf %s 'something'
вместо этого.sudo /bin/bash -c "echo 'fs.inotify.max_user_watches = 524288' > /etc/sysctl.d/60-golang-inotify.conf"
например.Проблема в том, что ваша оболочка обрабатывает перенаправление; он пытается открыть файл с вашими разрешениями, а не с теми процессами, которые вы запускаете под sudo.
Используйте что-то вроде этого, возможно:
источник
sudo
(из соображений безопасности) среда не распространяется на подпроцесс. Вы можете использовать,sudo -E
чтобы обойти это ограничение.sudo sh -c "echo 'something' >> $FILENAME"
с двойными кавычками, это будет работать - замена переменных выполняется внешней оболочкой, а не sudoed.источник
дела
должно сработать. Проблема в том, что> и >> обрабатываются вашей оболочкой, а не командой "sudoed", поэтому разрешения принадлежат вам, а не пользователю, которому вы "судоете".
источник
Я хотел бы отметить, для любопытных, что вы также можете процитировать heredoc (для больших блоков):
источник
"
В Bash вы можете использовать
tee
в сочетании с,> /dev/null
чтобы сохранить стандартный вывод в чистоте.источник
Используя ответ Yoo , поместите это в
~/.bashrc
:Теперь вы можете запустить
sudoe 'deb blah # blah' /etc/apt/sources.list
Редактировать:
Более полная версия, которая позволяет направлять входные данные или перенаправлять их из файла и включает
-a
переключатель для отключения добавления (который включен по умолчанию):источник
Вы также можете использовать
sponge
изmoreutils
пакета и не нужно перенаправлять вывод (т.е. безtee
шума, чтобы скрыть):источник
Используя sed -i с $ a , вы можете добавить текст, содержащий как переменные, так и специальные символы, после последней строки.
Например, добавив $ NEW_HOST с $ NEW_IP в / etc / hosts:
Варианты sed объяснили:
источник
эхо "Hello World" | (sudo tee -a /etc/apt/sources.list)
источник
Как насчет:
эхо текста | sudo dd status = none of =
Privilefile. Я хочу изменить / proc / sys / net / ipv4 / tcp_rmem.
Я сделал:
sudo dd status = none of = / proc / sys / net / ipv4 / tcp_rmem <<< «4096 131072 1024000»
устраняет эхо с помощью однострочного документа
источник
Это сработало для меня: оригинальная команда
Рабочая команда
источник
tee -a
. Простоtee
перепишу файл!Можете ли вы изменить владельца файла, а затем снова изменить его после
cat >>
добавления?Что-то вроде этой работы для вас?
источник