没有Root权限Oh My Zsh使用攻略

Bash Linux Mac Zsh SSH Shell Unix

有些Linux环境中我们没有管理员权限,但这并不能阻止Harttle使用Zsh。 为此我们需要本地安装Zsh,应用Oh My Zsh配置, 再设置启动Shell来使我们登录即进入Zsh

如果你还不知道什么是Zsh,请看下图:

zsh command line

安装和配置Shell的过程很可能会使你无法再次登录Shell, 请确保你有其他的方式访问该机器,这样发生状况时可以重置Shell配置。 比如:

  • 你有桌面系统!可以直接进入Gnome或者KDE。
  • 可用的scp,如果你与主机之间没有代理等中间人的话,scp应该是好使的。
  • Samba等文件服务。这使你可以在不登录的情况下进行配置。

安装Zsh

从源码安装Zsh:

# 下载
wget -O zsh.tar.gz https://sourceforge.net/projects/zsh/files/latest/download
# 解压
mkdir zsh && tar -xvzf.tar.gz -C zsh --strip-components 1
cd zsh
# 配置,比如将Zsh安装到~/usr下
./configure --prefix=$HOME/usr/
make
make install

安装成功后找到~/usr下的zsh可执行文件,运行一下看是否安装成功了:

~/usr/bin/zsh

如果你成功地进入了另一个Shell那么Zsh安装就大功告成了,按下Ctrl+D返回刚才的Bash。

安装Oh My Zsh

Oh My Zsh是一个社区驱动的(就像Arch一样!)Zsh配置框架,有很多漂亮的主题和插件可以选择。 今天大多小伙伴们安装Zsh的原因居然是这个配置框架! 使用Oh My Zsh提供的安装脚本即可安装(默认目录为~/.oh-my-zsh)。 如果你在此前尝试过安装Oh My Zsh,务必先删除之:rm -rf ~/.oh-my-zsh

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

如果上述命名发生错误,可以通过其他途径获得这个install.sh,然后无情地运行它。 比如wget时禁用SSL验证:

wget --no-check-certificate https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh
bash install.sh

无论你是怎样得到并运行install.sh的,只要得到下列结果就表明安装成功:

         __                                     __
  ____  / /_     ____ ___  __  __   ____  _____/ /_
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
                        /____/                       ....is now installed!

登录 Shell

登录Shell是指一个Unix用户在登录系统时为该用户启动的默认Shell, 包括通过X11登录,通过TTY登录,以及通过SSH登录等。 在多数Linux发行版以及MacOS中为/usr/bin/bash。 既然说道这里Harttle就简单列一下登录Shell相关的配置文件以帮助理解:

  • /etc/passwd(644):所有用户的用户名、用户组、$HOME、登录Shell等信息
  • /etc/shadow(400):所有用户的用户密码的Salt和Hash
  • /etc/shells(644):登录Shell列表,chsh -s <shell-name>只能选自该列表

注意install.sh会使用chsh更该你的登录Shell,

chsh -s $(grep /zsh$ /etc/shells | tail -1)

注意这行代码的危险:它将会更改你的登录Shell为/etc/shells中的zsh。 而不是你在本地安装的那个Zsh。版本的区别足以让你的zsh完全不可用。

因为我们没有Root权限,因此无法将本地安装的Zsh添加到/etc/shells。 因此也就不能通过chsh切换到我们本地的Zsh。 所以我们仍然使用Bash作为登录Shell,而在~/.bashrc中运行我们的Zsh。 在该配置文件尾加入:

exec $HOME/usr/bin/zsh

不要使用source $HOME/usr/bin/zsh. $HOME/usr/bin/zsh,这些命令会创建子进程。 而exec会用新的命令替换当前进程的上下文,因而保持了PID不变。

更新PATH

将Zsh加到PATH中来方便今后对zsh的调用,这个步骤是可选的。

~/.bashrc中更新PATH即可:

export PATH="$HOME/usr/bin/zsh"

注意PATH两边不能有空格,且必须使用双引号来让Bash解析$HOME的值。

Harttle

致力于简单的、一致的、高效的前端开发

看看这个?