倍道而进 – 系统管理的高速引擎 z shell


作为操作系统内核的“保护壳”,shell 是与内核交互的关键通道。shell 工具的优劣也直接决定了系统管理效率的高低。随着操作系统的不断发展,产生了多种 shell 工具。这些 shell 缘起于不同的系统管理需求背景,在多年发展过程中都在不断的取长补短、融合完善,功能愈发强大。

在 Linux 中,系统支持的 shell 工具种类存储在 /etc/shells 文件中。

## 查看系统中安装的 shell
cat /etc/shells

/bin/sh
/bin/bash
/bin/rbash
/bin/csh
/bin/ksh
/bin/tcsh
/bin/dash
/bin/zsh
/usr/bin/zsh

z shell 及其生态体系

在众多 shell 中,bash shell 无疑是扛鼎级的存在,作为 shell 界的大哥级的人物,bash 一直以稳定、包容的姿态成为各个 Linux 发行版的默认 shell。其他很多 shell 在借鉴、学习 bash 的基础上,增加新的特色,进而青出于蓝,z shell 就是个中翘楚。

z shell,简称 zsh。它虽功能强大,但配置复杂,这也直接增加了 zsh 的使用成本。为降低使用的复杂度,z shell 社区也采用了典型的加层封装的简化思路:即利用自动化的脚本对原有软件对外接口(琐碎细节的使用配置)进行封装,在原有软件基础上形成一个更高层的框架,通过框架层的封装减少软件对外接口,特定的功能配置以框架插件(自动化脚本与软件接口 API 二次开发的结合体)的形式,通过简单的命令就可以加入到整个框架中,进而达到对软件定制化配置的目的。
(加层、封装 – 典型的架构思路)

基于这种利用高层框架简化软件使用配置的思路,就衍生出了以核心软件为中心的更高层的“框架 + 插件”的生态体系。这种生态体系,在很多配置复杂软件身上都有体现,如 vim。

z shell 也有许多使用框架。比较典型的有 antigen 和 oh-my-zsh。

zsh 框架的使用

zsh 安装与切换

  • 查看系统是否安装 zsh,没有则安装
    cat /etc/shells
    sudo apt-get install zsh
    
  • 查看当前使用 shell
    echo $SHELL
    
  • 将 zsh 设为默认 shell
    chsh -s /bin/zsh
    

oh-my-zsh 框架

git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

典型插件

插件 zsh-autosuggestions

  • github 下载安装
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
    
  • .zshrc 文件配置
    plugins=(… zsh-autosuggestions)
    

插件 zsh-syntax-highlighting

  • github 下载安装
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
    
  • .zshrc 文件配置
    plugins=(… zsh-syntax-highlighting)
    

插件 autojump

  • 软件库安装
    sudo apt install autojump
    
  • .zshrc 文件配置
    plugins=(… autojump )
    

插件 zsh-completions

  • github 下载安装
    git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions
    
  • .zshrc 文件配置
    plugins=(… zsh-completions)
    
  • .oh-my-zsh.sh 文件修改

    将自动补全的脚本目录加入 fpath 变量中

    fpath=($ZSH/functions $ZSH/completions $fpath)
    

    改为

    ## 不修改路径找不到补全脚本
    fpath=($ZSH/custom/plugins/zsh-completions/src $fpath)
    

    自动补全功能对任何命令号系统都是效率倍速器。作为老牌的命令行系统,bash 也自然不例外有自己指令自动补全组件:bash-completion。任何在 bash 中使用的新的计算机语言或指令系统,都可以通过开发 bash-completion 组件脚本,在 bash 中提供对应的额外自动补全功能。

修改 themes

通过修改 ~/.zshrc 文件中的 ZSH_THEME 变量内容来修改 themes,ohmyzsh 的主题很多,这里列出了主题的列表。

Reference

  1. awesome-zsh-plugins
  2. http://macshuo.com/?p=676
  3. An introduction to bash completion

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注