Вопрос или проблема
Я хотел бы сделать так, чтобы инструмент 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
-
Использование параметра
-o
: Чтобы сохранить вывод в файл или получить его в стандартный вывод, можно использовать ключ-o
.- Для сохранения в файл:
ncdu -o output.json /boot
- Для получения вывода в поток:
ncdu -o- /boot
- Для сохранения в файл:
-
Анализ вывода: Полученный 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']}")
-
Подготовка к запуску в скрипте: Ниже приведён пример bash-скрипта, который выполняет
ncdu
и выводит результат:output=$(ncdu -o- /boot) echo "$output"
Альтернативные инструменты
Если ncdu
не подходит для ваших нужд из-за необходимости взаимодействия с пользователем, имеются и другие инструменты, которые предоставляют аналогичный функционал. Например:
tdu
(Top Disk Usage): Этот инструмент позволяет получить сводку о дисковом пространстве в текстовом виде и завершится без ожидаемого взаимодействия.gdu
: Более современный инструмент, который сочетает в себе интерфейс, похожий наncdu
, и возможность работы в неинтерактивном режиме.
Заключение
Хотя ncdu
является мощной утилитой для анализа дискового пространства, её интерактивный интерфейс может быть ограничивающим для автоматизации. Использование параметра -o
для экспорта данных в формате JSON, а также применение альтернативных инструментов, позволяет эффективно работать с данными от дискового использования в несмешанном режиме. Если вам требуется больше информации о ncdu
, пожалуйста, обратитесь к официальной странице.