
Wenn ich beispielsweise eine vorhandene Gerätevariable habe /dev/sda
, möchte ich überprüfen, dass es sich nicht um den Namen einer Partition, sondern um den der gesamten Festplatte handelt.
Ich habe Folgendes versucht:
[[ $(df --output=source "$var" 2> /dev/null | tail -n 1) = 'udev' ]]
Dies gibt jedoch „true“ zurück, unabhängig davon, ob das var='/dev/sda'
Gerät angeschlossen ist oder die var='/dev/sda1'
Partition nicht gemountet ist.
Selbst wenn Sie die vorherige Bedingung mit der folgenden kombinieren:
if grep -sq "^$var " /proc/mounts; then ...
Es wäre nicht ausreichend zu sagen, dass es sich um einen Datenträgernamen und nicht um eine Datenträgerpartition handelt.
Wie kann ich überprüfen, ob es string
sich um einen vorhandenen Gerätenamen und nicht um einen Partitionsnamen handelt?
Antwort1
Sie könnten lsblk
hierfür verwenden – insbesondere sollte entweder (für eine Partition) oder (für ein ganzes Blockgerät) lsblk -o type
zurückgeben .part
disk
So beispielsweise gegeben:
$ 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
Dann
$ 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
oder
$ 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"
Antwort2
Verwenden lsblk
:
var="/dev/sda"
if lsblk "$var" &>/dev/null; then
echo "Is a disk."
else
echo "Is not a disk."
fi
Wenn "$var"
es sich nicht um ein gültiges Gerät handelt, wird z. B. var="/dev/sda1"
ein lsblk
Exit-Code ungleich Null ausgegeben.
So erhalten Sie die Ausgabe aller Geräte:
lsblk -dnp --output NAME
Antwort3
Verwenden mountpoint
.
Aus 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.