脚本 which returns 一个服务名称,当你给它一个服务的默认端口号时
Script which returns a service name when you give it a service's default port number
我需要写一个 bash 脚本,当你给它一个服务的默认端口号时,它 returns 一个服务名称。我正在处理 /etc/services
文件。我的代码是:
grep -E /etc/services | head -n 1 | awk '{print }'
但它不适用于 1,2,3,...20 等端口。如何改进它或者我可能需要其他解决方案来解决这个问题?
在这里,您可以提供任何 port_number 到 input_port
变量,它将在第 2 列的第一部分匹配,如果匹配,将打印第 1 列。
awk -v input_port="" '{split(,a,"/")}input_port==a[1]{print }' /etc/services
smtp
getent services 22
输出:
ssh 22/tcp
如果您只需要名字:
getent services 22 | awk '{print }'
输出:
ssh
查询系统信息时,请尽可能使用 getent
,因为某些条目可能来自 /etc
中的文件以外的来源。例如,不要为名为 USERNAME
的用户解析 /etc/passwd
,而是使用 getent passwd USERNAME
,因为条目可能来自 LDAP,而不是 /etc/password
.
在我的系统上,getent
知道以下 "databases":
ahosts ahostsv6 ethers gshadow netgroup passwd rpc shadow
ahostsv4 aliases group hosts networks protocols services
我需要写一个 bash 脚本,当你给它一个服务的默认端口号时,它 returns 一个服务名称。我正在处理 /etc/services
文件。我的代码是:
grep -E /etc/services | head -n 1 | awk '{print }'
但它不适用于 1,2,3,...20 等端口。如何改进它或者我可能需要其他解决方案来解决这个问题?
在这里,您可以提供任何 port_number 到 input_port
变量,它将在第 2 列的第一部分匹配,如果匹配,将打印第 1 列。
awk -v input_port="" '{split(,a,"/")}input_port==a[1]{print }' /etc/services
smtp
getent services 22
输出:
ssh 22/tcp
如果您只需要名字:
getent services 22 | awk '{print }'
输出:
ssh
查询系统信息时,请尽可能使用 getent
,因为某些条目可能来自 /etc
中的文件以外的来源。例如,不要为名为 USERNAME
的用户解析 /etc/passwd
,而是使用 getent passwd USERNAME
,因为条目可能来自 LDAP,而不是 /etc/password
.
在我的系统上,getent
知道以下 "databases":
ahosts ahostsv6 ethers gshadow netgroup passwd rpc shadow
ahostsv4 aliases group hosts networks protocols services