歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

ip命令手冊(一)

摘要    ip是iproute2軟件包裡面的一個強大的網絡配置工具,它能夠替代一些傳統的網絡管理工具。例如:ifconfig、route等。這個手冊將分章節介紹ip命令及其選項。本文的原文在http://defiant.coinet.com/iproute2/ip-cref/(2002-10-15 18:40:46)  作者:Alexey N.Kuznetsov  編譯:nixe0n    1.關於這篇文檔    2.ip命令的語法    3.ip的錯誤信息    4.ip link--配置網絡設備    4.1.ip link set--改變設備的屬性    4.2.ip link show--顯示設備屬性    5.ip address--協議地址管理    5.1.ip address add--添加一個新的協議地址    5.2.ip address delete--刪除一個協議地址    5.3.ip address show--顯示協議地址    5.4.ip address flush--清除協議地址    6.ip neighbour--neighbour/arp表管理命令    6.1.ip neighbour add -- 添加一個新的鄰接條目  ip neighbour change--修改一個現有的條目  ip neighbour replace--替換一個已有的條目    6.2.ip neighbour delete--刪除一個鄰接條目    6.3.ip neighbour show--顯示網絡鄰居的信息    6.4.ip neighbour flush--清除鄰接條目    1.關於這篇文檔    ip是iproute2軟件包裡面的一個強大的網絡配置工具,本文將分章節介紹ip命令及其選項。為了便於理解,作者在本文中列舉了很多示例。但是,正如作者所說,這不是一個教程,而是一個使用手冊。    2.ip命令的語法    ip命令的用法如下:    ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]     其中,OPTIONS是一些修改ip行為或者改變其輸出的選項。所有的選項都是以-字符開頭,分為長、短兩種形式。目前,ip支持如下選項:    -V,-Version 打印ip的版本並退出。     -s,-stats,-statistics 輸出更為詳盡的信息。如果這個選項出現兩次或者多次,輸出的信息將更為詳盡。     -f,-family 這個選項後面接協議種類,包括:inet、inet6或者link,強調使用的協議種類。如果沒有足夠的信息告訴ip使用的協議種類,ip就會使用默認值inet或者any。link比較特殊,它表示不涉及任何網絡協議。     -4 是-family inet的簡寫。     -6 是-family inet6的簡寫。     -0 是-family link的簡寫。     -o,-oneline 對每行記錄都使用單行輸出,回行用字符代替。如果你需要使用wc、grep等工具處理ip的輸出,會用到這個選項。     -r,-resolve 查詢域名解析系統,用獲得的主機名代替主機IP地址。     OBJECT是你要管理或者獲取信息的對象。目前ip認識的對象包括:    link 網絡設備     address 一個設備的協議(IP或者IPV6)地址     neighbour ARP或者NDISC緩沖區條目     route 路由表條目     rule 路由策略數據庫中的規則     maddress 多播地址     mroute 多播路由緩沖區條目     tunnel IP上的通道     另外,所有的對象名都可以簡寫,例如:address可以簡寫為addr,甚至是a。    COMMAND設置針對指定對象執行的操作,它和對象的類型有關。一般情況下,ip支持對象的增加(add)、刪除(delete)和展示(show或者list)。有些對象不支持所有這些操作,或者有其它的一些命令。對於所有的對象,用戶可以使用help命令獲得幫助。這個命令會列出這個對象支持的命令和參數的語法。如果沒有指定對象的操作命令,ip會使用默認的命令。一般情況下,默認命令是list,如果對象不能列出,就會執行help命令。    ARGUMENTS是命令的一些參數,它們倚賴於對象和命令。ip支持兩種類型的參數:flag和parameter。flag由一個關鍵詞組成;parameter由一個關鍵詞加一個數值組成。為了方便,每個命令都有一個可以忽略的默認參數。例如,參數dev是ip link命令的默認參數,因此ip link ls eth0等於ip link ls dev eth0。我們將在後面的章節詳細介紹每個命令的使用,命令的默認參數將使用default標出。    幾乎所有的關鍵詞都可以簡寫為前幾個字母。在交互工作時,簡寫的方式非常方便,但是我們不建議在腳本中使用簡寫形式。另外,在講述過程中,所有的"官方"簡寫方式都會在文章中列出。    3.ip的錯誤信息    由於以下原因,ip可能會操作失敗:    命令行語法錯誤:一個未知的關鍵詞(an unknown keyWord);錯誤的IP地址格式(incorrectly formated IP address)。在這種情況下,ip會打印出錯誤信息然後退出,在錯誤信息中會包含失敗的原因。有時ip也會打印幫助信息。參數不能通過一致性校驗。由於用戶沒有提供足夠的信息,造成ip無法從參數中編譯出內核請求。內核返回某些系統調用的錯誤。ip使用perror(3)輸出錯誤信息,因此輸出的錯誤信息包含一段注釋以及系統調用號。內核返回RTNETLINK請求錯誤。這類錯誤信息以"RTNETLIK answers"開頭。     ip的所有操作都是原子操作。例如,如果ip執行失敗,它不會系統的任何東西,ip link command例外,它會修改某些設備參數。    我們無法列出所有的錯誤信息,尤其是語法錯誤。不過,錯誤信息的意思都非常明確。下面,我們列舉一些經常出現的錯誤信息:    內核不支持netlink(netlink用於在內核模塊和用戶之間傳遞信息),會出現以下錯誤信息:Cannot open netlink socket: Invalid value 內核不支持RTNETLINK,會出現以下錯誤信息:Cannot talk to rtnetlink: Connect refusedCannot send dump request: Connect refused 如果在編譯內核時沒有配置CONFIG_IP_MULTIPLE_TABLES選項。在使用ip規則時會出現和下面的信息類似的錯誤信息:kuznet@kaise $ ip rule listRTNETLINK error: Invalid argumentdump terminated     4.ip link--配置網絡設備    對象 link由網絡設備,對應的命令顯示以及設備的狀態變化組成。     命令 set和show(或者list)     4.1.ip link set--改變設備的屬性    縮寫:set、s    參數:    dev NAME(default) 指定進行操作的網絡設備     up/down 起動/關閉設備。  例如:ip link set dev eth0 up     arp on/off 改變網絡設備的NOARP選項。  如果設備處於UP狀態,不允許進行這個操作。不過,內核和ip都不會對在這種情況下的這個操作進行檢查。在設備處於運行狀態下改變這個選項會造成無法預料的後果。     multicast on/off 改變網絡設備的MULTICAST選項。     dynamic on/off 改變網絡設備的DYNAMIC選項。     name NAME 把設備的名字改為NAME(例如:eth0)。如果設備處於運行狀態或者已經配置了地址,建議不要進行這個操作。     txqueuelen NUMBER或者txqlen NUMBER 改變設備傳輸隊列的長度。  例如:ip link set dev eth0 txqueuelen 100     mtu NUMBER 改變網絡設備MTU(最大傳輸單元)的值。  例如:ip link set dev eth0 mtu 1500     address LLADDRESS 修改網絡設備的MAC地址。  例如:ip link set dev eth0 address 00:01:4f:00:15:f1     broadcat LLADDRESS或者brd LLADDRESS 修改數據鏈路層廣播地址。  注意:對於大多數的網絡設備(例如:以太網),修改鏈路層廣播地址會對網絡造成破壞。因此,如果對此沒有很深的理解,最好不要使用這個操作。     peer LLADDRESS 當使用點對點連接時,使用這個操作可以修改對端的數據鏈路層地址。     注意:ip不能修改PROMISC或者ALLMULTI選項。這兩個選項已經比較陳舊,而且也不應該隨便修改。    注意:如果同時修改多個參數,任何一個修改失敗,ip都會立即取消操作。這種情況可能使系統進入無法預料的狀態。為了避免出現這種情況,盡量不要使用ip link set同時修改多個參數,例如:ip link set dev eth0 mtu 1500 txqueuelen 100。    4.2.ip link show--顯示設備屬性    縮寫:show、list、lst、sh、ls、l    參數    dev NAME(default) NAME指定網絡設備名稱,例如:eth0。如果省略了這個參數,所有的設備屬性就都會被列出。     up 只顯示處於活動狀態網絡接口的信息。     輸出格式    kuznet@alisa:~ $ ip link ls eth03: eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff:kuznet@alisa:~ $ ip link ls sit05: sit0@NOME: mtu 1480 qdisc noqueue link/sit 0.0.0.0 brd 0.0.0.0kuznet@alisa:~ $ ip link ls dummy2: dummy: mtu 1500 qdisc noop link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ffkuznet@alisa:~ $     在顯示的信息中,每個引號之前的數字是一個接口索引,用於識別網絡接口。這個數字後面是網絡接口的名字(例如:eth0、dummy等),它也和網絡接口一一對應。不過,在某些情況下,例如:驅動模塊被卸載,對應的接口名就會從列表中消失,而其它新創建的接口就會使用相同的名字。系統管理員可以ip link set name修改接口的名字。    接口名可以是別的,或者??#199;@NONE。這意味著這個設備被綁定到其它的設備,例如數據包被發送到這個設備,由這個設備封裝,並從master設備發出。如果設備名字是NONE,就表示master設備是未知的。    接著,我們看到的是mtu(Maximal Transfer Unit,最大傳輸單元)。它決定這個接口單個數據包能夠傳輸多少數據。    qdisc(queuing discipline)顯示這個網絡接口使用的排隊算法。noqueue表示不對數據包進行排隊;noop表示這個網絡接口出於黑洞模式,也就是所有進入本網絡設備的數據會直接被丟棄。qlen是網絡接口傳輸隊列的默認長度。    網絡接口可以有如下標志:    UP 這個設備處於運行狀態,可以接收、發送數據包。     LOOPBACK 這個接口不能用於和其它的主機通訊,所有發送到這個接口的數據包都會返回,而且這種接口只能接收反彈回來的數據包。     BROADCAST 這個設備具有把數據包發送到所有主機的能力。以太網連接是一個很典型的例子。     POINTTOPOINT 兩個節點之間是直接連接的。某個接點發出的所有數據包都會發到對端節點,接收到的所有數據包也都是從對端節點發過來的。     MULTICAST 這個標志表示設備具有多播能力,能夠把數據包發送到某些相鄰的網絡節點。實際上,廣播是多播的一個特例,它的多播組包括連接上的所有節點。  從定義上,POINTTOPOINT和BROADCAST連接都屬於多播。     *如果網絡接口的標志不屬於LOOPBACK、BROADCAST和POINTTOPOINT的任何一個,就假定是NMBA(Non-Broadcast Multi-Access)類型。這是最為普遍的一個標志。    PROMISC 設備處於混雜模式,接收連接上的所有數據,不管目的地址是否是自己。通常,這種模式主要用於網橋和網絡監視。     ALLMULTI 設備接收連接上的所有多播數據包,多播路由器(muliticast router)使用這種模式。     NOARP 這個標志和其它的標志不同,它的含義和涉及的網絡協議有關。它一般表示這個設備無需地址解析,軟件或者硬件不必借助於系統協議棧的幫助就知道如何把數據包投遞到目的地。     DYNAMIC 這個標志表示這個網絡接口是動態建立和撤消的。     SLAVE 表示這個接口被綁定到其它的網絡接口。     *除此之外,還有其它一些標志。這些標志或者已經過時(例如:NOTRAILERS),或者還沒有實現(如:DEBUG),或者只是特定於某些設備(例如:MASTER、AUTOMEDIA、PORTSEL)。因此,在此我們不作討論。    *對於PROMISC和ALLMULTI標志,ifconfig和ip顯示的值是不同的。ip link ls命令顯示的是設備的真正狀態,而ifconfig顯示的是自己設置的虛擬設備狀態。    顯示信息的第二行包含和鏈路層地址(MAC地址)相關的信息。其中,第一個詞(ether、sit)定義接口的硬件類型。而接口的硬件類型又決定MAC地址的格式和語法。默認的格式是硬件的MAC地?b>-(注1)代替廣播地址。例如:  ip addr add local 192.168.1.1/24 brd + dev eth0  ip addr add local 192.168.1.1/28 brd - dev eth0     label NAME 為每個地址設置一個字符串作為標簽。為了和Linux-2.0的網絡別名兼容,這個字符串必須以設備名開頭,接著一個冒號,例如:  #ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0     scope SCOPE_VALUE(注2) 設置地址的有效范圍,它用於內核為數據包設置源地址。有效的范圍在/etc/iproute2/tr_scopes文件列出,系統預先設定了一些范圍值:  global 這個地址全局有效。  site 這個地址是局部連接,也就是只有目標地址是這個設備地址時,才有效。  site (只適用於IPv6)地址在站點內部有效。  host 地址在主機內部有效。     *注1:使?,ip addr ls顯示的是網絡地址;使用+,ip addr ls顯示的是廣播地址。    *注2:有關scope,在附錄A中有更為詳細的解釋。    示例    在回環設備上添加一個回環地址:#ip addr add 127.0.0.1/8 dev lo brd + scope host在以太網接口eth0上增加一個地址10.0.0.1,掩碼長度為24位(155.155.155.0),標准廣播地址,標簽為eth0:Alias:#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias     5.2.ip address delete--刪除一個協議地址    縮寫:delete、del、d    參數    這個命令的參數和ip addr add命令的參數一致。其中,只有設備名是必需的參數,其它都是可選的。如果沒有給定除設備名之外的其它參數,ip就會刪除這個設備的第一個地址。    示例    刪除回環設備的一個回環地址。不過,最好不要作這種嘗試。#ip addr del 127.0.0.1/8 dev lo以下shell代碼可以取消設備上的所有IP地址。while ip -f inet add del dev eth0;do :nothingdone另外,可以使用ip addr flush命令取消IP地址     5.3.ip address show--顯示協議地址    縮寫:show、list、lst、sh、ls、l    參數    dev NAME(default) 設備的名字     scope SCOPE_VAL 只列出這個范圍的地址     to PREFIX 只列出和PREFIX匹配的地址,例如:  ip addr ls to 192.168.1.1     label PATTERN 只列出標簽匹配PATTERN的地址,PATTERN是一個shell風格的正則表達式。     dynamic和permanent 這兩個參數只適用於IPv6。使用dynamic,ip就只列出動態地址;使用permanent,ip就只列出固定地址。     tentative 這個參數只適用於IPv6,只列出沒有通過重復地址檢測[參考2]的地址。     deprecated 這個參數只適用於IPv6,只列出deprecated[參考2]地址。     primary和secondary 只列出主(primary)或從(secondary)地址。     輸出格式    duznet@alisa:~ $ ip addr ls eth03: eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff inet 193.233.7.90/24 brd 193.233.7.255 scope global eth0 inet6 3ffe:2400:0:1:2a0:ccff:fe66:1878/64 scope global dynamic valid_lft forever preferred_lft 604746sec inet6 fe80::2a0:ccff:fe66:1878/10 scope linkduznet@alisa:~ $     輸出的頭兩行和ip link ls的輸出是相同的。    接著是IP和IPv6地址、廣播地址以及其它的地址屬性:范圍(scope)、標志(flag)和標簽(label)。地址標志由內核設置,系統管理員不能修改。目前,內核定義了以下標志:    secondary 為輸出的數據包選擇默認源地址時,內核不使用這個地址。如果一個設備已經有了一個地址,又給它設置了同一網段的不同地址,第二個地址就成為從(secondary)地址。例如:eth0已經有一個地址192.168.1.108/24,如果又給它一個地址192.168.1.3/24,192.168.1.3/24的就會被內核標記為從地址。     dynamic 這個地址是通過無狀態的自動配置建立的(stateless autoconfiguration)[參考2]。如果地址仍然有效,在輸出中,還包括兩個時間信息。preferred_lft期滿後,地址就會變成deprecated狀態;valiid_lft期滿後,地址將失效。     deprecated 這個地址是不允許的,也就是說,地址雖然有效,但是不能使用它建立新的連接。     tentative 由於重復地址監測[參考2]還沒有完成或者監測失敗,這個地址不能使用。         5.4.ip address flush--清除協議地址    縮寫:flush、f    簡介    這個命令可以清除按照某種條件選擇的協議地址。    參數    這個命令的參數和ip address show相同。唯一的區別是,如果不給定參數它什麼都不會做。    警告    這個命令(和後面討論的所有flush命令)非常危險。如果出現錯誤,將無法恢復,它會清除被操作的地址。    statistics選項    如果在ip addr flush命令中使用了-statistics選項,命令將輸出更為詳盡的信息。輸出的信息包括刪除地址的數目和清理地址列表的圈數。如果使用了兩次-s選項,ip addr flush會按照上節敘述的格式輸出所有被刪除的地址。    示例    刪除屬於私網10.0.0.0/8的所有地址:netadm@amber:~ # ip -s -s a f to 10/82: dummy inet 10.7.7.7/16 brd 10.7.255.255 scope global dummy3: eth0 inet 10.10.7.7/16 brd 10.10.255.255 scope global eth04: eth1 inet 10.8.7.7/16 brd 10.8.255.255 scope global eth1*** Round 1,deleting 3 addresses ****** Flush is complete after 1 round ***netadm@amber:~ #取消所有以太網卡的IP地址netadm@amber:~ # ip -4 addr flush label "eth0"最後一個例子是對IPv6地址的操作。在啟動了轉發或者關閉了自動配置之後,你需要取消通過無狀態地址自動配置獲得的主機地址:netadm@amber:~ # ip -6 addr flush dynamic     6.ip neighbour--neighbour/arp表管理命令    縮寫 neighbour、neighbor、neigh、n     對象 鄰接(neighbour)對象實現同一網段協議地址和鏈路層地址的綁定。在內核中,這些條目被組織到表中。IPv4的相鄰表也被叫做ARP表。  ip neighbour命令支持對條目及其屬性的顯示、添加和刪除。     命令 add、change、replace、delete、fulsh、show(或者list)     附錄B將詳細描述如何使用ip管理代理ARP/NDISC。    6.1.ip neighbour add -- 添加一個新的鄰接條目  ip neighbour change--修改一個現有的條目  ip neighbour replace--替換一個已有的條目    縮寫:add、a;change、chg;replace、repl    簡介:這三個命令用來建立一個鄰接表的條目或者更新現有的鄰接表條目。    參數    to ADDRESS(default) 相鄰的協議地址。可以是IPv4或者IPv6。     dev NAME 和相鄰節點連接的設備。     lladdr LLADDRESS 鄰居的鏈路層地址。LLADDRESS可以為空。     nud NUD_STATE 鄰接條目的狀態。nud是Neighbour Unreachability Detection的縮寫。可能的狀態包括:permanent--鄰接條目永遠有效並且只能由管理員刪除。noarp--鄰接條目有效,不必對其有效性進行確認。在其生命期期滿時會被刪除。reachable--在超時時間之內,這個鄰接條目是有效的。stale--這個鄰接條目是有效的,但是比較可疑。如果條目是有效的,ip neigh不會改變鄰接狀態,也不會修改其地址。     示例    在設備eth0上,為地址10.0.0.3添加一個permanent ARP條目:ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm把狀態改為reachableip neigh chg 10.0.0.3 dev eth0 nud reachable     6.2.ip neighbour delete--刪除一個鄰接條目    縮寫:delete、del、d    簡介    這個命令用來刪除一個鄰接條目    參數    這個命令的參數和ip neigh add命令的相同,只不過lladdr和nud將被忽略。    示例    刪除設備eth0上的一個ARP條目10.0.0.3ip neigh del 10.0.0.3 dev eth0     執行了刪除命令之後,被刪除的條目不會馬上消失,它會在系統的下次垃圾收集時被刪除。如果被操作的條目正在使用,將不能被刪除。    警告    如果試圖刪除或者手工修改一個由內核建立的noarp條目,會導致一些不可預知的行為。    6.3.ip neighbour show--顯示網絡鄰居的信息    縮寫:show、list、sh、ls    簡介    這個命令用於顯示網絡鄰居信息。    參數    to ADDRESS(default) 指定要顯示的地址     dev NAME 只顯示設備NAME的鄰居     unused 只顯示當前沒有使用的鄰居     nud NUD_STATE 只列出處於NUD_STATE狀態的鄰接條目。NUD_STATE的值下面將會介紹。nud all表示所有的狀態。這個選項可以使用多次。如果缺少這個選項,ip會列出除none和noarp狀態的所有條目。     輸出格式    duznet@alisa:~ $ ip neigh ls:: dev lo lladdr 00:00:00:00:00:00 nud noarpfe80::200:cff:fe76:3f85 dev eth0 lladdr 00:00:0c:76:3f:86 router nud stale0.0.0.0 dev lo lladdr 00:00:00:00:00:00 nud noarp193.233.7.254 dev eth0 lladdr 00:00:0c:76:3f:85 nud reachable193.233.7.85 dev eth0 lladdr 00:e0:1e:63:39:00 nud stalekuznet@alisa:~ $     每行的第一部分是網絡鄰居的協議地址。第二部分是設備名。省下的部分是這個鄰接條目的信息。    lladdr是這個設備的鏈路層地址。    nud是條目代表連接的狀態。下面是狀態的完整列表和簡單描述:    none 網絡鄰居的狀態為空。     incomplete 這個鄰居正在被解析。     reachable 網絡鄰居有效並且可達。     stale 鄰居有效,但是可能不可達。因此,內核將在首次傳輸時進行檢查。     delay 一個數據包已經發到處於stale的網絡鄰居,內核在等待應答信息。     probe delay計時器過期,還沒有收到確認信息。內核開始使用ARP/NDISC消息包探測這個網絡鄰居。     failed 解析失敗。     noarp 網絡鄰居有效,不必檢查。     permanent 這是一個noarp條目,只有系統管理員可以從鄰接表中把它刪除。     在這些狀態中,除了none、faliled和incomplete.    IPVv6網絡鄰居可以有一個叫做router的標志,它表示這個節點是一個IPv6路由器。    -statistics    -statistics選項可以顯示很多有用的信息。例如:    kuznet@alisa:~ $ ip -s n ls 193.233.7.254193.233.7.254. dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachablekuznet@alisa:~ $     輸出信息裡面多了ref和用斜缸分開的三個時間。ref表示有多少用戶使用這個條目;三個時間分別是使用時間、確認時間和刷新時間。因此,上面輸出中的時間表示:    條目12秒之前剛剛使用過;13秒之前被確認;20秒之前被更新。     6.4.ip neighbour flush--清除鄰接條目    縮寫:flush、f    簡介    這個命令用來清除符合某個條件的鄰接表條目。    參數    這個命令的參數和ip neigh sh相同。不同之處是,如果沒有參數,它什麼也不會做。而且,默認情況下,被刪除的條目不包括處於permanent和noarp狀態的條目。    -statistics    使用了-statistics選項,這個命令的輸出將更為詳盡。它會輸出刪除的條目數和清除鄰接表遍歷的次數。如果使用了兩個-s選項,命令的輸出將包括被刪除條目的信息。    示例    netadm@alisa:~ # ip -s -s n f 193.233.7.254193.233.7.254 dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachable*** Round 1,deleting 1 entries ****** Flush is complete after 1 round ***netadm@alisa:~ #






Copyright © Linux教程網 All Rights Reserved