Windows Terminal + WSL2 + CENTOS 配置Windows命令終端

image

本文主要用于記錄在Windows上使用WSL2和centos系統(tǒng)打造一個(gè)免費(fèi)高效的shell終端的配置過程以及界面優(yōu)化過程。

1、選型分析

之前一直都是使用termius和windows來進(jìn)行ssh管理,但是最近termius要過期了(沒錢續(xù)費(fèi)),不用盜版(版權(quán)意識(shí)),ssh的Agent Forwarding功能是個(gè)人剛需且為termius的付費(fèi)版才有的功能,所以開始研究windows上免費(fèi)的ssh客戶端管理工具或者是方式。

(mac系統(tǒng)用戶可以跳過這篇文章)首先考慮到了mac,因?yàn)閙ac系統(tǒng)是類unix系統(tǒng),在命令行終端操作上要比windows好太多,但是沒錢買mac,所以pass

然后如果直接使用linux系統(tǒng)的話雖然shell的問題很容易解決,但是其他的辦公軟件無法使用或者很難用;如果用虛擬機(jī)跑linux,啟動(dòng)麻煩,耗費(fèi)性能,文件管理也十分麻煩;所以pass

還有就是各種windows上的各種免費(fèi)第三方工具,如powershell、GitBash、cmder等等,能實(shí)現(xiàn)一定的Linux命令和shell功能,但是相比原生linux還是功能殘缺。

但是如果只要管理各種ssh客戶端的話很多免費(fèi)工具已經(jīng)足夠優(yōu)秀了,而筆者本次除了管理ssh之外還想要實(shí)現(xiàn)一定的shell功能,因此最后鎖定Windows10上面的2004版本的wsl2工具,用它來運(yùn)行一個(gè)linux系統(tǒng),雖然是殘缺的Linux,但是在shell功能和ssh功能上和直接運(yùn)行Linux并無差異。唯一需要注意的就是windows的版本要比較新。

image

WSL 2 is only available in Windows 10 builds 18917 or higher

2、安裝wsl

windows官網(wǎng)的安裝教程比較詳細(xì),并且wsl的安裝啟用比較簡(jiǎn)單,我們可以直接使用管理員模式的powershell通過命令行來啟用:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

命令順利執(zhí)行完后需要重啟,這時(shí)候輸入wsl --help就可以看到wsl已經(jīng)安裝成功。

3、安裝centos

Windows的應(yīng)用商店中有一些不錯(cuò)的linux發(fā)行版,包括很多同學(xué)都很喜歡的ubuntu,但是個(gè)人比較熟悉使用centos,而應(yīng)用商店中的centos是要收費(fèi)的,不過好在github上面有CENTOS官方開源的安裝包,我們這里使用github上的安裝包進(jìn)行安裝。

如果使用應(yīng)用商店中的發(fā)行版直接點(diǎn)擊安裝即可。隨后便可以跳過下面的centos的安裝部分。

首先我們?nèi)?a target="_blank">centos的GitHub頁面下載對(duì)應(yīng)的安裝包:

image

注意這里要切換分支進(jìn)行下載,以centos7-x86.64為例,這里對(duì)應(yīng)的就是最新的centos7.8系統(tǒng),我們只需要下載對(duì)應(yīng)的tar.xz壓縮包即可。

wget https://github.com/CentOS/sig-cloud-instance-images/blob/CentOS-7-x86_64/docker/centos-7-x86_64-docker.tar.xz
image

接著我們以管理員身份打開一個(gè)powershell窗口:

# 安裝 Chocolatey
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
# 安裝 LxRunOffline
choco install lxrunoffline

注意這里安裝完成之后需要重啟powershell來進(jìn)行下一步的安裝

LxRunOffline install -n 自定義系統(tǒng)名稱 -d 安裝目錄路徑 -f tar.xz安裝包路徑
# 注意windows系統(tǒng)命令行中的文件路徑和linux系統(tǒng)差別很大
# 比如我這里的安裝命令就是
LxRunOffline.exe install -n centos -d D:/centos -f .\centos-7-x86_64-docker.tar.xz
# 將centos安裝到D盤的centos文件夾下,并且命名為centos

