Если вам нужно кумулятивное использование диска (, поскольку ваше использование 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 ТиБ ).
Вы можете использовать следующее правило 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 для проверки.