我正在编写一个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
答案1
要记住的重点是df
要记住的文件系统,它可能附加到特定文件夹,如果您指定路径或文件,它将解析文件/文件夹所在的文件系统的使用情况。因此,它对df -P /net/home/j/jen
安装在的文件系统进行操作/net/home
,这显然是 nfs4.sf0.ise.fhg.de
网络附加存储。
使用目录和所有文件需要递归解决方案,该解决方案将遍历特定目录中的文件和目录。那么您要寻找的工具是,du
特别是du -shx /net/home/user
。
要点(更多内容请阅读曼杜):
du
默认是递归的-s
提供摘要,而不是单独列出文件大小-h
提供人类可读的输出。如果您需要对数据进行进一步处理,-b
可能更可取。-x
是继续du
下降到另一个。例如,您可能有另一个网络服务器连接到/net/home/user/anotherplace
,因此处理该目录是不可取的,因为它会给出不正确的文件系统使用结果。
考虑到这是一项作业,对输出的进一步处理和操作du
留给读者去实现
答案2
不需要用 解析df
输出awk
,您可以使用--output
开关:
df --output=avail "$HOME" | tail -n1
--输出[=FIELD_LIST]
使用 FIELD_LIST 定义的输出格式,如果省略 FIELD_LIST,则打印所有字段。字段列表是要包含的列的逗号分隔列表。有效的字段名称为:“source”、“fstype”、“itotal”、“iused”、“iavail”、“ipcent”、“size”、“used”、“avail”、“pcent”、“file”和“target”
答案3
看起来你已经在评论中找到了可行的解决方案,但我将提出这一点:
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,并且您的解决方案可能会中断。