Linux 中使用 oh-my-zsh 配置 zsh 默认仅对当前用户有效,新建或者切换用户后,仍然恢复到了默认的 bash,非常不方便。本文描述全局配置的方法,新用户将默认使用 zsh 并加载统一的配置文件。
本文写作环境基于:Ubuntu 20.04 和 CentOS 8,其他版本类似,可以参照。
准备 zsh
-
查看当前 shell
1
echo $SHELL
返回结果:
1
/bin/bash
-
安装 zsh
CentOS:
1
2
3
4yum -y install zsh
or
dnf -y install zsh
yum -y install util-linux-userUbuntu:
1
sudo apt install zsh
-
为 root 设置默认 shell
1
sudo chsh -s /bin/zsh
-
为特定用户设置默认 shell
1
2sudo chsh -s /bin/zsh
替换为实际用户名 返回结果如下,表示切换完成(下载安装 oh-my-zsh 成功后也会提示切换)
1
2
3sudo chsh -s /bin/zsh
Changing shell for root.
Shell changed.在 CentOS 8 中可能报错 Command not found,执行
sudo dnf install util-linux-user
-
安装 git
执行:
1
2
3
4CentOS
yum -y install git
Ubuntu
sudo apt install git
全局配置 zsh
注意:以下全局配置相关命令需要 root 权限,请切换到 root 账号,或者使用 sudo。
-
切换成 root
1
2
3su #切换到 root 账号,pwd 不变
su - #切换到 root 账号,pwd 同时变为 root 主目录
sudo -i #同上 -
全局安装 zsh 到 /etc 目录
1
git clone --depth=1 https://github.com/ohmyzsh/ohmyzsh.git /etc/oh-my-zsh
-
从模板文件复制 .zshrc 创建默认配置文件(新用户将使用该配置文件)
1
cp /etc/oh-my-zsh/templates/zshrc.zsh-template /etc/skel/.zshrc
-
修改 on-my-zsh 的安装目录
export ZSH=$HOME/.oh-my-zsh
为export ZSH=/etc/oh-my-zsh
1
sed -i 's|$HOME/.oh-my-zsh|/etc/oh-my-zsh|g' /etc/skel/.zshrc
-
为每个用户配置独立的 cache 目录
编辑
/etc/skel/.zshrc
在export ZSH=/etc/oh-my-zsh
下添加一句:1
export ZSH_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/oh-my-zsh"
注意:必须在
export ZSH=/etc/oh-my-zsh
之后source $ZSH/oh-my-zsh.sh
之前添加,否则会混乱。在 oh-my-zsh.sh 中定义了 ZSH_CACHE_DIR 路径:
1
2
3
4
5
6
7
8
9
10Set ZSH_CACHE_DIR to the path where cache files should be created
or else we will use the default cache/
if [[ -z "$ZSH_CACHE_DIR" ]]; then
ZSH_CACHE_DIR="$ZSH/cache"
fi
Make sure $ZSH_CACHE_DIR is writable, otherwise use a directory in $HOME
if [[ ! -w "$ZSH_CACHE_DIR" ]]; then
ZSH_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/oh-my-zsh"
fi初始安装 “$ZSH/cache” 存在为空目录。
如果不添加上述语句,默认 root 用户对 “$ZSH/cache” 有写权限,会直接将 “$ZSH/cache” 作为 cache 目录。
如果在source $ZSH/oh-my-zsh.sh
之后添加,root 在登录后先将 “$ZSH/cache” 作为 cache 目录,然后再更改为自定义路径。
对于普通用户,默认将使用 “${XDG_CACHE_HOME:-$HOME/.cache}/oh-my-zsh” 作为 cache 目录,经测试自定义其他路径无效。 -
更改默认主题(推荐 ys)
编辑 /etc/skel/.zshrc 文件修改:
1
sed -i '/^ZSH_THEME=.*/c ZSH_THEME="ys"' /etc/skel/.zshrc
-
取消每周自动检查更新
取消注释 /etc/skel/.zshrc 中的 “# DISABLE_AUTO_UPDATE=“true””
1
2
3
4
5
6sed -i 's/^#[]\(DISABLE_AUTO_UPDATE="true"\)/\1/' /etc/skel/.zshrc
-i 写入文件
s 替换指定字符
^ 匹配行开始
[ ] 中括号中间有空格表示要替换的内容是一个空格,注意被替换的内容是空格用 " "(双引号中间有空格)表示。
\1 的意思就类似于前面的 (DISABLE_AUTO_UPDATE="true"\),\1 就是复制这个位置的内容,手动更新:
omz update
(旧版命令:upgrade_oh_my_zsh) -
配置 ll 别名(可选)
1
echo 'alias ll="ls -lahF --color --time-style=long-iso"' >> /etc/skel/.zshrc
全局配置插件
全局安装插件(安装到 /etc/oh-my-zsh/custom/plugins/)
zsh-syntax-highlighting:语法高亮插件
作用:命令错误会显示红色,直到你输入正确才会变绿色,另外路径正确会显示下划线。
安装:
1 | git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting.git /etc/oh-my-zsh/custom/plugins/zsh-syntax-highlighting |
配置启用插件:
编辑 /etc/skel/.zshrc
,以下部分添加插件的名字
1 | plugins=([plugins...] zsh-syntax-highlighting) |
快速修改:
1 | sed -i '/^plugins=.*/c plugins=(git zsh-syntax-highlighting)' /etc/skel/.zshrc |
zsh-completions
额外的自动补全功能,用于补充 zsh 中尚不支持的命令补全,该项目将在完善时合并到 zsh。
-
Clone the repository inside your oh-my-zsh repo:
1
2
3git clone --depth=1 https://github.com/zsh-users/zsh-completions /etc/oh-my-zsh/custom/plugins/zsh-completions
注意:以下命令包含变量需要当前用户 .zshrc 配置后才有效
git clone --depth=1 https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions -
Add it to
FPATH
in your.zshrc
by adding the following line beforesource "$ZSH/oh-my-zsh.sh"
:1
fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src
Note: adding it as a regular Oh My ZSH! plugin will not work properly (see #603).
zsh-autosuggestions
作用是根据历史输入命令的记录即时的提示(建议补全),然后按 → 键即可补全。*
1 | git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions.git /etc/oh-my-zsh/custom/plugins/zsh-autosuggestions |
编辑 /etc/skel/.zshrc
,找到 plugins=(git) 这一行,修改为:
1 | plugins=( |
Incremental completion on zsh
增强的实时自动命令补全插件:Incremental completion on zsh
该插件对性能似乎有一点点影响,请根据需要启用。
作用如图:
1 | mkdir /etc/oh-my-zsh/custom/plugins/incr |
使用用户配置文件
-
改变新用户的默认 shell
vi /etc/default/useradd
将 SHELL= * (比如 SHELL=/bin/sh) 改成 SHELL=/bin/zsh
1
sed -i '/^SHELL=.*/c SHELL=/bin/zsh' /etc/default/useradd
修改后,使用
useradd
命令无需-s /bin/zsh
,用户默认使用 zsh,当然也可以不修改此项,useradd
命令继续追加-s /bin/zsh
参数。新用户登录后,将自动复制 .zshrc 和上述 cache 目录到用户主目录下,并自动加载 zsh 配置。
-
针对现有用户
直接复制
/etc/skel/.zshrc
到~/
1
2cp /etc/skel/.zshrc ~/.zshrc
source ~/.zshrc
参考:创建管理员账号的正确姿势(默认配置)。
在 visudo (/etc/sudoers)默认配置下,创建管理员账号的命令如下:
CentOS:
1 | useradd -m -s /bin/zsh -G wheel sysin #sysin 为用户名 |
Ubuntu:
1 | useradd -m -s /bin/zsh -G sudo sysin #sysin 为用户名 |
备注:
-m 创建同名 home 目录
-s 指定 shell
-G 修改附加属组
下载仅供下载体验和测试学习,不得商用和正当使用。
下载体验