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

import os from swagger_server import app if __name__ == '__main__': port = int(os.environ.get("PORT",5000)) app.run(host='0.0.0.0',port=port) 系统调用(stat)返回包含该文件的设备的ID。

在脚本中,该ID可以通过例如

获得
man 2 stat

给出ID,如何获取磁盘名称,例如perl -e 'print((stat "/tmp/blah.txt")[0])' /dev/sda2

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

zhuhui34555 回答:给定磁盘ID,如何获取磁盘名称?

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

以下脚本将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上存在哪一个。

,

我认为您正在尝试重新发明轮子。
给定文件名,可以在df的输出的最后一行的第一列中找到它所属的文件系统名称。例如:

df -P /tmp | awk 'END { print $1 }'
本文链接:https://www.f2er.com/3164493.html

大家都在问