接下來就可以使用下述兩種方式嘗試啟動(dòng)

LxRunOffline run -n 自定義系統(tǒng)名稱
wsl -d 自定義系統(tǒng)名稱
image

4、升級(jí)centos為wsl2

windows官網(wǎng)教程

# 列出已經(jīng)安裝的wsl的信息
wsl -l -v
# 將對(duì)應(yīng)的wsl設(shè)為wsl2,注意<Distro>要和上面查詢到的信息一致
wsl --set-version <Distro> 2
# 設(shè)置默認(rèn)使用的發(fā)行版
wsl -s <Distro>
image

5、配置windows terminal

使用windows的cmd或者powershell都可以直接輸入wsl命令進(jìn)入到wsl系統(tǒng)中進(jìn)行操作,但是由于這兩者的界面比較丑,因此我們這里使用可以定制更多參數(shù)的windows terminal來進(jìn)行替換。

不過windows terminal目前來說屬于比較輕量級(jí)的產(chǎn)品,如果需要更多的功能可以考慮一下其他的軟件,這里額外推薦一個(gè)免費(fèi)的全平臺(tái)終端terminus注意比收費(fèi)的termius要多一個(gè)字母n,也是github上面的一個(gè)開源項(xiàng)目,免費(fèi)高效且內(nèi)置多種主題和少量還可以的插件。

5.1 安裝windows terminal

windows terminal直接使用win10自帶的應(yīng)用商店即可搜索下載安裝。

5.2 安裝powerline/fonts

powerline/fonts是github上面的一個(gè)項(xiàng)目,涵蓋了較多的字體,windows本身內(nèi)置的字體可能在shell中顯示不太美觀,所以這里我們需要在windows系統(tǒng)中和wsl中都安裝字體。

首先在wsl中使用git拉取項(xiàng)目并且安裝

git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh

在Windows中也需要安裝該字體,以UbuntuMono為例,同樣是下載之后進(jìn)入到對(duì)應(yīng)的文件夾中手動(dòng)安裝所有的ttf字體即可:

image

(注意盡量以管理員身份為本機(jī)所有用戶安裝)

image

5.3 配置iTerm2-Color-Schemes

主題的效果我們可以在官網(wǎng)進(jìn)行預(yù)覽,配置參數(shù)我們可以在對(duì)應(yīng)的GitHub中找到。需要注意的是要找到對(duì)應(yīng)的windows terminal目錄中的配置。

5.4 配置setting.json

