Скрипт, который возвращает имя сервиса, когда вы даете ему номер порта сервиса по умолчанию - PullRequest
1 голос
/ 18 июня 2019

Мне нужно написать скрипт bash, который возвращает имя сервиса, когда вы даете ему номер порта сервиса по умолчанию.Я работаю с /etc/services файлом.И мой код:

grep -E  $1 /etc/services | head -n 1 | awk '{print $1}'

Но он не работает с портами, такими как 1,2,3, ... 20 и некоторыми другими.Как улучшить это или, может быть, мне нужно другое решение, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 19 июня 2019
getent services 22

вывод:

ssh                   22/tcp

и, если вам просто нужно имя:

getent services 22 | awk '{print $1}'

выход:

ssh

При запросе информации наВ системе используйте getent всякий раз, когда это возможно, поскольку некоторые записи могут поступать из источников, отличных от файла в /etc.Например, вместо разбора /etc/passwd для пользователя с именем USERNAME используйте getent passwd USERNAME, поскольку запись может поступать, например, из LDAP, вместо /etc/password.

В моей системе getent знает о следующих «базах данных»:

ahosts     ahostsv6   ethers     gshadow    netgroup   passwd     rpc        shadow     
ahostsv4   aliases    group      hosts      networks   protocols  services
0 голосов
/ 18 июня 2019

Здесь вы можете указать любой номер_порта для переменной input_port, он будет сопоставлен в первой части 2-го столбца, и если будет найден соответствующий 1-й столбец, будет напечатан.

    awk -v input_port="$1" '{split($2,a,"/")}input_port==a[1]{print $1}' /etc/services
    smtp
...