단일 명령을 사용하여 네트워크 카드 속도 찾기

단일 명령을 사용하여 네트워크 카드 속도 찾기

서버 기본 인터페이스의 네트워크 카드 속도를 캡처하는 한 줄 명령을 알고 있습니까?

예를 들어,eth0

  • 다음을 사용하여 호스트 이름을 얻으십시오.uname -n
  • 다음을 사용하여 IP를 얻으십시오.nslookup `uname -n`
  • IP를 검색하여 ifconfig어떤 인터페이스에 구성되어 있는지 알아보세요.
  • 사용ethtool <interface captured in above command> | grep -i speed

위의 모든 명령을 단일 명령으로 실행할 수 있습니까?

답변1

노력하다:

cat /sys/class/net/eth0/speed

기본 인터페이스가 무엇을 의미하는지 잘 모르겠습니다. IPv4 스택이 있는 호스트에서는 첫 번째 기본 경로가 있는 인터페이스를 검색할 수 있습니다.

ip route show 0/0 | grep -Pom1 'dev +\K[^ ]+'

(GNU 가정 grep). 그래서:

cat "/sys/class/net/$(ip route show 0/0 | grep -Pom1 'dev +\K[^ ]+')/speed"

모든 IPv4 연결 호스트에 기본 경로가 있는 것은 아닙니다. 8.8.8.8과 같은 알려진 인터넷 인터페이스와 같은 인터페이스를 통해 특정 호스트에 액세스하는 것을 선호할 수도 있습니다. 또는 이러한 명령을 실행하면 ssh연결이 시작되는 IP 주소가 표시됩니다 ssh(IPv4를 통해 연결한다고 가정). IPv6 아님):

ip route show to match "${SSH_CLIENT%% *}" | grep -Pom1 'dev +\K[^ ]+'

물론, 인터페이스가 이더넷 인터페이스가 아닌 경우(보통다리예를 들어 서버의 인터페이스).

다른 휴리스틱으로, 다음이 있는 가상이 아닌 인터페이스의 이름을 얻을 수 있습니다.속도그리고 최대 패킷 수는 아래와 같이 전송됩니다.

readlink -f /sys/class/net/* | awk -F / '
   $4 != "virtual" && \
     getline speed < ($0 "/speed") && \
     getline state < ($0 "/operstate") && \
     state == "up" && \
     getline tx < ($0 "/statistics/tx_packets") {
       if (tx > max) {returned_speed=speed; max=tx}
     }
   END{print returned_speed}'

마지막으로 단일 명령을 요구하는 귀하의 의견과 관련하여 다음을 sh참고 하십시오.ssh껍데기. 따라서 원격 시스템에서 실행되는 코드는 쉘 코드입니다. 여기에서 여러 명령과 여러 줄 스크립트를 실행할 수 있습니다. 그러나 코드는 원격 사용자의 로그인 셸에 의해 해석되므로 Bourne과 유사하다는 보장은 없습니다(요즘 Linux 기반 시스템에서는 종종 발생하지만). 그래서 당신은 이것을 할 수 있습니다 :

remote_code=$(cat << \end_of_script
  readlink -f /sys/class/net/* | awk -F / '
     $4 != "virtual" && \
       getline speed < ($0 "/speed") && \
       getline state < ($0 "/operstate") && \
       state == "up" && \
       getline tx < ($0 "/statistics/tx_packets") {
         if (tx > max) {returned_speed=speed; max=tx}
       }
     END{print returned_speed}'
end_of_script
)

for host in host1 host2 host3; do
  speed=$(ssh "$host" "$remote_code")
  printf '%20s: %s\n' "$host" "$speed"
done

rc위의 Remote_code 구문은 Bourne 및 계열 쉘과 호환 fish되지만 (t)csh.

답변2

RHEL7에서:
echo "$(uname -n):$(ethtool $(ip link|awk '$2 != "idrac:" && $8 == "state" && $9 == "UP" {gsub(":","");print $2}'|head -1) | grep Speed)"

관련 정보