[英]how to copy command output in to a bash variable
我正在制作一个需要知道 Linux 服务器的 web 接口的 bash 脚本。
我知道我可以使用命令IP a
或ipconfig
来归档接口
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:3c:20:ec brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute
valid_lft 80057sec preferred_lft 80057sec
inet6 fe80::7888:1c1e:859a:5c75/64 scope link noprefixroute
valid_lft forever preferred_lft forever
在这个例子中,接口是enp0s3
当然,在每台服务器中,界面都会有所不同,那我该怎么办呢?
有什么方法可以自动复制这些数据并将其设置为脚本上的变量?
谢谢!
所以经过大量研究,我找到了解决方案
我将使用此命令复制界面
ip a | grep -o -P '(?<=2: ).*(?=:)'
您想知道服务器的“Web 界面”。 我假设您的意思是Web 服务器正在运行的接口。 假设这是一个标准的 web 服务器,使用 HTTP 和 HTTPS 协议的标准端口。 所以你需要知道的第一件事是:是否有任何东西在任何tcp 接口上的这些端口上监听? 为此,您需要netstat
命令:
netstat -na
然后,您可以使用sed
或grep
过滤此 output 以查找特定模式。 例如:
netstat -na | sed -ne 's/^tcp[6 ]*[0-9]* *[0-9]* *\([0-9.:]*\):\(\(80\|443\)\) .*LISTEN *$/\1 \2/p'
sed
正则表达式看起来很复杂,但确实还不错(如果您愿意,我可以提供解释)。 它应该给你 output 类似于:
0.0.0.0 443
0.0.0.0 80
对于0.0.0.0
表示所有接口。 You then have the IP address(es) of all interfaces that are listening for HTTP or HTTP requests, which you can match to the output of the ip
or ifconfig
commands.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.