目录
作为操作系统内核的“保护壳”,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 的主题很多,这里列出了主题的列表。