
예를 들어 기존 장치 변수가 있는 경우 /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 ...
디스크 파티션이 아니라 디스크 이름이라고 말하는 것만으로는 충분하지 않습니다.
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
0이 아닌 종료 코드를 갖습니다.
모든 장치의 출력을 얻으려면 다음을 수행하십시오.
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.