1. 程式人生 > >linux 獲取eth0(指定網絡卡)網絡卡的IP地址(或MAC地址)

linux 獲取eth0(指定網絡卡)網絡卡的IP地址(或MAC地址)

引言

使用場景:

我使用的Linux伺服器上有多個網絡卡,有時候就需要在指令碼中使用到指定網絡卡的IP地址或MAC地址,那麼這個時候就有兩種做法,一是預先讀取網絡卡的IP地址或MAC地址,然後寫入到指令碼中;另外一種方法就是通過shell命令實時獲取指定網絡卡上的當前IP地址或MAC地址。

一般用法:
  1. 使用ifconfig eth0讀取網絡卡資訊

  2. 手動將IP地址或MAC地址拷貝出來,並填入到指令碼中的對應變數中

一句話指令碼用法:

  1. ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -c 6-  (獲取eth0網絡卡的IP地址)  
  2. 或  
  3. ifconfig eth0 | grep "HWaddr" | awk '{print $5}'  (獲取eth0網絡卡的MAC地址)  
上面的指令碼分解步驟是:
  1. 獲取eth0網絡卡的資訊
  2. 過濾出IP地址的行或MAC地址的行
  3. 使用awk輸出指定欄位,對於MAC地址,第5個欄位就是MAC;而對於IP地址,還需要對第2個欄位擷取第6個字元之後的內容

ifconfig命令部分說明

先看一下ifconfig的man手冊中的描述:

       Ifconfig  is  used  to  configure  the  kernel-resident network interfaces.  
       If  no  arguments  are  given,  ifconfig  displays the status of the currently active interfaces.  If a single
       interface argument is given, it displays the status of the given interface only; if a single  -a  argument  is
       given, it displays the status of all interfaces, even those that are down.  

ifconfig命令的主要作用是進行網絡卡配置,但是如果沒有給定引數或者只是給定了網絡卡名稱這一個引數,則就會顯示網絡卡的狀態資訊。

因此,在這裡,我們通過引數eth0來指定輸出該網絡卡的資訊

grep命令部分說明

我們先看一下ifconfig的輸出格式:

eth0      Link encap:Ethernet  HWaddr 08:00:27:f6:18:8e  
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fef6:188e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12575 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3429 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1931585 (1.9 MB)  TX bytes:465667 (465.6 KB)

其中紅色部分中包含了MAC地址資訊,藍色部分包含了IPv4的地址資訊。而如果我們指定的網絡卡不存在時,則輸出資訊如下:

[email protected]:~$ ifconfig eth1
eth1: error fetching interface information: Device not found

因此在上面的命令中,我們分別使用grep "inet addr:"和grep "HWaddr"來過濾出IPv4的地址和MAC地址所在的行,如果是該網絡卡不存在或者不處於活動狀態就過濾不到對應的行。

awk命令和cut命令部分說明

在上面的grep命令過濾出來的MAC地址和IPv4地址所在行的格式如下:

eth0      Link encap:Ethernet  HWaddr 08:00:27:f6:18:8e  
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

因此,如果是獲取MAC地址,只需要使用awk輸出第5個欄位的值即可:awk '{print $5}';

而如果是要獲取IPv4的地址,則需要先輸出第2個欄位的值:awk '{print $2}',然後再使用cut命令,將"addr:"這5個字元去除,即從第6個字元到結尾的所有字元:cut -c 6-。

其中cut命令的-c引數以及後面的需要顯示的字元列表的表述方式的描述如下:

       -c, --characters=LIST
              select only these characters


       Use one, and only one of -b, -c or -f.  Each LIST is made up of one range, or many ranges separated by commas.
       Selected  input  is written in the same order that it is read, and is written exactly once.  Each range is one of:
       N      N'th byte, character or field, counted from 1
       N-     from N'th byte, character or field, to end of line
       N-M    from N'th to M'th (included) byte, character or field
       -M     from first to M'th (included) byte, character or field

我們這裡是按照字元操作的,所以使用了-c引數;需要顯示的是從第6個字元到結尾的部分,所以使用了N-的模式表示LIST。

總結

本次一句話指令碼使用到了以下知識:

  1. ifconfig命令
  2. grep命令
  3. awk命令
  4. cut命令的-c引數

相關推薦

linux 獲取eth0指定IP地址(MAC地址)

引言 使用場景: 我使用的Linux伺服器上有多個網絡卡,有時候就需要在指令碼中使用到指定網絡卡的IP地址或MAC地址,那麼這個時候就有兩種做法,一是預先讀取網絡卡的IP地址或MAC地址,然後寫入到指令碼中;另外一種方法就是通過shell命令實時獲取指定網絡卡上的當前

一句話腳本系列之獲取eth0IP地址(MAC地址)

引言 使用場景: 我使用的Linux伺服器上有多個網絡卡,有時候就需要在指令碼中使用到指定網絡卡的IP地址或MAC地址,那麼這個時候就有兩種做法,一是預先讀取網絡卡的IP地址或MAC地址,然後寫入到指令碼中;另外一種方法就是通過shell命令實時獲取指定網絡卡上的當前IP

Linux下通過shell獲取ip地址mac地址

ip=`ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'` mac=`ifconfig | grep HWaddr | awk -F" " '{print $5}'` 轉自:http://blog.csdn.

LINUX獲取IP地址MAC地址,子掩碼程式參考

