Здравствуйте, мне нужна небольшая помощь, пожалуйста:
У меня есть упражнение, которое я хочу сделать, это:
Создайте сценарий для мониторинга КАТАЛОГА и для каждого создания файла добавляйте новую строку в register_file, показывающую дату и час, имя файла и имя пользователя, создавшего файл.
Я пробовал:
inotifywait -m -e create -o register_file --timefmt '%d-%m-%Y-%H:%M' --format '%T %f' ./
Но как узнать имя пользователя?
Спасибо.
Моей первой интуицией было бы увидеть / proc. Я изучал man inotifywait, inotifywatch и incron, но ничего не помогает.
Вот bash-скрипт, который вы можете запустить и который выдаст вам владельца. Вместо echo владельца вы можете записать его в register_file
#! /bin/bash
export fCreation=$(tail -1 ./register_file) #get the newest file creation documentation
export fName=${fCreation##* } #get the last word, which is the file name
export details=$(ls -al | grep $fName)
export owner=${details#* } #removes the file's permissions
owner=${owner#* }
owner=${owner#* }
owner=${owner%% *}
echo $owner
на самом деле, если вы используете stat --format=%U $fName
, вы легко получите владельца.
EDIT:
Из man 7 inotify:
"Ограничения и предостережения... API inotify не предоставляет никакой информации о пользователе или процессе, который" инициировал событие inotify.
Disclaimer:
Ни в коем случае не являясь экспертом в inotify
, я увидел в этом возможность узнать что-то новое. Итак, вот мой подход:
#!/bin/bash
watchedDir="toWatch"
inotifywait -m "$watchedDir" -e create |
while read -r file; do
name=$(stat --format %U $file 2>/dev/null)
date=$(stat --format %y $file 2>/dev/null)
fileName=${file/* CREATE /}
echo "File: '$fileName' Creator: $name Date: ${date%.*}"
done
После выполнения:
./watchDir.sh
Setting up watches.
Watches established.
Когда я добавляю файл в каталог toWatch
из другого терминала:
touch toWatch/a_file
... вот какой вывод я получаю:
./watchDir.sh
Setting up watches.
Watches established.
File: 'a_file' Creator: maulinglawns Date: 2016-12-10 12:29:42
И, добавляя еще один файл...
touch toWatch/another_file
Дает...
./watchDir.sh
Setting up watches.
Watches established.
File: 'a_file' Creator: maulinglawns Date: 2016-12-10 12:29:42
File: 'another_file' Creator: maulinglawns Date: 2016-12-10 12:31:15
Конечно, если вы хотите, чтобы вывод перенаправлялся в файл, вам придется реализовать эту часть.
Это основано на посте @jasonwryan здесь. Но я еще не разобрался с опцией --format
для inotifywait
. Она находится в моем списке TODO, поэтому я решил использовать stat
вместо нее.