Với tập lệnh bash, tôi có thể đọc địa chỉ mac của eth0 và in nó thành tập tin không?
Với tập lệnh bash, tôi có thể đọc địa chỉ mac của eth0 và in nó thành tập tin không?
Câu trả lời:
ifconfig
sẽ xuất thông tin về giao diện của bạn, bao gồm địa chỉ MAC:
$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:289748093 errors:0 dropped:0 overruns:0 frame:0
TX packets:232688719 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3264330708 (3.0 GiB) TX bytes:4137701627 (3.8 GiB)
Interrupt:17
Đây HWaddr
là những gì bạn muốn, vì vậy bạn có thể sử dụng awk
để lọc nó:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55
Chuyển hướng đó thành một tập tin:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}'
bởi vì đầu ra có thể được bản địa hóa, không khớp với 'HWaddr'. LC_ALL = C sử dụng tiêu chuẩn quốc tế.
awk '{print $NF; exit}'
đó
| head -n 1
.
Đây là một phương pháp Linux hiện đại:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
Đó là hiện đại trong đó ifconfig
đã từ lâu đã được tán thành ủng hộ ip
từ các iproute2
gói, và điều đó grep
có -P
tùy chọn cho biểu thức thông thường perl cho nhìn đằng sau sự khẳng định tích cực zero-chiều rộng .
grep -o
là tốt đẹp để trích xuất văn bản. sed
Theo truyền thống được sử dụng cho điều đó nhưng tôi thấy các xác nhận độ rộng bằng không kiểu perl rõ ràng hơn một lệnh thay thế sed.
Bạn thực sự không cần -o
tùy chọn (oneline) ip
, nhưng tôi thích sử dụng nó khi trích xuất thông tin mạng vì tôi thấy nó sạch hơn khi có một bản ghi trên mỗi dòng. Nếu bạn đang thực hiện các kết quả khớp hoặc trích xuất phức tạp hơn (thường là với awk
), -o
là điều cần thiết cho một kịch bản sạch, vì vậy để đảm bảo tính nhất quán và một mô hình chung, tôi luôn sử dụng nó.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
ifconfig
Dĩ nhiên, có những công cụ khác có thể cắt địa chỉ MAC ra khỏi đầu ra. Tôi chỉ thích Perl.
Sử dụng ip -br link show eth0
sẽ in một cái gì đó như thế này:
$ ip -br link show eth0
eth0 UP 85:e2:62:9c:b2:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
Bạn chỉ cần cột thứ 3, vì vậy:
$ ip -br link show eth0 | awk '{ print $3 }'
85:e2:62:9c:b2:02
$ ip -br link show eth0 | awk '{ print $3 }' > file
ip
lệnh th :/sbin/ip link show eth0
.