일부 원시 네트워크 정보를 별도의 변수에 저장해야 하는 bash 스크립트를 작성 중입니다. 예를 들어, Mac 주소와 IP 주소는 다음과 같은 별도의 변수에 있습니다.
IPADDRESS=$(some_command)
MACADDRESS=$(some_other_command)
echo "$IPADDRESS has mac address $MACADDRESS"
이것은 단순화된 예입니다.아니요이 콘텐츠는 직접 읽히는 대신 독점 프로그램에 /bin/proprietary_program $IPADDRESS $MACADDRESS
.
Linux에서 MAC 주소만 문자열로, IP 주소만 문자열로 가져오는 방법은 무엇입니까? 나는 ip
가능할 때마다 이 명령을 사용하는 것을 선호합니다.
답변1
(NetworkManager)를 사용하는 예제 가 없으므로 nmcli
여기에 추가하겠습니다.
nmcli -f IP4.ADDRESS device show your_nic (returns all IPv4 addresses)
nmcli -f IP6.ADDRESS device show your_nic (returns all IPv6 addresses)
nmcli -f GENERAL.HWADDR device show your_nic (returns MAC address)
답변2
다음 출력을 구문 분석할 수 있습니다 ip address
. 내 출력은 다음과 같습니다(이 작업이 수행될 수 있음을 보여주기 위해 추가 IP 주소를 추가했습니다).
$ ip address
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: enp10s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether f0:79:59:dc:c4:bf brd ff:ff:ff:ff:ff:ff
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether f0:79:59:dc:c3:75 brd ff:ff:ff:ff:ff:ff
altname enp0s25
inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
inet 129.168.1.101/24 scope global eno1
valid_lft forever preferred_lft forever
inet6 fe80::f279:59ff:fedc:c375/64 scope link noprefixroute
valid_lft forever preferred_lft forever
정규식을 사용하여 주소를 찾으면 결국 IPv4 주소 목록이 생성됩니다.
$ IPV4=$(ip address | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}' )
$ echo $IPV4
127.0.0.1/8 192.168.1.100/24 129.168.1.101/24
$ for i in $IPV4; do echo $i; done
127.0.0.1/8
192.168.1.100/24
129.168.1.101/24
IPv6(필요한 경우) 및 MAC에 대한 정규식을 작성하기만 하면 됩니다.