Как сделать так, чтобы ncdu показал краткое резюме использования диска и вышел?

Вопрос или проблема

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

Если я запущу ncdu /boot, я увижу свой раздел /boot. Вот что я вижу:

ncdu 1.14.1 ~ Используйте стрелочные клавиши для навигации, нажмите ? для помощи 
--- /boot -----------------------------------------------------
  100.2 MiБ [##########]  initrd.img-5.13.0-28-generic         
  100.2 MiБ [######### ]  initrd.img-5.13.0-27-generic
   11.2 MiБ [#         ]  vmlinuz-5.11.0-46-generic
    9.7 MiБ [          ]  vmlinuz-5.13.0-28-generic
    9.7 MiБ [          ]  vmlinuz-5.13.0-27-generic
    9.7 MiБ [          ]  vmlinuz-5.13.0-25-generic
    8.0 MiБ [          ] /grub
    5.7 MiБ [          ]  System.map-5.13.0-28-generic
    5.7 MiБ [          ]  System.map-5.13.0-27-generic
    5.7 MiБ [          ]  System.map-5.13.0-25-generic
    5.6 MiБ [          ]  System.map-5.11.0-46-generic
  252.0 КиБ [          ]  config-5.13.0-28-generic
  252.0 КиБ [          ]  config-5.13.0-27-generic
  252.0 КиБ [          ]  config-5.13.0-25-generic
  252.0 КиБ [          ]  config-5.11.0-46-generic
  184.0 КиБ [          ]  memtest86+_multiboot.bin
  184.0 КиБ [          ]  memtest86+.elf
  180.0 КиБ [          ]  memtest86+.bin
!  16.0 КиБ [          ] /lost+found
!   4.0 КиБ [          ] /efi
@   0.0   Б [          ]  initrd.img.old
@   0.0   Б [          ]  initrd.img
@   0.0   Б [          ]  vmlinuz.old
@   0.0   Б [          ]  vmlinuz

Теперь, как я могу сделать это в скрипте, чтобы отобразить этот вывод, сохранить его в переменной для последующей печати и выйти?

Что мне нужно, так это что-то вроде этого:

output="$(ncdu /boot)"
echo "$output"

В данный момент он зависает на первой строке, так как, я думаю, ожидает взаимодействия с человеком.

Последующий вопрос: bash: сделать так, чтобы du показывал вывод, похожий на ncdu

С помощью ncdu это невозможно. Он использует библиотеку ncurses для отображения результатов с интерактивными функциями и (в отличие от, например, top с опцией -b) не имеет прямой опции для печати того, что он отображает.

Тем не менее, он может распечатать (или сохранить в файл) json с всей необходимой информацией, которую можно разобрать: ncdu -o file.json или на стандартный вывод: ncdu -o-.

Я предоставил python скрипт для разбора этого в подобный вывод на Unix SE.

Веб-страница ncdu перечисляет похожие проекты внизу, одним из которых является tdu “топ использования диска”, который выходит без взаимодействия с пользователем с текстовым резюме (включая самые большие вложенные файлы). Другой проект gdu имеет как интерфейс ncurses, так и встроенный выход без взаимодействия.

Я только что разработал этот инструмент для упаковки ncdu и веб-терминала:
https://github.com/abes-esr/ncdu-web-viewer
Это облегчает обмен отчетами ncdu с не IT людьми.

.

Ответ или решение

Чтобы использовать утилиту ncdu (NCurses Disk Usage) для анализа дискового пространства и отображения результатов без необходимости взаимодействия с пользователем, рекомендуется воспользоваться функцией экспорта данных в формате JSON. Это позволит автоматизировать процесс и использовать полученные данные в скриптах.

Шаги для получения сводки о использовании дискового пространства с помощью ncdu

  1. Использование параметра -o: Чтобы сохранить вывод в файл или получить его в стандартный вывод, можно использовать ключ -o.

    • Для сохранения в файл:
      ncdu -o output.json /boot
    • Для получения вывода в поток:
      ncdu -o- /boot
  2. Анализ вывода: Полученный JSON-файл или вывод можно проанализировать с помощью различных языков программирования, таких как Python, чтобы представить данные в удобном формате.

    Пример Python-скрипта для обработки JSON:

    import json
    
    # Загружаем данные из файла
    with open('output.json', 'r') as file:
       data = json.load(file)
    
    # Выводим сводку
    for entry in data['items']:
       print(f"{entry['size']} {entry['name']}")
  3. Подготовка к запуску в скрипте: Ниже приведён пример bash-скрипта, который выполняет ncdu и выводит результат:

    output=$(ncdu -o- /boot)
    echo "$output"

Альтернативные инструменты

Если ncdu не подходит для ваших нужд из-за необходимости взаимодействия с пользователем, имеются и другие инструменты, которые предоставляют аналогичный функционал. Например:

  • tdu (Top Disk Usage): Этот инструмент позволяет получить сводку о дисковом пространстве в текстовом виде и завершится без ожидаемого взаимодействия.
  • gdu: Более современный инструмент, который сочетает в себе интерфейс, похожий на ncdu, и возможность работы в неинтерактивном режиме.

Заключение

Хотя ncdu является мощной утилитой для анализа дискового пространства, её интерактивный интерфейс может быть ограничивающим для автоматизации. Использование параметра -o для экспорта данных в формате JSON, а также применение альтернативных инструментов, позволяет эффективно работать с данными от дискового использования в несмешанном режиме. Если вам требуется больше информации о ncdu, пожалуйста, обратитесь к официальной странице.

Оцените материал
Добавить комментарий

Капча загружается...