Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование *NIX систем > Узнать свободное место на диске (одна цифра)


Автор: KYI 25.9.2017, 10:39
Добрый день!
Прошу помощи в написании маленького скрипта, т.к. сам в этом не очень силен.
Необходимо получить "голую" цифру которая показывала бы свободное или использованное место на диске
Знаю команду df, но это не сильно помогает
Делаю так
Код

df -m /vmfs/volumes/LocalStore_1

Получаю это
Код

Filesystem 1M-blocks    Used Available Use% Mounted on
VMFS-5       2851328 1966693    884635  69% /vmfs/volumes/LocalStore_1

Подскажите как получить голую цифру 1966693 или 884635
Желательно что бы команда(ы) была в одну строку.

Автор: Romikgy 25.9.2017, 10:57
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | tr -s " " | cut -d " " -f 4

Автор: KYI 25.9.2017, 11:02
Ух... ничего себе, а можно пояснить что и куда?
И кстати, пишет вот такое
Код

-sh: tr: not found

Думаю это ограничение гипервизора VMware
Может другие варианты?

Автор: Romikgy 25.9.2017, 11:25
Цитата(KYI @  25.9.2017,  10:02 Найти цитируемый пост)
tr

https://ru.wikipedia.org/wiki/Tr

может есть busybox ? тогда перед tr нужно добавить busybox 
или поставить команду tr в unix ваш 

Автор: KYI 25.9.2017, 11:40
Цитата(Romikgy @  25.9.2017,  11:25 Найти цитируемый пост)
может есть busybox ?

Да, есть, сейчас попробую добавить.
Ага, извиняюсь за дикость, а как это делается, тупой я в линуксах?
Вот так не работает
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | busyboxtr -s " " | cut -d " " -f 4

Автор: Romikgy 25.9.2017, 16:18
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | busybox tr -s " " | cut -d " " -f 4

Автор: KYI 25.9.2017, 16:21
К сожалению не работает :-(
Говорит, что нету busybox - странно
Видимо не судьба мне настроить мониторинг ESXi

Спасибо за помощь, буду искать другие пути.

Автор: Romikgy 25.9.2017, 16:30
так скачай busybox и положи рядом со скриптом... права на исполнения добавь
chmod +x busybox 
немного изменится команда 
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | ./busybox tr -s " " | cut -d " " -f 4

и пользуйся....

Автор: KYI 25.9.2017, 16:44
Если бы так было просто.
Это ESXi, а он то ли недолинух, то ли вообще сурагат какой то.
У меня задумка была натравить на ESXi нашу систему мониторинга, в этой системе можно по SSH отправлять запросы в виде скриптов и получать ответы, но не тут то было.

Автор: Romikgy 25.9.2017, 17:10
линукс - это просто , главное знать как....

Автор: Romikgy 25.9.2017, 20:37
Цитата(Romikgy @  25.9.2017,  15:30 Найти цитируемый пост)
busybox tr -s " "

Код

busybox sed "s/ */ /g"

Автор: KYI 26.9.2017, 16:33
Romikgy, спасибо, что продолжаете помогать.
Не  понимаю что означают строки из последнего вашего сообщения, но решил попробовать вот это
Код

sed -?

Получил вот это
Код

sed: invalid option -- '?'
BusyBox v1.22.1 (2016-03-26 07:03:26 PDT) multi-call binary.

Usage: sed [-inrE] [-f FILE]... [-e CMD]... [FILE]...
or: sed [-inrE] CMD [FILE]...

        -e CMD  Add CMD to sed commands to be executed
        -f FILE Add FILE contents to sed commands to be executed
        -i[SFX] Edit files in-place (otherwise sends to stdout)
                Optionally back files up, appending SFX
        -n      Suppress automatic printing of pattern space
        -r,-E   Use extended regex syntax

If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).


Получается, что BusyBox есть, но почему он тогда не отрабатывает?
Конструкция
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | busybox tr -s " " | cut -d " " -f 4

Сообщает
Код

-sh: busybox: not found


То ли у меня лыжи не едут, то ли..... мысли на этом обрываются

Автор: Romikgy 26.9.2017, 20:45
which sed 
покажет где находится sed
по тому пути посмотреть (допустим оказалось /bin/sed)
ls -l /bin/
и ответ покажет на что ссылается sed , это и будет busybox , но переименованный , его и использовать вместо busybox

Добавлено через 4 минуты и 14 секунд
Цитата(Romikgy @  25.9.2017,  19:37 Найти цитируемый пост)
sed "s/ */ /g"

sed - потоковый редактор
s - замена
/ - разделитель
" *" - пробел и больше 
заменяем на " " (один пробел )
g - глобально 
https://ru.wikipedia.org/wiki/Sed

