/proc/partitions
перечислит все блочные устройства и разделы, которые распознает система. Можно тогда попытаться использовать file -s <device>
для определения, какая файловая система присутствует на разделе, если таковые имеются.
Используя HAL (ядро 2.6.17 и):
#! /bin/bash
hal-find-by-property --key volume.fsusage --string filesystem |
while read udi ; do
# ignore optical discs
if [[ "$(hal-get-property --udi $udi --key volume.is_disc)" == "false" ]]; then
dev=$(hal-get-property --udi $udi --key block.device)
fs=$(hal-get-property --udi $udi --key volume.fstype)
echo $dev": "$fs
fi
done
Современные системы Linux будут обычно только иметь записи в/dev для устройств, которые существуют, таким образом проходя hda* и sda*, как Вы предполагаете, работал бы довольно хорошо.
Иначе, может быть что-то в/proc, который можно использовать. От беглого взгляда там, я сказал бы, что/proc/partitions похож на него, мог сделать то, в чем Вы нуждаетесь.
libsysfs выглядит потенциально полезным, но не непосредственно из сценария оболочки. Существует программа, которая идет с ним, назвал systool, который сделает то, что Вы хотите, хотя может быть легче просто посмотреть в/sys непосредственно вместо того, чтобы использовать другую программу, чтобы сделать это для Вас.