Этот файл в основном является копией /etc/services
из старой версии BSD - поскольку Windows использует один и тот же API-интерфейс «BSD-сокеты» и даже содержит различные клиентские программы (команды ftp, telnet, rsh, finger ), нужен файл services
для работы функции getservbyname()
.
В Unix различные интернет-серверы и клиенты вызывали getservbyname()
чтобы узнать, какой порт им следует прослушивать; getservbyname("finger", "tcp")
вернет порт 79. Но когда /etc/hosts
был заменен на DNS, /etc/services
не был - так что он быстро устареет по мере роста количества сайтов.
Я предполагаю, что из-за этого программы перестали использовать getservbyname()
и начали использовать вместо них свои собственные файлы конфигурации или номера портов в жестком коде . Я думаю, что только демон inetd (и его преемник xinetd ) по-прежнему используют имена сервисов как часть своей конфигурации. И только устаревшие клиенты, такие как telnet или ftp, используют имена сервисов для подключения.
В наши дни файл в основном информационный - например, программа netstat
может преобразовывать порты в имена служб, точно так же, как она переводит IP-адреса в имена хостов.
$ netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:pulse-native *:* LISTEN
tcp6 0 0 [::]:mpd [::]:* LISTEN
tcp6 0 0 [::]:pulse-native [::]:* LISTEN
tcp6 0 0 [::]:netbios-ssn [::]:* LISTEN
tcp6 0 0 [::]:finger [::]:* LISTEN
tcp6 0 0 [::]:auth [::]:* LISTEN
В Windows, я уверен, файл используется еще меньше - я не могу вспомнить ни одну программу, которая его использует, кроме тех же инструментов ftp и telnet .