In địa chỉ mac vào tập tin


Câu trả lời:


15

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

2
Bạn cũng có thể sử dụng iplệnh th : /sbin/ip link show eth0.
Keith

2
@Michael Trên Linux, nó là công cụ ưa thích . Trong thực tế, bạn phải sử dụng để cấu hình một số tính năng nâng cao. Nhưng ifconfig vẫn sống trên ...
Keith

3
Cách tiếp cận quốc tế là 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ế.
người dùng không xác định

2
@user Ah, tuyệt. Theo như tôi biết, nó sẽ luôn là dòng đầu tiên, vì vậy bạn cũng có thể thoát khỏi awk '{print $NF; exit}'đó
Michael Mrozek

1
Có, nếu bạn là loại AWK. Tôi là loại sed, nhưng ở đây sẽ thích hơn | head -n 1.
người dùng không xác định

8

Đâ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 đó grep-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ó.


1
@michelemarcon: Cái này không dùng perl. Nó sử dụng GNU grep gần đây và grep có một tùy chọn để sử dụng các biểu thức chính quy theo kiểu perl.
camh

Tôi có busybox grep, tuy nhiên cảm ơn đã làm rõ. +1
michelemarcon

5
#! /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.


1
Tôi không có perl trên hệ thống của mình ... :( Tuy nhiên, +1
michelemarcon

0

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.