Obtenha detalhes de espaço sem nomes de unidade

2

se houver uma maneira de obter detalhes do espaço da unidade sem nomes de unidade. Por exemplo, a saída de

df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G   15G  4.2G  78% /
/dev/sda6              68G   39G   26G  61% /u01
/dev/sda2              30G  5.8G   22G  21% /opt
/dev/sda1              99M   19M   76M  20% /boot
tmpfs                  48G  8.2G   39G  18% /dev/shm
/dev/mapper/vg3-KPGBKUP4
                   10T  7.6T  2.5T  76% /KPGBKUP4

Eu quero a saída como abaixo:

20G   15G  4.2G  78% 
68G   39G   26G  61% 
30G  5.8G   22G  21% 
99M   19M   76M  20% 
48G  8.2G   39G  18% 
10T  7.6T  2.5T  76%

Por que eu quero isso? Eu tenho vários servidores e tenho que fazer relatórios todos os dias. Isso reduzirá meu trabalho a um décimo. Qualquer sugestão é muito apreciada.

    
por Abhishek dot py 31.03.2014 / 13:00

5 respostas

2

Supondo que sistemas de arquivos e pontos de montagem não contenham caracteres em branco, tente:

df -hP | awk 'NR>1 { $1=$6="" ; print }' | column -t

df -hP lista as estatísticas do sistema de arquivos sem quebras de linha para nomes longos do sistema de arquivos.

awk 'NR>1 { ... }' restringe a ação dada às linhas 2 e seguintes para ignorar a linha de cabeçalho de df ...

O awk -action { $1=$6="" ; print } zera os campos indesejados e imprime o restante.

Usar { print $2,$3,$4,$5 } faria o mesmo trabalho.

column -t organiza toda a saída como tabela limpa.

$ cat x
#!/bin/sh
echo '<testing inside a script>'
df -hP | awk 'NR>1 { $1=$6="" ; print }' | column -t
echo '</testing inside a script>'
$ chmod +x x
$ ./x
<testing inside a script>
71G    39G   29G    58%
1006M  0     1006M  0%
10M    208K  9,8M   3%
1006M  0     1006M  0%
</testing inside a script>
$ _

(Eu removerei isso novamente quando o problema mencionado nos comentários for resolvido ...)

    
por 31.03.2014 / 13:22
5

A partir do GNU coreutils 8.21 ( changelog ), df tem uma opção --output . Usando sed para aparar o cabeçalho:

df -h --output=size,used,avail,pcent | sed 1d
    
por 31.03.2014 / 14:50
2
findmnt -Do SIZE,USED,AVAIL,USE%

Aqui está minha saída:

 SIZE   USED AVAIL USE%
11.8G      0 11.8G   0%
11.8G  63.1M 11.7G   1%
11.8G   920K 11.8G   0%
11.8G      0 11.8G   0%
  12G   8.9G  2.7G  74%
11.8G 410.6M 11.4G   3%
   3G 584.4M  2.4G  19%
   3G 584.4M  2.4G  19%
 2.4G     4K  2.4G   0%
   0      0     0    -

Então, se você ainda não estiver usando findmnt para o seu relatório, provavelmente deveria. Você pode ser muito mais específico do que isso - mas, no caso acima, eu especifico -Do para imitar df (como a opção é descrita) e para limitar colunas de saída. Para remover os títulos das colunas, basta adicionar -n . Você não precisa de nenhuma análise de string; é atômico para a saída.

Mas não acredite em mim:

man mount

... For more robust and definable output use findmnt(8), especially in your scripts...

    
por 31.03.2014 / 13:23
1

Tente este comando

df -Ph | awk '{print $2, $3, $4, $5}'
    
por 31.03.2014 / 13:15
0

Tente isto:

$ df -h | awk 'NR==1{next}{for(i=2;i<NF;i++){printf("%s\t",$i)};print""}'
92G     5.2G    82G     6%  
2.9G    4.0K    2.9G    1%  
1.2G    932K    1.2G    1%  
5.0M    0       5.0M    0%  
2.9G    700K    2.9G    1%  
360G    53G     289G    16% 
    
por 31.03.2014 / 13:15