zsh原称为Z Shell。也是一种shell,兼容最常用的bash这种shell的命令和操作,并且有很多增强,超强的订制性。

安装zsh

Linux提供了很多种 Shell,我么可以使用以下命令来查看当前命令所支持的 Shell:

cat /etc/shells

在一台新装系统的云服务器中(Ubuntu 18.04.3 LTS),可以看到 Linux 的发行版其实内置了很多的 Shell:

图片[1]-zsh终端美化Linux终端-昕某人の博客

如果你也和上图一样,系统没有默认安装zsh的话,可以使用以下的命令来安装:

如果你用 Redhat Linux,执行:

sudo yum install zsh

如果你用 Ubuntu Linux,执行:

sudo apt-get install zsh

使用方法很简单,直接在命令行里输入 zsh 就开始使用了。不过要变成每次打开终端默认使用 zsh,则需要改配置,后面我们会说到如何让默认的终端改为 zsh。

安装完成之后,我们再次查看所支持的 Shell,就可以看到 zsh 已经安装成功了:

图片[2]-zsh终端美化Linux终端-昕某人の博客

安装 Oh My Zsh

原本 zsh 就是很强大,但是配置超难,直到 Oh my zsh的出现。所以这是用 zsh 的必备工具,安装只需一句话:

sudo  curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh

安装完成的效果如下:

图片[3]-zsh终端美化Linux终端-昕某人の博客

此时我们输入 zsh,就可以看到 zsh 的模样了:

图片[4]-zsh终端美化Linux终端-昕某人の博客

但是,此时如果我们关闭当前的会话,重新发起一个会话,就会发现终端又变成了默认的 Shell,接下来我们需要将 zsh 配置成我们的默认终端。

配置默认终端

  • 在以 root 用户为前提下,oh-my-zsh 的安装目录:/root/.oh-my-zsh
  • 在以 root 用户为前提下,zsh 的配置文件位置:/root/.zshrc
  • 为 root 用户设置 zsh 为系统默认 shell:chsh -s /bin/zsh root
  • 如果要重新恢复到 bash:chsh -s /bin/bash root

配置完成后,再次打开一个新的终端,就可以看到默认终端已经被替换了:

图片[5]-zsh终端美化Linux终端-昕某人の博客

zsh 配置主题

oh-my-zsh 支持很多的主题,默认的主题文件在 . oh-my-zsh/themes目录下,通过 ls命令可以看到主题目录下的所有文件:

图片[6]-zsh终端美化Linux终端-昕某人の博客

接着打开用户目录下的 .zshrc,并配置主题,默认主题被设置为 robbyrussell

图片[7]-zsh终端美化Linux终端-昕某人の博客

更多的主题可以在Themes · ohmyzsh/ohmyzsh Wiki (github.com)看到。大家可以挑选一个自己喜欢的主题。

环境变量失效

有些时候我们配置完成之后,会发现我们环境变量失效了,但是当我们执行了 source /etc/profile 之后,环境变量又生效了,然后重新启动终端的时候发现又失效了。

问题

每次新建一个终端的时候,执行go命令,就会提示找不到此命令。

[root@VM-8-12-centos RemoteWorking]# go
bash: go: command not found

但是我们的环境变量里边已经添加了:

export GOROOT=/usr/local/go
export GOPATH=/home/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export PATH=$PATH:/usr/local/git/bin
export PATH=$PATH:/usr/local/node/bin
export PATH=$PATH:/usr/local/node/node_global/bin

当执行source /etc/profile就可以正常使用。

解决方案

在 ~/.bashrc 中加入一条命令 source /etc/profile,就可以了.

图片[8]-zsh终端美化Linux终端-昕某人の博客

  • etc/profile此文件为系统的每个用户设置环境信息,当第一个用户登录时,该文件被执行。并从 /etc/profile.d 这一配置文件中搜集shell的设置。
  • ~/.bashrc:该文件包含专用于某个用户的bash shell的bash信息,当该用户登录时以及每次打开新的shell时,该文件被读取。

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而 ~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是”父子”关系。