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%}
完整版:
PROMPT="%(?:%{$fg_bold[green]%}%1{%}:%{$fg_bold[red]%}%1{%})%{$fg[cyan]%}%~%{$reset_color%}" PROMPT+=' $(git_prompt_info)'
再执行 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
关闭自动更新
在.zshrc配置文件中,
DISABLE_AUTO_UPDATE="true"