Сценарий использования диска для клиента

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

Я искал способ собрать много данных об использовании диска с помощью сценария оболочки. На моей работе МНОГО людей звонят и спрашивают "почему мой диск заполнен" Я запускаю du -h --max-depth = 1 | sort -rn, но это немного неуклюже, и мне нужно копать дальше ....

Я пытаюсь разбить использование диска с помощью сценария оболочки следующим образом:

**home/ is consuming 400GB of disk space**</br>
home/user1 120GB
home/user2 200GB
**var/ is using 100GB of disk space**

Пока что я придумал следующее:

#!/bin/bash
for i in $(ls -d */ |  grep -v proc);
 do
printf "**** $i has the following breakdown ********\n"

du -h --max-depth=1 $i
done

Каким образом мои пользователи смогут лучше понять разбивку использования диска? Просто хочу иметь возможность завернуть использование в красивый розовый бант и сказать "удачи"

unix.stackexchange.com/questions/125429/…
Stephen C 24.07.2018 09:43

Что не так с вашим решением? Почему вы называете свой сценарий «неуклюжим»?

kabanus 24.07.2018 12:35

Я бы не сказал, что ваше решение неуклюже.

Ina Tsetsova 24.07.2018 13:12

Добро пожаловать в Stack Overflow! Если вы считаете, что код работает правильно, рассмотрите возможность более полного представления вашей работы (с ее модульными тестами) на Проверка кода. Скорее всего, вы получите несколько предложений по тому, как сделать его более эффективным, более легким для чтения и лучшего тестирования. Прежде чем вы это сделаете, обязательно сначала прочтите Руководство по обзору кода для пользователей Stack Overflow, так как некоторые вещи там выполняются по-другому - например, в заголовках вопросов должно быть просто указано, что такое код делает, поскольку вопрос всегда звучит так: «Как я могу это улучшить?».

Toby Speight 24.07.2018 14:01

@InaTsetsova, я было бы говорю, что в оригинале есть несколько антипаттернов. См., Например, BashPitfalls # 1: $(ls) изначально подвержен ошибкам (также обсуждается в ПарсингLs). Аналогичным образом, расширения параметров никогда не должны использоваться в строке формата printf (следует использовать заполнители, такие как %s, и значения, передаваемые вне диапазона), а расширения всегда следует заключать в кавычки. Это все, что может идентифицировать shellcheck.net.

Charles Duffy 24.07.2018 14:14

Если предполагаемый вопрос имел форму «как я могу выполнить Икс в UNIX, в том числе с помощью ответа, который включает в себя написание некоторого кода но не ограничиваясь тем же?» - именно так я и люди, добавляющие ответы, предлагающие готовые инструменты, читают это - Unix и Linux может быть лучшим форумом.

Charles Duffy 24.07.2018 14:16

Привет, спасибо, ребята, за слова поддержки! Я здесь, сомневаюсь в себе ... :) Я ищу то, что, как мне кажется, @TobySpeight предлагает лучший (более красивый) способ сделать это

Charles Wilson 24.07.2018 23:48

@CharlesDuffy Спасибо за это! Я собираюсь изучить это ... Пытался найти цикл вместо LS ... Было бы это чем-то менее подверженным ошибкам?

Charles Wilson 24.07.2018 23:53

@CharlesWilson, ... Итак, find определенно имеет подходы, которые безопаснее, чем ls, но for x in $(find ...) все еще имеет те же проблемы. См. find ... -exec ... или find ... -print0 | while IFS= read -r -d '' piece; do ...; done, как описано в разделах «Действия», «Сложные действия» и «Групповые действия» в Использование поиска.

Charles Duffy 25.07.2018 00:29

@CharlesDuffy просматривал TOS для этой платы. Думал, что я попал в сферу охвата, я пишу сценарий, чтобы предотвратить поломку диска для пользователей VPS, которые не знают, как контролировать свои собственные вещи: / ха-ха. Не ищу инструментов или чего-то в этом роде

