Как позволить пользователям копировать файлы с другим пользователем и группой?

$ pcregrep -Mo 'pin\(ABC\) (\{([^{}]++|(?1))*\})' file
pin(ABC) {
              a b c d e f {
              abc
              }
             }

Если у вас нет pcregrep , но есть GNU grep , и он был построен с поддержкой шаблонов PCRE, и ваш файл не слишком велик и не содержит символов NUL, вы можете:

grep -zPo 'pin\(ABC\) (\{([^{}]++|(?1))*\})' file

Те ( pcregrep и grep -P ) используют шаблоны PCRE, которые поддерживают рекурсивные операторы регулярных выражений.

pcregrep -M включает многострочный режим (где pcregrep может тянуть несколько строк по мере необходимости при сопоставлении с регулярным выражением), а grep -z сообщает, что записи имеют значение NUL- разделены вместо строк .

Приведенный выше трюк заключается в операторе (? 1) , который означает регулярные выражения внутри первой группы парен , поэтому у нас есть рекурсивное регулярное выражение: we ' повторное сопоставление {, за которым следует последовательность из 0 или более ( * ) последовательностей символов без скобок ( [^ {}] ++ , ++ является притяжательной версией + ) или регулярным выражением во внешнем (...) снова ( { с последующим...).

Подробности см. На странице руководства для pcrepattern . Это почти дословно скопировано из приведенного здесь примера.

Использование perl :

perl -l -0777 -ne 'print $& while /pin\(ABC\) (\{([^{}]++|(?1))*\})/g'

(как и для grep , он забирает весь файл в память).

1
10.11.2014, 20:07
1 ответ

что я могу сделать на групповом уровне, чтобы убедиться, что nginx будет читать эти файлы?

Не похоже, что будет какая-то особая проблема с помещением пользователя nginx в группу разработчиков:

В качестве корневого:

usermod -a -G developers nginx

Пользователь может быть в нескольких группах. Вы можете видеть, в каких группах nginx в настоящее время находится:

grep nginx /etc/group
# Or more simply:
id nginx

Если постановка nginx в develo создает какую-то проблему, вам нужно создать новую группу, поместить в неё пользователя nginx и developers и убедиться, что передаваемые файлы имеют этот GID.

Обратите внимание, что вы должны снова войти в систему, прежде чем новые члены группы станут доступны. Для нелогин-аккаунтов (предположительно nginx) вы можете просто использовать su или запустить процесс, который делает то же самое (в этом случае должен работать сам nginx-сервер).

1
27.01.2020, 23:51

Теги

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