Я думаю, что одна из причин заключается в том, что большинству пользователей необходимо иметь возможность использовать эфемерные порты для подключения к другим серверам, не обязательно являясь root.
Соединение TCP / IPv4 состоит из двух конечных точек, и каждая конечная точка состоит из IP-адреса и номера порта. Следовательно, когда пользователь-клиент подключается к компьютеру-серверу, установленное соединение можно рассматривать как набор из 4 элементов (IP-адрес сервера, порт сервера, IP-адрес клиента, порт клиента). Обычно три из четырех легко известны - клиентская машина использует свой собственный IP-адрес, а при подключении к удаленной службе требуются IP-адрес серверной машины и номер порта службы.
Что не сразу очевидно, так это то, что когда соединение установлено, клиентская сторона соединения использует номер порта. Если клиентская программа явно не запрашивает конкретный номер порта, {{ 1}} используемый номер порта является временным номером порта. Эфемерные порты - это временные порты, назначаемые стеком IP-адресов машины, и назначаются из указанного диапазона портов для этой цели. Когда соединение завершается, временный порт доступен для повторного использования, хотя большинство IP-стеков не будут повторно использовать этот номер порта до тех пор, пока не будет использован весь пул временных портов . Таким образом, если клиентская программа повторно подключается, ей будет назначен другой временный номер порта для ее стороны нового подключения.
По умолчанию grep
использует базовые регулярные выражения BRE (), что означает, что специальные символы, такие как +
, будут интерпретироваться как литеральные символы. Следовательно, в GNU grep его нужно экранировать, т.е. записать как \+
. (В качестве альтернативы можно использовать расширенное регулярное выражение ERE ()с флагом -E
; см. man grep
для получения дополнительной информации. )Следовательно, ваша команда может быть написана так:
grep -nr '[s][u][p][e][r][(][A-Za-z]\+'
Кроме того, […]
вокруг каждой буквы не требуется. […]
используется для указания класса символов, например. [ab]
может соответствовать либо a
, либоb
. Если в […]
есть одна буква, то это единственное совпадение. Следовательно, ваш код можно упростить до
grep -nr 'super([A-Za-z]\+'
Н.Б. Согласно комментарию Stéphane Chazelas , конструкция \+
является расширением GNU. Если это не сработает, вы можете вместо этого попробовать \{1,\}
.