Проверьте, не меньше ли свободного места на диске из командной строки

На askubuntu есть несколько вопросов и ответов о просмотре места на диске из командной строки.

Естественно, df это инструмент для этого.

Тем не менее, я хочу, чтобы при входе в систему скрипт вызывал предупреждение, если свободное место на диске ниже некоторого порога.

к несчастью df кажется, использует столбцы произвольного размера, и я не уверен, как извлечь только значение из интересующего меня столбца.

Например:

$ df /dev/mapper/root
Filesystem       1K-blocks    Used Available Use% Mounted on
/dev/mapper/root   2563092 1649968    763212  69% /
$ df /dev/mapper/root | tail -n 1
/dev/mapper/root   2563092 1649968    763212  69% /
$ df /dev/mapper/root | tail -n 1 | cut -d ' ' -f 9
763212

Я действительно хочу четвертую колонку, но я должен попросить девятую.

Есть ли более простой способ извлечь значение столбца из dfили другой способ получить доступ к этому значению.

3 ответа

Решение

Если вы используете Ubuntu 14.04 или более позднюю версию, df может выводить только те значения, которые вы хотите:

$ df --output=avail /
   Avail
15127808

От man df:

--output[=FIELD_LIST]
      use the output format defined by FIELD_LIST, or print all fields
      if FIELD_LIST is omitted.
...
FIELD_LIST  is a comma-separated list of columns to be included.  Valid
field names  are:  'source',  'fstype',  'itotal',  'iused',  'iavail',
'ipcent',  'size',  'used',  'avail',  'pcent'  and  'target' (see info
page).

Как отметил Дрю Ноакс, эта способность была добавлена ​​в GNU coreutils 8.21, и поэтому недоступен в старых версиях Ubuntu.

Для выбора полей awk это гораздо лучший инструмент, чем cut и вы можете опираться на ответ Яна для этого после выбора полей, которые вы хотите df выводить.

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

Вы можете использовать что-то вроде скрипта ниже

#!/bin/bash
X=
X=$(du -sc | awk 'NR < 2' | awk '{ print $1 }')
if [ $X -gt 999000 ]; then
  message="Already using `du -sch | awk 'NR <2' |awk '{ print $1 }'` KB"
echo $message | mail -s "File System Full Warning" email@address.com
fi

X содержит количество использованных килобайт, если оно больше 999000, оно отправляет предупреждение по электронной почте.

Я бы использовал awk иметь дело только со второй строкой (пропустите первую здесь) и получите столбец:

$ df /dev/mapper/sil_acababdfabcf1 | awk 'NR==2 {print $4}'
11903752
Другие вопросы по тегам