Charles Wilson 25.07.2018 01:13

Итак, общее руководство: если вы нажмете конкретный вопрос о bash в процессе построения скрипта (например, «почему мой скрипт не работает с томом, в имени каталога которого есть пробел?»), Он определенно попадет в область видимости. . Если вы искали функцию языка bash, опять же, она определенно входит в эту область. Если вы спрашиваете, почему не работает функция языка bash, это определенно входит в область действия. "Как лучше всего выполнить эта большая цель в bash?" более нечеткий; иногда это может быть в рамках, иногда нет. Чем конкретнее вопрос, тем лучше.

Charles Duffy 25.07.2018 03:37

@CharlesDuffy имеет смысл !!!!!! Спасибо, сэр! Я обращусь к этому в будущем. и еще раз спасибо за идеи.

Charles Wilson 26.07.2018 05:41

@CharlesWilson: Часто речь идет о том, как сформулирован вопрос - ознакомьтесь с этим мета-вопросом о том, какой рекомендательный вопрос не по теме - meta.stackoverflow.com/questions/254393/…. Я немного отредактировал ваш вопрос, чтобы было понятнее, в чем заключается ваша проблема и почему вашего решения может быть недостаточно для вас. Однако заполнить пробелы можете только вы. Убедитесь, что вы ясно дали понять, в чем проблема и что вы ищете, и почему ваш текущий сценарий не решает ее. Сосредоточен на проблеме, а не на ее решении. Тогда это не было бы не по теме.

Ina Tsetsova 30.07.2018 17:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
13
98
3

Ответы 3

you snippet - хорошее начало, вы не можете сделать это в одной строке. для некоторых папок вам нужна глубина> 1 (главная), а для некоторых других глубина = 1 (var)

Попробуйте ncdu (использование диска NCurses), например:

$ ncdu -q -x

Варианты:

-q  Quiet mode. While scanning or importing the directory, ncdu will
    update the screen 10 times a second by default, this will be
    decreased to once every 2 seconds in quiet mode. Use this
    feature to save bandwidth over remote connections. 

А также

 -x  Do not cross filesystem boundaries, i.e. only count files and
     directories on the same filesystem as the directory being
     scanned.

Больше примеров здесь: https://dev.yorhel.nl/ncdu/man#EXAMPLES

Это хороший инструмент, но если это правильный ответ, значит, вопрос здесь явно не по теме.

Charles Duffy 24.07.2018 14:12

Спасибо! и этот инструмент был бы хорош. Если бы заказчик знал, что они делают, я хотел бы быстро сказать: «Эй, ваш диск используется при использовании 400 Гбайт, потому что дома / использует 200 Гбайт» и разбить его на фиктивный стиль. ржу не могу

Charles Wilson 24.07.2018 23:49

Вот альтернативное решение. Вы можете использовать tree для отображения содержимого каталога в «древовидном» формате. Затем вы можете объединить его с флагом использования диска, чтобы увидеть вложенные каталоги и их размер.

tree -L 2 --du -h

Флаг '-L' определяет глубину или уровень вашего запроса.

Это даст вам следующий результат:

Screenshot of tree command output in the command line

Вы даже можете создать XML-файл, который можно открыть в браузере, вот так:

tree -L 2 --du -h -H s > disk_usage.html

Затем вы можете открыть файл в браузере, и результат будет выглядеть следующим образом:

Screenshot of the xml output when opened in the browser

Надеюсь это поможет!

!!! Забыл дерево !!!!!!!! это скрипт? так что я могу сказать, просто закинуть это в мой скрипт в лу ДУ?

Charles Wilson 24.07.2018 23:51

@CharlesWilson, если вы напишете его в файл и сделаете исполняемым, он запустится. Попробуйте это в своем скрипте, он должен работать. Если ответ работает для вас, не забудьте принять его :)

Ina Tsetsova 25.07.2018 08:48

Другие вопросы по теме