"문자열"이 파티션 이름이 아닌 기존 장치 이름인지 확인하십시오.

"문자열"이 파티션 이름이 아닌 기존 장치 이름인지 확인하십시오.

예를 들어 기존 장치 변수가 있는 경우 /dev/sda그것이 파티션 이름이 아니라 전체 디스크 이름인지 확인하고 싶습니다.
나는 이것을 시도했습니다 :

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

그러나 이는 var='/dev/sda'장치가 연결되어 있는지 또는 var='/dev/sda1'파티션이 마운트되어 있지 않은지 여부에 관계없이 true를 반환합니다.
따라서 이전 조건을 다음과 결합하더라도:

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

디스크 파티션이 아니라 디스크 이름이라고 말하는 것만으로는 충분하지 않습니다.

stringa가 파티션 이름이 아닌 기존 장치 이름인지 어떻게 확인할 수 있나요 ?

답변1

lsblk이를 위해 사용할 수 있습니다 . 특히 (파티션의 경우) 또는 (전체 블록 장치의 경우)를 lsblk -o type반환해야 합니다 .partdisk

예를 들어 다음과 같습니다.

$ 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") 는 lsblk0이 아닌 종료 코드를 갖습니다.


모든 장치의 출력을 얻으려면 다음을 수행하십시오.

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.

관련 정보