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上都能可靠地工作。
答案 0 :(得分:1)
您可以使用'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上存在哪一个。
答案 1 :(得分:1)
我认为您正在尝试重新发明轮子。
给定文件名,可以在df
的输出的最后一行的第一列中找到它所属的文件系统名称。例如:
df -P /tmp | awk 'END { print $1 }'