현재 나는 이것을 달성하기 위해 netstat를 사용하고 있습니다.
if netstat -an | grep ESTABLISHED | grep $address:$port > /dev/null; then
# command
fi
더 우아한 솔루션이 있습니까?
답변1
우아함 측면에서 귀하의 명령에서 두 가지를 수정하겠습니다.
- Chris가 의견에서 언급했듯이
-q
출력 리디렉션을 대신 사용할 수 있습니다. grep
두 개 대신 하나를 사용하십시오 .if netstat -an | grep -q " $address:$port .* ESTABLISHED"; then
답변2
lsof
일을 해야 합니다. options 을 통해 기계가 분석할 수 있는 출력을 제공하도록 요청하세요 -F
.
lsof -n -i @${hostname}:${port} -F nT | grep '^TST=ESTABLISHED$'
추가 정보가 필요한 경우:
lsof -n -i -F nT | awk '
function host_port(s, a) {
match(s, /:[^:]*$/);
a["host"] = substr(s, 1, RSTART-1);
a["port"] = substr(s, RSTART+1);
}
sub(/^p/,"") {pid = $0}
sub(/^n/,"") {
split($0, endpoints, "->");
host_port(endpoints[1], from);
host_port(endpoints[2], to);
}
/^TST=ESTABLISHED$/ {
print "Established from", from["host"] ":" from["port"],
"to", to["host"] ":" to["port"]
}
'
답변3
그리고 ss
:
if ss -n -o state established '( dport = $hostname:$portnumber )'|awk 'NR==2{exit 0}END{exit 1}';then
답변4
lsof
: 대신 이와 같은 것을 사용할 수 있지만 lsof는 루트에서만 작동하고 일반적으로 기본적으로 설치되지 않으므로 추가적인 외부 종속성입니다.netstat
sudo /usr/sbin/lsof -i [email protected]:80