Como mostrar os discos disponíveis em um sistema Linux?

2

Se eu executar fdisk -l , recebo uma saída como:

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

Como posso mostrar apenas os discos disponíveis no sistema, de modo que eles possam ter um espaço entre eles como:

/dev/sda /dev/sdb /dev/sdc

    
por Undefined 15.02.2010 / 17:02

7 respostas

3

Você pode usar pipes para redirecionar a saída

 fdisk -l | grep ^Disk | awk -F:  '{ print $1 }' |  awk -F" "  '{ print $2 }'
  • fisk -l: obtenha a saída total do disco
  • grep Disk: filtre a linha começando com disco
  • awk -F: '{print $ 1}': obtenha a primeira parte em que o separador é ":"
  • awk -F "" '{print $ 2}': obtém a segunda parte onde o separador é espaço
por 15.02.2010 / 17:14
3

Tente:

cat /proc/partitions

ou

ls /dev/sd*

Isto listará todas as partições disponíveis!

    
por 15.02.2010 / 17:07
2

Aqui está uma versão em perl:

fdisk -l | perl -n -e 'if (m{^Disk (\/.*):})  { print $1," "} END { print "\n"}'

impressões:

/dev/sda /dev/sdc 
    
por 15.02.2010 / 19:18
1

Isso mostra as partições montadas como uma lista delimitada por espaço:

echo $(mount -t ext2,ext3 | cut -f1 -d' ')

Você pode adicionar outros tipos de sistema de arquivos.

    
por 15.02.2010 / 21:37
1

Aqui estão algumas outras alternativas, se você pode fazer certas suposições (eu gosto de / proc / partitions, entretanto, contanto que você esteja filtrando os números principais para não pegar volumes LVM, etc)

Assumindo que todos os seus discos são locais (ou seja, não 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

Se todas as partições tiverem UUIDs (também funciona para dispositivos 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

Se a sua partição tiver rótulos (também orks para dispositivos 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
    
por 17.02.2010 / 20:40
1

Acho que a melhor solução é usar apenas um comando, como:

    awk '/[a-z]$/ {print $4}' /proc/partitions

ou se você tiver dispositivos md ou dm e quiser exibir apenas unidades sata (sdx):

    awk '$4 ~ /^sd.$/ { print $4 }' /proc/partitions

Também não é tão bonito, ainda é uma linha, ele usa mais comandos, mas funciona:

    cat /proc/partitions | awk '{print $4}' | grep sd[a-z] | grep -v [0-9]

Apenas meus 2 centavos ... Espero que ajude!

    
por 03.06.2012 / 21:09
-3

Eu acho que comandos como o que você usou, ou df (que lista os dispositivos enquanto mostra o espaço livre e usado) não irá enviar os dados de maneira delimitada por espaço como você deseja. Você precisa usar um comando de processamento de string como sed 'piped' para a saída dos comandos de disco anteriores e obter a opção desejada.

-AD.

    
por 15.02.2010 / 17:06

Tags