在命令行中使用 nmcli 來管理網絡連接 | Linux 中國

2021-03-06 Linux中國

nmcli 命令賦予你直接在 Linux 命令行操作 NetworkManager 工具的能力。它是 NetworkManager 軟體包集成的一部分,通過使用一些 應用程式接口(API)來獲取 NetworkManager 的功能。

nmcli 發布於 2010 年,用以替代其他配置網絡接口和連接的方法,例如 ifconfig。因為它是一個 命令行界面(CLI)工具,被設計用在終端窗口和腳本中,所以對於那些工作在沒有 圖形用戶界面(GUI)的系統的管理員來說,它是一個非常理想的工具。

ncmli 的語法

nmcli 命令可以使用選項來更改它的行為,使用子命令來告訴 nmcli 想使用它的那部分功能,使用操作來告訴 nmcli 你想執行什麼操作。

nmcli 一共有 8 個子命令,每個子命令有一些相關的網絡操作:

◈ help 提供有關 nmcli 命令和使用方法的幫助信息◈ general 返回 NetworkManager 的狀態和總體配置信息◈ networking 提供命令來查詢某個網絡連接的狀態和啟動、禁用連接的功能◈ radio 提供命令來查詢某個 WiFi 網絡連接的狀態和啟動、禁用連接的功能◈ monitor 提供命令來監控 NetworkManager 的活動並觀察網絡連接的狀態改變◈ connection 提供命令來啟用或禁用網絡接口、添加新的連接、刪除已有連接等功能◈ device 主要被用於更改與某個設備(例如接口名稱)相關聯的連接參數或者使用一個已有的連接來連接設備◈ secret 註冊 nmcli 來作為一個 NetworkManager 的秘密代理,用以監聽秘密信息。這個子命令很少會被用到,因為當連接到網絡時,nmcli 會自動做這些事

簡單的示例

首先,我們驗證一下 NetworkManager 正在運行並且 nmcli 可以與之通信:

STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    connected  full          enabled  enabled  enabled  enabled

探測總是管理一個系統的首要部分。為了列出內存或磁碟上的網絡連接配置,可以使用下面的命令:

NAME                UUID                                  TYPE      DEVICEWired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

上面的命令使用了 connection 子命令中的 show 操作。

用來運行上面這個例子的測試機器上運行著 Ubuntu 20.04,它安裝了 3 個網絡適配器:enp0s3、enp0s8和 enp0s9。

連接管理

理解 nmcli 的術語是非常重要的。一個網絡連接(connection)包含了一個連接的所有信息。你可以將它看作一個網絡配置(configuration)。「連接」包含了與其相關的所有信息,包括 數據鏈路層 和 IP 地址信息 。它們是 OSI 網絡模型 中的第 2 和第 3 層。

當你在 Linux 上配置網絡時,通常來說你是在為某個網絡設備(它們是安裝在一個電腦中的網絡接口)配置連接。當一個連接被某個設備所使用,那麼就可以說這個連接被激活(active)或者上線(up)了,反之是停用(inactive)或下線(down)。

添加網絡連接

nmcli 允許你快速地創建網絡連接並同時為該連接指定參數。為了通過使用「有線連接 2」 enp0s8 來創建一個新的連接,你可以利用 sudo 來運行下面的命令:

$ sudo nmcli connection add type ethernet ifname enp0s8Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully added.

其中 type 選項指定需要一個 Ethernet 類型的連接,而 ifname(接口名)選項指定你想要為這個連接使用的網絡接口設備。

讓我們看看發生了什麼變化:

NAME                UUID                                  TYPE      DEVICEWired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  --  

通過上圖可以看到新的連接 ethernet-enp0s8 已經創建好了。它的 通用唯一標識符(Universally Unique IDentifier)(UUID)也一同被賦予,並且其連接類型為 「Ethernet」。我們可以使用 up 子命令再加上連接名稱(或 UUID)來使得這個連接被激活:

$ nmcli connection up ethernet-enp0s8Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

