返回

Terminal And Shell Introduction

本文介绍我常用的终端(TTY)以及Shell,内容有Windows Terminal、WindTerm、Git Bash、Zsh。


概念

  • 终端:命令行交互界面。如:
    • windows terminal、windterm、FinalShell。PowerShell。
    • 控制台:一种特殊的终端。范围更广,既可以指硬件也可以指软件工具,常用于系统管理监控
  • TTY:终端的文本输入输出接口。可以理解为就是终端。不深入了解😂。
  • Shell:命令行解释器。如:
    • Bash、Zsh、PowerShell、git bash。
    • 终端通过TTY与Shell通信。

推荐文章:命令行界面 (CLI)、终端 (Terminal)、Shell、TTY,傻傻分不清楚?


zsh安装

Bash是Linux系统内置的shell,提供了强大的命令行编辑、脚本编写和命令历史功能,广泛用于 Linux 和 macOS 系统中。是目前最流行的 Shell 之一。

Zsh 是一个功能强大的 Shell,具有比 Bash 更多的特性,如更高级的自动补全、更强大的脚本能力和更丰富的配置选项,还提供了诸如共享历史、拼写校正、主题支持和插件系统等增强功能,使其成为高级用户和开发者的首选。

接下来介绍如何安装:

windows上安装

注意:windows上安装zsh是建立在git bash基础上的。

所以只有安装了git,我们才能在windows上使用zsh。

安装git:git官网

