Как добавить строку к файлу, который имеет только корневое разрешение записи и продолжать выполнение сценария

Я использовал бы другой подход и совместно использовал бы файлы через список управления доступом на каталоге.

Сначала удостоверьтесь, что списки управления доступом включены в файловой системе, где каталог находится (удостоверьтесь что соответствующая запись в /etc/fstab содержит acl в четвертом столбце). Также удостоверьтесь, что у Вас есть acl установленные утилиты (на Debian, установите acl пакет). Затем дайте обоим пользователям наследуемое разрешение записи на каталоге.

setfacl -m user:other_user:rwx /path/to/directory
setfacl -d -m user:other_user:rwx /path/to/directory

Если существует больше чем два пользователя, любое повторение эта команда для каждого пользователя (ACL неявен для пользователя, который создал каталог); или помещенный пользователи в группу (поскольку Вы уже сделали), и использование -m group:group_name:rwx в setfacl команда.

9
05.05.2012, 01:57
5 ответов

Существует подсказка в sudo страница справочника, которая объясняет, как сделать что-то вроде этого. Вот моя острота:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

Очевидно, необходимо будет сначала настроить пользователя, чтобы иметь sudo полномочия. sh оболочка привыкла из-за перенаправления к корневому файлу. Я также должен был выйти из кавычек, используемых для echo команда.

13
27.01.2020, 20:06

su доступно в большинстве систем Unix и должен работать:

su root -c 'echo "add this line to the code" >> fileName'
2
27.01.2020, 20:06
  • 1
    , В отличие от этого, с sudo, пароли, кажется, не кэшируются с su. –  Ryne Everett 23.03.2015, 00:47
  • 2
    @Ryne Эверетт: Я не знаком с sudo. Но поведение 'su' на самом деле по мере необходимости сценарием OP. Большую часть времени я использую 'su' наоборот: изменение от корня до другого пользователя. В этом случае никакой пароль не необходим ast все. –  miracle173 24.03.2015, 14:02
[1130198] Можно использовать [1130574]тройник[1130575] с [1130576]sudo[1130577]: [12123]echo[1130579] выход перенаправляется с [1130580]|[1130581] ([1130582]труба[1130583]) на [1130584]sudo тройник[1130585]. [1130586]тройник[1130587] считывает со стандартного входа [1130588][1130589] и записывает в [1130590] стандартный выходной файл [1130591] любой данный файл, в данном случае [1130592] имя файла[1130593]. [1130594]-a[1130595] (или [1130596]--append[1130597]) делает [1130598]tee[1130599] добавлением к файлам, без него файлы были бы перезаписаны. Так как [1130600]tee[1130601] выполняется с [1130602]sudo[1130603], то открываются файлы с правами root. Наконец, [1130604]> /dev/null[1130605] подавляет вывод [1130606]tee[1130607] на стандартный вывод [1130608]-[1130609].[12124]Одно из преимуществ использования [1130610]tee[1130611] вместо простого запуска всей команды, включая перенаправление с [1130612]su -c[1130613] или [1130614]sudo sh -c[1130615], заключается в том, что вам не нужно каким-либо образом изменять кавычки исходной команды (кавычки строк, уже содержащих кавычки, могут временами становиться довольно некрасивыми). [1130203]
1
27.01.2020, 20:06

Подойдет:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"
-2
27.01.2020, 20:06

Попробуйте это Эта команда доступна в Unix и Linux.

sudo sh -c "echo 'add this line to the code' >> fileName"

0
27.01.2020, 20:06

Теги

Похожие вопросы