bash - 如何获取给定磁盘 ID 的磁盘名称?
问题描述
系统stat
调用 ( man 2 stat
) 返回包含文件的设备的 ID。
在脚本中,可以通过以下方式获取此 ID
perl -e 'print((stat "/tmp/blah.txt")[0])'
给定 ID,如何获取磁盘的名称,例如/dev/sda2
or /dev/disk1s1
?
我想在脚本(bash、perl 等)中最好以可移植的方式执行它,以便它在 MacOS 和 Linux 上都能可靠地工作。
解决方案
您可以使用“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 上存在哪一个。
推荐阅读
- parameters - 当您使用数据范围输入组件的任何参数放置 oracle sql 查询时出现 pentaho 错误
- json - 使用 Jackson 将具有 int 属性的对象数组反序列化为 int 数组
- java - inputStream 无法获取 csvfile android
- python - 简化从 cv2.findContours 获取坐标
- c# - 查找对象左侧的位置
- google-forms - Google 表单日期字段在 Chrome 上未格式化
- python - 对第二低分数的嵌套列表进行排序
- java - .class - 这个结构是什么以及它是如何工作的?
- amazon-web-services - 将对 beantalk 服务的访问限制为 cloudfront
- laravel - Laravel VueJS axios拦截器访问vue应用