个人体验:利用上面方法在windows上使用zsh,效果不是特别好,不知道是不是我电脑配置低的原因:每次利用git bash启动zsh都很慢。所以windows上我用的shell一直都是git bash。

  1. 下载zsh对应的windows版本,官方并没有提供,由MSYS2提供。(官方下载需要用包管理工具)

    1. MSYS2 是针对Windows 的软件分发和构建平台。
  2. windows上如果没有包管理工具,只能去这里下载:

  3. 地址备用

    image-20240318211226752

    后续教程是以文件下载为例。

  4. 下载完成之后将压缩包解压,用rar就可以解压。

  5. 将解压的内容全部剪切到git的安装目录。

  6. 需要权限的话就授权(可能需要多次授权),重名的话直接覆盖。

    zsh安装

  7. 打开 Git Bash 标签页或者直接右键打开 Git bash 输入 zsh,出现下图则安装成功:

    zsh安装成功

  8. 暂时先不进行其他设置,直接输入 0 结束并生成 .zshrc 配置文件即可。

    1. 该文件在当前用户的家目录,win+r输入.回车进入就是。

    2. 由于现在没有安装 zsh 主题,可以这样区分 bashzshbash的光标在第二行,zsh的光标在同一行:

      image-20240318212921004

  9. 设置默认启动

    1. 每次打开 Git Bash 终端,你会发现默认还是 Bash ,而不是 Zsh,可以通过编辑 Bash 终端的配置文件 .bashrc 来实现默认使用 Zsh,在 Git Bash 终端中输入命令:

      1
      
      vim ~/.bashrc
      

      Vim 默认是命令模式,你可以直接用文本编辑器打开将配置内容粘贴进去:

      1
      2
      3
      
      if [ -t 1 ]; then #1表示标准输出,用于判断标准输出是否连接到终端(tty),如果是,则执行 zsh 命令来切换为 Zsh Shell。
        exec zsh
      fi
      

      image-20240318213908476

      后面是vim的常用命令,a、shift+insert、esc、+:wq最后按回车键,保存退出

      image-20240318214206109

      注意:注释(#)调这三行代码,启动git bash时就不会启用zsh。

  10. 之后再打开 Git Bash 终端,默认就会使用 Zsh 了。第一次可能有一个警告:大概是找不到 ~/bash_profile 等一些文件,可以忽略,以后不会再出现了。

    image-20240318214357006

  11. 至此windows上安装zsh完成。

Linux上安装

  1. 准备:

    查看当前 shell

    1
    2
    
    echo $SHELL
    echo $0 # or
    

    image-20240318234623575

  2. 安装 zsh

    CentOS:要管理员身份

    1
    
    yum install -y zsh
    

    Ubuntu:

    1
    
    sudo apt install -y zsh
    

    image-20240318235111316

  3. 将zsh替换为默认shell

    1. 为 root 设置默认 shell
    1
    
    chsh -s /bin/zsh
    

    返回结果如下,表示切换完成(下载安装 oh-my-zsh 成功后也会提示切换)

    image-20240318235425237

    1. 为特定用户设置默认 shell

      1
      2
      
      sudo chsh -s /bin/zsh <username>
      # <username> 替换为实际用户名
      
      • 在 CentOS 8 中可能报错 Command not found,执行 sudo dnf install util-linux-user
    2. 重新登录shell之后,默认就是zsh

      image-20240319000037682

  4. 至此Linux安装zsh完成。

安装 Oh My Zsh

成功安装了zsh,还需要安装Oh My Zsh,它对zsh进行了扩展,这也是为什么要使用zsh了,而不是bash的原因。

注意:以下方法同适用于安装了zsh的环境,如Linux。

  1. 在安装好 Zsh 终端之后,看起来跟 Bash 终端并无太大的区别,我们也没有进行设置。而 Oh My Zsh 可以用于管理 Zsh配置。它捆绑了数千个有用的功能、助手、插件、主题等。

  2. 官方: https://github.com/ohmyzsh/ohmyzsh

  3. 在命令行输入命令并按回车执行:

    1
    
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    
  4. 这条命令国内需要开代理,且模式为Tun终端才能访问。官方有提供国内的下载地址,失败多试几次。

    1
    
    sh -c "$(curl -fsSL https://install.ohmyz.sh/)"
    
  5. 还需要有curl以及git工具,我MinGW默认安装了curl命令,如果失败可以下载ohmyzsh安装脚本本地运行。

    1
    
    sh ./install.sh #离线安装,注意要进入脚本的下载位置
    
  6. 出现下图的内容就是安装成功了,如果出现错误,或长时间没有响应,多试几次即可:

    windows成功安装ohmyzsh

    最后一行的 ERROR 可以忽略,windows正常,Linux没有

Linux成功安装ohmyzsh

配置 zsh

  • Zsh的配置文件在用户的家目录,文件名是 .zshrc,编辑配置文件,可以对 Zsh进行一些定制化配置:

    1
    
    vim ~/.zshrc
    

    编辑并保存配置文件之后,并不会立即生效,可以关闭所有终端重新打开,或者使用命令让配置生效:

    source可以替换成.

    1
    2
    
    source ~/.zshrc 
    . ~/.zshrc # or
    
配置主题
  1. 就是对.zshrc配置

  2. Oh My Zsh 安装默之后,默认使用主题是 robbyrussell,可以修改 .zshrc 配置中的 ZSH_THEME 字段,所有可用主题可参考ohmyzsh官方主题页面,这里先配置一下我个人比较喜欢的主题:gentoo or eastwood or daveverwer or bira

    修改主题

    bira主题

  3. 注意:ZSH_THEME只能修改为官方提供的主题名,然后重新加载.zshrc文件,就能修改为指定的主题。

    1. 官方提供的主题都保存在~/.oh-my-zsh/themes目录,你也可以自定义主题。
配置插件
  1. 插件Oh My Zsh 附带了大量插件供您使用。您可以查看插件目录和/或wiki,了解当前可用的内容。

  2. 通过使用插件,可以让 Zsh 的功能更加强大,ZshOh My Zsh 自带了一些实用的插件,也可以下载其他的插件。 如 Zsh 自带 Git 插件,可以在命令行显示 Git 相关的信息,并提供了一些操作 Git 的别名:

    1
    2
    3
    4
    5
    
    gaa = git add --all
    gcmsg = git commit -m
    ga = git add
    gst = git status
    gp = git push
    

    image-20240318230853061

自动补全
  1. zsh-autosuggestions 插件,可以在你历史指令中找到与你当前输入指令匹配的记录,并高亮显示,如果想直接使用,可以直接通过右方向键补全。 安装插件,在终端分别执行下面两条命令:官方zsh-autosuggestions

    1
    2
    3
    
    cd ~/.oh-my-zsh/custom/plugins
    #指定了克隆的位置,就是什么切换的地方
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
    
  2. 插件下载完成之后,编辑 ~/.zshrc 配置文件,修改插件相关配置项:

    1
    
    vim ~/.zshrc
    
  3. 插件下载完成之后,编辑 ~/.zshrc 配置文件,修改插件相关配置项:

    1
    
    vim ~/.zshrc
    

    image-20240318232212520

    请注意,插件由空格(空格、制表符、换行符…)分隔。请勿在它们之间使用逗号,否则会损坏。

  4. 保存退出之后,记得使用命令 source ~/.zshrc 重载配置。该插件生效之后,在使用命令的时候,就会匹配我们使用的命令,右键可以直接补全:

    image-20240318232512528

  5. 如果你不喜欢提示默认的浅灰色,可以在 ~/.zshrc 中修改(没有配置项就添加),更多配置可以参考zsh-autosuggestions官方文档

    1
    
    ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#9fc5e8"
    
目录跳转
  1. Zsh 自带有一个插件 z,可以让我们在访问过的目录中快速跳转,将该插件配置到 ~/.zshrc 文件中即可使用:

    image-20240318232841685

  2. 保存退出之后,重载配置,随意进入一些目录,之后再使用命令 z 就可以实现快速跳转,支持模糊匹配:

    image-20240318233202252

    或许相比于 z,更多人会选择使用 autojump,如果是 Mac 或者 Linux 没什么问题,Windows 就不太建议折腾了。

其他插件
  1. zsh-syntax-highlighting:这个插件可以识别的 shell 命令并高亮显示

    1
    
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-syntax-highlighting
    

    image-20240319002900060

  2. zsh-completions:额外的自动补全功能,用于补充 zsh 中尚不支持的命令补全,该项目将在完善时合并到 zsh。

    1
    
      git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
    

    然后在.zshrc文件里面的source "$ZSH/oh-my-zsh.sh"这一行前添加以下代码

    1
    
     fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src
    

    image-20240319004250240

    Note: adding it as a regular Oh My ZSH! plugin will not work properly (see #603).

  3. Incremental completion on zsh:增强的实时自动命令补全插件:Incremental completion on zsh

    *该插件对性能似乎有一点点影响,请根据需要启用。*其实使用默认的自动补齐(tab)够用了。

    作用如图:

    incr

  4. 配置别名

    1. Zshalias 配置项可以自定义命令别名,在使用一些比较复杂的命令时,使用别名可以提高效率,这里举例添加一个 Git 日志的别名:

      1
      
      alias gli="git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
      

      注意等号两边不要有空格


Shell使用

在不同的终端中我们可以指定不同的Shell来使用。如:

  1. Linux安装zsh中我们就指定了Linux终端的默认Shell为zsh。
  2. 在稍后介绍的[Windows Terminal](#Windows Terminal)中,也会指定Windows Terminal终端的默认Shell为Git bash。
  3. 下面介绍在IDE终端中设置自己的Shell。

设置IDE终端的Shell为git bash

如果你按照上面的教程成功在windows上安装了zsh,那么设置Shell为git bash,也就是设置为zsh。

注意:没有安装zsh的情况下也能设置为git bash。优点:高亮、个人爱好

这里以goland开发工具为例,jetBrains全系列差不多:

  1. 进入设置找到终端

    image-20240318220456766

image-20240318220625318

  1. Shell path为git安装路径里面的bin\bash.exe,注意不是git-bash

    1. 注意:还需要为bash.exe命令指定启动参数--login -i

      图中没有加入,后期发现的问题。

      意思是启动登录Shell,并且交互运行。

      作用:这个环境下git bash不会出现乱码,文件、目录高亮。

  2. 最后应用即可。

其他类似的IDE配置差不多:

  1. vscode

image-20240318221601747

image-20240318221642366

vscode默认为git bash设置了启动参数,很方便。


Terminal使用

Windows Terminal

Windows Terminal可以理解为:是cmd窗口和PowerShell终端的增强版,它将windows环境下的终端(cmd、PowerShell)都集成在了一起。我们只需要指定对应的Shell(cmd、PowerShell、git bash),即可使用。官方文档

主要特性

  • 多选项卡支持
    • 一个窗口管理多个Shell。
  • 丰富的自定义选项
    • 提供了多种自定义选项,包括更改背景颜色、字体、透明度、主题等,允许用户根据个人喜好定制界面。
    • 同一套配置应用于不同Shell。
  • GPU 加速的文本渲染
    • 利用 DirectWrite 和 DirectX 提供 GPU 加速的文本渲染,确保快速、流畅的文本显示和滚动体验。
  • 支持多种命令行工具和 Shell
    • 支持 PowerShell、CMD(Command Prompt)、Windows Subsystem for Linux(WSL)以及任何其他你喜欢的命令行工具。
  • Unicode 和 UTF-8 字符支持:
    • 完整支持 Unicode 和 UTF-8 字符集,包括 emoji 和复杂字符。
  • JSON 配置文件
    • 使用 JSON 文件进行配置,允许用户灵活地定义设置,如启动命令、默认 Shell、外观等。
      • 当然也提供了图形化界面修改配置(没有需要在Microsoft Store中升级到最新版)。
  • 可扩展性和第三方工具支持
    • 可以通过扩展和插件进一步增强功能,支持第三方工具集成。

安装

Win11系统自带Windows Terminal终端,并且从Windows 11 22H2 版本开始,Windows Terminal 将正式成为 Windows 11 的默认终端

对于Win10系统需要额外安装,最低要求是Windows 10 2004(内部版本 19041)或更高版本。

安装方法:

  • 推荐从Microsoft Store中下载安装。会自动更新。
  • 如果无法从 Microsoft Store 安装 Windows Terminal,可以从github仓库发布页面手动下载已发布的版本。
    • 可以下载MSIX Bundle 文件,双击安装。这种方式不能指定安装位置。
    • 或者根据自己的操作系统选择对应的压缩包,一般x64。
      • 解压到哪里就安装到哪里,需要手动配置path环境变量,值为安装目录。

启动:在运行框中输入wt,能正常启动,证明安装成功。

在安装成功之后,建议将Windows Terminal设置为默认的终端应用程序。由Windows决定,一般启动的也是wt。

Windows Terminal

推荐文章:Windows终端(windows terminal)从下载到运行

修改默认Shell为Git Bash

可以根据自己的爱好判断是否修改。

  1. 每次打开 Windows Terminal 默认使用的是 Windows PowerShell,要改为默认使用 Git Bash,在设置里面进行设置即可。在更多选项中点击设置,或者右键标题栏空白处再点击设置。

  2. 滚动到底部,点击添加新配置文件——新建空配置文件,然后填入你的git bash所在位置。示例:

    git bash

    注意:

    1. 指定的git bash是bin目录下的bash.exe。

    2. 并且需要指定启动参数--login -i

      意思是启动登录Shell,并且交互运行。

      作用:这个环境下git bash不会出现乱码,文件、目录高亮。

  3. 最后,在启动选项卡中设置 Git Bash 为默认终端并保存配置:

    image-20240318215555385

美化

我在windows环境下使用的Shell一般是git bash,可定制化并不高,配置的zsh也没有使用,不过对我来说够用了。

效果如下:

image-20240527230837406

这里就不详细介绍如何实现的了,Windows Terminal都提供了图形化配置。

我遇到的问题:总结一下:Windows terminal集成git-bash,删除到头的时候窗口总是闪烁:

  • 解决办法:新建一个~/.inputrc 文件,输入set bell-style none(可以什么都不写也起作用),保存;重启terminal,问题解决。

    • .inputrc是控制命令行界面(终端)行为的配置文件。

    • 神奇的是我只要创建了这个空文件,Windows terminal的git bash,删除到头之后就不会闪烁了。

      • set bell-style none:关闭终端提示音。
      • set bell-style visible:使用可见提示而不是声音。
    • set editing-mode vi:将编辑模式设置为 Vi 模式。默认为: Emacs 模式。

      • 终端的编辑模式主要有vi和emacs两种模式,区别就是快捷键不同。

        • 如果你会vim,强烈建议修改为vi模式。

          推荐文章:vim-common-commands

        • 修改之后在insert模式下Emacs模式的部分快捷键依然可以使用

      • Emacs模式常用命令:

      注意:不同终端部分快捷键可用。

      • 光标移动
        • Ctrl + A:移动到行首
        • Ctrl + E:移动到行尾
        • Ctrl + B:向左移动一个字符
        • Ctrl + F:向右移动一个字符
        • Alt + B:向左移动一个词
        • Alt + F:向右移动一个词
      • 文本编辑
        • Ctrl + K:删除从光标位置到行尾的文本
        • Ctrl + U:删除从光标位置到行首的文本
        • Ctrl + W:删除光标位置之前的一个词
        • Alt + D:删除光标位置之后的一个词
        • Ctrl + Y:粘贴(恢复)上次删除的文本
      • 其他操作
        • Ctrl + L:清屏并重新显示当前行
        • Ctrl + R:搜索命令历史
        • esc+backspace:删除一个单词。
        • ctrl+P:上一条历史命令
        • ctrl+n:下一条历史命令
        • ctrl+j:回车
    • 这里就不详细介绍控制终端行为的选项了。能配置终端的编辑模式、提示音、补缺行为、快捷键等。

此外如果你喜欢使用PowerShell也可以使用Oh My Posh美化它,跟前面介绍的Oh My Zsh差不多。

推荐文章:Oh My Posh | Windows Terminal 美化指南

WindTerm

WindTerm是一款跨平台的终端应用,同时也是 SSH/Telnet/Serial/Shell/Sftp 客户端。通常用于远程连接。类似于FinalShell,它有的功能,WindTerm同样支持,并且拥有更多的配色方案,直接上图:

WindTerm-dark

WindTerm_DigeWhite_Theme

安装

WindTerm是一款部分开源的软件,现目前(2024/5/28)仍存在部分小问题,不过不影响正常使用。

安装可以从github仓库发布页面根据自己的操作系统手动下载已发布的版本。

使用

使用WindTerm也很简单,语言支持中文。花点时间就能学会。

WindTerm在windows环境下建议将默认的shell修改为git bash。个人爱好。

Windows Terminal和WindTerm两款终端应用都建议安装,各有各的优点和用图。不过我一般使用WindTerm多一点,因为Windows Terminal有的功能WindTerm都有,并且后者有更好的配色方案,支持文件传输,内置远程连接。

安装Windows Terminal主要是因为Windows Terminal集成了Win10的cmd、PowerShell终端。


参考