Bash의 네트워크 인터페이스 수 계산

Bash의 네트워크 인터페이스 수 계산

문자열 "로 시작하는 항목 수를 계산하고 싶습니다.투엔"명령 출력을 얻었습니다 ifconfig.

예를 들어 이것이 내 출력이라면 개수가 2가 되기를 원합니다. 를 사용해 보았지만 grep여전히 해결책이 없습니다.

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.0.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:16:73:86:ba  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s31f6: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  memory 0xa1300000-a1320000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 905  bytes 80293 (80.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 905  bytes 80293 (80.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 00.00.00.00  netmask 255.255.255.255  destination 192.168.105.77
        inet6 ::  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 438  bytes 52174 (52.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 457  bytes 33911 (33.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 0.0.0.0  netmask 255.255.255.255  destination 192.168.104.61
        inet6 ::  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10  bytes 584 (584.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

답변1

grep및 를 조합하여 사용 wc하거나 다음을 사용할 수 있습니다 .awk

첫 번째 방법, 사용 grep:

ifconfig | grep "^tun" | wc -l

이는 grep을 통해 출력을 파이프하고 ifconfig문자열로 시작하는 모든 줄을 일치시킨 다음 tun(이 작업은 "앵커" 표시기를 사용하여 수행됨 ) ^출력에서 ​​일치하는 줄을 wc계산 하는 데 사용됩니다.grep

지적한대로@schaiba를 사용하면 일치하는 모든 줄을 자동으로 계산하는 wc옵션 grep을 사용하지 않고도 이 작업을 수행할 수 있습니다 .-c

ifconfig | grep -c "^tun"

두 번째 방법, 사용 awk:

ifconfig | awk 'BEGIN {tuns=0}; /^tun/ {tuns++}; END {print tuns}'

그러면 출력이 로 파이프됩니다 awk. awk작은따옴표로 묶인 프로그램은 ' ... '다음을 수행합니다.

  • 처음( )에서는 회계처리에 사용할 BEGIN { ... }내부 변수 를 0으로 초기화합니다 .tuns
  • 메인 루프에서 문자열 tun(정규식으로 표시됨 /^tun/)로 시작하는 각 줄에 대해 카운터를 증가시킵니다.tuns
  • 입력이 완료된 후 ( END { ... })는 결과값을 출력한다.tuns

답변2

이것이 필요하지 않을 수도 ifconfig있습니다 ip. 인터페이스는 다음 위치에 나열되어 있습니다 /sys/class/net.

% ls /sys/class/net
eth0  lo  tun0  tun1  tun2  wlan0

따라서 다음과 같이 디렉토리 수를 계산할 수 있습니다.

$ printf "%s\n" /sys/class/net/tun* | wc -l
3

관련 정보