При установке сокета слушания можно выбрать, с каким локальным адресом он связывается. Это, покончили связывание (2) системный вызов. (Можно также принять решение связать его с 0.0.0.0, что означает, слушают на всех локальных адресах).
Вы сказали netcat слушать на localhost. Таким образом, это звонило, связывают (2) с 127.0.0.1 (или подобный) как адрес сокета. Таким образом, ядро связало сокет слушания только с тем адресом.
Когда запрос на установление соединения вошел к 192.168.44.182:20000, ядро посмотрело на список сокетов слушания и не нашло ни один. Таким образом, ядро отказалось от соединения.
Когда запрос войдет к 127.0.0.1:20000, ядро найдет сокет слушания и принятие (2), syscall скажет netcat об этом.
Чтобы иметь netcat слушают во всех интерфейсах, опускают хост: nc -l -p 20000
или альтернативно укажите 0.0.0.0: nc -l 0.0.0.0 -p 20000
. Можно также указать определенный IP-адрес, на котором Вы хотите, чтобы это послушало также (192.168.44.182), но затем конечно, nc localhost 20000
будет отклонен.
(Связывающий с localhost часто делается, когда Вы только хотите позволить соединения от той же машины, например, из соображений безопасности.)
cat
продолжает чтение до тех пор, пока не получит EOF. Труба производит EOF на выходе только тогда, когда получает EOF на входе. Логирующий демон открывает файл, записывает в него и держит его открытым - так же, как он делает это для обычного файла - так что EOF никогда не генерируется на выходе. cat
просто продолжает читать, блокируя всякий раз, когда он исчерпывает то, что в данный момент находится в канале.
Вы можете попробовать это самостоятельно:
$ mkfifo test
$ cat test
А в другом терминале:
$ cat > test
hello
будет выводиться в другом терминале. Затем:
world
В другом терминале будет выведено больше . Если теперь ввести Ctrl-D, то завершится и другой cat
.
В этом случае, единственная наблюдаемая разница между cat
и tail -f
будет в том случае, если лог-демон закончен или перезапущен: cat
будет постоянно останавливаться, когда конец канала записи закрыт, но tail -f
будет продолжать работать (перезапускать файл), когда демон перезапущен.
cat
показывает вам весь файл, когда tail -f
показывает только последние строки и следует за ними. Таким образом, если файл короткий, они ведут себя одинаково, но если файл большой (100+ строк), вы можете увидеть четкую разницу между ними.
Дополнительная информация об этих командах :