Если я бегу fdisk -l Я получаю вывод как:
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0003ad9d
Device Boot Start End Blocks Id System
/dev/sda1 1 1306 10490413+ 83 Linux
/dev/sda2 1307 2612 10490445 83 Linux
Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0003ad9d
Device Boot Start End Blocks Id System
/dev/sdb1 1 1306 10490413+ 83 Linux
/dev/sdb2 1307 2612 10490445 83 Linux
Как я могу просто показать диски, доступные в системе, чтобы они могли иметь пробел между ними как:
/ Дев / СДА / Дев / SDB / Дев / SDC
Пытаться:
cat /proc/partitions
или
ls /dev/sd*
Это перечислит все доступные разделы!
Вы можете использовать каналы для перенаправления вывода
fdisk -l | grep ^Disk | awk -F: '{ print $1 }' | awk -F" " '{ print $2 }'
Вот версия Perl:
fdisk -l | perl -n -e 'if (m{^Disk (\/.*):}) { print $1," "} END { print "\n"}'
печатает:
/dev/sda /dev/sdc
При этом смонтированные разделы отображаются в виде списка, разделенного пробелами:
echo $(mount -t ext2,ext3 | cut -f1 -d' ')
Вы можете добавить другие типы файловых систем.
Вот несколько других альтернатив, если вы можете сделать определенные предположения (хотя мне нравится / proc / partitions, если вы фильтруете основные числа, чтобы не брать тома LVM и т. Д.)
Предполагая, что все ваши диски являются локальными (т.е. не SAN):
user@host [/home/q0px]
$ ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 9 Dec 5 01:27 pci-0000:00:1f.1-ide-0:0 -> ../../hda
Если все ваши разделы имеют UUID (работает и для устройств SAN)
user@host [/home/q0px]
$ ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 18 Dec 5 01:27 dc13d5cf-ba98-4339-99c5-0136177f7e22 -> ../../cciss/c0d0p1
Если у всех ваших разделов есть метки (также orks для устройств SAN):
user@host [/home/q0px]
$ ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx 1 root root 18 Dec 5 01:27 boot -> ../../cciss/c0d0p1
Я думаю, что лучшим решением будет использовать только одну команду, например:
awk '/[a-z]$/ {print $4}' /proc/partitions
или если у вас есть устройства md или dm и вы хотите отображать только диски sata (sdx):
awk '$4 ~ /^sd.$/ { print $4 }' /proc/partitions
Также не так красиво, все еще однострочно, он использует больше команд, но работает:
cat /proc/partitions | awk '{print $4}' | grep sd[a-z] | grep -v [0-9]
Только мои 2 цента ... Надеюсь, это поможет!
Я предполагаю, что такие команды, как тот, который использовался u, или df (который перечисляет устройства, показывая свободное и используемое пространство) не будут выводить данные в режиме, разделенном пробелами, как вы хотите. Вам нужно использовать команду обработки строк, такую как sed 'piped', для вывода предыдущих дисковых команд и получить желаемый выход.
-ОБЪЯВЛЕНИЕ.