Я хочу проверить только состояние сетевых интерфейсов на сервере, который указан в выводе команды на linux bash - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу получить на выходе только интерфейс, который отключен на основе настроенных интерфейсов в каталоге сетевых скриптов.

for i in $(ls -1 /etc/sysconfig/network-scripts/ifcfg-e*|sed 's/.*ifcfg-//g'); do grep -i 'down' /sys/class/net/$i/operstate; echo $i;done

Как я могу перечислить только те интерфейсы, которые отключены на основе ввода за итерацию?

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

На самом деле этот делает свою работу:

for i in $(ls -1 /etc/sysconfig/network-scripts/ifcfg-e*|sed 's/.*ifcfg-//g'); do grep -i 'down' /sys/class/net/$i/operstate &> /dev/null;[ $? -eq "0" ] && echo $i;done|awk '{printf "%s ",$i} END {print ""}'
0 голосов
/ 17 апреля 2020

Я предлагаю с bash, его Расширение параметра и CentOS 7 / RHEL 7:

for i in /etc/sysconfig/network-scripts/ifcfg-e*; do 
  i=$(basename "$i")
  grep -qi 'down' "/sys/class/net/${i#*-}/operstate" && echo "${i#*-}"
done

${i#*-} удаляет из строки ifcfg-ens33 ifcfg-, чтобы получить только имя интерфейса.

Обновление :

for i in /etc/sysconfig/network-scripts/ifcfg-e*; do
  grep -qi 'down' "/sys/class/net/${i##*-}/operstate" && echo "${i##*-}"
done

${i##*-} удаляет из строки /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-, чтобы получить только имя интерфейса.

...