Назад | Перейти на главную страницу

Команда «смотреть» для уведомления о вновь созданных файлах в Linux

команда watch для уведомления о вновь созданных файлах в Linux

Как изменить приведенную ниже команду для уведомления о создании нового файла в / usr / local / mydir / пользователем linux john?

watch -d 'ls -l /usr/local/mydir/ | fgrep john'

т.е. я хочу постоянно отслеживать и вызывать другой сценарий, если какой-либо новый файл создается в / usr / local / mydir /.

Поскольку в производстве я не могу использовать какой-либо инструмент вместо сценария оболочки. Так может помочь мне с решением сценария оболочки?

Вместо того, чтобы постоянно вытягивать каталог таким образом, возможно, попробуйте использовать inotify подсистема, которая предназначена для этой цели. Для инструментов пользовательского пространства взгляните на inotify-tools.

inotify предложенный SvenW - отличный выбор для этого.

Просто чтобы отличаться: альтернативный, более полный способ для такого рода вещей - использовать подсистему аудита ядра и auditd. Просто установите auditd если он еще не установлен, а затем используйте auditctl, в твоем случае

auditctl -w /usr/local/mydir/ -p wa -F uid=john -k johnschangedfiles

сделал бы.

Затем вы можете запустить отчет и увидеть очень подробный журнал того, что и когда произошло:

ausearch -f /usr/local/mydir/

Результат будет примерно таким:

time->Fri Feb  3 12:45:19 2012
type=PATH msg=audit(1328265919.961:11): item=0 name="/tmp/test/foo" inode=1839907 dev=fd:00 mode=0100664 ouid=500 ogid=500 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=CWD msg=audit(1328265919.961:11):  cwd="/tmp"
type=SYSCALL msg=audit(1328265919.961:11): arch=c000003e syscall=2 success=yes exit=3 a0=7fffa6f4262e a1=941 a2=1b6 a3=3136fb0d0c items=1 ppid=12414 pid=23531 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=686 comm="touch" exe="/bin/touch" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="jpikkschangedfiles"

Если вы настаиваете на использовании стандартных инструментов, вам может помочь следующий сценарий:

#!/bin/bash
ls -l /usr/local/mydir | grep john > /tmp/watchfile

while true; do
   sleep 10
   ls -l /usr/local/mydir | grep john > /tmp/watchfile2
   diff -q /tmp/watchfile /tmp/watchfile2 > /dev/null
   if [ $? -ne 0 ] ; then
       echo "File list changed" 
       exit ;
   fi
   cp /tmp/watchfile2 /tmp/watchfile
done

Заменить echoс желаемым действием и удалите exit строку, если вы хотите, чтобы этот сценарий запускался непрерывно.

Примечание: это будет действовать при любом изменении списка каталогов, даже если файлы просто обновляются, а не добавляются.