Действительно ли возможно узнать, какая программа или сценарий создали данный файл?

Используя tr ard wc:

function countchar()
{
    while IFS= read -r i; do printf "%s" "$i" | tr -dc "$1" | wc -m; done
}

Использование:

$ countchar '"' <file.txt  #returns one count per line of file.txt
1
3
0

$ countchar ')'           #will count parenthesis from stdin
$ countchar '0123456789'  #will count numbers from stdin
36
18.01.2011, 23:24
6 ответов

Я не полагаю, что существует способ определить, какая программа создала файл.

Для Вашего альтернативного вопроса: можно наблюдать за файлом, который будет воссоздан, тем не менее, с помощью inotify. inotifywait интерфейс командной строки для inotify подсистема; можно сказать этому искать create события в Вашем корневом каталоге:

$ (sleep 5; touch ~/making-a-test-file) &
[1] 22526

$ inotifywait -e create ~/
Setting up watches.
Watches established.
/home/mmrozek/ CREATE making-a-test-file

Вы, вероятно, хотите выполнить его с -m (монитор), который говорит этому не выходить после того, как это будет видеть первое событие

18
27.01.2020, 19:36
  • 1
    Как я добираюсь inotify? Это не установило (ядро 2.6.34) и существует нет /dev/inotify. –  Wolf 18.01.2011, 21:52
  • 2
    @Wolf, Что дистрибутив? При создании собственного ядра это CONFIG_INOTIFY_USER (Filesystems -> Inotify support for userspace). inotifywait находится, вероятно, в пакете, названном чем-то как inotify-tools –  Michael Mrozek♦ 18.01.2011, 22:01
  • 3
    @Michael, это - openSUSE 11.3. Я никогда не создавал ядро; только использовали Linux приблизительно 5 месяцев, и это - определенное пугающее понятие. Но я наведу справки об учебном руководстве или чем-то. –  Wolf 18.01.2011, 22:03
  • 4
    @Wolf ну, ответ dogbane мог бы быть легче, если ядро, которое Вы имеете, не идет с ним, –  Michael Mrozek♦ 18.01.2011, 22:07
  • 5
    @Michael На самом деле, после немного большего количества поиска и исследования, я добавил общественный репозиторий, который, это складывается, содержит inotify-tools пакет, таким образом, я теперь имею inotifywaitinotifywatch). Я проверил его, и это, кажется, работает. –  Wolf 18.01.2011, 22:46

Можно наблюдать все, что происходит в файловой системе путем доступа к нему по LoggedFS. Это - сложенная файловая система, которая регистрирует каждый доступ в дереве каталогов.

loggedfs -l /var/tmp/$USER-home-fs.log ~

Вход Вашего целого корневого каталога мог бы замедлить Вашу систему все же. Вы, по крайней мере, захотите записать конфигурационный файл со строгими фильтрами.

Если у Вас есть корневой доступ на Linux, можно использовать контрольную подсистему для входа большого количества вещей, включая доступы к файловой системе. Удостоверьтесь auditd демон запускается, затем настройте то, с чем Вы хотите зарегистрироваться auditctl. Каждая зарегистрированная операция зарегистрирована в /var/log/audit/audit.log (на типичных дистрибутивах). Начинать наблюдать конкретный файл:

auditctl -w /path/to/file

или в подробной форме

auditctl -a exit,always -F path=/path/to/file

Если Вы помещаете часы в каталог (с -w или -F dir=), за файлами в нем и его подкаталогах рекурсивно также наблюдают.

22
27.01.2020, 19:36

Вы могли бы хотеть смотреть на auditd, этот пакет позволяет Вам делать аудит безопасности и получать большую информацию о том, кто изменился что в файловой системе.

4
27.01.2020, 19:36
  • 1
    , если у Вас есть сервер, который предоставляет доступ оболочки многочисленным пользователям и потребность обеспечить некоторый уровень отслеживаемости для отдельных действий, можно создать определенные оболочки (как удар и tcsh) с входом истории команд. Я записал сообщение в блоге о входе в систему оболочек в <timkennedy.net/2010/12/07 / …>. Вход Shell не является заменой для реальной системы аудита, поскольку он не зарегистрирует команды, выполненные неинтерактивными оболочками (как сценарии или программы). Для получения такой гранулярности, Вам действительно нужно хорошее решение для аудита. –  Tim Kennedy 13.10.2011, 17:22
  • 2
    @TimKennedy - Ваше сообщение в блоге не подходит больше. –  slm♦ 29.08.2013, 21:36
  • 3
    Извините. сайт был взломан и снизился некоторое время. новая страница в timkennedy.net/2010/12/logging-shell-commands-to-syslog-on.html –  Tim Kennedy 14.11.2013, 20:24

Вы не имеете inotify таким образом, можно записать сценарий, который проверяет на файл в цикле:

#!/bin/sh

while [ true ]; do                     # Run for as long as nessesary
  if [ -f /path/to/file ]; then        # If fileexists
    echo "Found file"                  # Notify and stop monitoring
    exit 0
  fi
  sleep 5                             # Else wait 5 secs
done
2
27.01.2020, 19:36
  • 1
    Это не показывает, какая программа создала его –  OverCoder 01.11.2017, 20:18

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

Одним из вариантов является использованиеsysdig:открытого -приложения для мониторинга системы. Используя его, вы можете отслеживать активность файла по имени. Предположим, вы хотите увидеть, какой процесс создает файл с именем/tmp/example.txt:

# sysdig fd.name=/tmp/example.txt
567335 16:18:39.654437223 0 touch (5470) < openat fd=3(<f>/tmp/example.txt) dirfd=-100(AT_FDCWD) name=/tmp/example.txt flags=70(O_NONBLOCK|O_CREAT|O_WRONLY) mode=0666
567336 16:18:39.654438248 0 touch (5470) > dup fd=3(<f>/tmp/example.txt)
567337 16:18:39.654438592 0 touch (5470) < dup res=0(<f>/tmp/example.txt)
567338 16:18:39.654439629 0 touch (5470) > close fd=3(<f>/tmp/example.txt)
567339 16:18:39.654439764 0 touch (5470) < close res=0
567342 16:18:39.654441958 0 touch (5470) > close fd=0(<f>/tmp/example.txt)
567343 16:18:39.654442111 0 touch (5470) < close res=0

Из этого вывода видно, что процесс с именем touchи pid 5470 открыл файл.

Если вам нужна дополнительная информация, вы можете запустить «режим захвата», в котором собирается трассировка системных вызовов:

# sysdig -w /tmp/dumpfile.scap

Затем дождитесь создания файла, затем остановите sysdigи запустите:

# csysdig -r /tmp/dumpfile.scap

Это позволит вам изучить все, что произошло. Вы можете нажать <F2>и выбрать Files, нажать <F4>, чтобы найти имя файла, затем нажать <F6>, чтобы «копать» (, что покажет вам вывод, аналогичный приведенной выше команде ). При этом вы можете использовать тот же подход для поиска информации о процессе, который фактически создал файл.

Существует версия csysdigс графическим интерфейсом под названием sysdig-inspect, если она вам больше нравится.

7
20.08.2021, 13:38

Вы можете использовать систему аудита Linux для получения информации и событий, происходящих с файлами.

touch hello.txt
sudo auditd
sudo auditctl -w $PWD/hello.txt -p warx -k hello-file
echo 'hello world' > hello.txt
sudo ausearch -k hello-file
0
20.08.2021, 13:38

Теги

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