Автор: KYI 27.9.2017, 11:17
Цитата(Romikgy @  26.9.2017,  20:45 Найти цитируемый пост)
which sed 
покажет где находится sed
по тому пути посмотреть (допустим оказалось /bin/sed)
ls -l /bin/
и ответ покажет на что ссылается sed, это и будет busybox, но переименованный, его и использовать вместо busybox


Добрый день!
Делаю which sed и получаю как вы и говорили
Код

/bin/sed

Далее делаю ls -l /bin/ и получаю портянку (см. приложенный файл). Красивая такая, разноцветная

Если я что то понимаю, то на busybox ссылается много чего
Как понять что именно нужно?

Автор: Romikgy 27.9.2017, 12:51
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | /usr/lib/vmware/busybox/bin/busybox tr -s " " | /usr/lib/vmware/busybox/bin/busybox cut -d " " -f 4


Добавлено через 2 минуты и 34 секунды
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | sed "s/ */ /g" | cut -d " " -f 4

Автор: KYI 27.9.2017, 14:43
Romikgy, в первом случае выдал
Код

tr: applet not found

во втором случае выдал просто F
Это так и задумано?

Такс...
Попробовал разобраться по шагам, вот что у меня получается
Вот эта часть выдает информацию без шапки
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]"

Вот эта часть, как вы и описывали заменяет глобально пробелы
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | sed "s/ */ /g"

и на выходе получается красотища
Код

 V M F S - 5 2 8 5 1 3 2 8 2 0 1 6 4 8 4 8 3 4 8 4 4 7 1 % / v m f s / v o l u m e s / L o c a l S t o r e _ 1

А вот это, если я правильно понимаю, должно взять четвертый блок и вывести его
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | sed "s/ */ /g" | cut -d " " -f 4

Так и получается F

Автор: Romikgy 27.9.2017, 14:47
нет , должно быть нормально 
uname -a 
какой ответ?

Автор: KYI 27.9.2017, 14:54
Цитата(Romikgy @  27.9.2017,  14:47 Найти цитируемый пост)
uname -a 

Дает такой ответ
Код

VMkernel s-vm1.mydomain.loc 6.5.0 #1 SMP Release build-5969303 Jul  6 2017 21:22:25 x86_64 x86_64 x86_64 ESXi

Кстати, решил разобраться с sed "s/ */ /g"
даю команду
sed -?
а он в ответ
Код

sed: unrecognized option '-?'
BusyBox v1.22.1 (2016-03-26 07:03:26 PDT) multi-call binary.

Usage: sed [-inrE] [-f FILE]... [-e CMD]... [FILE]...
or: sed [-inrE] CMD [FILE]...

        -e CMD  Add CMD to sed commands to be executed
        -f FILE Add FILE contents to sed commands to be executed
        -i[SFX] Edit files in-place (otherwise sends to stdout)
                Optionally back files up, appending SFX
        -n      Suppress automatic printing of pattern space
        -r,-E   Use extended regex syntax

If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).

Получается что в моей sed нету ключей S и G
--------------

В общем выкинув один блок (который пробелы глобально подставляет) получил вот такую конструкцию
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | cut -d " " -f 13

и вот из такого
Код

VMFS-5       2851328 2016488    834840  71% /vmfs/volumes/LocalStore_1

получил вот такое
834840
О, чудо, оно сработало!
Правда не знаю на сколько корректно все я сделал
Romikgy,
Проверьте мои каракули имеют они право на жизнь и применение в рабочих процессах?

Автор: Romikgy 27.9.2017, 15:58
изменятся количество цифр , будет не корректный результат давать 

Автор: KYI 27.9.2017, 16:03
Цитата(Romikgy @  27.9.2017,  15:58 Найти цитируемый пост)
будет не корректный результат давать  

Ага, понимаю, именно поэтому вы пытались несколько пробелов заменить на один пробел.
Хм... 
А как тогда быть, может есть еще варианты?

Автор: Romikgy 27.9.2017, 16:06
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | awk  "{print $4}"

Автор: KYI 27.9.2017, 16:08
Цитата(Romikgy @  27.9.2017,  16:06 Найти цитируемый пост)

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | awk  "{print $4}"


Выдало ровно то же самое что и 
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]"

т.е. вот это
Код

VMFS-5       2851328 2016492    834836  71% /vmfs/volumes/LocalStore_1

Автор: Romikgy 27.9.2017, 16:13
Код

df -m /vmfs/volumes/LocalStore_1 | grep -E "^[^F]" | awk  '{print $4}'

Автор: KYI 27.9.2017, 16:18
Romikgy, ОГРОМЕННОЕ спасибо.
Работает!
Надо себе в блокнотик записать, много чего полезного узнал.

Добавлено через 1 минуту и 21 секунду
Блин, а как тут плюсы ставить?
Мне говоря, что я еще маленький для выставления плюсов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)