效率為王:終端管理工具 Tmux
簡介
Tmux 是一款非常實(shí)用的終端復(fù)用器,用來管理一個(gè)終端窗口中運(yùn)行的多個(gè)終端會(huì)話。它通過會(huì)話,窗口,面板的形式高效且有序的管理你所有的工作終端。
此外,它還可以通過將終端會(huì)話置于后臺(tái)運(yùn)行,在需要時(shí)按需接入,以及將會(huì)話共享給其他人,是遠(yuǎn)程辦公和結(jié)對編程的利器。無論是前端還是后端開發(fā)工程師,運(yùn)維人員,都值得將其加入個(gè)人的日常工具列表。
安裝
在 MacOs 下,安裝 tmux 非常簡單,使用 homebrew 便可以安裝最新的版本:
brew install tmux
對于 Linux,大部分發(fā)行版都有打包 tmux,可以通過包管理器安裝,比如在 Ubuntu 下,可以使用 apt 安裝。
apt install tmux
在 windows 下想使用 tmux 有兩種方法:
-
window10 加入了 linux 子系統(tǒng)的功能,用戶可以在 windows 下使用 Ubuntu linux。安裝 tmux 的方法和原生 Ubuntu 完全一樣;
-
對于 windows7 以及更加古老的版本,個(gè)人推薦使用 Cygwin,這是一個(gè)在 windows 下模擬 linux 的工具,提供了大部分 *nix 軟件的安裝,里面就包括了 tmux。
初次使用
初次使用 tmux,只需要在終端下面鍵入命令:
tmux
默認(rèn)情況下會(huì)啟動(dòng)一個(gè)新的會(huì)話(session)。這時(shí)候窗口顯示如下:
可以看到 Tmux 在默認(rèn)終端上面啟動(dòng)了一個(gè)新的界面。包括原來的 shell 窗口和下方的狀態(tài)欄。
狀態(tài)欄顯示了當(dāng)前 tmux session 的基本信息。
-
[0] 代表當(dāng)前 session 的名字;
-
0:bash 代表當(dāng)天 session 的第一個(gè)窗口,名字為 bash;
-
其他部分為當(dāng)前主機(jī)名,以及當(dāng)前時(shí)間。
作為一款基于終端的工具,tmux 所有的操作都使用鍵盤快捷鍵來進(jìn)行,熟悉了 tmux 的快捷鍵之后,我們可以把自己的雙手從鼠標(biāo)完全解放出來,對提高工作生產(chǎn)力有極大的作用。
tmux 的快捷鍵使用 Prefix + key 的形式。如果使用過 Gnu screen,那么對這種模式應(yīng)該很熟悉,不同的是,Gnu screen 默認(rèn)的 prefix 是 ctrl + a
,而 tmux 的默認(rèn)快捷鍵是 ctrl + b
,按鍵方法為同時(shí)按下 ctrl 鍵 和 b 鍵。這個(gè)組合是可以定制的,在本文中,我們用 prefix
來代表這個(gè)按鍵組合。
現(xiàn)在我們可以使用快捷鍵創(chuàng)建一個(gè)新的窗口,按下 prefix + c
(同時(shí)按下 Ctrl + b,放開,然后按下 c)。
效果如下圖所示:
此時(shí)整個(gè)窗口沒有太大的變化,只是下面的狀態(tài)欄多了一個(gè) 1:bash
,表示當(dāng)前啟動(dòng)了兩個(gè)窗口。
現(xiàn)在可以試著按下 prefix + n
,看 tmux 如何在不同的窗口間轉(zhuǎn)跳。
服務(wù)器和會(huì)話
tmux 本質(zhì)上可以說是一個(gè)服務(wù)器,當(dāng) tmux 命令運(yùn)行的時(shí)候,后臺(tái)運(yùn)行了一個(gè) tmux 服務(wù),并啟動(dòng)一個(gè)會(huì)話,會(huì)話和服務(wù)器之間通過 Unix socket 來通信。
默認(rèn)情況下啟動(dòng)的 tmux 會(huì)話通過數(shù)字命名,比如第一個(gè)會(huì)話為 0??梢酝ㄟ^:
tmux new -s session_name
來創(chuàng)建一個(gè)命名的 tmux 會(huì)話,比如tmux new -s test
。啟動(dòng)會(huì)話之后,tmux 自動(dòng)連接到此會(huì)話之上。我們可以脫離會(huì)話,這樣可以將會(huì)話里面運(yùn)行的任務(wù)置于后臺(tái),在需要的時(shí)候重新連接。
脫離會(huì)話的快捷鍵為 prefix + d
,脫離會(huì)話之后系統(tǒng)回到之前的終端。用這種方法,我們可以方便在在遠(yuǎn)程主機(jī)上啟動(dòng)一個(gè)長期運(yùn)行的 tmux 會(huì)話,運(yùn)行我們想長期運(yùn)行的程序。我們可以用 tmux ls
查看當(dāng)前所有創(chuàng)建的 session,比如:
tmux ls learn: 1 windows (created Sun Dec 17 21:03:20 2017) [80x24] test: 1 windows (created Sun Dec 17 20:59:44 2017) [80x24]
這里我創(chuàng)建了兩個(gè) tmux 會(huì)話,名字分別為 test
和learn
。
重新連接 tmux 的命名為tmux attach
。在沒有任何參數(shù)的情況下默認(rèn)連接最新創(chuàng)建的會(huì)話??梢蕴砑訁?shù)-t $name
,連接名字為$name
的 tmux 會(huì)話。比如tmux a -t learn
。同時(shí)這里顯示了一個(gè) tmux 的小技巧,很多 tmux 的命令可以縮寫,這里將 attach 縮寫成為了 a。
在 tmux session 里面,可以通過 prefix + s
選擇并快速切換 tmux 會(huì)話,如下圖所示。tmux 會(huì)彈出一個(gè)會(huì)話的選擇列表,可以通過方向鍵選擇我們想打開的會(huì)話。
如果在創(chuàng)建了會(huì)話之后想重命名當(dāng)前會(huì)話,可以使用prefix + $
,在底部彈出的輸入框里面輸入想要的名字即可。這里也可以使用 tmux 的命令模式。按下prefix + :
,在輸入框里輸入:rename-session new-session
(支持 tab 補(bǔ)全),便可以重命名當(dāng)前的會(huì)話。
注意當(dāng)服務(wù)器重啟之后,tmux 的會(huì)話信息會(huì)丟失。要持久化保存 tmux 會(huì)話信息,在本文的 tmux 插件部分會(huì)介紹一款簡單易用的插件 tmux-resurrect
。
窗口
之前我們演示了如何創(chuàng)建新的窗口,并使用prefix + n
,表示選擇下一個(gè)窗口。
在不同窗口之間移動(dòng),除了 prefix + n
之外,還可以用數(shù)字鍵,選擇第 N 個(gè)窗口,注意 tmux 中窗口的序號(hào)是從 0 開始,因此prefix + 1
表示選擇第二個(gè)窗口。prefix + p
表示轉(zhuǎn)跳到前一個(gè)窗口。
我們還可以使用快捷鍵prefix + w
來彈出一個(gè)虛擬的窗口列表,然后使用方向鍵來選擇所需要打開的窗口。
使用prefix + ,
可以用來重命名當(dāng)前的窗口,對應(yīng)的命令模式為rename-window
。
鍵入 exit,會(huì)退出當(dāng)前窗口,但是有的時(shí)候窗口可能會(huì)卡死,此時(shí)我們可以使用prefix + &
,在輸入確認(rèn)之后,強(qiáng)制殺死當(dāng)前窗口。
面板
窗口可以分割為更小的面板,配合大屏顯示器使用,非常有黑客的感覺。首先我們使用:
tmux new -s pane
創(chuàng)建一個(gè)新的 session,然后鍵入prefix + %
,然后鍵入prefix + "
,可以得到如下這樣一個(gè)被分割的窗口:
當(dāng)前光標(biāo)所在的面板被高亮了出來。 我們可以繼續(xù)鍵入prefix + %
和prefix + "
查看繼續(xù)分割面板的效果。要在不同的面板之間轉(zhuǎn)跳,使用快捷鍵prefix + o
。如果要想上下左右的移動(dòng)到不同的面板,使用快捷鍵prefix + 方向鍵
。
在默認(rèn)情況下,tmux 平均分割一個(gè)面板。我們可以通過prefix + ctrl + 方向鍵
來調(diào)整面板的大小。
有的時(shí)候我們可能需要將一個(gè)面板放大,占滿整個(gè)窗口。我們可以使用prefix +!
,將面板轉(zhuǎn)化為一個(gè)新的窗口;或者也可以使用prefix + z
,使當(dāng)前面板最大化為窗口,并暫時(shí)隱藏其他的面板。
強(qiáng)制退出一個(gè)面板的快捷鍵為prefix + x
。
小結(jié)
會(huì)話 + 窗口 + 面板的組合是提升我們工作效率的一個(gè)強(qiáng)力組合。一個(gè)推薦的使用方法為對不同的項(xiàng)目建立不通的會(huì)話,使用窗口來分割一個(gè)項(xiàng)目里面的不同工作內(nèi)容,然后使用面板來適用大屏開發(fā)。下面的一個(gè)截屏是我工作所建立的所有會(huì)話列表:
不同的項(xiàng)目被我放到了不同的會(huì)話里面,當(dāng)我需要轉(zhuǎn)跳到某一個(gè)項(xiàng)目的時(shí)候,使用prefix + s
轉(zhuǎn)跳到對應(yīng)會(huì)話,之前項(xiàng)目所配置好的環(huán)境立刻就恢復(fù)了。
tmux 配置
tmux 比 screen 更加流行的一個(gè)原因就是在默認(rèn)配置的情況下它已經(jīng)足夠好用了。當(dāng)然,我們也可以通過配置文件對 tmux 進(jìn)行個(gè)性化配置。它的默認(rèn)配置文件為 ~/.tmux.conf
,如果需要使用其他的文件,可以使用 tmux -f
選項(xiàng),讀入另外一個(gè)配置文件。
默認(rèn) prefix
我們可以通過配置文件更改 tmux 的默認(rèn) prefix。個(gè)人使用的 prefix 為ctrl-z
,習(xí)慣了 screen 的人可以配置為ctrl-a
。這里以ctrl-z
為例,用文本編輯器打開~/.tmux.conf
,在里面加入內(nèi)容:
set -g prefix C-z unbind-key C-b
這里 -g
表示全局設(shè)置,應(yīng)用于我們創(chuàng)建的所有會(huì)話。這是ctrl-b
可以被釋放出來組合,這里通過unbind-key C-b
實(shí)現(xiàn)。
要使這個(gè)設(shè)置生效,我們應(yīng)該重新加載 .tmux.conf。鍵入prefix + :
打開命名模式,在輸入框內(nèi)輸入source ~/.tmux.conf
。此時(shí)我們就可以使用新的 prefix 了。
快速重載配置文件
修改完配置文件之后再使用命令行模式重載實(shí)在太麻煩了,我們可以自定義一個(gè)快捷鍵,簡化這個(gè)操作。在~/.tmux.conf
里面加入:
bind-key r source-file ~/.tmux.conf\; display-message "Config reloaded"
我們最后一次使用prefix + :
+ source ~/.tmux.conf
的方式重新加載配置文件。之后就可以用prefix + r
的方式來做這件事了。在 .tmux.conf 中加入。
bind e new-window -n ".tmux.conf" "vim ~/.tmux.conf"
這個(gè)prefix + e
的組合可以讓你迅速的打開 .tmux.conf 并進(jìn)行配置修改,配置完成之后使用 prefix + r
的方式重新加載,整個(gè)操作在幾秒內(nèi)即可完成。
更改默認(rèn)序號(hào)
由于 tmux 的窗口和面板默認(rèn)序號(hào)都是從 0 開始,我們可以更改這個(gè)設(shè)置,使默認(rèn)序號(hào)從 1 開始。
set -g base-index 1 setw -g pane-base-index 1
更改分割面板的快捷鍵
tmux 垂直和水平分割面板的快捷鍵分別為prefix + %
和prefix + "
。這兩個(gè)按鍵比較難記憶,我們可以將其更改為prefix + |
和prefix + -
。將以下配置加入 ~/.tmux.conf
。
bind-key | split-window -h bind-key - split-window
更改面板間移動(dòng)的快捷鍵
大部分鍵盤操作工具,比如 vim,都使用jkhl
來進(jìn)行上下左右的移動(dòng)操作。我們可以將面板間移動(dòng)的操作綁定到對應(yīng)的按鍵。配置如下:
bind-key l select-pane -R bind-key h select-pane -L bind-key j select-pane -D bind-key k select-pane -U
面板大小調(diào)整
我們用類似移動(dòng)鍵的方式來進(jìn)行面板的大小調(diào)整。將快捷鍵重新定義為 JKHL。配置如下:
bind-key L resize-pane -R 5 bind-key H resize-pane -L 5 bind-key K resize-pane -U 5 bind-key J resize-pane -D 5
鼠標(biāo)模式
鼠標(biāo)模式有時(shí)候也可能非常有用,比如你可能想用鼠標(biāo)來選中一個(gè)面板或者窗口,用鼠標(biāo)調(diào)整面板大小,或者用鼠標(biāo)滾輪來向上滾動(dòng)瀏覽歷史。
開啟 / 關(guān)閉鼠標(biāo)模式的配置為 set -g mouse on/off
,需要在命令模式下敲入這串字符。我們可以更進(jìn)一步,通過綁定到快捷鍵prefix +m
來觸發(fā)鼠標(biāo)模式的開關(guān)。配置如下:
bind m run 'old=$(tmux show -gv mouse);new=""; if [ "$old" = "on" ]; then new="off"; else new="on"; fi; tmux set -g mouse $new; tmux display "mouse: $new"'
注意這是一行配置,細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn),這其實(shí)是一段shell
腳本,在鼠標(biāo)模式關(guān)閉的情況下打開它,反之亦然。
狀態(tài)欄的配置
默認(rèn) tmux 的狀態(tài)欄是窗口下方的一段綠色長條,如下圖:
它分為三個(gè)部分:
-
最右邊的會(huì)話名字;
-
中間的窗口列表;
-
左邊的主機(jī)信息。
這些顯示的信息,以及字體前景色,背景色都是可以靈活配置的。開源的好處就是社區(qū)已經(jīng)有許多成熟的解決方案,這里面最受歡迎的是 powerline。
powerline 用 Python 編寫,安裝使用 Python 的包管理工具pip
pip install powerline-status
此外我們還需要安裝 powerline 使用的字體,可以在 https://github.com/powerline/fonts 下載并安裝。
對 tmux 使用 powerline,只需將如下配置加入 .tmux.conf,prefix + r
重新加載即可:
source "{repository_root}/powerline/bindings/tmux/powerline.conf"
其中 repository_root 是 powerline 的安裝路徑。以下是作者安裝 powerline 之后狀態(tài)欄的一個(gè)截屏:
復(fù)制模式
tmux 初學(xué)者經(jīng)常遇到的一個(gè)問題就是發(fā)現(xiàn)無法使用滾動(dòng)鍵向上滾動(dòng)查看終端的歷史。要做到這一點(diǎn),必須進(jìn)入 tmux 的復(fù)制模式。
按下prefix + [
,tmux 就進(jìn)入了復(fù)制模式,再按回車鍵退出。默認(rèn)情況下 tmux 保存 1000 行終端歷史。我們可以通過。
set -g history-limit 10000
調(diào)整歷史記錄大小。
tmux 復(fù)制模式可以使用兩種鍵盤模式,Vi 和 Emacs,默認(rèn)為 Emacs,我們通過:
set -g mode-keys vi
更改為 Vi 的鍵盤模式。在 Vi 模式下,可以通過 jkhl 來上下左右移動(dòng)光標(biāo)。
要復(fù)制文本,我們先進(jìn)入復(fù)制模式,將光標(biāo)移動(dòng)到指定位置,按下空格鍵,然后移動(dòng)光標(biāo)來選擇文本,被選擇的文本會(huì)高亮顯示,最后按回車鍵,表示選擇完畢。
此時(shí)敲入命令tmux list-buffer
,我們可以看到 tmux 緩存區(qū)保存的文本,使用tmux paste-buffer
或者快捷鍵prefix + ]
可以粘貼緩存區(qū)里面的內(nèi)容。
更加高級(jí)的是 tmux 維護(hù)一個(gè)緩沖區(qū)的棧,每復(fù)制一次,tmux 在這個(gè)棧頂部創(chuàng)建了一個(gè)新的緩沖區(qū)?,F(xiàn)在我們可以多復(fù)制幾次文本,然后鍵入命令tmux list-buffers
,這時(shí)可以看到一個(gè)緩沖列表。
再敲入命令tmux choose-buffer
,tmux 會(huì)創(chuàng)建一個(gè)選擇框,我們可以選擇需要粘貼的文本,然后回車,對應(yīng)文本就插入到了光標(biāo)位置。
vim 用戶可以重新配置這些命令和快捷鍵,讓使用起來更加熟悉。
bind-key -Tcopy-mode-vi 'v' send -X begin-selection bind-key -Tcopy-mode-vi 'y' send -X copy-selection unbind p bind p paste-buffer bind b choose-buffer
現(xiàn)在在復(fù)制模式下可以使用 v 和 y 來選擇文本,使用prefix + p
粘貼文本,使用prefix + b
來選擇緩沖(將 prefix 設(shè)置成為 ctrl + b 的用戶可自行選擇其他快捷鍵)。
其他配置
為了使 tmux 更好的工作,作者在這里還貼出一些其他的 tmux 基本配置。
set -g default-terminal "screen-256color" # 顏色支持 setw -q -g utf8 on # utf8 支持 set -q -g status-utf8 on # tmux < 2.2 setw -g automatic-rename on # 自動(dòng)重命名窗口 set -g renumber-windows on # 關(guān)閉窗口的時(shí)候重新計(jì)算窗口 index set -g display-time 4000 # tmux 消息提示時(shí)間為 4 秒
session 共享和結(jié)對編程
目前很多企業(yè)都在推行結(jié)對編程,兩個(gè)人同一工作臺(tái)前開發(fā)軟件。當(dāng)開發(fā)人員在同一個(gè)辦公室的情況下,實(shí)施結(jié)對編程比較簡單,但是如果開發(fā)人員處于異地的狀態(tài),實(shí)施結(jié)對編程就必須有屏幕共享的軟件。
而 tmux 基于終端的會(huì)話共享可以在即使網(wǎng)絡(luò)狀況不佳的情況下提供良好的結(jié)對編程體驗(yàn)。
我們先來看一下最基本的會(huì)話共享機(jī)制。
假設(shè)有主機(jī) Foo,程序員 A ssh 連接到了這臺(tái)主機(jī),并使用 tmux 開始了會(huì)話 pairing。
tmux new -s pairing
A 想把這個(gè)會(huì)話共享給開發(fā)人員 B,那么他只需要讓 B 登錄同一臺(tái)主機(jī)的同一個(gè)用戶,B 就可以用命令。
tmux attach -t pairing
attach 到同一個(gè)會(huì)話。此時(shí) A 和 B 看到的就是同一會(huì)話的統(tǒng)一窗口,兩人的操作也會(huì)完全同步到各自的屏幕上。
這種方法一個(gè)不那么完美的地方就是 A 和 B 看到的屏幕永遠(yuǎn)是完全一致的,有的時(shí)候我們可能需要讓 A 和 B 能夠同時(shí)做不同的事情,同步窗口的結(jié)果但不必保持窗口顯示的同步。要做到這一點(diǎn),只需要 B 使用命令:
tmux new -s test -t pairing
創(chuàng)建一個(gè)新的會(huì)話并將其加入到 pairing 會(huì)話即可。這樣 A 和 B 看到的窗口結(jié)果是一樣,但是兩人都可以獨(dú)立輸入而不會(huì)互相打擾。
如果想在不共享服務(wù)器的登錄權(quán)限的情況下共享 tmux 會(huì)話,可以嘗試使用 tmate。它是一款 tmux 的 fork,可以在無需登錄主機(jī)的情況下只讀的共享你的 tmux 會(huì)話。詳細(xì)使用讀者可以自行參考相關(guān)網(wǎng)站。
插件管理
tmux 官方支持一系列的插件,可以在 https://github.com/tmux-plugins 找到。注意大部分插件都需要 tmux 1.9 + 版本。
tpm
首先需要提及的是插件管理工具 tpm,它可以用來方便的安裝和刪除插件。安裝 tpm 的方法為
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
在 ~/.tmux.conf
中加入這些配置:
#tmux 插件列表 set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-sensible' #將這一行插入 .tmux.conf 最底部 run '~/.tmux/plugins/tpm/tpm'
然后使用prefix + r
重新加載 tmux 配置,就可以使用 tmp 了。
當(dāng)在 .tmux.conf 里面加入了新的插件時(shí),我們可以使用prefix + I
安裝插件,使用prefix + U
更新插件。刪除插件的快捷鍵為prefix + alt + u
。
會(huì)話保持:tmux-resurrect
tmux-resurrect 是一款輕量級(jí)的會(huì)話保持插件。它可以用來在服務(wù)器重啟之后重新加載之前保存的 tmux 會(huì)話。
安裝 tmux-resurrect,首先將 set -g @plugin 'tmux-plugins/tmux-resurrect'
加入到 .tmux.conf 中,然后按prefix + I
安裝。
保存 tmux 會(huì)話的方法為prefix + C-s
。保存成功之后會(huì)出現(xiàn)如下提示
此時(shí)我們?nèi)绻貑C(jī)器,然后打開一個(gè)新的 tmux 會(huì)話,那么可以使用快捷鍵prefix + C-r
恢復(fù)保存的會(huì)話信息。
tmuxinator 是另外一款 tmux 的會(huì)話保持工具,它通過編輯和讀取配置文件的形式進(jìn)行會(huì)話的保持。這里留給讀者自行參考。
結(jié)束語
到此為止,本篇關(guān)于 tmux 的介紹就結(jié)束了。正如文章開頭所說,tmux 可以大幅度的提高工作效率,希望讀者都能喜愛上這一款優(yōu)秀的終端管理工具。
責(zé)任編輯:售電衡衡
-
權(quán)威發(fā)布 | 新能源汽車產(chǎn)業(yè)頂層設(shè)計(jì)落地:鼓勵(lì)“光儲(chǔ)充放”,有序推進(jìn)氫燃料供給體系建設(shè)
2020-11-03新能源,汽車,產(chǎn)業(yè),設(shè)計(jì) -
中國自主研制的“人造太陽”重力支撐設(shè)備正式啟運(yùn)
2020-09-14核聚變,ITER,核電 -
探索 | 既耗能又可供能的數(shù)據(jù)中心 打造融合型綜合能源系統(tǒng)
2020-06-16綜合能源服務(wù),新能源消納,能源互聯(lián)網(wǎng)
-
新基建助推 數(shù)據(jù)中心建設(shè)將迎爆發(fā)期
2020-06-16數(shù)據(jù)中心,能源互聯(lián)網(wǎng),電力新基建 -
泛在電力物聯(lián)網(wǎng)建設(shè)下看電網(wǎng)企業(yè)數(shù)據(jù)變現(xiàn)之路
2019-11-12泛在電力物聯(lián)網(wǎng) -
泛在電力物聯(lián)網(wǎng)建設(shè)典型實(shí)踐案例
2019-10-15泛在電力物聯(lián)網(wǎng)案例
-
新基建之充電樁“火”了 想進(jìn)這個(gè)行業(yè)要“心里有底”
2020-06-16充電樁,充電基礎(chǔ)設(shè)施,電力新基建 -
燃料電池汽車駛?cè)雽こ0傩占疫€要多久?
-
備戰(zhàn)全面電動(dòng)化 多部委及央企“定調(diào)”充電樁配套節(jié)奏
-
權(quán)威發(fā)布 | 新能源汽車產(chǎn)業(yè)頂層設(shè)計(jì)落地:鼓勵(lì)“光儲(chǔ)充放”,有序推進(jìn)氫燃料供給體系建設(shè)
2020-11-03新能源,汽車,產(chǎn)業(yè),設(shè)計(jì) -
中國自主研制的“人造太陽”重力支撐設(shè)備正式啟運(yùn)
2020-09-14核聚變,ITER,核電 -
能源革命和電改政策紅利將長期助力儲(chǔ)能行業(yè)發(fā)展
-
探索 | 既耗能又可供能的數(shù)據(jù)中心 打造融合型綜合能源系統(tǒng)
2020-06-16綜合能源服務(wù),新能源消納,能源互聯(lián)網(wǎng) -
5G新基建助力智能電網(wǎng)發(fā)展
2020-06-125G,智能電網(wǎng),配電網(wǎng) -
從智能電網(wǎng)到智能城市
-
山西省首座電力與通信共享電力鐵塔試點(diǎn)成功
-
中國電建公司公共資源交易服務(wù)平臺(tái)摘得電力創(chuàng)新大獎(jiǎng)
-
電力系統(tǒng)對UPS的技術(shù)要求