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

image

本文主要用于记录在Windows上使用WSL2和centos系统打造一个免费高效的shell终端的配置过程以及界面优化过程。

1、选型分析

之前一直都是使用termius和windows来进行ssh管理,但是最近termius要过期了(没钱续费),不用盗版(版权意识),ssh的Agent Forwarding功能是个人刚需且为termius的付费版才有的功能,所以开始研究windows上免费的ssh客户端管理工具或者是方式。

(mac系统用户可以跳过这篇文章)首先考虑到了mac,因为mac系统是类unix系统,在命令行终端操作上要比windows好太多,但是没钱买mac,所以pass

然后如果直接使用linux系统的话虽然shell的问题很容易解决,但是其他的办公软件无法使用或者很难用;如果用虚拟机跑linux,启动麻烦,耗费性能,文件管理也十分麻烦;所以pass

还有就是各种windows上的各种免费第三方工具,如powershell、GitBash、cmder等等,能实现一定的Linux命令和shell功能,但是相比原生linux还是功能残缺。

但是如果只要管理各种ssh客户端的话很多免费工具已经足够优秀了,而笔者本次除了管理ssh之外还想要实现一定的shell功能,因此最后锁定Windows10上面的2004版本的wsl2工具,用它来运行一个linux系统,虽然是残缺的Linux,但是在shell功能和ssh功能上和直接运行Linux并无差异。唯一需要注意的就是windows的版本要比较新。

image

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

2、安装wsl

windows官网的安装教程比较详细,并且wsl的安装启用比较简单,我们可以直接使用管理员模式的powershell通过命令行来启用:

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

命令顺利执行完后需要重启,这时候输入wsl --help就可以看到wsl已经安装成功。

3、安装centos

Windows的应用商店中有一些不错的linux发行版,包括很多同学都很喜欢的ubuntu,但是个人比较熟悉使用centos,而应用商店中的centos是要收费的,不过好在github上面有CENTOS官方开源的安装包,我们这里使用github上的安装包进行安装。

如果使用应用商店中的发行版直接点击安装即可。随后便可以跳过下面的centos的安装部分。

首先我们去centos的GitHub页面下载对应的安装包:

image

注意这里要切换分支进行下载,以centos7-x86.64为例,这里对应的就是最新的centos7.8系统,我们只需要下载对应的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

接着我们以管理员身份打开一个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来进行下一步的安装

LxRunOffline install -n 自定义系统名称 -d 安装目录路径 -f tar.xz安装包路径
# 注意windows系统命令行中的文件路径和linux系统差别很大
# 比如我这里的安装命令就是
LxRunOffline.exe install -n centos -d D:/centos -f .\centos-7-x86_64-docker.tar.xz
# 将centos安装到D盘的centos文件夹下,并且命名为centos

接下来就可以使用下述两种方式尝试启动

LxRunOffline run -n 自定义系统名称
wsl -d 自定义系统名称
image

4、升级centos为wsl2

windows官网教程

# 列出已经安装的wsl的信息
wsl -l -v
# 将对应的wsl设为wsl2,注意要和上面查询到的信息一致
wsl --set-version  2
# 设置默认使用的发行版
wsl -s 
image

5、配置windows terminal

使用windows的cmd或者powershell都可以直接输入wsl命令进入到wsl系统中进行操作,但是由于这两者的界面比较丑,因此我们这里使用可以定制更多参数的windows terminal来进行替换。

不过windows terminal目前来说属于比较轻量级的产品,如果需要更多的功能可以考虑一下其他的软件,这里额外推荐一个免费的全平台终端terminus注意比收费的termius要多一个字母n,也是github上面的一个开源项目,免费高效且内置多种主题和少量还可以的插件。

5.1 安装windows terminal

windows terminal直接使用win10自带的应用商店即可搜索下载安装。

5.2 安装powerline/fonts

powerline/fonts是github上面的一个项目,涵盖了较多的字体,windows本身内置的字体可能在shell中显示不太美观,所以这里我们需要在windows系统中和wsl中都安装字体。

首先在wsl中使用git拉取项目并且安装

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

在Windows中也需要安装该字体,以UbuntuMono为例,同样是下载之后进入到对应的文件夹中手动安装所有的ttf字体即可:

image

(注意尽量以管理员身份为本机所有用户安装)

image

5.3 配置iTerm2-Color-Schemes

主题的效果我们可以在官网进行预览,配置参数我们可以在对应的GitHub中找到。需要注意的是要找到对应的windows terminal目录中的配置。

5.4 配置setting.json

setting.json的参数非常多,我们可以根据自己的习惯设定显示界面和快捷键等操作,并且还可以添加背景图片,自定义不同shell的图标icon和主题等用以区分不同的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}", //设定默认启动使用的shell。这里使用后面对应的guid
    "initialRows": 40, //初始化窗口的行数
    "initialCols": 150,//初始化窗口的列数
    "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": [//这里可以设置快捷键
        {
            "command" : "copy",
            "keys" : 
            [
                "ctrl+c"
            ]
        },
        {
            "command" : "paste",
            "keys" : 
            [
                "ctrl+v"
            ]
        }
    ]
}


5.5 ssh_config

最后我们再搭配ssh自带的ssh_config来添加各种自定义ssh参数,如果需要在这上面开启ssh的Agent Forwarding功能,个人习惯是单独创建一个脚本并且在bash中设置alias快捷操作。

# 脚本内容示例
# 开启ssh Agent Forwarding
eval `ssh-agent`
# 将要使用的ssh key添加到ssh-add中
# 如果后面不指明文件则使用默认的~/.ssh/id_rsa
# 也可以一次添加多个
ssh-add ~/.ssh/id_rsa
ssh user@host

然后在bashrc文件中添加alias即可快速操作,对应的ssh_config参数可以使用man ssh_config命令来查看。

这里贴出几个常用的参数:

Host example.host.com
# ssh远程客户端的别名,可以直接通过ssh example.host.com来进行连接
    HostName 192.168.1.1
# ssh远程客户端的ip地址
    User root
# ssh远程的用户
    Port 22
# ssh的端口
    IdentityFile ~/.ssh/id_rsa
# ssh的认证密钥
    ForwardAgent yes
# 是否开启Agent Forwarding,默认不开启
    AddKeysToAgent yes
# 是否自动将 key 加入到 ssh-agent,值可以为 no(default)/confirm/ask/yes
# 如果是 yes,key 和密码都将读取文件并以加入到 agent ,就像 ssh-add。其他分别是询问、确认、不加入的意思。添加到 ssh-agent 意味着将私钥和密码交给它管理,让它来进行身份认证。    

6、效果展示

wsl2使用的应该是windows定制的内核(目前我的系统内核是4.19.84-microsoft-standard),同时无法使用systemd工具,但是作为terminal来使用已经是绰绰有余了,命令的丰富程度也要远胜于powershell、gitbash和其他的第三方命令行,安装一些常用命令的方便程度也要远胜于cygwin等。windows系统的硬盘也会直接挂载在wsl中的/mnt目录下,可以直接使用Linux的sed、awk、paste等命令来对windows下的文本进行操作。

image

注意在默认情况下会把系统本身的硬盘也挂载到/mnt目录下,注意不要误操作rm命令

你可能感兴趣的:(Windows Terminal + WSL2 + CENTOS 配置Windows命令终端)