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 HWaddrlà 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ộ iptừ các iproute2gói, và điều đó grepcó -Ptù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 -olà tốt đẹp để trích xuất văn bản. sedTheo 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 -otù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), -olà đ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
ifconfigDĩ 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 eth0sẽ 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
iplệnh th :/sbin/ip link show eth0.