скрипт сравнения fstab с текущим mount

сравнивает, показывает что прописано но не смонтировано, или смонтировано но не прописано:

#!/bin/bash


#объявляем массивы, в которых будут собраны и сортированы точки монтирования

declare -a fst #fstab
declare -a mnt #mount
declare -a fstinmnt #fstab in mount present
declare -a mntinfst #mount in fstab present
declare -a nfstinmnt #fstab in mount absent
declare -a nmntinfst #mount in fstab absent

#заполняем первичные массивы точками монитрования прописанными в fstab и фактически смонтированны mount

fst=( `egrep -v '^#|^$' /etc/fstab |awk '{print $2}' |egrep -v '\/proc|\/dev\/shm|\/dev\/pts|\/sys|swap'` )
mnt=( `mount |awk '{print $3}' |egrep -v '\/proc|\/dev\/shm|\/dev\/pts|\/sys|\/var\/lib\/nfs'` )

#инициализируем индекс-каунтеры для сортированных массивов

fst_members=${#fst[@]}
mnt_members=${#mnt[@]}

#fst -> mnt

#построчно сравниваем маунтпоинты из fstab с mount. совпадения кладем в fstinmnt[], промахи в nfstinmnt[].

for f in `seq -s " " 0 $[$fst_members - 1]`; do
 for m in `seq -s " " 0 $[$mnt_members - 1]`; do
  if [ "${fst[$f]}" = "${mnt[$m]}" ]
   then fstinmnt=( "${fstinmnt[@]}" "${fst[$f]}" ) ; break
   else nfstinmnt=( "${nfstinmnt[@]}" "${fst[$f]}" )
  fi
  done;
done

#инициализируем индекс-каунтеры для сортированных массивов

fstinmnt_members=${#fstinmnt[@]}
nfstinmnt_members=${#nfstinmnt[@]}


#дедуплицируем вывод, т.к. сравнение происходит в несколько проходов, имеем дубли, которые надо убрать.


for i in `seq -s " " 0 $[$fstinmnt_members - 1]`; do
 for ni in `seq -s " " 0 $[$nfstinmnt_members -1]`; do
  if [ "${fstinmnt[$i]}" = "${nfstinmnt[$ni]}" ]
   then nfstinmnt[$ni]=
  fi
 done;
done

nfstinmnt=( `printf '%s\n' ${nfstinmnt[*]} |sort |uniq |paste -d" " -s` )


#mnt -> fst

#построчно сравниваем маунтпоинты из mount c fstab. совпадения кладем в mntinfst[], промахи в nmntinfst[].

for m in `seq -s " " 0 $[$mnt_members - 1]`; do
 for f in `seq -s " " 0 $[$fst_members - 1]`; do
  if [ "${mnt[$m]}" = "${fst[$f]}" ]
   then mntinfst=( "${mntinfst[@]}" "${mnt[$m]}" ) ; break
   else nmntinfst=( "${nmntinfst[@]}" "${mnt[$m]}" )
  fi
  done;
done

#инициализируем индекс-каунтеры для сортированных массивов

mntinfst_members=${#mntinfst[@]}
nmntinfst_members=${#nmntinfst[@]}

#опять дедуплицируем вывод.

for i in `seq -s " " 0 $[$mntinfst_members - 1]`; do
 for ni in `seq -s " " 0 $[$nmntinfst_members -1]`; do
  if [ "${mntinfst[$i]}" = "${nmntinfst[$ni]}" ]
   then nmntinfst[$ni]=
  fi
 done;
done

nmntinfst=( `printf '%s\n' ${nmntinfst[*]} |sort |uniq |paste -d" " -s` )

#вывод полученных результатов сравнения mount->fstab

echo "маунтпоинты прописанные в fstab и смонтированные      ->  ${fstinmnt[@]}"
echo "маунтпоинты прописанные в fstab и _не_ смонтированные ->  ${nfstinmnt[@]}"
echo "маунтпоинты смонтированные и прописанные в fstab      ->  ${mntinfst[@]}"
echo "маунтпоинты смонтированные и _не_ прописанные в fstab ->  ${nmntinfst[@]}"
Запись опубликована в рубрике overminds с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий