Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何在shell脚本中获得当前使用的剩余空间?_Unix_Ssh - Fatal编程技术网

Unix 如何在shell脚本中获得当前使用的剩余空间?

Unix 如何在shell脚本中获得当前使用的剩余空间?,unix,ssh,Unix,Ssh,好的,我正在编写一个shell脚本,如果可用空间不足,则需要删除文件,但是我不知道如何检索剩余空间,以便考虑配额(如果设置了配额) 例如,我可以使用df命令,但是这似乎只检索文件系统的实际块使用情况,因此它将报告整个卷的总可用空间,即使用户的配额会阻止脚本使用如此多的空间 我是否可以使用命令来检索当前用户配额或卷的可用空间(以较低者为准)的最小剩余可用空间 [编辑] 好的,看来quota命令可以得到我需要的信息,现在的问题是从中获取所有可能返回值的有用数据。当在没有设置配额的情况下调用时,它将简

好的,我正在编写一个shell脚本,如果可用空间不足,则需要删除文件,但是我不知道如何检索剩余空间,以便考虑配额(如果设置了配额)

例如,我可以使用df命令,但是这似乎只检索文件系统的实际块使用情况,因此它将报告整个卷的总可用空间,即使用户的配额会阻止脚本使用如此多的空间

我是否可以使用命令来检索当前用户配额或卷的可用空间(以较低者为准)的最小剩余可用空间

[编辑] 好的,看来quota命令可以得到我需要的信息,现在的问题是从中获取所有可能返回值的有用数据。当在没有设置配额的情况下调用时,它将简单地返回“none”,这意味着我需要深入研究df以获得大小


是否有人可以帮助使用脚本查询quota-then-df(如果需要)以获得当前使用情况和最大块大小(按quota或volume,以最低/设置为准),以便我计算剩余空间量?

您可以使用下面的命令查找文件系统的占用情况,请尝试一次,然后查看

df -k /*somedirectoryname

希望这有帮助。

这是我最后想到的脚本;它应该相当可靠地返回文件系统的剩余空间(字节)或用户对同一文件系统的剩余配额。这并不是很快,因为查找正确的/dev/foo路径以用于
quota
比我希望的要复杂得多

#!/bin/sh
freespace_remaining() {
    # Get remaining space on file-system
    fs=$(df -k "$1" | tail -1)
    free=$(echo "$fs" | awk '{ print $4 }')
    let 'free *= 1024'

    # Determine the device for the file-system
    device=
    mnt=$(echo "$fs" | awk '{ print $6 }')
    if [ "$cached_mnt" != "$mnt" ] 
        then
            cached_mnt="$mnt"

            mnts=$(mount)
            newmnt="$mnt"

            # Try to get a root mount point (for encrypted folders etc.)
            while [ -n "$newmnt" ] 
            do
                newmnt=$(echo "$mnts" | grep " on $mnt " | awk '{ print $1 }')
                [ "$newmnt" = "$mnt" ] && break

                if [ -n "$newmnt" ] 
                    then
                        device="$newmnt"
                        mnt=$(df "$newmnt" 2> /dev/null | tail -1 | awk '{print $6 }')

                        [ "$mnt" = "$device" -o "$mnt" = "$last" ] && break
                        last="$mnt"
                fi
            done

            cached_device="$device"
    fi

    # Lookup the user's quota for the target device (if any is set)
    quota=$(quota | grep "[\s]*$device")

    # Return the lower of the two values as remaining space
    if [ -n "$quota" ]
        then
            quota=$(echo "$quota" | awk '{ print $3 }')
            used=$(echo "$quota" | awk '{ print $2 }')

            let 'quota=(quota - used) * 1024'
            [ "$quota" -lt "$free" ] && free="$quota"
    fi
    echo "$free"
}

freespace_remaining "$1"

希望它的工作原理足够清楚,只需传入一个路径作为第一个(也是唯一的)参数,它将返回剩余的自由空间,同时考虑当前用户的配额(如果有)。

看起来您的问题已经有了答案,请按照下面的线程进行操作@圣何塞派似乎没有考虑配额。我想这是我以前尝试过的;它不报告包含配额的剩余空间,只返回整个卷的剩余空间。因此,如果有500gb的可用空间,那么这就是它的回报,即使我只有10gb的剩余配额。