再次查看激活的連接:

$ nmcli connection show --activeNAME                UUID                                  TYPE      DEVICEWired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  enp0s8Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

可以看到新的連接 ethernet-enp0s8 現在已經被激活了,並且與 enp0s8 網絡接口設備綁定。

調整連接

nmcli 命令使得調整現有連接的參數變得更加容易。也許你想將某個網絡接口從 動態主機配置協議(Dynamic Host Configuration Protocol)(DHCP)改為靜態 IP 地址。

假設你需要為你的新連接分配一個固定的 IP 地址 192.168.4.26,那麼你需要使用兩個命令,一個用於設定 IP 地址,另一個用來將獲取 IP 地址的方法改為 manual(手動):

$ nmcli connection modify ethernet-enp0s8 ipv4.address 192.168.4.26/24$ nmcli connection modify ethernet-enp0s8 ipv4.method manual

記得指定 子網掩碼,在我們這個測試的連接中,它是 無類域間路由(Classless Inter-Domain Routing)(CIDR)中的 255.255.255.0 或 /24

為了使得你的更改生效,你需要通過停止再重新啟用該連接。下面的第一個命令是停用該連接,第二個命令則是啟用它:

$ nmcli connection down ethernet-enp0s8Connection 'ethernet-enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)$ nmcli connection up ethernet-enp0s8Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

假如你想將連接設置為使用 DHCP,則需要將上面的 manual 改為 auto(自動):

$ nmcli connection modify ethernet-enp0s8 ipv4.method auto

設備管理

nmcli 命令中的 device 子命令允許你管理安裝在你電腦中的網絡接口。

檢查設備狀態

可以使用下面的命令來快速檢查所有網絡接口的狀態:

DEVICE  TYPE      STATE      CONNECTION        enp0s3  ethernet  connected  Wired connection 1enp0s8  ethernet  connected  ethernet-enp0s8    enp0s9  ethernet  connected  Wired connection 3lo      loopback  unmanaged  --  

顯示設備詳情

為了檢查某個網絡接口的詳情,可以使用 device 子命令中的 show 操作。假如你不提供某個設備的名稱,那麼會獲取並展示所有設備的詳情。你可以上下翻動來查看這些信息。

要查看你最近添加的連接所對應的設備 enp0s8,你可以使用下面的命令,請注意驗證它使用的 IP 地址是否為先前你要求設置的那個:

$ nmcli device show enp0s8GENERAL.DEVICE:                         enp0s8GENERAL.TYPE:                           ethernetGENERAL.HWADDR:                         08:00:27:81:16:20GENERAL.MTU:                            1500GENERAL.STATE:                          100 (connected)GENERAL.CONNECTION:                     ethernet-enp0s8GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6WIRED-PROPERTIES.CARRIER:               onIP4.ADDRESS[1]:                         192.168.4.26/24IP4.GATEWAY:                            --IP4.ROUTE[1]:                           dst = 192.168.4.0/24, nh = 0.0.0.0, mt = 103IP6.ADDRESS[1]:                         fe80::6d70:90de:cb83:4491/64IP6.GATEWAY:                            --IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 103IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

上面的輸出非常細緻,它主要顯示了下面這些內容:

◈ 網絡接口名稱,在這個示例中是 enp0s8,它是 udev 分配的◈ 網絡連接類型,在這個示例中是物理的 Ethernet 連接◈ 設備的媒介訪問控制(media access control)(MAC)地址,它被用來在網絡中識別該設備◈ 最大傳輸單元,在單個傳輸中最大協議數據單位的大小,任何大於這個大小的數據將被分為多個包來進行傳輸◈ 這個設備使用的連接名稱是 ethernet-enp0s8◈ 這個設備使用的 IP 地址如上面所要求的那樣,被設置為 192.168.4.26/24

其他的信息則是與這個設備連接的網絡相關的默認路由和網關設置信息。

nmcli 的交互式編輯器

