返回

Shell工具

前言

Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序。Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的 Shell 程序与其他应用程序具有同样的效果

常见的 shell 包括:Bash 、Korn Shell 、C Shell、Z Shell 等。

What are the best UNIX shells - Slant

Zsh

传统的 bash 功能比较简陋,且不美观。下面基于 Ubuntu22.04 LTS 系统,安装 zsh,并使用 oh-my-zsh 对终端进行美化。Oh My Zsh 是基于 zsh 命令行的一个扩展工具集,提供了丰富的扩展功能。

环境配置

  1. 安装基本工具
1
2
3
4
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装 zsh git curl
sudo apt install zsh git curl -y
  1. 设置默认终端为 zsh(注意:不要使用 sudo)
1
chsh -s /bin/zsh
  1. 安装 oh-my-zsh
1
sh -c "$(wget -O- https://install.ohmyz.sh/)"

注意:同意使用 Oh-my-zsh 的配置模板覆盖已有的 .zshrc

  1. .bashrc中迁移配置(可选)

如果之前在使用bash时自定义了一些环境变量、别名等,那么在切换到zsh后,需要手动迁移这些自定义配置。

1
2
3
4
5
6
# 查看bash配置文件,并手动复制自定义配置
cat ~/.bashrc
# 编辑zsh配置文件,并粘贴自定义配置
vi ~/.zshrc
# 启动新的zsh配置
source ~/.zshrc

root用户在执行sudo su命令后,再运行上述代码查看、手动复制、粘贴自定义配置

配置主题

  1. 下载haoomz主题
1
sudo wget -O $ZSH_CUSTOM/themes/haoomz.zsh-theme https://cdn.haoyep.com/gh/leegical/Blog_img/zsh/haoomz.zsh-theme
  1. 编辑 ~/.zshrc 文件,将 ZSH_THEME 设为 haoomz。当然也可以设置为其他主题,例如lukerandallrobbyrussell
1
2
3
4
5
vi ~/.zshrc

ZSH_THEME="haoomz"

source ~/.zshrc
  1. 查看内置主题(可选):可以在内置主题样式截图中查看所有 zsh 内置的主题样式和对应的主题名。这些内置主题已经放在 ~/.oh-my-zsh/themes 目录下,不需要再下载
1
cd ~/.oh-my-zsh/themes && ls
  1. 下载最受欢迎的powerlevel10k主题(可选):根据 What’s the best theme for Oh My Zsh? 中的排名,以及自定义化、美观程度, powerlevel10k 主题是最受欢迎的
1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

安装插件

oh-my-zsh 已经内置了 git 插件,内置插件可以在 ~/.oh-my-zsh/plugins 中查看,下面介绍一下常用插件,更多插件可以在 awesome-zsh-plugins 里查看

  1. 下载zsh-autosuggestions到本地的 ~/.oh-my-zsh/custom/plugins 目录:一个命令提示插件,输入命令时,会自动推测可能需要输入的命令,按下->End可以快速采用建议
1
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
  1. 下载zsh-syntax-highlighting到本地的 ~/.oh-my-zsh/custom/plugins 目录:一个命令语法校验插件,在输入命令的过程中,若指令不合法,则指令显示为红色,若指令合法就会显示为绿色
1
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
  1. oh-my-zsh 内置了 z 插件。z 是一个文件夹快捷跳转插件,对于曾经跳转过的目录,只需要输入最终目标文件夹名称,就可以快速跳转,避免再输入长串路径,提高切换文件夹的效率
  2. oh-my-zsh 内置了 extract 插件。extract 用于解压任何压缩文件,不必根据压缩文件的后缀名来记忆压缩软件。使用 x 命令即可解压文件
  3. oh-my-zsh 内置了 web-search 插件。web-search 可以在命令行中使用搜索引擎进行搜索。使用搜索引擎关键字+搜索内容 即可自动打开浏览器进行搜索
  4. 启用插件:修改~/.zshrc中的插件列表
1
plugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract web-search)

Tips:部分插件需要参考插件介绍进行安装

  1. 应用配置文件
1
source ~/.zshrc

配置root(可选)

