gpt4 book ai didi

bash - 给定磁盘ID如何获取磁盘名称?

转载 作者:行者123 更新时间:2023-12-04 11:02:39 24 4
gpt4 key购买 nike

stat系统调用 ( man 2 stat ) 返回包含文件的设备的 ID。

在脚本中,可以通过以下方式获取此 ID,例如

perl -e 'print((stat "/tmp/blah.txt")[0])'

给定ID,如何获取磁盘名称,如 /dev/sda2/dev/disk1s1 ?

我想在脚本(bash、perl 等)中完成它,最好以可移植的方式进行,以便它在 MacOS 和 Linux 上都能可靠地工作。

最佳答案

您可以使用“df”枚举文件系统,并在设备 ID 和磁盘之间创建映射。回想一下,每个 df 行将在第一列中列出挂载点(/dev/sda1, ...),在第 5 列中列出挂载点)。

以下脚本使用 bash 关联数组作为映射,并使用 stat -c '%d' 来提取给定路径的 'dev' 值。

# Create map dev2fs
function file2dev {
stat -c '%d' "$1"
# If needed, use Perl equivalent
# perl -e 'print ((stat($ARGV[0]))[0])' "$1"
}

declare -A dev2fs
while read fs size used available use mount ; do
id=$(file2dev $mount);
[ "$id" ] && dev2fs[$id]=$fs
done <<< "$(df)"

# Map a file to device
dev=$(file2dev /path/to/file );
echo "Device=${dev2fs[$dev]}"

此外,可以使用“mount -l”迭代已安装的文件系统。我不确定 MacOS 上存在哪一个。

关于bash - 给定磁盘ID如何获取磁盘名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699163/

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