nmcli 命令賦予你直接在 linux 命令行操作 NetworkManager 工具的能力。
• 來源:linux.cn • 作者:Dave Mckay • 譯者:FSSlc •
(本文字?jǐn)?shù):12137,閱讀時長大約:14 分鐘)
nmcli 命令賦予你直接在 Linux 命令行操作 NetworkManager 工具的能力。它是 NetworkManager 軟件包集成的一部分,通過使用一些 應(yīng)用程序接口 (API)來獲取 NetworkManager 的功能。
nmcli 發(fā)布于 2010 年,用以替代其他配置網(wǎng)絡(luò)接口和連接的方法,例如 ifconfig 。因為它是一個 命令行界面 (CLI)工具,被設(shè)計用在終端窗口和腳本中,所以對于那些工作在沒有 圖形用戶界面 (GUI)的系統(tǒng)的管理員來說,它是一個非常理想的工具。
ncmli 的語法
nmcli 命令可以使用選項來更改它的行為,使用子命令來告訴 nmcli 想使用它的那部分功能,使用操作來告訴 nmcli 你想執(zhí)行什么操作。
$ nmcli <選項> <子命令> <操作>
nmcli 一共有 8 個子命令,每個子命令有一些相關(guān)的網(wǎng)絡(luò)操作:
- help 提供有關(guān) nmcli 命令和使用方法的幫助信息
- general 返回 NetworkManager 的狀態(tài)和總體配置信息
- networking 提供命令來查詢某個網(wǎng)絡(luò)連接的狀態(tài)和啟動、禁用連接的功能
- radio 提供命令來查詢某個 WiFi 網(wǎng)絡(luò)連接的狀態(tài)和啟動、禁用連接的功能
- monitor 提供命令來監(jiān)控 NetworkManager 的活動并觀察網(wǎng)絡(luò)連接的狀態(tài)改變
- connection 提供命令來啟用或禁用網(wǎng)絡(luò)接口、添加新的連接、刪除已有連接等功能
- device 主要被用于更改與某個設(shè)備(例如接口名稱)相關(guān)聯(lián)的連接參數(shù)或者使用一個已有的連接來連接設(shè)備
- secret 注冊 nmcli 來作為一個 NetworkManager 的秘密代理,用以監(jiān)聽秘密信息。這個子命令很少會被用到,因為當(dāng)連接到網(wǎng)絡(luò)時,nmcli 會自動做這些事
簡單的示例
首先,我們驗證一下 NetworkManager 正在運(yùn)行并且 nmcli 可以與之通信:
$ nmcli general
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled
探測總是管理一個系統(tǒng)的首要部分。為了列出內(nèi)存或磁盤上的網(wǎng)絡(luò)連接配置,可以使用下面的命令:
$ nmcli connection show
NAME UUID TYPE DEVICE
Wired connection 1 ac3241e4-b424-35d6-aaa7-07498561688d ethernet enp0s3
Wired connection 2 2279d917-fa02-390c-8603-3083ec5a1d3e ethernet enp0s8
Wired connection 3 52d89737-de92-35ec-b082-8cf2e5ac36e6 ethernet enp0s9
上面的命令使用了 connection 子命令中的 show 操作。
用來運(yùn)行上面這個例子的測試機(jī)器上運(yùn)行著 Ubuntu 20.04,它安裝了 3 個網(wǎng)絡(luò)適配器:enp0s3、enp0s8和 enp0s9。
連接管理
理解 nmcli 的術(shù)語是非常重要的。一個網(wǎng)絡(luò) 連接(connection)包含了一個連接的所有信息。你可以將它看作一個網(wǎng)絡(luò) 配置(configuration)。“連接”包含了與其相關(guān)的所有信息,包括 數(shù)據(jù)鏈路層 和 IP 地址信息 。它們是 OSI 網(wǎng)絡(luò)模型 中的第 2 和第 3 層。
當(dāng)你在 Linux 上配置網(wǎng)絡(luò)時,通常來說你是在為某個網(wǎng)絡(luò)設(shè)備(它們是安裝在一個電腦中的網(wǎng)絡(luò)接口)配置連接。當(dāng)一個連接被某個設(shè)備所使用,那么就可以說這個連接被 激活(active)或者 上線(up)了,反之是 停用(inactive)或 下線(down)。
添加網(wǎng)絡(luò)連接
nmcli 允許你快速地創(chuàng)建網(wǎng)絡(luò)連接并同時為該連接指定參數(shù)。為了通過使用“有線連接 2” enp0s8 來創(chuàng)建一個新的連接,你可以利用 sudo 來運(yùn)行下面的命令:
$ sudo nmcli connection add type ethernet ifname enp0s8
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully added.
其中 type 選項指定需要一個 Ethernet 類型的連接,而 ifname(接口名)選項指定你想要為這個連接使用的網(wǎng)絡(luò)接口設(shè)備。
讓我們看看發(fā)生了什么變化:
$ nmcli connection show
NAME UUID TYPE DEVICE
Wired connection 1 ac3241e4-b424-35d6-aaa7-07498561688d ethernet enp0s3
Wired connection 2 2279d917-fa02-390c-8603-3083ec5a1d3e ethernet enp0s8
Wired connection 3 52d89737-de92-35ec-b082-8cf2e5ac36e6 ethernet enp0s9
ethernet-enp0s8 09d26960-25a0-440f-8b20-c684d7adc2f5 ethernet --
通過上圖可以看到新的連接 ethernet-enp0s8 已經(jīng)創(chuàng)建好了。它的 通用唯一標(biāo)識符 (Universally Unique IDentifier)(UUID)也一同被賦予,并且其連接類型為 “Ethernet”。我們可以使用 up 子命令再加上連接名稱(或 UUID)來使得這個連接被激活:
$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
再次查看激活的連接:
$ nmcli connection show --active
NAME UUID TYPE DEVICE
Wired connection 1 ac3241e4-b424-35d6-aaa7-07498561688d ethernet enp0s3
ethernet-enp0s8 09d26960-25a0-440f-8b20-c684d7adc2f5 ethernet enp0s8
Wired connection 3 52d89737-de92-35ec-b082-8cf2e5ac36e6 ethernet enp0s9
可以看到新的連接 ethernet-enp0s8 現(xiàn)在已經(jīng)被激活了,并且與 enp0s8 網(wǎng)絡(luò)接口設(shè)備綁定。
調(diào)整連接
nmcli 命令使得調(diào)整現(xiàn)有連接的參數(shù)變得更加容易。也許你想將某個網(wǎng)絡(luò)接口從 動態(tài)主機(jī)配置協(xié)議 (Dynamic Host Configuration Protocol)(DHCP)改為靜態(tài) IP 地址。
假設(shè)你需要為你的新連接分配一個固定的 IP 地址 192.168.4.26,那么你需要使用兩個命令,一個用于設(shè)定 IP 地址,另一個用來將獲取 IP 地址的方法改為 manual(手動):
$ nmcli connection modify ethernet-enp0s8 ipv4.address 192.168.4.26/24
$ nmcli connection modify ethernet-enp0s8 ipv4.method manual
記得指定 子網(wǎng)掩碼 ,在我們這個測試的連接中,它是 無類域間路由 (Classless Inter-Domain Routing)(CIDR)中的 255.255.255.0 或 /24
為了使得你的更改生效,你需要通過停止再重新啟用該連接。下面的第一個命令是停用該連接,第二個命令則是啟用它:
$ nmcli connection down ethernet-enp0s8
Connection '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)
假如你想將連接設(shè)置為使用 DHCP,則需要將上面的 manual 改為 auto(自動):
$ nmcli connection modify ethernet-enp0s8 ipv4.method auto
設(shè)備管理
nmcli 命令中的 device 子命令允許你管理安裝在你電腦中的網(wǎng)絡(luò)接口。
檢查設(shè)備狀態(tài)
可以使用下面的命令來快速檢查所有網(wǎng)絡(luò)接口的狀態(tài):
$ nmcli device status
DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected Wired connection 1
enp0s8 ethernet connected ethernet-enp0s8 enp0s9 ethernet connected Wired connection 3
lo loopback unmanaged --
顯示設(shè)備詳情
為了檢查某個網(wǎng)絡(luò)接口的詳情,可以使用 device 子命令中的 show 操作。假如你不提供某個設(shè)備的名稱,那么會獲取并展示所有設(shè)備的詳情。你可以上下翻動來查看這些信息。
要查看你最近添加的連接所對應(yīng)的設(shè)備 enp0s8,你可以使用下面的命令,請注意驗證它使用的 IP 地址是否為先前你要求設(shè)置的那個:
$ nmcli device show enp0s8
GENERAL.DEVICE: enp0s8
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 08:00:27:81:16:20
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: ethernet-enp0s8
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 192.168.4.26/24
IP4.GATEWAY: --
IP4.ROUTE[1]: dst = 192.168.4.0/24, nh = 0.0.0.0, mt = 103
IP6.ADDRESS[1]: fe80::6d70:90de:cb83:4491/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 103
IP6.ROUTE[2]: dst = ff00::/8, nh = ::, mt = 256, table=255
上面的輸出非常細(xì)致,它主要顯示了下面這些內(nèi)容:
- 網(wǎng)絡(luò)接口名稱,在這個示例中是 enp0s8,它是 udev 分配的
- 網(wǎng)絡(luò)連接類型,在這個示例中是物理的 Ethernet 連接
- 設(shè)備的 媒介訪問控制(media access control)(mac)地址,它被用來在網(wǎng)絡(luò)中識別該設(shè)備
- 最大傳輸單元 ,在單個傳輸中最大協(xié)議數(shù)據(jù)單位的大小,任何大于這個大小的數(shù)據(jù)將被分為多個包來進(jìn)行傳輸
- 該設(shè)備當(dāng)前已經(jīng)處于連接狀態(tài)
- 這個設(shè)備使用的連接名稱是 ethernet-enp0s8
- 這個設(shè)備使用的 IP 地址如上面所要求的那樣,被設(shè)置為 192.168.4.26/24
其他的信息則是與這個設(shè)備連接的網(wǎng)絡(luò)相關(guān)的默認(rèn)路由和網(wǎng)關(guān)設(shè)置信息。
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
nmcli>
假如你輸入 print 然后敲擊 Enter 鍵, nmcli 將列舉出與這個接口相關(guān)的所有屬性。這些屬性有很多,你可以上下翻動來查看這個列表:
===============================================================================
Connection profile details (ethernet-enp0s8)
===============================================================================
connection.id: ethernet-enp0s8
connection.uuid: 09d26960-25a0-440f-8b20-c684d7adc2f5
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: enp0s8
connection.autoconnect: yes
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.multi-connect: 0 (default)
connection.auth-retries: -1
connection.timestamp: 1593967212
connection.read-only: no
connection.permissions: --
connection.zone: --
connection.master: --
connection.slave-type: --
connection.autoconnect-slaves: -1 (default)
connection.secondaries: --
如果你想將你的連接改為 DHCP,則請輸入 goto ipv4 然后敲 Enter 鍵:
nmcli> goto ipv4
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
nmcli ipv4>
你想改變的屬性是 method,再繼續(xù)敲 set method auto 然后敲 Enter 鍵:
nmcli ipv4> set method auto
Do you also want to clear 'ipv4.addresses'? [yes]:
假如你想讓這個連接清除掉這個靜態(tài) IP 地址,則請敲 Enter 鍵,如果要保留,則輸入 no 然后敲 Enter 鍵。假如你想在將來再次使用它,你可以保留這個 IP 地址。即便存儲了一個靜態(tài)的 IP 地址,如果 method 被設(shè)置為 auto ,它仍然會使用 DHCP。
最后輸入 save 來保存你的更改:
nmcli ipv4> save
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully updated.
nmcli ipv4>
輸入 quit 來離開 nmcli 的交互式編輯器窗口。假如你不想離開,可以輸入 back 來回到最開始的命令行提示符界面,然后繼續(xù)使用這個編輯器。
nmcli 的更多內(nèi)容
瀏覽交互式編輯器,你就可以看到 nmcli 有多少設(shè)定和每個設(shè)定有多少屬性。交互式編輯器是一個簡潔的工具,但如果需要在命令行或者在腳本中使用 nmcli,你還是需要使用常規(guī)的命令行版本。
現(xiàn)在你有了這些基礎(chǔ)知識,你還可以查看 nmcli 的 man 頁面 來查看它還可以提供什么更多功能。
via: opensource.com
作者: Dave McKay 選題: lujun9972 譯者: FSSLC 校對: wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國 榮譽(yù)推出