/* mode time:20120727 LINUX下獲取IP地址和MAC地址.程式相關結構體在程式後面。 列印網絡卡的ip地址 子網掩碼 廣播地址 mac地址 環境: [[email protected] temp]# uname -a Linux b

VM linux虛擬機器新增修改ip 並修改mac地址

修改ip 開啟終端 vi /etc/sysconfig/network-script/ifcfg-eth0; 具體是哪個可以到這個目錄地下檢視一下,我的是ifcfg-system-eth0. 開啟檔案後修改裡面的ip地址,IPADRR這一項是填寫ip地址的地方。 然後開啟拎一個檔案檢視我

Linux在當前指定使用者下安裝軟體

1. 獲取原始碼 以下載git為例 wget https://www.kernel.org/pub/software/scm/git/git-2.9.4.tar.xz 2. 編譯配置 解壓原始碼,進入原始碼資料夾,執行 ./configur

Linux程序設計搭建開發環境--curses

包名 monit con 發現 dsm pop 依賴關系 當前 term 看官們。咱們今天要說的內容。是前面內容的一點小補充,詳細的內容是:安裝curses開發包。以搭建 開發環境。閑話休說,言歸正轉。 我們在前面說過搭建開發環境的內容,主要說了

linux 之體驗JDK7+Tomcat7+MySQL5.5部署環境

out too 1.0 lte ive environ load internet dsm -------------------------------------------------------------------------------------

jmeter手寫腳本,使用正則獲取cookie禁用cookies管理器

coo inf 手動 全局 其他 去掉 bugfree 因此 頭信息 註:這裏以bugfree為例 1.bugfree登錄時會有重定向,這會導致每個URL都會有。因此要手動獲取cookie的時候,需要去掉重定向勾選 正則獲取動態PHPsession 獲取到值後,放到信

Linux安裝mysqlRedhat6.5+MySQL5.7轉載+原創補漏

controls 新版 file grep gin leg 下載 set CP 這裏我創建了一目錄software用於存放我們待會要下載的mysql包,先去到該目錄 命令:cd /software命令:wget http://mirrors.sohu.com/mysql/M

Linux瑣碎知識Tue-Aug-21-01

rod 一次 bugs last news hist 設備 知識 選項 查看歷史操作 history 10(列出最近的10條操作) !105(重復執行第105條命令) !!(重復執行上一條命令) !last(執行最後一次以last開頭的命令) history | more(

linux常用命令運維用到

inux mkdir 依賴包 文件夾 查看當前目錄 磁盤 rpm kill -9 新建 0、基礎命令 pwd 查看當前目錄 ls 查看當前目錄所有文件夾和文件 mkdir 新建目錄 mkdir -p a/b/c 創建多級目錄 touch 新建文件 cat 查看文件 c

Xrdp - 通過Windows的RDP連線Linux遠端桌面Ubuntu/CentOS/Redhat 7

您多久訪問一次Linux桌面? 您使用什麼工具來訪問遠端桌面? Xrdp是一個開源工具,允許使用者通過Windows RDP訪問Linux遠端桌面。 除了Windows RDP之外,xrdp工具還接受來自其他RDP客戶端的連線,如FreeRDP,rdesktop和NeutrinoRDP。 Xrdp現在支援T

Linux服務管理開啟關閉防火墻

刪除 reload one led isa remove 端口 -o mct 1、firewalld的基本使用 啟動: systemctl start firewalld 關閉: systemctl stop firewalld 查看狀態: systemctl status

Linux基礎知識selinux的初級管理

selinux 一、簡單瞭解selinux selinux核心級加強型火牆 起到限制服務功能,限制服務訪問兩個功能(在使用lftp訪問時體現) CONTEXT 安全上下文 程式安全上下文和檔案安全上下文匹配時訪問被允許 程式安全上下文和檔案安全上下文不匹配時訪問不被允許 ge

Linux 基礎知識 lvm 邏輯卷管理

lvm邏輯卷 Linux LVM是linux邏輯卷管理(Logical Volume Manager)的縮寫。他的功能是將固定的物理盤的功能能提供給使用者一個動態的功能。意思就是說以前我們用盤的話,比如這個盤只有300G,那麼建立在這個300G上面的檔案系統最多隻能用到300G,但是有了LVM這

Linux基礎知識DNS及nmcli命令

一、設定ip(nmcli 命令) 首先執行systemctl status NetworkManager命令檢視服務是否開啟,該命令需要在服務開啟才可以執行。 nmcli device命令: nmcli device show 檢視詳細資訊 nmcli devic

Linux學習-1031rsync同步工具 上

     10.28 rsync工具介紹 10.29/10.30 rsync常用選項 10.31 rsync通過ssh同步 一、 rsync工具介紹     rsync是一個同步工具,在日常的運維中常會用到。它可以本地同步,也

linux netstat tcp全連線半連線詳解

功能介紹(參考 LINUX MAN命令 大家可以自己去看一下 這裡只是列出常用的部分說明) 顯示網路連線狀態(如:LISTEN、ESTABLISHED、TIME_WAIT),路由地址,應用使用協議(如:TCP、UDP),IP和埠使用情況等其他網路資訊。 常用引數 –rou

Linux學習筆記演算法與資料結構之 佇列程式碼C語言

1、程式碼在VS2010的C++編譯器中編譯通過,可能有極少部分語法不符合C89標準;bool型別無法使用,用int代替 2、由於VS配置問題,沒有分.c和.h檔案書寫;如果要分,最好將Create_Node和Destory_Node加上static關鍵字修飾,他們只會在所