Как узнать, какие процессы запускаются/используются при подключении USB-накопителя

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

find. -type f -mtime +59 -print0 |
  xargs -r0 stat -c '%D:%i %b' | awk '
    !seen[$1]++ {sum += $2}
    END {print sum * 512}'

(и да, вам нужно -mtime +59для файлов старше 60 x 24 часов. -mtime +60не будет соответствовать файлу, которому 60,9 дней, поскольку он округлен до 60 дней, а 60 не больше 60 )

Сообщает общее количество байтов. Жесткие ссылки (или другие случаи, такие как привязка -монтирования , где может быть несколько путей к одному и тому же файлу ), учитываются только один раз (, как это делает GNU du;busybox duне делает этого, если жесткие ссылки передаются как отдельные аргументы, а не при обходе одного аргумента каталога ). Однако, как и du, он не будет обнаруживать случаи, когда некоторые данные совместно используются файлами, не -жестко связанными, например, когда файлы были скопированы с помощью cp --reflink=alwaysв файловых системах, таких как btrfs, или когда файловая система выполняет дедупликацию..

Это должно быть эквивалентно специфическому для GNU -:

find. -type f -mtime +59 -print0 |
  du -cB1 --files0-from=- |
  awk 'END{print $1}'

POSIX, и если предположить, что все файлы находятся в одной и той же файловой системе, вы можете сделать:

LC_ALL=C LS_BLOCK_SIZE=512 BLOCKSIZE=512 POSIXLY_CORRECT=1 \
  find. -type f -mtime +59 -exec ls -nisqd {} + | awk '
    !seen[$1]++ {sum += $2}
    END {print sum * 512}'

LS_BLOCK_SIZE=512 BLOCKSIZE=512 POSIXLY_CORRECT=1, чтобы обойти тот факт, что некоторые lsреализации, такие как GNU ls, несовместимы с POSIX по умолчанию. Он не будет работать с busybox ls, который не поддерживает -q. Однако, поскольку он всегда отображает символы новой строки в путях к файлам как ?(, что также не соответствует POSIX ), -qтам не требуется ).

После (здесь в системе GNU):

$ seq 10000 > a
$ truncate -s14T a
$ ln a b
$ touch -d '-60 days' a
$ BLOCKSIZE=1 ls -lis --full-time
total 98304
59944369 49152 -rw-rw-r-- 2 me me 15393162788864 2019-07-29 09:49:25.933 +0100 a
59944369 49152 -rw-rw-r-- 2 me me 15393162788864 2019-07-29 09:49:25.933 +0100 b
$ date --iso-8601=s
2019-09-27T09:50:03+01:00
$ du -h
52K    .

Все дают мне 49152, что представляет собой совокупное использование диска aи b, но отличается от суммы их размера (28 ТиБ )или размера их использования диска (49152 x 2 ).

(обратите внимание, что указанные выше 52 КБ также включают использование диска файлом текущего каталога (., 4 КБ в моем случае )).

По сумме видимых размеров.

find. -type f -mtime +59 -print0 |
  xargs -r0 stat -c %s | awk -v sum=0 '
    {sum += $0}; END{print sum}'

Или с GNUdu:

find. -type f -mtime +59 -print0 |
  du -cbl --files0-from=- |
  awk 'END{print $1}'

Или POSIXly (здесь без ограничения на единую файловую систему):

LC_ALL=C find. -type f -mtime +59 -exec ls -nqd {} + |
  awk -v sum=0 '{sum += $5}; END {print sum}'

В приведенном выше примере все они дают:30786325577728(28 ТиБ ).

1
15.01.2021, 21:21
1 ответ

Вы можете использовать следующее правило udev , чтобы определить, когда usb подключен, а затем, когда usb подключен, символическая ссылка на usb устройство будет создано в папке /dev/tusb и будет выполнен скрипт /tmp/usb_plugged.shдля получения списка процессов:

1 -Создайте правило udev под/etc/udev/rules.d/99-usb.rules:

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", SYMLINK+="tusb", RUN+="/tmp/usb_plugged.sh"

2 -Добавьте следующий скрипт/tmp/usb_plugged.sh:

#!/bin/bash
## Wait for certain time in case of autorun
sleep 10
## Get list of processes using the usb device block symlink and write the output to /tmp/processes.txt
lsof -Fp /dev/tusb | tr -d '^p' > /tmp/processes.txt

3 -Добавить разрешение на выполнение сценария:

chmod +x /tmp/usb_plugged.sh

4 -Наконец, подключите USB для проверки.

2
18.03.2021, 22:36

Теги

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