当配置好登陆用户的 zsh 后,如果使用sudo su命令进入root用户的终端,会发现还是默认的bash。建议在root用户的终端下,也安装on my zsh,设置与普通用户不同的主题以便区分,插件可以使用一样的。 下面是一份root用户的~/.zshrc配置参考:

1
2
3
4
ZSH_THEME="ys"
plugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract web-search)
# 或
plugins=(git colored-man-pages colorize cp man command-not-found sudo suse ubuntu archlinux zsh-navigation-tools z extract history-substring-search python zsh-autosuggestions zsh-syntax-highlighting)

配置本地代理

~/.zshrc中添加:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 设置代理
proxy () {
  export https_proxy="http://192.168.1.1:7890"
  export http_proxy="http://192.168.1.1:7890"
  export all_proxy="socks5://192.168.1.1:7890"
}

# 取消代理
unproxy () {
  unset https_proxy
  unset http_proxy
  unset all_proxy
}

这里假设本地代理的端口是7890,使用clashAllow LAN

应用配置文件:

1
source ~/.zshrc

以后想在命令行使用代理时,只需要在终端中输入 proxy 命令,即可使用本地代理,使用结束后输入unproxy命令即可取消使用代理

卸载 Oh My Zsh

1
uninstall_oh_my_zsh

更新 Oh My Zsh

1
upgrade_oh_my_zsh

Fish

zsh 整体加载性能并不是很快,同时需要依靠oh-my-zsh的配置才能更优雅,而Fish

  • 开箱即用,内置自动提示、语法高亮、自动补全、搜索历史等功能,无需添加额外插件
  • 加载速度更高效
  • 可视化的 Web 配置功能
  • Oh-My-Fish可以进行更深入的配置
  • 可以使用人机界面数据完成制表页

Fish 全名friendly interactive shell,友好的交互式 Shell,对比 BashZ shell(zsh)Fish 更友好、交互性更强。

安装

  1. 参考官网步骤下载 Fish
1
2
3
4
5
6
# 添加 Fish Shell 的 PPA 源
sudo apt-add-repository ppa:fish-shell/release-3
# 更新软件包列表
sudo apt update
# 安装 Fish
sudo apt install fish
  1. 查看当前 shell
1
echo $SHELL
  1. 查看操作系统中已存在的 shell
1
cat /etc/shells
  1. 切换 shell 为 fish
1
chsh -s /usr/bin/fish
  1. 若希望root模式下也可以使用该 shell,则可以在该命令后面加上root关键字
1
chsh -s /usr/bin/fish root

功能

自动提示

  • Fish 会通过显示灰色提示,提醒最近浏览历史、可能希望浏览的内容。如果命令有误,则会将命令设置为红色提醒
  • 除了显示命令是否正确外,Fish 还可以显示所搜索的目录是否存在、拼写是否正确、括号是否匹配等
  • 若觉得 Fish 的色彩显示并不美观,还可以自行配置美化。在 Fish官网 有详细的教程

文件和命令高亮

  • Fish 会将文件设置为绿色,目录设置为蓝色(颜色设置也可以自行配置)
  • 除了高亮当前目录下的文件与目录,还可以将命令高亮显示。比如输入“sudo apt”命令就会将“apt”进行高亮显示

生成数据制表页

  • Fish 可以解析各种格式的工具手册页,假如不知道命令作用,可以通过输入“Tab”键获得提示

自动补全

  • 输入命令时,Fish 会自动显示上一次使用该命令历史记录(如果还希望查看之前的历史,还可以通过按"up”向上键查看)
  • 假如,并没有该命令历史记录,则会显示可能使用的命令
  • 使用Tab键进行补全,假如有多种结果,则会都列出来并显示给出理由。当然,除了补全命令外,还可以补全参数以及 Git 分支

视化 Web 配置页面

  • 这是 Fish 如此受欢迎的原因之一,可视化的操作为配置 Fish 提供很大的帮助
  • 在 Fish shell 下输入 fish_config命令即可进入可视化界面
  • 在可视化 Web 页面下,可以设置主题颜色(包括自定义)、提示符样式、函数、变量、查看历史命令、快捷键、设置缩写

配置与美化

Fish 的配置文件位于~/.config/fish/config.fish

参考

Built with Hugo
Theme Stack designed by Jimmy