Назад | Перейти на главную страницу

перечислить имена разделов Linux только в bash

df в Linux выводит следующую статистику по разделам.

-bash-4.1# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3            1918217320 1473337340 347440136  81% /
tmpfs                 32970328         0  32970328   0% /dev/shm
/dev/sda1               482214    148534    308781  33% /boot
/dev/sdd1            1922860884 1638599284 186585876  90% /disk5
/dev/sdc1            1922858352 1474925416 350257336  81% /disk2
/dev/sdb1            1922858352 1028783752 796399000  57% /disk4

Если я хочу получить список имен разделов, например: «/ dev / sda3 / dev / sda1 / dev / sdc1 ...», как мне это сделать в bash?

Чтобы вывести список всех разделов, определенных для устройства как root:

lsblk

ИЛИ

fdisk -l

ИЛИ

cat / proc / разделы

А также, как упоминал @Giedrius Rekasius

fdisk -l / dev / sda | grep '^ / dev' | вырезать -d '' -f1

df отобразит только смонтированные разделы. Если это то, что вы хотите, извлеките узлы устройства из df выводить вас grep для строк, начинающихся с "/ dev" и cut первый столбец из оставшегося вывода:

df | grep '^/dev' | cut -d' ' -f1 

или перечислить их на одной строке через пробел:

df | grep '^/dev' | cut -d' ' -f1 | tr '\n' ' '

Если вы хотите получить список разделов, которые не обязательно смонтированы, то с правами root вы можете запустить fdisk -l и, при желании, укажите устройства для сканирования разделов:

fdisk -l [device...]

Если вы не укажете какое-либо устройство, fdisk будет использовать устройства, указанные в /proc/partitions если этот файл существует.

Fdisk выведет информацию в формате, аналогичном df поэтому для извлечения узлов устройства вы можете сделать то же самое, что описано для df:

fdisk -l | grep '^/dev' | cut -d' ' -f1

Некоторые идеи...

awk '{print $1}' /proc/mounts

df | awk '{print $1}'

df | cut -f1 -d " "

blkid отображает только реальные хранилища, подключенные к компьютеру, с подключением или без него.

# sudo blkid | awk '{print substr($1, 0, length($1) - 1)}'

/dev/sda1
/dev/sda2
/dev/sdb1
/dev/sdb2
/dev/sr1

Что о :

df | cut -d" " -f1

Другой вариант:

df --type ext2 --type ext3 --type ext4 | tail -n +2 | awk '{ print $1 }' | tr '\n' ' '
  • --type <filesystem> позволяет указать, какие файловые системы вас интересуют
  • tail -n +2 начинает печать со второй строки вывода (чтобы строка заголовка не печаталась)
  • awk '{ print $1 }' напечатает крайний левый столбец, содержащий информацию о разделе
  • tr '\n' ' ' переводит символы новой строки в пробелы, так что вся информация находится в одной строке
  [root@ct01 ~]# ls /dev/sd*[0-9]
  /dev/sda1  /dev/sda2

Эта команда выведет список всех разделов в системе в форме, которую легко повторить:

tail -n +3 /proc/partitions | awk '{ print $4 }'