Как интерпретировать сообщение аудита, зарегистрированное во время выключения? [closed]

Если вы хотите найти обычные файлы, возраст которых превышает 10 дней и которые последний раз изменялись в субботу (в часовом поясе пользователя, запустившего сценарий), с помощью GNU инструменты (и вы, похоже, работаете в системе GNU, поскольку используете специфичную для GNU опцию для date и оболочки GNU), вы можете сделать:

find . -type f -mtime +10 -printf '%Tu%p\0' |
  sed -zn 's/^6//p' |
  tr '\0' '\n'

Хотя в конечном итоге GNU добавил (но другой ) stat команда в начале 2000-х для запроса метаданных файла более гибким в сценариях способом, чем с ls , большая часть ее функциональности уже была в GNU find задолго до этого. и с гораздо лучшим интерфейсом, чем у GNU stat .

Большинство других реализаций stat могут дать вам время модификации в любом формате, GNU stat не может (причина, по которой вы в конечном итоге прибегаете к комбинации ls и GNU date в вашем вопросе, я полагаю), но GNU find может (с GNU date вы также можете использовать date -r " $ file "+% u ).

Выше % T - время модификации с использованием указанного формата strftime . % Вт - день недели в виде числа от 1 (понедельник) до 7.Это лучше в сценариях, чем использование % a / % A , зависящих от локали.

Мы печатаем это число, за которым следует путь к файлу, с разделителями NUL, чтобы можно было обрабатывать имена файлов с символами новой строки, и по конвейеру к sed , чтобы выбрать записи, начинающиеся с 6 (и удалите для них 6). Затем при выводе NUL переводятся в новую строку.

-z был добавлен в GNU sed в 2012 году. Если ваш sed старше, вы можете изменить приведенное выше значение на:

find . -type f -mtime +10 -printf '%Tu%p\0' |
  tr '\0\n' '\n\0'
  sed -n 's/^6//p' |
  tr '\0' '\n'

Обычно вы не хочу повторять вывод find , как вы делаете в своем вопросе . Если вы хотите перебрать файлы, найденные с помощью find в bash , вам лучше сделать:

 while IFS=/ read -d '' -ru3 day file; do
   case $day in
     (6) printf '"%s" was last modified on a Saturday\n' "$file";;
   esac
 done 3< <(find . -type f -mtime +10 -printf '%Tu/%p\0')

В zsh вы также можете сделать:

zmodload zsh/stat # for zsh's stat builtin
last_modified_on_a_saturday() {
  local -A stat
  stat -LF %u -H stat -- ${1-$REPLY} &&
    ((stat[mtime] == 6))
}
for file in **/*(ND.m+10+last_modified_on_a_saturday); do
   do-something with $file
done

1
28.08.2017, 10:54
1 ответ

Я использовал неправильный аргумент.

--файл ищет файл.

--В качестве входных данных используется файл.

Так

ausearch --interpret -input /home/user1/audit_shutdown.log

правильно интерпретирует файл

1
27.01.2020, 23:45

Теги

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