gpt4 book ai didi

shell - 获取路径或卷标识符的设备名称

转载 作者:行者123 更新时间:2023-12-01 07:26:28 25 4
gpt4 key购买 nike

好的,所以我必须在 Linux 系统上的用户配额内工作,并且需要能够找到给定路径的设备名称(例如 - /dev/md2)以便我可以查找该路径的正确配额。

现在,我可以使用以下方法轻松获取挂载点:

df -k "/volume1/foo/bar" | tail -1 | awk '{ print $6 }'

但是我不确定获取该挂载点并将其转换为设备名称的最佳方法?

更复杂的是,我从上述命令获得的挂载点实际上可能是一个加密的文件夹,在这种情况下我可能有类似的东西:

/dev/md2 -> /volume1
/volume1/@Foo@ -> /volume1/Foo

意思是上面的df命令会识别/volume1/Foo的挂载点。但是,我需要一种可靠的、独立于平台的方式来处理挂载点并找到我需要用于 quota 的实际设备名称。

具体来说;我不能仅仅依赖路径的第一部分作为设备的安装点,因为我可能正在使用将卷安装在更具体位置的环境,例如将安装放入/Volumes/的 OS X。

最佳答案

好的,所以我试了一下并提出了以下解决方案;它不是非常漂亮,但是 mount 和 df 应该在大多数 unix 风格上可用,并且这应该通过处理卷直到它无法继续前进来返回正确的设备标识符。在大多数情况下,它应该只需要一到两次迭代。

function get_device() {
fs=$(df -k "$1" | tail -1)

# 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"
else
device="$cached_device"
fi

echo "$device"
}

请原谅任何拼写错误,因为它来自一个更大的脚本。它使用非常简单的缓存,以防多个设备查询解析到同一个磁盘/分区。

关于shell - 获取路径或卷标识符的设备名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16339778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com