一般linux自带的bash不是非常好用,大部分人会选择使用zsh,并利用一些开源zsh插件来使得自己的命令行更加便用 (e.g., 高亮、自动补全)。如果是自己用的本地机器,用户是root或者sudo,那么zsh的安装会非常便捷;反之,则会变得很困难,原因在于需要自己编译安装zsh,并手动配置环境变量,而且遇到环境依赖,也只能自己手动解决依赖。由于没有权限,也只能安装在自己的usr目录下。
首先,感谢下面这些博客。这些博客各自都有一些问题,本篇博客主要基于这些博客进行总结改进:
由于configure需要ncurses
的依赖,直接安装zsh的话会遇到如下报错:
configure: error: "No terminal handling library was found on your system.
This is probably a library called 'curses' or 'ncurses'. You may
need to install a package called 'curses-devel' or 'ncurses-devel' on your
system."
See `config.log' for more details
因此需要提前安装和配置ncurses
,首先编辑bashrc文件:
vim ~/.bashrc
添加如下环境变量:
export CXXFLAGS="-fPIC"
export CFLAGS="-fPIC"
export NCURSES_HOME=$HOME/ncurses # 你自己的 ncurses 目录
export PATH=$NCURSES_HOME/bin:$PATH
export LD_LIBRARY_PATH=$NCURSES_HOME/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I$NCURSES_HOME/include" LDFLAGS="-L$NCURSES_HOME/lib"
添加之后记得刷新bash:
source ~/.bashrc
之后下载安装ncurses
:
cd ~ && mkdir ncurses && cd ncurses # 新建一个ncurses的安装目录,记得路径和环境变量对应
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.1.tar.gz # 下载ncurses-6.1
tar -xzvf ncurses-6.1.tar.gz # 解压
cd ncurses-6.1
./configure --prefix="$HOME/ncurses" --with-shared --without-debug --enable-widec # 指定路径configure
make && make install # 安装
先进入自己的home/usr
目录下,新建一个空目录:
cd ~
mkdir -p Applications/zsh-5.7.1 && cd Applications/zsh-5.7.1
下载zsh,此处以5.7.1为例,也可以在这里找到其他版本的下载链接:
wget -O zsh.tar.xz https://ftp.osuosl.org/pub/blfs/conglomeration/zsh/zsh-5.7.1.tar.xz
解压tar.xz包:
xz -d zsh.tar.xz && tar -xvf zsh.tar
之后需要手动编译安装zsh:
cd zsh-5.7.1
# 生成Makefile
./configure --prefix=$HOME/Applications/zsh-5.7.1
# 编译安装
make && make install
最后配置zsh的环境变量:
vim ~/.bashrc
# 添加以下内容
export PATH=$HOME/Applications/zsh-5.7.1/bin:$PATH
# 刷新bash
source ~/.bashrc
至此,zsh成功安装完毕。但由于zsh是手动安装在自己的home目录下,所以没有根目录的文件修改权限,进而也没有办法使用chsh -s /bin/zsh
将zsh设置为默认shell。
因此,每次登录服务器之后,需要使用命令zsh
或exec zsh
手动切换bash为zsh。或者通过设置bash_profile
,后面会讲。
如果出现zsh的手动配置选项,选2
就行:
按照官网的命令直接安装:
# 使用以下两种方法之一安装
# 1. wget
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 2. curl
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
如果是在国内,则使用如下命令:
git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh
# 注:
# 1. 克隆后将templates目录下的zsh配置文件拷贝至~/.zshrc即可
# 2. .oh-my-zsh一定要在$HOME下( ~ 下)
oh-my-zsh最强大的功能,在于其各种各样的用户友好插件,可以极大帮助用户提高shell使用效率。这里推荐几个:
last-working-dir
、extract
和z
都是zsh自带的插件。 last-working-dir
能记录上一次退出terminal时的工作路径,下一次登录时,自动进入该路径。而z
是模糊版的cd
,能够把用户输入的目录,进行模糊匹配(扩展成完整路径),从而减少输入完整路径所消耗的时间。extract
是通用易用的解压软件,可以用来代替繁琐的tar
命令。
vim ~/.zshrc
在plugins
属性中添加last-working-dir
、extract
和z
:
plugins=(
last-working-dir
z
extract
)
生效
source ~/.zshrc
第三方插件,提供非常漂亮的高亮效果。首先,下载插件:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
之后,将插件添加入plugins
,让zsh随后能够自动加载:
vim ~/.zshrc
# 在plugins中添加
plugins=(
zsh-syntax-highlighting
)
# 记得最后加一行激活zsh文件
source $ZSH_CUSTOM/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
最后生效:
source ~/.zshrc
注意,直接在命令行里
plugins=(zsh-syntax-highlighting)
的做法,在ubuntu上是不生效的。但在其他linux系统上是可行的。
第三方插件,可以根据用户输入命令的历史,提供补全命令的建议,使用->
方向键补全。
和一样,也是先git clone
:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
之后加入到zshrc
的plugins
里面去:
vim ~/.zshrc
# 在plugins中添加
plugins=(
zsh-autosuggestions
)
# 记得最后加一行激活zsh文件
source $ZSH_CUSTOM/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
最后生效:
source ~/.zshrc
没错,这个插件就叫fuck
…
适用于bash和zsh,用于命令行纠错,当用户输入一条错误的命令之后,骂一句fuck
,其就会给出一个修改建议。如下所示:
安装方法的话很简单,直接pip安装,记得修改zshrc:
# 1.install
pip install thefuck
# 2.在~/.bashrc,~/.zshrc等中配置
#编辑zshrc配置文件
vim ~/.zshrc
#在文件尾加入一行
eval "$(thefuck --alias fuck)"
#使生效
source ~/.zshrc
实际上没有办法做到这点,每次登陆服务器都需要手动输入exec zsh
来切换,但是可以让bash初始化的时候自动执行exec zsh
,来实现所谓的默认shell。
vim ~/.bash_profile
# 添加如下,根据自己的zsh编译安装路径修改
exec $HOME/Applications/zsh-5.7.1/bin/zsh -l
之后可以重新打开一个terminal验证一下。
vim ~/.zshrc
笔者喜欢修改主题为agnoster
,当然也可以选择其他主题,亦可以选择random
(每次打开终端,选择随机一个主题,可以用来试用所有主题,挑选心仪的那个):
ZSH_THEME="agnoster"
source ~/.zshrc
可以使用自行编译安装的方法,安装zsh,oh-my-zsh,并通过更改bash-profile
将zsh设置为默认启动的shell。oh-my-zsh还支持各种友好的插件,常用插件如下(另外,还有thefuck
):
plugins=(git
zsh-autosuggestions
zsh-syntax-highlighting
autojump ## 如果没sudo权限,装起来也很麻烦,好消息是可以用z替代
z
extract
last-working-dir
)
推荐的主题为"agnoster"
;主机、用户名太长,还可以选择隐藏,建议服务器上隐藏用户名、显示主机名,本地显示用户名、隐藏主机名,详见博客无 root 或 sudo 权限安装 zsh。
可以直观比较一下bash和zsh (安装插件之后):