Sed с inplace редактированием изменяет групповое владение файлом

В зависимости от вашей версии DHCP путь может измениться. В вашем случае конфигурация DHCP может быть в /etc/dhcp/dhcpd.conf . Конфигурация службы будет в / etc / default / isc-dhcp-server .

Если в вашей системе нет устройства eth0 , тогда, очевидно, вам следует выбрать какое-нибудь устройство, которое у вас есть локально (вероятно, eno1 ).

8
15.04.2016, 14:48
3 ответа

Существует небольшая проблема с sed в режиме редактирования на месте -i. sed создает временный файл в том же каталоге под названием sedy08qMA, где y08qMA - случайно сгенерированная строка. Этот файл заполняется измененным содержимым исходного файла. После выполнения операции sed удаляет исходный файл и переименовывает временный файл с исходным именем. Таким образом, это не настоящее inplace edit. Он создает новый файл с правами вызывающего пользователя и новым номером inode. Такое поведение в основном не плохо, но, например, жесткие ссылки могут быть нарушены.

Однако, если вы хотите true inplace edit, вам следует использовать ed. Он читает команды из stdin и редактирует файл напрямую, без временного файла (это делается через буфер памяти ed). Обычно для создания списка команд используется printf:

printf "%s\n" '1,$s/search/replace/g' wq | ed -s file

Команда printf выдает следующий результат:

1,$s/search/replace/g
wq

Эти две строки - команды ed. Первая ищет строку search и заменяет ее на replace. Вторая записывает (w) изменения в файл и завершает работу (q). -s подавляет диагностический вывод.

18
27.01.2020, 20:08

Параметр -i в sed работает, создавая временный файл во время работы, а затем перезаписывая фактический файл временным файлом в конце. Это наиболее вероятная причина проблемы, поскольку при создании владельца временного файла по умолчанию используется myuser: myuser

. Вы можете установить бит setgid в родительском каталоге (только если родительский каталог принадлежит группе www-data ), поэтому файлы, созданные в этом каталоге, наследуют ту же группу.
для этого:

chmod g+s parent-dir-of-your-file  

Я думаю, что это очень типичное использование бита setgid .

8
27.01.2020, 20:08

Использование edвместо sedкажется для этого довольно излишним, учитывая, что вам нужно передать дополнительный ввод. В дистрибутиве, над которым я сейчас работаю, (CentOS 5.10 )есть опция -cдля sed, которая использует «копирование» временного файла, а не просто переименовывает его при использовании с опцией -i. Я протестировал его, и он отлично работал, сохраняя первоначального владельца и группу при встроенном редактировании. Это НЕ сохраняет время модификации.

например,sed -ci -e '3,5d' file.txt

  • -cвместо переименования используется копирование (, т.е.сохраняет собственность/группу)
  • -iвстроенное редактирование
  • -eскрипт/выражение для выполнения

Не уверен, насколько распространен этот параметр для sedв других дистрибутивах. В Solaris 10 этого не было, но в Solaris нет многих вещей, которые мне нужны.

3
27.01.2020, 20:08

Теги

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