sed на не - принадлежавший файл

предложенный mv -uf dir1/* dir2/ переместите (sub) каталоги, не каждый файл. Вы могли бы попытаться использовать find

cd dir1
find . -type d -exec mkdir -p dir2/"{}" \;
find . -type f -exec mv -uf "{}" dir2/"{}" \;

или что-то подобное

0
задан 29 October 2009 в 16:03
2 ответа

Это вероятно это sed -i создаст совершенно новый файл, затем заменяют оригинал им. Это означает, что у Вас должен был бы быть доступ для записи к каталогу /etc, не только файл.

Ни один из инструментов, которые создают новый файл, не будет работать без того питания, и это справедливо так: /etc очень важный каталог, и Вы, вероятно, не должны играть там без разрешения :-)

Одно решение состоит в том, чтобы поместить Ваш файл где-нибудь, откуда можно изменить его, затем просто создать гибкую ссылку на него /etc. что-то как:

ln -s /my_directory/my_file /etc/my_file

Вы должны будете базироваться полномочия создать ссылку, конечно. Гибкая ссылка будет препятствовать тому, чтобы связь исчезла, должен Вы делать new-file/rename операцию, так как гибкая ссылка является просто файлом, содержащим путь назначения (с которым, в отличие от inode, не изменится sed -i).

И это ограничивает их питание изменением того файла и того файла только. Никакая возможность для дыр в системе безопасности путем открытия полномочий на /etc.

4
ответ дан 4 December 2019 в 11:14
  • 1
    Вы абсолютно правы. Однако я не хочу давать выполняющему сценарий пользователю +w на / и т.д. –  Mo. 29 October 2009 в 16:14
  • 2
    О, ха... Мне действительно нравится идея символьной ссылки!Большое спасибо! –  Mo. 29 October 2009 в 16:16
  • 3
    Если Вы идете путем символьной ссылки, удостоверьтесь, что Вы блокируете вниз " my_directory" так кто-то еще can' t заменяют файл. Существует причина, почему/etc/заблокирован вниз настолько же трудно, как это, и Вы ниспровергаете это на Ваш собственный риск. –  Paul Tomblin 29 October 2009 в 16:46
  • 4
    Обратите внимание, что Вам не нужны никакие специальные полномочия создать символьную ссылку в, например,/tmp, который указывает на файл в / и т.д. (так " You' ll должны базироваться полномочия создать link" комментарий является поддельным). Остальное в порядке. –  Jonathan Leffler 30 October 2009 в 00:21
  • 5
    @JonathanL, it' s не поддельный. Метод должен создать символьную ссылку в/, и т.д. указывающем где-то в другом месте (который требует доступа для записи к / и т.д.), не наоборот, поскольку Вы, кажется, неправильно поняли. –   30 October 2009 в 15:04

Вместо того, чтобы использовать "sed-i", Вы могли попробовать

sed ... > /tmp/foo && cat /tmp/foo > /etc/file

Тем путем Вы делаете фактическое изменение файла в файл в/tmp, и затем пишущий, что результат в файл, что Вы имеете доступ для записи, но не заменяете доступ.

3
ответ дан 4 December 2019 в 11:14
  • 1
    That' s путь я иду на данный момент. Это не чувствует очень " elegant" мне, но это работает... –  Mo. 29 October 2009 в 16:15
  • 2
    Используйте CP вместо кошки, я предлагаю - это - более прямое выражение того, что Вы делаете. –  Jonathan Leffler 30 October 2009 в 00:18

Теги

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