непрерывное чтение из именованного канала (кошка или хвост-f)

При установке сокета слушания можно выбрать, с каким локальным адресом он связывается. Это, покончили связывание (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 часто делается, когда Вы только хотите позволить соединения от той же машины, например, из соображений безопасности.)

16
27.06.2014, 12:47
2 ответа

cat продолжает чтение до тех пор, пока не получит EOF. Труба производит EOF на выходе только тогда, когда получает EOF на входе. Логирующий демон открывает файл, записывает в него и держит его открытым - так же, как он делает это для обычного файла - так что EOF никогда не генерируется на выходе. cat просто продолжает читать, блокируя всякий раз, когда он исчерпывает то, что в данный момент находится в канале.

Вы можете попробовать это самостоятельно:

$ mkfifo test
$ cat test

А в другом терминале:

$ cat > test
hello

будет выводиться в другом терминале. Затем:

world

В другом терминале будет выведено больше . Если теперь ввести Ctrl-D, то завершится и другой cat.

В этом случае, единственная наблюдаемая разница между cat и tail -f будет в том случае, если лог-демон закончен или перезапущен: cat будет постоянно останавливаться, когда конец канала записи закрыт, но tail -f будет продолжать работать (перезапускать файл), когда демон перезапущен.

.
18
27.01.2020, 19:48

cat показывает вам весь файл, когда tail -f показывает только последние строки и следует за ними. Таким образом, если файл короткий, они ведут себя одинаково, но если файл большой (100+ строк), вы можете увидеть четкую разницу между ними.

Дополнительная информация об этих командах :

tail http://www.computerhope.com/unix/utail.htm

cat http://www.computerhope.com/unix/ucat.htm

-2
27.01.2020, 19:48

Теги

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