• Ubuntu上无sudo权限,安装zsh、on-my-zsh及其插件


    一般linux自带的bash不是非常好用,大部分人会选择使用zsh,并利用一些开源zsh插件来使得自己的命令行更加便用 (e.g., 高亮、自动补全)。如果是自己用的本地机器,用户是root或者sudo,那么zsh的安装会非常便捷;反之,则会变得很困难,原因在于需要自己编译安装zsh,并手动配置环境变量,而且遇到环境依赖,也只能自己手动解决依赖。由于没有权限,也只能安装在自己的usr目录下。

    首先,感谢下面这些博客。这些博客各自都有一些问题,本篇博客主要基于这些博客进行总结改进:

    1. 安装ncurses-devel

    由于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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    因此需要提前安装和配置ncurses,首先编辑bashrc文件:

    vim ~/.bashrc
    
    • 1

    添加如下环境变量:

    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    添加之后记得刷新bash:

    source ~/.bashrc
    
    • 1

    之后下载安装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  # 安装
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. 安装zsh

    先进入自己的home/usr目录下,新建一个空目录:

    cd ~
    mkdir -p Applications/zsh-5.7.1 && cd Applications/zsh-5.7.1
    
    • 1
    • 2

    下载zsh,此处以5.7.1为例,也可以在这里找到其他版本的下载链接:

    wget -O zsh.tar.xz https://ftp.osuosl.org/pub/blfs/conglomeration/zsh/zsh-5.7.1.tar.xz
    
    • 1

    解压tar.xz包:

    xz -d zsh.tar.xz && tar -xvf zsh.tar
    
    • 1

    之后需要手动编译安装zsh:

    cd zsh-5.7.1
    # 生成Makefile
    ./configure --prefix=$HOME/Applications/zsh-5.7.1
    # 编译安装
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最后配置zsh的环境变量:

    vim ~/.bashrc
    # 添加以下内容
    export PATH=$HOME/Applications/zsh-5.7.1/bin:$PATH
    # 刷新bash
    source ~/.bashrc
    
    • 1
    • 2
    • 3
    • 4
    • 5

    至此,zsh成功安装完毕。但由于zsh是手动安装在自己的home目录下,所以没有根目录的文件修改权限,进而也没有办法使用chsh -s /bin/zsh将zsh设置为默认shell。

    因此,每次登录服务器之后,需要使用命令zshexec zsh手动切换bash为zsh。或者通过设置bash_profile,后面会讲

    如果出现zsh的手动配置选项,选2就行:
    在这里插入图片描述

    3. 安装oh-my-zsh

    按照官网的命令直接安装:

    # 使用以下两种方法之一安装
    # 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)"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果是在国内,则使用如下命令:

    git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh 
    # 注:
    # 1. 克隆后将templates目录下的zsh配置文件拷贝至~/.zshrc即可
    # 2. .oh-my-zsh一定要在$HOME下( ~ 下)
    
    • 1
    • 2
    • 3
    • 4

    4. 配置zsh插件

    oh-my-zsh最强大的功能,在于其各种各样的用户友好插件,可以极大帮助用户提高shell使用效率。这里推荐几个:

    4.1 last-working-dir & z & extract

    last-working-dirextractz都是zsh自带的插件。 last-working-dir能记录上一次退出terminal时的工作路径,下一次登录时,自动进入该路径。而z是模糊版的cd,能够把用户输入的目录,进行模糊匹配(扩展成完整路径),从而减少输入完整路径所消耗的时间。extract是通用易用的解压软件,可以用来代替繁琐的tar命令。

    vim ~/.zshrc
    
    • 1

    plugins属性中添加last-working-dirextractz:

    plugins=(
      last-working-dir
      z
      extract
     )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    生效

    source ~/.zshrc
    
    • 1

    4.2 zsh-syntax-highlighting

    第三方插件,提供非常漂亮的高亮效果。首先,下载插件:

    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
    
    • 1

    之后,将插件添加入plugins,让zsh随后能够自动加载:

    vim ~/.zshrc
    
    • 1
    # 在plugins中添加
    plugins=(
      zsh-syntax-highlighting
     )
    # 记得最后加一行激活zsh文件
    source $ZSH_CUSTOM/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    最后生效:

    source ~/.zshrc
    
    • 1

    注意,直接在命令行里plugins=(zsh-syntax-highlighting)的做法,在ubuntu上是不生效的。但在其他linux系统上是可行的。

    4.3 zsh-autosuggestions

    第三方插件,可以根据用户输入命令的历史,提供补全命令的建议,使用->方向键补全。

    和一样,也是先git clone

    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
    
    • 1

    之后加入到zshrcplugins里面去:

    vim ~/.zshrc
    
    • 1
    # 在plugins中添加
    plugins=(
      zsh-autosuggestions
     )
    # 记得最后加一行激活zsh文件
    source $ZSH_CUSTOM/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    最后生效:

    source ~/.zshrc
    
    • 1

    4.4 Thefuck

    没错,这个插件就叫fuck

    适用于bash和zsh,用于命令行纠错,当用户输入一条错误的命令之后,骂一句fuck,其就会给出一个修改建议。如下所示:
    在这里插入图片描述
    安装方法的话很简单,直接pip安装,记得修改zshrc:

    # 1.install
    pip install thefuck
    # 2.在~/.bashrc,~/.zshrc等中配置
    #编辑zshrc配置文件
    vim ~/.zshrc
    #在文件尾加入一行
    eval "$(thefuck --alias fuck)"
    #使生效
    source ~/.zshrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5. 设置zsh为默认shell

    实际上没有办法做到这点,每次登陆服务器都需要手动输入exec zsh来切换,但是可以让bash初始化的时候自动执行exec zsh,来实现所谓的默认shell。

    vim ~/.bash_profile
    
    # 添加如下,根据自己的zsh编译安装路径修改
    exec $HOME/Applications/zsh-5.7.1/bin/zsh -l
    
    • 1
    • 2
    • 3
    • 4

    之后可以重新打开一个terminal验证一下。

    6. 更换主题

    vim ~/.zshrc
    
    • 1

    笔者喜欢修改主题为agnoster,当然也可以选择其他主题,亦可以选择random(每次打开终端,选择随机一个主题,可以用来试用所有主题,挑选心仪的那个):

    ZSH_THEME="agnoster"
    
    • 1
     source ~/.zshrc
    
    • 1

    7. 总结

    可以使用自行编译安装的方法,安装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
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    推荐的主题为"agnoster";主机、用户名太长,还可以选择隐藏,建议服务器上隐藏用户名、显示主机名,本地显示用户名、隐藏主机名,详见博客无 root 或 sudo 权限安装 zsh


    可以直观比较一下bash和zsh (安装插件之后):

    • bash
      在这里插入图片描述
    • zsh
      在这里插入图片描述
  • 相关阅读:
    【TiDB】一些很有意思的sql调优案例分享
    iOS面试:4.多线程GCD
    抠图专题1:抠出白色陶瓷杯(每天一个PS小项目)
    物联网感知-光纤光栅传感器技术
    ffmpeg录制系统声音
    赛码系统——根据文件生成时间先后顺序对文件进行排序
    python np.dot()、np.multiply()、np.matmul()、@、*的用法与区别
    Unity3D PRO 3D游戏制作系列教程第四课:认识菜单二
    计算机毕设(附源码)JAVA-SSM楼盘销售管理系统
    我的创作纪念日—谈谈我的学习经历
  • 原文地址:https://blog.csdn.net/weixin_43301333/article/details/126801922