como encontrar conflitos no arquivo fstab

0

algumas vezes notamos conflitos no arquivo / etc / fstab como o exemplo a seguir

/ dev / sdg aparece duas vezes!

/ data / sdb aparece duas vezes!

#
# /etc/fstab
# Created by anaconda on Wed Nov  9 13:26:03 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg00-OS-linux_root /                       xfs     defaults        
0 0
UUID=cc749f07-ad72-49e8-ab19-ec6532f5e9 /boot                   xfs     
defaults        0 0
/dev/mapper/vg00-OS-linux_var /var                    xfs     defaults        
0 0
/dev/mapper/vg00-OS-linux_swap swap                    swap    defaults        
0 0


/dev/sdc /data/sdc ext4 defaults,noatime 0 0
/dev/sdb /data/sdb ext4 defaults,noatime 0 0
/dev/sde /data/sde ext4 defaults,noatime 0 0
/dev/sdf /data/sdf ext4 defaults,noatime 0 0
/dev/sdd /data/sdd ext4 defaults,noatime 0 0
/dev/sdg /data/sdb ext4 defaults,noatime 0 0
/dev/sdg /data/sdg ext4 defaults,noatime 0 0
/dev/sdh /data/sdh ext4 defaults,noatime 0 0
/dev/sdi /data/sdi ext4 defaults,noatime 0 0
/dev/sdj /data/sdj ext4 defaults,noatime 0 0
/dev/sdk /data/sdk ext4 defaults,noatime 0 0
/dev/sdl /data/sdl ext4 defaults,noatime 0 0

queremos criar uma verificação simples para encontrar conflitos no primeiro campo ou no segundo campo no arquivo fstab

qual é a melhor sintaxe para esse propósito?

A verificação de

deve encontrar palavras duplicadas no primeiro campo ou no segundo campo, (a linha de sintaxe deve ser a mais curta possível)

saída esperada - fail / ok

& (deve imprimir todas as palavras duplicadas do primeiro campo / segundo campo em caso de falha)

    
por yael 08.01.2018 / 15:21

3 respostas

3
awk ' !/^#/ { if (seendev[$1]++) { print; ++rc; } if (seenmnt[$2]++) { print; ++rc; } } 
     END { exit rc }' < /etc/fstab

O one-liner awk acima imprimirá quaisquer linhas que duplicaram a coluna 1 (dispositivo) ou a coluna 2 (ponto de montagem), e também sairá com um código de retorno diferente de zero se o acima ocorrer.

    
por 08.01.2018 / 15:41
0
#!/bin/sh
# Filter out comments and blank lines from /etc/fstab, pick 1st/2nd field,
# then sort and find duplicates.
DUP_DEVS="$(grep -v -e '^#' -e '^$' /etc/fstab | awk '{ print $1;}' | sort | uniq -d)"
DUP_MOUNTS="$(grep -v -e '^#' -e '^$' /etc/fstab | awk '{ print $2;}' | sort | uniq -d)"

if [ -z "$DUP_DEVS" ] && [ -z "$DUP_MOUNTS" ]; then
    echo "ok"
    exit 0
else
    echo "fail"
    if [ ! -z "$DUP_DEVS" ]; then
        echo "Duplicate devices:"
        echo "$DUP_DEVS"
    else
        echo "Duplicate mount points:"
        echo "$DUP_MOUNTS"
    fi
    exit 1
fi
    
por 08.01.2018 / 15:36
0

Solução completa com awk :

awk '/^\/dev\//{ 
         if (devs[$1]++) dups[$1];
         if (data[$2]++) dups[$2] 
     }
     END{ 
         res="Ok"; 
         for (d in dups) { res="Fail\nDuplicates: "; break } 
         print "Result: "res; 
         for (d in dups) print d 
     }' /etc/fstab

A saída:

Result: Fail
Duplicates: 
/dev/sdg
/data/sdb
    
por 08.01.2018 / 16:01