![]() |
Скрипт на баше
Нужно написать скрипт на bash/ksh. Нужно вывести все системы, имеющие IP адрес в подсетях исходной системы и отвечающие на ARP запросы, потом вывести информацию об использовании дискового пространства локальных файловых систем.
Т.к. я хреново это все знаю, то намутил кучу и уже запутался. Просьба не обращать внимания на кучу лишних переменных, знаю, что убрать можно много. Код:
100 пудов это все пишется, конечно, гораздо короче и менее запутано. Если кто подскажет - буду очень признательный. |
у тебя в первой же строчке ошибка, если в системе два адреса из одной сети - он тебе выдаст не одну сеть, а две. если пять - то пять.
с остальным не разбирался, запутано у тебя все. |
Запутано - не то слово...
Скрипт знакомый писал, потом я его еще мучал. В первой строчке ключ -l не дописал к wc. Вообще, выводит правильно - на три подсети три записи. |
а на три сети, но пять адресов?
|
Я так понимаю, вот эта строчка имеется в виду:
ifconfig -a | awk '{if($5=="broadcast") print $2}' | wc -l Так после awk же остаются только бродкаст-адреса, т.е. их в любом случае столько же, сколько подсетей. Три я написал потому, что там, где скрипт исполняется их три, а адресов то там прилично. |
$ ifconfig -a | awk '{if($5=="broadcast") print $2}'
192.168.10.250 192.168.11.250 192.168.10.111 192.168.11.111 85.114.xxx.xxx вывело пять, хотя сетей всего три. при этом есть еще два tun интерфейса от openvpn, в которых отсутствует broadcast и соответственно скрипт о них ничего не узнает :) |
в общем, эту строчку, изначально кривую, надо заменить вот этим - ifconfig -a | grep broadcast |sort -u +5 |wc -l
у меня на freebsd работает правильно. |
Благодарю :) Я хреново в этом разбираюсь :)
То есть бродкаст-адресов может быть больше, чем сетей? Я думал, что для каждой сети может быть только по одному бродкасту: адрес сети с маской. |
броадкаст выводится на каждый адрес, вне зависимости от того, есть ли еще адреса из этой сети в системе или нет.
а вообще завязываться на ifocnfig опасно, так как его вывод не стандартизирован и то, что у меня работает правильно на фре, может не сработать на линухе... правда как сделать по-другому пока не знаю :) |
Мне надо, чтобы на Солярисе работало :) В общем-то, должно.
На ifconfig завязываться нужно - попросили именно так делать. А вообще, по идее, можно еще из hosts вытащить. Но сказано не делать. Хотя, если есть третий способ без hosts, думаю, должно прокатить. |
я это к тому сказал, что на твоем солярисе ifconfig может иметь иной вывод и соответственно скрипт будет работать неверно.
|
Да, я понял. Но в нем проблем нет - все правильно выводится.
|
можно вместо ifconfig юзать ip a, оно вроде более стандартизировано
|
$ ip a
-bash: ip: command not found |
$ ip a
ksh: ip: not found :) Потихоньку начал раскуривать, решил все заново писать. |
Ну так во фряхе или соляре iproute2 нет. Откуда ip тогда взяться.
|
это была демонстрация несостоятельности заявления, что "ip a более стандартизировано".
|
это бало не заявление а предположение
|
Переписал в итоге все, вроде работает. Если проканает - напишу, как сделать, вдруг кому надо.
|
Цитата:
|
Цитата:
но дело даже не в этом, вряд ли это кому-то может понадобиться еще :) это плод больного воображения препода и только. к жизни отношения не имеющий. |
Цитата:
|
Цитата:
|
Плохой пример, это разные вещи.
|
В общем, сделал все заново так (вдруг кому интересно):
Код:
#!/bin/bash |
что-то твое решение хреново совпадает с твоим же условием в первом посте :) и строчку с ifconfig ты переделал опять до того же некорректно работающего состояния :) sort там был не просто так.
|
А почему с условием не совпадает? Вроде нормательно: обновляет ARP-таблицу, как только пинг прошел - берет информацию df -l.
Да, кстати, насчет сорта: я так и не врубил, зачем был он нужен... :) |
"вывести... отвечающие на ARP-запросы". ping - это не arp-запрос, ответ на пинг может быть и не получен, а arp вполне.
sort нужен был для того, чтобы исключить дублирующиеся сети. |
короче, вот это:
Цитата:
arp $decimal >/dev/null && rsh $decimal df -l; и все. |
Ну в принципе тоже верно.
А чем плоха проверка потока с ошибками? Просто не самый эффективный метод? |
не понял вопрос :)
|
Ну эти два варианта эквивалентны, разве нет?
Я повторюсь: фигово в этом разбираюсь, поэтому разницы и не вижу. А пинг я делал для того, чтобы просто обновить ARP-таблицу на самом деле. Она, насколько мне известно, только так обновляется. |
Цитата:
Цитата:
|
Хокай, спасибо :)
|
Цитата:
192.168.1.1 = C0.A8.01.01 = 0xC0A80101 = 3232235777 Твоя же вывела у меня 272891929 -> 16.68.00.25 зы: как вариант Код:
decToBin(){ |
Да, в старой версии тоже делал через ibase, накосячить сложнее.
Спасибо за поправку :) |
Текущее время: 13:11. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot