linux shell——zsh的安装与使用

Shell是在程序员与服务器间建立一个桥梁,它对外提供一系列命令,让我们得以控制服务器。常用的Bash就是Shell的一种,也是Linux下默认Shell程序。这里介绍一种更强大的、更人性化的Shell——oh-my-zsh。

Zsh是什么

Zsh属于Shell中的一种,但比Bash好用,而且完全兼容Bash,拥有及其丰富的插件、强大的自动补全能力、以及自定义功能,可以大大提供我们使用Linux的效率.

安装oh-my-zsh

Zsh虽然好用,但直接用起来比较麻烦,但是已经有大神配置好的框架:oh-my-zsh,专门为Zsh打造的。

sudo apt install git
sudo apt install zsh
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
chsh -s /usr/bin/zsh

linux在安装过程中会叫你输密码然后自动换shell

注意几点:

1. github可能非常慢,不管是脚本还是脚本内都可以将 github.com 改成 hub.fatsgit.org

2. conda activate可能会出错,参考https://blog.csdn.net/weixin_42652125/article/details/87697902

3. conda 出错,提示你执行 conda init zsh

4. 新终端zsh没有默认启用,需要重启,这对服务器有点麻烦,可手动执行zsh进入

换回去

先查看有哪些shell

cat   /etc/shells

例如,换回Bash

chsh  -s  /bin/bash 

主题

oh-my-zsh自带100多个主题,主题的配置文件在 ~/.zshrc文件中,找到这一行:

ZSH_THEME="robbyrussell"

你可以将值改成任意主题,oh-my-zsh的主题可以在这里找到。保存好文件后,执行  source ~/.zshrc 使配置生效。如果你将值设为空,表示不使用任何主题;你也可以设置为"random",你每次打开都会随机选择一个主题。

推荐主题: agnoster

由于这个主题使用了一些特殊字符,需要安装字体:

sudo apt-get install fonts-powerline

命令补全

虽然Bash可以使用tab自动补全命令,但oh-my-zsh的补全功能更强。比如你想进入Nginx所在目录 /usr/local/nginx,输入 cd/u/l/n 按下tab系统就能自动将其补全为 cd /usr/local/nginx;比如,输入 git,按下tab,就给你返回关于git的命令;再比如,你要进入一个名字很长的文件夹,你只要输入前几个字符,再按tab就能补全。

你也可以使用 alias 命令查看,会发现oh-my-zsh默认已经把很多命令组合并取了别名。

在目录中穿越 

我们通常会遇到这种情况:先进入一个很深的目录,又要换到另一个目录。通常我们会使用 cd - 回到最近的一次目录,或者使用 history 查看之前所有的目录。但是oh-my-zsh提供了更强大的 d 命令。

d 命令会列出最近进入的目录历史,并且会给这些目录加上序号,只要输入对应目录的序号,就能进入该目录。

使用前面提到的 alias 命令可以查看其它一些目录跳转的快捷方式:

 rogn@ubuntu  ~  alias
-='cd -'
...=../..
....=../../..
.....=../../../..
......=../../../../..

Git友好

使用Git做版本控制时,经常需要对仓库的代码进行 status、add、commit等操作,以及审视Git仓库的提交状态,oh-my-zsh对Git有很友好的支持。

如下图,我们 cd 到一个目录,发现命令行前多了一对括号,括号中的 master 表示当前目录是一个Git仓库,且在master分支下。如果当前分支有文件改动,master后面会增加一个*号,表示工作区有文件改动但没有执行 add。执行 git add后,*变成了 +,表示添加到了站暂存区。再执行git commit,master后面的符号消失,工作区又干净了。切换分支,括号里变成了dev,表示当前已经是dev分支。

显示完整的相对路径

打开 `~/.oh-my-zsh/themes/robbyrussell.zsh-theme` 

那个%{$fg[cyan]%}%c%{$reset_color%}中的%c就是罪魁祸首,是当前文件夹名的意思,我们把它修改为%~,整个也就变成了%{$fg[cyan]%}%~%{$reset_color%} 

再执行 zsh 生效

%%  一个'%'
#%) 一个')'
%y  当前的tty名
%l  当前的tty名,如 pts/1
%M  完整主机名
%m  主机名(在第一个句号之前截断)
%n  当前用户名
%. %c %C 前两个显示相对路径的当前文件夹名,最后一个是绝对路径(也就是说,前两个在家目录下显示'~',最后那个显示你的用户名),'%'后的数字表示显示几层路径
%N  zsh 正在执行的脚本/函数名。如果'%'后跟了数字,似乎还有其他作用
%L  当前shell的层数
%j  当前正在进行的工作数量
%i  与%!类似:The line number currently being executed in the script, sourced file,<br>         or shell function given by %N. This is most useful for debugging as part of $PS4.
%!  显示当前历史事件号码(也就是打开shell后第几条命令)
%/ %d   显示当前工作路径($pwd)。如果''后面是一个整数,它指定显示路径的元件的数量;没有数字就显示整个路径。一个负整数就是指定主目录,即%-1d代表第一部分
%~  目前的工作目录相对于~的相对路径
%?  返回最后命令的执行结果的代码
%#  用户组,#(普通用户)/%(超级用户)

 kubectl 自动补全

source <(kubectl completion zsh)  # setup autocomplete in zsh into the current shell
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # add autocomplete permanently to your zsh shell

 

 

参考链接:https://zhuanlan.zhihu.com/p/63585679 

posted @ 2019-04-30 21:11  Rogn  阅读(14450)  评论(0编辑  收藏  举报