Вопрос или проблема
Существует ли способ отслеживать и записывать размер папки в Bash/Ubuntu? Я запускаю некоторые вычисления и мне нужно знать, сколько места на диске они занимают. Возможно, они создадут несколько временных папок на несколько минут/часов.
На самом деле, мне нужен только пик этого размера папки.
watch
не предназначен для создания лог-файлов.
То, что вы ищете, – это что-то вроде:
#!/bin/bash
while :
do
du -skh /ваша-директория
echo "Нажмите [CTRL+C], чтобы остановить.."
sleep 1
done
Хотя это давно устарело, я подумал, что мог бы добавить подход на основе inotify
к делу, вместо основанного на времени или ожидании.
Если файл записывается и закрывается, или если файл удаляется, сработает du
, и это будет записано с меткой времени и размером в МБ.
Если вы уберете один из q
в -qq
, вы увидите события и связанные с ними имена файлов в терминале, в котором выполняется скрипт.
#!/bin/sh
while inotifywait -qq -r -e close_write -e delete /путь/к/директории; do
(/usr/bin/echo -en "$(date '+%Y%m%d%H%M%S')\t";du -sm|cut -f1) >> ~/du.log
done
После завершения вашего кода просто выполните это:
sort -k2,2n ~/du.log|tail -n 1
И вы готовы.
Примечание: Если dir
в приведенном выше скрипте является вашей домашней директории, вам, очевидно, нужно будет сохранить лог в другое место.
Вы можете попробовать что-то вроде:
watch "du -skh /ваша-директория"
Если размер/количество файлов увеличивается, установите интервал с помощью -n
значительно больше 2 секунд.
Ответ или решение
Как мониторить размер папки в Linux
Мониторинг размера папки в Linux может быть важным для контроля использования дискового пространства, особенно при выполнении вычислений, создающих временные файлы и папки. В этом руководстве мы рассмотрим несколько методов, которые позволят вам эффективно отслеживать размер папки и фиксировать его изменения в логах.
Метод 1: Использование скрипта на Bash
Одним из простых подходов является написание Bash-скрипта, который будет периодически проверять размер каталога. Пример скрипта, который можно использовать для этой цели:
#!/bin/bash
while :
do
du -skh /ваша-директория
echo "Нажмите [CTRL+C], чтобы остановить.."
sleep 1
done
Этот скрипт будет выводить размер указанной папки с интервалом в одну секунду. Вы можете изменить /ваша-директория
на путь к папке, которую хотите отслеживать. Однако этот подход не записывает данные в лог.
Метод 2: Использование inotify
для отслеживания событий
Более эффективным способом мониторинга размера папки является использование inotify
. Это позволит вашему скрипту реагировать на события, такие как создание или удаление файлов, что позволяет вести учет размера папки более точно и быстро. Пример скрипта на основе inotify
:
#!/bin/sh
while inotifywait -qq -r -e close_write -e delete /путь/к/директории; do
(/usr/bin/echo -en "$(date '+%Y%m%d%H%M%S')\t"; du -sm /путь/к/директории | cut -f1) >> ~/du.log
done
В этом скрипте:
inotifywait
отслеживает изменения в указанной папке.- Когда изменяются файлы, выполняется команда
du
, и результат записывается в файлdu.log
с отметкой времени. - Убедитесь, что у вас есть соответствующие разрешения на запись в указанный лог-файл.
После того как выполнение ваших вычислений завершится, вы можете получить пиковой размер папки с помощью следующей команды:
sort -k2,2n ~/du.log | tail -n 1
Метод 3: Использование watch
для периодического мониторинга
Если вы предпочитаете более простой подход, можете воспользоваться командой watch
. Например, выполните следующую команду:
watch -n 2 du -skh /ваша-директория
Эта команда будет каждые 2 секунды выводить текущий размер папки. Вы можете увеличить интервал, если количество файлов изменяется медленно.
Заключение
Выбор метода мониторинга размера папки в Linux зависит от ваших потребностей. Для простой проверки можно использовать Bash-скрипт или команду watch
, тогда как inotify
предоставляет мощный способ мониторинга в реальном времени, особенно в средах с динамическими изменениями файлов. Каждый из этих подходов может быть адаптирован в зависимости от специфики ваших вычислений и требований к логированию.
Пожалуйста, убедитесь, что скрипты выполняются с необходимыми разрешениями и проверяйте логи после завершения ваших вычислений для анализа итогового размера папки.