Для некоторого дюйм/с-c 4-W 1 ip ping | кошка ничего не производит, пока ping не закончился, тогда как это делает для других

Если Ваш переключатель является управляемым коммутатором, то можно использовать lldpctl от lldpd пакет (на Debian/Ubuntu) для знания его MAC-адреса.

lldp пакет описан следующим образом:

lldpd 802.1ab реализация (LLDP), чтобы помочь Вам определить местоположение соседей всего своего оборудования.

Страница справочника для lldpctl шоу, как использовать его:

NAME
     lldpctl — control LLDP daemon

SYNOPSIS
     lldpctl [-d] [-L location] [-P policy] [-O poe] [-o poe] [interface ...]

DESCRIPTION
     The lldpctl program controls lldpd(8) daemon.

     When no specific option is given, lldpctl displays the list of 
     discovered neighbors along with some of their advertised capabilities.
     If some interfaces are given, only those interfaces will be displayed.
...

Ссылки

3
04.01.2015, 20:28
3 ответа

В случае, когда ping выводит на оболочку конвейера, различное поведение объясняется буферизацией. ping вызывает fflush() после сообщения о каждом успешно полученном эхо-пакете, поэтому эти строки немедленно посылаются cat, который выводит их без задержки. ping делает не вызов fflush() после записи строк, которые сообщают о таймере пакетов, поэтому stdio буферизует эти строки до тех пор, пока ping не вызовет exit(), которая затем посылает их все cat, который их выводит.

В случае, когда ping напрямую выводит на терминал, вы сразу же видите и успешный вывод, и неудачный, потому что по умолчанию stdio буферы строк выводят все на потоки, связанные с ttys. Таким образом, каждая строка вывода посылается на терминал немедленно, а не буферизируется stdio.

В духе обучения человека ловить рыбу , вы можете проверить все это самостоятельно, прочитав исходный код OS X для ping и прочитав man-страницу OS X для stdio.

4
27.01.2020, 21:19

Я думаю, что это из-за того, как кошка получает вход, первая команда дает статус выхода 2, в то время как IP-адрес, который является пинг-приемником дает статус выхода 0.

Это означает, что cat сразу отображает выход STDOUT, в то время как он помещает STDERR в свой буфер, а затем отображает его при завершении команды.

0
27.01.2020, 21:19

Он либо ждет DNS, либо ICMP пакетов эхо-ответа. Если это DNS, попробуйте воспользоваться опцией -n. Если это не так, попробуйте отличить хосты, отвечающие на ICMP эхо-запросы от тех, которые не отвечают (или чьи ответы отфильтрованы где-то в пути).

0
27.01.2020, 21:19

Теги

Похожие вопросы