儘管 nmcli 是一個命令行工具,但它還包含一個基本的交互式編輯器,edit 子命令將為你指定的連接打開一個交互式編輯器,例如:

$ nmcli connection edit ethernet-enp0s8

它將顯示少量的幫助文字,接著是 nmcli 的命令提示符:

===| nmcli interactive connection editor |===Editing existing '802-3-ethernet' connection: 'ethernet-enp0s8'Type 'help' or '?' for available commands.Type 'print' to show all the connection properties.Type 'describe [<setting>.<prop>]' for detailed property description.You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy

假如你輸入 print 然後敲擊 Enter 鍵, nmcli 將列舉出與這個接口相關的所有屬性。這些屬性有很多,你可以上下翻動來查看這個列表:

===============================================================================                 Connection profile details (ethernet-enp0s8)===============================================================================connection.id:                          ethernet-enp0s8connection.uuid:                        09d26960-25a0-440f-8b20-c684d7adc2f5connection.stable-id:                   --connection.type:                        802-3-ethernetconnection.interface-name:              enp0s8connection.autoconnect:                 yesconnection.autoconnect-priority:        0connection.autoconnect-retries:         -1 (default)connection.multi-connect:               0 (default)connection.auth-retries:                -1connection.timestamp:                   1593967212connection.read-only:                   noconnection.permissions:                 --connection.zone:                        --connection.master:                      --connection.slave-type:                  --connection.autoconnect-slaves:          -1 (default)connection.secondaries:                 --

如果你想將你的連接改為 DHCP,則請輸入 goto ipv4 然後敲 Enter 鍵:

You may edit the following properties: method, dns, dns-search, dns-options, dns-priority, addresses, gateway, routes, route-metric, route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, dad-timeout

你想改變的屬性是 method,再繼續敲 set method auto 然後敲 Enter 鍵:

nmcli ipv4> set method autoDo you also want to clear 'ipv4.addresses'? [yes]:

假如你想讓這個連接清除掉這個靜態 IP 地址,則請敲 Enter 鍵,如果要保留,則輸入 no 然後敲 Enter 鍵。假如你想在將來再次使用它,你可以保留這個 IP 地址。即便存儲了一個靜態的 IP 地址,如果 method 被設置為 auto ,它仍然會使用 DHCP。

最後輸入 save 來保存你的更改:

Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully updated.

輸入 quit 來離開 nmcli 的交互式編輯器窗口。假如你不想離開,可以輸入 back 來回到最開始的命令行提示符界面,然後繼續使用這個編輯器。

nmcli 的更多內容

瀏覽交互式編輯器,你就可以看到 nmcli 有多少設定和每個設定有多少屬性。交互式編輯器是一個簡潔的工具,但如果需要在命令行或者在腳本中使用 nmcli,你還是需要使用常規的命令行版本。

現在你有了這些基礎知識,你還可以查看 nmcli 的 man 頁面 來查看它還可以提供什麼更多功能。

via: https://opensource.com/article/20/7/nmcli

