系统:LinuxMint19.1肉桂64位,基于Ubuntu18.04LTS.
我想知道是否有可能获得以下信息:
是否安装了 this UUID (块设备)?(不知道挂载点)
尽管如此,我已经和这半天一起玩了,我搞不懂。
我至少已经创建了一些工作代码,下面的非安装和电源两个USB硬盘驱动器。
当前的临时版本的代码如下所示:
dismount_and_poweroff_external_drives()
{
name_external_drive_500gb_ntfs='500GB NTFS USB 2.0 HDD'
name_external_drive_2_0tb_ext4='2.0TB Ext4 USB 3.0 HDD'
uuid_external_drive_500gb_ntfs='xxxxxxxxxxxxxxxx' # censored
uuid_external_drive_2_0tb_ext4='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' # censored
path_external_drive_500gb_ntfs="/dev/disk/by-uuid/${uuid_external_drive_500gb_ntfs}"
path_external_drive_2_0tb_ext4="/dev/disk/by-uuid/${uuid_external_drive_2_0tb_ext4}"
tput bold; tput setaf 3; printf '%b' "\\n${name_external_drive_500gb_ntfs} un-mount\\n"; tput sgr0
# info test ‘-b FILE’: True if FILE exists and is a block special device.
if [ ! -b "${path_external_drive_500gb_ntfs}" ]
then
tput bold; tput setaf 4; printf '%b' "The device is not plugged in or powered on.\\n"; tput sgr0
else
if umount "${path_external_drive_500gb_ntfs}"
then
tput bold; tput setaf 2; printf '%b' "Un-mounting OK.\\n"; tput sgr0
if udisksctl power-off --block-device "${path_external_drive_500gb_ntfs}"
then
tput bold; tput setaf 2; printf '%b' "Powering-off OK.\\n"; tput sgr0
else
tput bold; tput setaf 1; printf '%b' "Powering-off Failed.\\n"; tput sgr0
fi
else
tput bold; tput setaf 1; printf '%b' "Un-mounting Failed.\\n"; tput sgr0
fi
fi
printf '\n'
tput bold; tput setaf 3; printf '%b' "\\n${name_external_drive_2_0tb_ext4} un-mount\\n"; tput sgr0
# info test ‘-b FILE’: True if FILE exists and is a block special device.
if [ ! -b "${path_external_drive_2_0tb_ext4}" ]
then
tput bold; tput setaf 4; printf '%b' "The device is not plugged in or powered on.\\n"; tput sgr0
else
if umount "${path_external_drive_2_0tb_ext4}"
then
tput bold; tput setaf 2; printf '%b' "Un-mounting OK.\\n"; tput sgr0
if udisksctl power-off --block-device "${path_external_drive_2_0tb_ext4}"
then
tput bold; tput setaf 2; printf '%b' "Powering-off OK.\\n"; tput sgr0
else
tput bold; tput setaf 1; printf '%b' "Powering-off Failed.\\n"; tput sgr0
fi
else
tput bold; tput setaf 1; printf '%b' "Un-mounting Failed.\\n"; tput sgr0
fi
fi
printf '\n'
}I忘记强调所接受的解决方案必须是 POSIX-ly写的。
发布于 2019-03-31 04:17:21
UUID=
mount | egrep $(readlink -f /dev/disk/by-uuid/${UUID}) && echo mounted-e而不是-f可能是个好主意,来自readlink help:-e --规范化--通过递归地跟踪给定名称的每个组件中的每个符号链接,所有组件都必须存在,而不是:-f,--通过递归地跟踪给定名称的每个组件中的每个符号链接来实现规范化;据我所知,除最后一个组件之外,所有组件都必须存在,与 -e there保证整个路径存在,可能更好,需要额外的验证或引用。<#>Unfortunately,发现 -e option不符合POSIX-,因此运气不好。将所有信息留在这里供将来参考。sda11或类似的。grep "^dev_name"的这个设备开始的行。mount本身可能不是POSIX-defined,同样,引用也很方便,但是无论如何,我已经更改了代码,使其直接从/proc/mounts读取。用于检查UUID是否已挂载的resulting函数看起来类似于:
is_uuid_mounted()
{
readlink_output=$( readlink -f /dev/disk/by-uuid/"${1}" )
[ -n "${readlink_output}" ] &&
grep -F "${readlink_output} " /proc/mounts > /dev/null 2>&1
}#!/bin/sh
set -eu
translate_uuid_to_device_name()
{
# Linux-specific; needs *BSD revision
readlink -f -n /dev/disk/by-uuid/"${1}"
}
is_uuid_mounted()
{
device_name=$( translate_uuid_to_device_name "${1}" )
if [ -n "${device_name}" ]
then
# 1. basic regex should be working across platfotms
# tested on FreeBSD, OpenBSD, NetBSD with success
# I prefer the starting with (^) rather than filtering throung all text
# 2. /proc/mounts is not available on all *BSDs, needs revision
proc_mounts=$( grep "^${device_name} " /proc/mounts )
[ -n "${proc_mounts}" ]
fi
}
# Simplest Usage Example
if is_uuid_mounted "PUT_SOME_UUID_IN_HERE"
then
echo "This UUID is mounted."
else
echo "This UUID isn't mounted."
fi请随时在评论中讨论进一步的问题。
发布于 2019-03-31 08:28:27
如果findmnt可用,您可以尝试:
test "$(findmnt -S UUID=$UUID)" || echo $UUID not mountedhttps://unix.stackexchange.com/questions/509678
复制相似问题