Как сохранить ход выполнения команды «найти»?

Существуют и другие способы регистрации всех команд, выполненных пользователем. С установленным sysdigможно запустить что-то вроде

# sysdig "user.name = jdoe and evt.type = execve"

для регистрации всех execve(2)вызовов по jdoe; опция -pдля sysdigпозволяет настроить формат вывода и т. д.

Другим способом было бы использование SystemTap, преимущество которого заключается в том, что он поддерживается RedHat; здесь мы предполагаем, что jdoeимеет UID 1000;

probe begin {
    printf("begin trace...\n\n")
}

probe syscall.execve.return {
    if (uid() != 1000) next;
    printf("runs %s[%d]: %s\n", execname(), pid(), cmdline_str());
}

затем это можно запустить с помощью чего-то вроде

# stap-prep
...
# stap whatyousavedtheaboveas.stp

Оба метода, скорее всего, потребуют корректировок, чтобы получить именно то, что вам нужно, обработать условия ошибок, когда execveне работает, и т. д. С другой стороны, sysdigи SystemTapнамного эффективнее, чемstrace(run vmstat 1и посмотрите, как straceвыталкивает контекстные переключатели через крышу во время работы ).

0
22.07.2019, 14:59
2 ответа

Если ваше дерево каталогов относительно статично (, то есть файлы и каталоги создаются или удаляются нечасто ), а не find, вы можете попробовать использовать locate.

locate(1)                 General Commands Manual      locate(1)

NAME
       locate - find files by name

SYNOPSIS
       locate [OPTION]... PATTERN...

DESCRIPTION
       locate reads one or more databases prepared by updatedb(8)
       and writes file names matching at least one of the
       PATTERNs to standard output, one per line.

       If --regex is not specified, PATTERNs can contain globbing characters.
       If any PATTERN contains no globbing characters,
       locate behaves as if the pattern were *PATTERN*.

       By  default, locate does not check whether files found in database
       still exist (but it does require all parent directories to exist
       if the database was built with --require-visibility no).
       locate can  never  report  files created after the most recent
       update of the relevant database.
…
2
28.01.2020, 02:13

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

7
28.01.2020, 02:13

Теги

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