Я пытаюсь следовать тому, что, как я полагаю, является лучшей практикой использования sudo вместо учетной записи root.
Я выполняю простую операцию с файлом concat, такую как:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
Это не так, как справа от ">>", он работает как обычный пользователь. Добавление дополнительных sudos также завершается неудачно (ожидаемое поведение с момента передачи в команду sudo, а не в файл).
Пример только это, но он был проверен и протестирован под учетной записью root.
shell
sudo
io-redirection
quoting
DarkSheep
источник
источник
tee
команды запускаются от имени root, а не основная команда, которая может быть сложной и склонной к неправильному поведению. (не случайecho
)Другой вариант, одинаково безопасны, чтобы использовать
sudo
«s-i
выключатель войти в систему с правами администратора:Это по-прежнему соответствует правилам передового опыта, поскольку учетная запись root на самом деле не включена как таковая, но позволяет безопасно выполнять действия с правами root. От
man sudo
:источник
sudo bash
Если вы выражаете свою команду без одинарных кавычек, вы можете поместить ее в одинарные кавычки и выполнить ее через промежуточную оболочку.
Чтобы выполнить это как root:
Напишите команду другим способом, который не использует
'
:Затем вызовите
sudo sh -c …
:Кроме того, чтобы записать вывод в файл, в который может записать только root, вызовите
sudo tee
. Передайте-a
опцию, чтобыtee
добавить к файлу назначения, в противном случае файл будет усечен.Для более сложных модификаций файлов, вы можете позвонить
sudo sed
,sudo ed
,sudo perl
, ...В качестве альтернативы, используйте приличный редактор и заставьте его называть sudo В Emacs, откройте
/sudo:/etc/conf.d/hwclock
. В Vim вызовите:w !sudo tee %
запись в открытый файл от имени пользователя root или используйте плагин sudo.vim . Или иди с конца sudo и позвониsudoedit /etc/conf.d/hwclock
.Или вы можете уступить темной стороне и запустить оболочку от имени root.
источник
Команда не выполнена из-за разрешений для файла, перенаправленного на. Перенаправление происходит еще до
sudo
вызова команды.Вы должны будете убедиться, что это корень, который фактически открывает файл для записи.
Самый простой способ сделать это:
echo
Может работать , как вы обычный пользователь , как он просто создает текстовую строку.tee
Утилита будет бежать как корень , хотя иtee -a
будет добавлять данные. Мы перенаправляем вывод в/dev/null
потому чтоtee
, по умолчанию, дублируют его входные данные в его стандартный вывод в дополнение к записи в указанные файлы.С
bash
или любой оболочкой, которая понимает "здесь-строки":Это идентично в действительности выше. Только способ, которым мы производим строку, изменяется.
Другой, немного окольный способ сделать это:
Здесь перенаправление происходит внутри
sh -c
дочерней оболочки, работающей от имени пользователя root.источник
sudo dd of=
Чтобы добавить, как вы хотите:
или воссоздать файл с нуля:
Преимущества:
tee
без/dev/null
перенаправленияsh
с тех пор нет подоболочкиdd
имеет много мощных опций, например,status=progress
чтобы увидеть прогресс передачиРаботает потому, что sudo пересылает stdin в команду.
источник