как пример можете взять вывод утилиты
lsblk за основу
$ lsblk -o NAME,RM,TRAN,SIZE,TYPE,PTTYPE,FSTYPE,PARTTYPENAME,MOUNTPOINTS,MODEL | awk 'NR==1 || $2 == 1'
NAME RM TRAN SIZE TYPE PTTYPE FSTYPE PARTTYPENAME MOUNTPOINTS MODEL
sda 1 usb 14,7G disk dos iso9660 Transcend 16GB
├─sda1 1 789M part dos iso9660 Empty /run/media/admin/ARCH_202309
└─sda2 1 15M part dos vfat EFI (FAT-12/16/32)
где
RM это флаг съёмного устройства, 1 съёмное а 0 не съёмное,
TRAN device transport type в общем тип устройства usb, ssd, nvme ..., с остальными параметрами думаю боле-мене ясно, их можно убавить по желанию.
С помощью `awk` мы отфильтруем(`$2 == 1`) тока съёмные устройства, ну и заодно оставим шапку(`NR==1`) для информативности.
При желании это можно вывести более кратко
$ lsblk -o NAME,RM,FSTYPE,MOUNTPOINTS | awk '$2==1{$2="";print}'
sda iso9660
├─sda1 iso9660 /run/media/admin/ARCH_202312
└─sda2 vfat
где наличие третьего столбца у раздела говорит о его смонтированности
п.с.
тег CentOS тут думаю лишний, такая информация получается с помощью стандартных линукс утилит
п.с.2
может быть такая ситуация когда файловая система записана напрямую на весь диск без таблицы разделов, тогда вывод будет выглядеть примерно так:
$ lsblk -o NAME,RM,TRAN,SIZE,TYPE,PTTYPE,FSTYPE,PARTTYPENAME,MOUNTPOINTS,MODEL | awk 'NR==1 || $2 == 1'
NAME RM TRAN SIZE TYPE PTTYPE FSTYPE PARTTYPENAME MOUNTPOINTS MODEL
sda 1 usb 14,7G disk ext4 Transcend 16GB
значение в
PTTYPE будет отсутствовать
п.с.3
можно даже так с отфильтрованным и отформатированным выводом через json
$ lsblk -Jpo PKNAME,NAME,RM,FSTYPE,MOUNTPOINTS | jq -r '.blockdevices[] | select(.rm == true) | .children[] |select(.mountpoints[] == null) | "Съёмное устройство \(.pkname) имеет не смонтированный раздел \(.name) с файловой системой \(.fstype)"'
Съёмное устройство /dev/sda имеет не смонтированный раздел /dev/sda2 с файловой системой vfat
для учета файловой системы которая записана на весь диск без таблицы разделов необходимо в команду выше добавить некоторые условия, но это уже будет вашей разминкой.