[英]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.