setting.json的參數(shù)非常多,我們可以根據(jù)自己的習(xí)慣設(shè)定顯示界面和快捷鍵等操作,并且還可以添加背景圖片,自定義不同shell的圖標(biāo)icon和主題等用以區(qū)分不同的shell避免誤操作。

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{aabae64a-7cf7-5add-b5d6-744e54ab56d6}", //設(shè)定默認(rèn)啟動(dòng)使用的shell。這里使用后面對(duì)應(yīng)的guid
    "initialRows": 40, //初始化窗口的行數(shù)
    "initialCols": 150,//初始化窗口的列數(shù)
    "alwaysShowTabs": true,
    "showTerminalTitleInTitlebar": true,

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles           
        },
        "list":
        [
            {
                "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
                "hidden": false,
                "name": "Ubuntu-20.04",
                "source": "Windows.Terminal.Wsl",
                "fontFace": "Fira Mono for Powerline",
                "fontSize": 12,
                "colorScheme": "Ubuntu",  //這里的color要和后面的schemes中的一致
                "useAcrylic" : false,    // 是否啟用窗口透明度,效果類似毛玻璃特效
                "acrylicOpacity" : 0.6 // 窗口透明度
            }
            {
                "guid": "{aabae64a-7cf7-5add-b5d6-744e54ab56d6}",
                "hidden": false,
                "name": "centos",
                "source": "Windows.Terminal.Wsl",
                "fontFace": "Fira Mono for Powerline",
                "fontSize": 12,
                "colorScheme": "Atom",
                "useAcrylic" : true,    // 窗口透明度
                "acrylicOpacity" : 0.8 // 窗口透明度
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false,
                "fontSize": 12,
                "colorScheme": "MaterialDark",
                "useAcrylic" : false,    // 窗口透明度
                "acrylicOpacity" : 0.5 // 窗口透明度
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [
        {          
            "name": "Atom",
            "black": "#000000",
            "red": "#fd5ff1",
            "green": "#87c38a",
            "yellow": "#ffd7b1",
            "blue": "#85befd",
            "purple": "#b9b6fc",
            "cyan": "#85befd",
            "white": "#e0e0e0",
            "brightBlack": "#000000",
            "brightRed": "#fd5ff1",
            "brightGreen": "#94fa36",
            "brightYellow": "#f5ffa8",
            "brightBlue": "#96cbfe",
            "brightPurple": "#b9b6fc",
            "brightCyan": "#85befd",
            "brightWhite": "#e0e0e0",
            "background": "#161719",
            "foreground": "#c5c8c6"
        }
    ],
    "keybindings": [//這里可以設(shè)置快捷鍵
        {
            "command" : "copy",
            "keys" : 
            [
                "ctrl+c"
            ]
        },
        {
            "command" : "paste",
            "keys" : 
            [
                "ctrl+v"
            ]
        }
    ]
}


5.5 ssh_config

最后我們?cè)俅钆鋝sh自帶的ssh_config來添加各種自定義ssh參數(shù),如果需要在這上面開啟ssh的Agent Forwarding功能,個(gè)人習(xí)慣是單獨(dú)創(chuàng)建一個(gè)腳本并且在bash中設(shè)置alias快捷操作。

# 腳本內(nèi)容示例
# 開啟ssh Agent Forwarding
eval `ssh-agent`
# 將要使用的ssh key添加到ssh-add中
# 如果后面不指明文件則使用默認(rèn)的~/.ssh/id_rsa
# 也可以一次添加多個(gè)
ssh-add ~/.ssh/id_rsa
ssh user@host

然后在bashrc文件中添加alias即可快速操作,對(duì)應(yīng)的ssh_config參數(shù)可以使用man ssh_config命令來查看。

這里貼出幾個(gè)常用的參數(shù):

Host example.host.com
# ssh遠(yuǎn)程客戶端的別名,可以直接通過ssh example.host.com來進(jìn)行連接
    HostName 192.168.1.1
# ssh遠(yuǎn)程客戶端的ip地址
    User root
# ssh遠(yuǎn)程的用戶
    Port 22
# ssh的端口
    IdentityFile ~/.ssh/id_rsa
# ssh的認(rèn)證密鑰
    ForwardAgent yes
# 是否開啟Agent Forwarding,默認(rèn)不開啟
    AddKeysToAgent yes
# 是否自動(dòng)將 key 加入到 ssh-agent,值可以為 no(default)/confirm/ask/yes
# 如果是 yes,key 和密碼都將讀取文件并以加入到 agent ,就像 ssh-add。其他分別是詢問、確認(rèn)、不加入的意思。添加到 ssh-agent 意味著將私鑰和密碼交給它管理,讓它來進(jìn)行身份認(rèn)證。    

6、效果展示

wsl2使用的應(yīng)該是windows定制的內(nèi)核(目前我的系統(tǒng)內(nèi)核是4.19.84-microsoft-standard),同時(shí)無法使用systemd工具,但是作為terminal來使用已經(jīng)是綽綽有余了,命令的豐富程度也要遠(yuǎn)勝于powershell、gitbash和其他的第三方命令行,安裝一些常用命令的方便程度也要遠(yuǎn)勝于cygwin等。windows系統(tǒng)的硬盤也會(huì)直接掛載在wsl中的/mnt目錄下,可以直接使用Linux的sed、awk、paste等命令來對(duì)windows下的文本進(jìn)行操作。

image

注意在默認(rèn)情況下會(huì)把系統(tǒng)本身的硬盤也掛載到/mnt目錄下,注意不要誤操作rm命令

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容