Реализовать change capture

kill (2) справочная страница объясняет:

Примечания к Linux

В разных версиях ядра Linux применяет разные правила для разрешений, необходимых для непривилегированного процесса для {{1} } отправить сигнал другому процессу. В ядрах 1.0–1.2.2 сигнал может быть отправлен, если эффективный идентификатор пользователя отправителя совпадает с идентификатором получателя или реальный идентификатор пользователя отправителя совпадает с идентификатором получателя. Начиная с ядра 1.2.3 до 1.3.77, сигнал мог быть отправлен, если эффективный идентификатор пользователя отправителя совпадал с реальным или эффективным идентификатором пользователя получателя. Текущие правила , соответствующие POSIX.1-2001, были приняты в ядре 1.3.78.

1
07.12.2018, 19:08
1 ответ

Возможно, даже лучше, чемdiff-вывод, будет такой:

#!/bin/sh -eux

find before -mindepth 1 -printf "%p D\n" | cut -d/ -f2- | sort > files-before
find after -mindepth 1 -printf "%p A\n" | cut -d/ -f2- | sort > files-after
join -a2 -a1 files-before files-after | sed 's/D A$/M'

где:

  • ищем в beforeи afterвсе файлы,
  • опустить сами каталоги beforeи after(-mindepth 1),
  • добавить Dк файлам, найденным в beforeи Aк файлам в after,
  • удалить первый компонент пути из всех найденных файлов (cut),
  • сортировать результаты и сохранять их в двух отдельных файлах.

Последняя команда:

  • соединяет строки, которые говорят об одном и том же файле (см. man join), так что каждый файл (относится к каталогу поиска, поскольку мы удалили, что )появляется ровно один раз, с D, если файл был в beforeили A, если он был в afterили D A, если он был в обоих ),
  • мы включаем имена файлов, которые появляются только в одном из входных файлов (-a1 -a2),
  • , наконец, если файл имеет флаг Dи A, мы меняем его на Mв соответствии с запросом.
0
28.01.2020, 00:22

Теги

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