Я пишу 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
Важный момент для запоминания является этим 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
оставлены читателю реализовать
Похоже, что Вы направляетесь к осуществимому решению уже в комментариях, но я собираюсь добавить это:
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, и Ваше решение могло бы повредиться.
Никакая потребность проанализировать df
вывод с awk
, можно использовать --output
переключатель:
df --output=avail "$HOME" | tail -n1
- вывод [=FIELD_LIST]
используйте выходной формат, определенный FIELD_LIST, или распечатайте все поля, если FIELD_LIST опущен.FIELD_LIST является разделенным запятыми списком столбцов, которые будут включены. Допустимые имена полей: 'источник', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'размер', 'используемый', 'польза', 'pcent', 'файл' и 'tar ‐, добираются'