作者:Dave McKay 選題:lujun9972 譯者:FSSLC 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關焦點

  • 通過 Linux 命令行連接 Wifi | Linux 中國
    作者 | Nick Congleton 譯者 | lujun9972目標:僅使用命令行工具來配置 WiFi發行版:適用主流的那些發行版要求:安裝了無線網卡的 Linux 並且擁有 root 權限。難度:簡單約定:◈ # - 需要使用 root 權限來執行指定命令,可以直接使用 root 用戶來執行,也可以使用 sudo 命令簡介許多人喜歡用圖形化的工具來管理電腦,但也有很多人不喜歡這樣做。如果你比較喜歡命令行工具,管理 WiFi 會是件很痛苦的事情。然而,事情本不該如此。
  • 在命令行中管理 Wifi 連接
    無論何時要安裝一款新的 Linux 發行系統,一般的建議都是讓您通過有線連接來接到網際網路的。這主要的原因有兩條:第一,您的無線網卡也許安裝的驅動不正確而不能用;第二,如果您是從命令行中來安裝系統的,管理 WiFi 就非常可怕。我總是試圖避免在命令行中處理 WiFi 。但 Linux 的世界,應具有無所畏懼的精神。如果您不知道怎樣操作,您需要繼續往下來學習之,這就是寫這篇文章的唯一原因。所以我迫使自己學習如何在命令行中管理 WiFi 連接。
  • 在 Linux 上安裝使用 VirtualBox 的命令行管理界面 VBoxManage
    VirtualBox 擁有一套命令行工具,你可以使用 VirtualBox 的命令行界面 (CLI) 對遠程無界面的伺服器上的虛擬機進行管理操作
  • systemctl和nmcli
    systemd對應的進程管理命令是systemctl。通過使用 comment= fstab 選項你甚至可以標記 /etc/fstab 條目使其成為由 systemd 控制的自掛載點。(7)實現了各服務間基於依賴關係的一個精細的邏輯控制監視和控制systemd的主要命令是systemctl。該命令可用於查看系統狀態和管理系統及服務。
  • Linux 中改變主機名的 4 種方法 | Linux 中國
    這個是自由形式的主機名,以一種易讀形式來表示伺服器,例如 「JBOSS UAT Server」 這樣的名字。這些都可以使用下面 4 種方法來設置。◈ nmcli 命令:是一個控制 NetworkManager 的命令行工具。◈ nmtui 命令:是一個控制 NetworkManager 的文本用戶界面。◈ /etc/hostname 文件:這個文件中包含系統的靜態主機名。
  • 怎樣在 ubuntu 和 debian 中通過命令行管理 KVM
    然而,如果你想要在沒有圖形窗口的伺服器環境下使用 KVM ,那麼基於圖形界面的解決方案顯然是行不通的。事實上,你可以單純使用包裝了 kvm 命令行腳本的命令行來管理 KVM 虛擬機。作為替代方案,你可以使用 virsh 這個容易使用的命令行程序來管理客戶虛擬機。
  • 20個命令行工具監控 Linux 系統性能
    為此,我們編寫了對於 Linux/Unix 系統管理員非常有用的並且最常用的20個命令行系統監視工具。這些命令可以在所有版本的 Linux 下使用去監控和查找系統性能的實際原因。這些監控命令足夠你選擇適合你的監控場景。
  • 使用Grub命令行來營救Linux作業系統
    在採用Grub啟動的Linux系統中,當由於操作人員無意破壞/boot/grub/menu.lst文件後,Linux系統就無法通過grub界面啟動了,只能通過Grub命令行來引導、營救啟動作業系統。
  • 12 個 ip 命令範例 | Linux 中國
    也可以使用 ip 命令來設置廣播地址。默認是沒有設置廣播地址的,設置廣播地址的命令為:[linuxtechi@localhost]$ sudo  ip addr add broadcast 192.168.0.255 dev enp0s3我們也可以使用下面命令來根據 IP 地址設置標準的廣播地址:[linuxtechi@localhost]$  sudo ip addr
  • 4 個 Linux 下最好的命令行下載管理器/加速器
    我們都想要一個超級快速的下載管理器來完成下載儘可能多的任務,以便我們可以節省時間來進一步地工作。有很多可以加速下載的下載管理器和加速器可用(圖形化界面和命令行界面)。所有的下載工具做著同樣的任務,但它們的處理方式和功能是不同的,比如,單線程和多線程、交互和非交互。 在這裡,我們將列出 4 個最好的我們日常工作使用的命令行下載加速器。
  • 來看看這幾個 Linux 命令行中使用 history 相關的技巧
    當你頻繁使用Linux命令行時,有效地使用歷史記錄可以大大提高生產力。今天我們來介紹一下Linux命令行中使用history相關的幾個技巧。1.使用 HISTTIMEFORMAT 顯示時間戳當在命令行輸入history時,它將顯示序號和命令。出於審計目的,將時間戳與命令一起顯示可能會有所幫助。
  • 在 Linux 上檢查網絡連接的更多方法 | Linux 中國
    有幾個命令可以幫助你在 Linux 系統上看到網絡狀況,這些包括 ip、ethtool、traceroute、tcptraceroute 和 tcpdump。ifconfig 和 netstat 命令當然非常有用,但還有很多其它命令能幫你查看 Linux 系統上的網絡狀況。本文探索了一些檢查網絡連接的非常簡便的命令。
  • Linux網絡管理
    前言只有光頭才能變強回顧前面:這篇主要講解在Linux下網絡的管理。參考資料:1.1常用的管理網絡命令網絡接口相關:臨時配置相關:使用命令來做網絡的臨時配置,要做到永久配置就需要直接修改文件的方式了!二、安裝軟體一般我們的Centos下安裝軟體可以直接使用yum命令來安裝,非常方便。在yum之前還有一個RPM,來看看它的區別:rpm是由紅帽公司開發的軟體包管理方式,使用rpm我們可以方便的進行軟體的安裝、查詢、卸載、升級等工作。但是rpm軟體包之間的依賴性問題往往會很繁瑣,尤其是軟體由多個rpm包組成時。
  • 如何在命令行中使用 ftp 命令上傳和下載文件
    本文中,介紹在 Linux shell 中如何使用 ftp 命令。包括如何連接 FTP 伺服器,上傳或下載文件以及創建文件夾。
  • 18個Linux命令行工具
    基於此原因,我們已編寫了最常使用的18個命令行工具列表,這些工具將有助於每個Linux/Unix 系統管理員的工作。這些命令行工具可以在各種Linux系統下使用,可以用於監控和查找產生性能問題的原因。這個命令行工具列表提供了足夠的工具,您可以挑選適用於您的監控場景的工具。
  • Linux 系統結構詳解 和 常用的 Shell 命令
    先看一下文件的格式,是否壓縮過,使用gzip壓縮還是tar壓縮。解壓後,需要先大概了解一下,文件是什麼樣的格式。對於網絡請求的日誌文件,是一行一個請求和響應,還是多行一個請求和響應。查看文件有多少行,查看文件佔用空間大小。如果解壓後包含多個目錄或者文件,同樣的一個命令,更能發揮強大效果。
  • 如何在 Linux 中使用 history 命令 | Linux 中國
    編譯自 | https://opensource.com/article/18/6/history-command  作者 | Steve Morris 譯者 | geekpi 💎 💎 共計翻譯:743 篇 貢獻時間:1704 天用強大的 history 命令使你的命令行提示符更有效率。
  • 最常用的20個監控Linux系統性能的命令行工具
    為此,我們編寫了對於 Linux/Unix 系統管理員非常有用的並且最常用的20個命令行系統監視工具。這些命令可以在所有版本的 Linux 下使用去監控和查找系統性能的實際原因。這些監控命令足夠你選擇適合你的監控場景。
  • 在 Linux 命令行下使用「原力」 | Linux 中國
    近些年來,科幻發燒友開始在每年的 5 月 4 日慶祝星戰節,其口號是絕地武士的祝福語」願原力Force和你同在「。雖然大多數 Linux 用戶可能不是絕地武士,但我們依然可以使用原力Force。自然,如果尤達大師只是叫天行者盧克輸入什麼 「man X-Wing 戰機「、「man 原力」,或者 RTFM(去讀原力手冊,肯定是這個意思對不對),那這電影肯定沒啥意思。
  • Arch Linux中的Pacman命令如何使用
    您只需使用一個命令即可更新所有已安裝的程序包。這可能需要一段時間,具體取決於系統的更新程度。使用-Syu選項,可以更新所有已經安裝的軟體包。root@archlinux> pacman -Syu需要安裝pacman-contrib程序包,使用pactree以目錄樹的形式顯示依賴包的名稱:archlinux# pactree net-toolsnet-tools└─glibc  ├─linux-api-headers provides linux-api-headers>=4.10  ├─tzdata  └─filesystem