Проверьте, является ли «строка» именем существующего устройства, а не именем раздела.

Проверьте, является ли «строка» именем существующего устройства, а не именем раздела.

Например, если у меня есть существующая переменная устройства /dev/sda, я хочу проверить, что это не имя раздела, а всего диска.
Я пробовал это:

[[ $(df --output=source "$var" 2> /dev/null | tail -n 1) = 'udev' ]]

но это возвращает true var='/dev/sda', подключено ли устройство или раздел var='/dev/sda1'не смонтирован.
Так что даже если вы объедините предыдущее условие со следующим:

if grep -sq "^$var " /proc/mounts; then ...

было бы недостаточно сказать, что это имя диска, а не раздела диска.

Как проверить, stringявляется ли a именем существующего устройства, а не именем раздела?

решение1

lsblkДля этого можно использовать - в частности, lsblk -o typeследует возвращать либо part(для раздела), либо disk(для всего блочного устройства).

Так, например, дано:

$ lsblk /dev/sda
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238.5G  0 disk
├─sda1   8:1    0   9.8G  0 part
├─sda2   8:2    0 164.7G  0 part
├─sda3   8:3    0  31.1G  0 part /
├─sda4   8:4    0     1K  0 part
├─sda5   8:5    0  15.3G  0 part /usr/local
└─sda6   8:6    0  17.7G  0 part /home

затем

$ var=/dev/sda; lsblk -ndo type "$var" | grep -qF part && echo "is a partition"
$ var=/dev/sda1; lsblk -ndo type "$var" | grep -qF part && echo "is a partition"
is a partition

или

$ var=/dev/sda; lsblk -ndo type "$var" | grep -qF disk && echo "is a disk"
is a disk
$ var=/dev/sda1; lsblk -ndo type "$var" | grep -qF disk && echo "is a disk"

решение2

Использовать lsblk:

var="/dev/sda"

if lsblk "$var" &>/dev/null; then
   echo "Is a disk."
else
   echo "Is not a disk."
fi

Если "$var"устройство недействительно, например var="/dev/sda1", , lsblkто код выхода будет ненулевым.


Чтобы получить вывод всех устройств:

lsblk -dnp --output NAME

решение3

Использовать mountpoint.

От man mountpoint:

NAME
       mountpoint - see if a directory or file is a mountpoint

SYNOPSIS
       mountpoint [-d|-q] directory | file

       mountpoint -x device

DESCRIPTION
       mountpoint   checks   whether   the   given   directory   or  file  is  mentioned  in  the
       /proc/self/mountinfo file.

Связанный контент