Как получить свободное место $HOME как переменная в сценариях оболочки?

Я пишу a bash script устанавливать программу для различных пользователей.

Для этого я хочу удостовериться, что каждый пользователь имеет, по крайней мере, 500Mb доступный в их $HOME. Мой $HOME каталог смотрит следующим образом

jen@ser23:~$ df -h
Filesystem                           Size  Used Avail Use% Mounted on
/dev/sda1                            2,9G  1,1G  1,7G  40% /
udev                                 10M     0   10M   0% /dev
tmpfs                                13G   826M   12G   7% /run
/dev/sda3                            15G   9,8G   4,1G   71% /usr
tmpfs                                32G     0   32G   0% /dev/shm
tmpfs                                5,0M    0   5,0M  0% /run/lock
tmpfs                                32G     0   32G   0% /sys/fs/cgroup
/dev/mapper/local_disk_1-tmp         3,7G   21M  3,7G   1% /tmp
/dev/mapper/local_disk_1-opt         20G   2,0G   18G   10% /opt
/dev/mapper/local_disk_1-project1    401G  287G  114G  72% /project1
/dev/mapper/local_disk_1-var         3,8G  1,7G  1,7G  50% /var
/dev/mapper/local_disk_1-project2    99G   70G   29G   71% /project2
/dev/mapper/local_disk_1-usr_local   2,0G  3,4M  1,9G   1% /usr/local
nfs4.sf0.ise.fhg.de:/g/6/TSB/Archiv  632T  349T  276T  56% /net/p/600/groupdrives/TSB/Archiv
nfs4.sf0.ise.fhg.de:/home            632T  349T  276T  56% /net/home
tmpfs                                6,4G     0  6,4G   0% /run/user/12419
tmpfs                                6,4G  4,0K  6,4G   1% /run/user/13471
tmpfs                                6,4G  4,0K  6,4G   1% /run/user/9351
tmpfs                                6,4G     0  6,4G   0% /run/user/13142

Моя идея состоит в том, чтобы использовать df -h /path/to/home | awk но я не уверен, как я могу получить фактическое свободное место от df -h. Какая-либо справка? Спасибо, Jen.

jen@ser23:~$ df -P /net/home/j/jen
Filesystem                1024-blocks    Used Available Capacity Mounted on
nfs4.sf0.dfd.fhg.de:/home     5242880 1026048   4216832      20% /net/home
2
задан 7 April 2019 в 20:52

3 ответа

Важный момент для запоминания является этим df воздействует на файловые системы, которые могут быть присоединены к конкретным папкам, и если Вы укажете путь или файл, то он решит к использованию файловой системы, в которой находится файл/папка. Так df -P /net/home/j/jen воздействует на файловую систему, смонтированную в /net/home, который является nfs4.sf0.ise.fhg.de сетевое хранилище данных, по-видимому.

Использование каталога и всех файлов требует рекурсивного решения, которое пересечет файлы и каталоги в рамках конкретного каталога. Инструмент, который Вы ищете затем, du и в особенности du -shx /net/home/user.

Keypoints (для более человека чтения du):

  • du является рекурсивным по умолчанию
  • -s предоставляет сводку вместо того, чтобы перечислить размеры файла индивидуально
  • -h обеспечивает человекочитаемый вывод. Если Вы требуете последующей обработки на данных, -b могло бы быть более предпочтительным.
  • -x должен сохранить du убывание в другого. Например, у Вас мог быть другой сетевой сервер, присоединенный к /net/home/user/anotherplace, так обработка того каталога является нежелательным, поскольку это даст неправильные результаты использования файловой системы.

Полагая, что это - присвоение, последующая обработка и манипуляции на выводе du оставлены читателю реализовать

4
ответ дан 2 December 2019 в 01:35

Похоже, что Вы направляетесь к осуществимому решению уже в комментариях, но я собираюсь добавить это:

DFHOME=$( df $HOME | awk {'print $4;'} | tail -n 1 )
if [ $DFHOME -lt 500000 ]; then 
  echo "You don't got enough space!";
fi

Я рекомендовал бы не использовать-h, потому что, если размер является достаточно небольшим, G обратится к M, и Ваше решение могло бы повредиться.

1
ответ дан 2 December 2019 в 01:35

Никакая потребность проанализировать df вывод с awk, можно использовать --output переключатель:

df --output=avail "$HOME" | tail -n1

- вывод [=FIELD_LIST]
используйте выходной формат, определенный FIELD_LIST, или распечатайте все поля, если FIELD_LIST опущен.

FIELD_LIST является разделенным запятыми списком столбцов, которые будут включены. Допустимые имена полей: 'источник', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'размер', 'используемый', 'польза', 'pcent', 'файл' и 'tar ‐, добираются'

2
ответ дан 2 December 2019 в 01:35

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

Похожие вопросы: