2026 kpi,好好吃早饭
一,什么是zsh
首先感谢网友提供的思路,让我能了解如此强大的工具,并设置成功讲一个笑话。
官网
https://ohmyz.sh/?spm=5176.28103460.0.0.6bf27551FsKVOv#install
Zsh 是一个功能强大、高度可定制的 Unix shell,它兼容 Bash,但提供了更多现代化特性:
- 更智能的自动补全(支持 Git、Docker、kubectl 等)
简单说:Zsh = Bash + 超能力
二,安装
挂载本地镜像,可以离线安装,这里虚拟机我选择在线安装
sudo yum install zsh git wget -ychsh -s $(which zsh)sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
想退回正常bash
可以随时切换回 Bash:chsh -s /bin/bash
验证安装
➜ ~ zsh --versionzsh 5.0.2 (x86_64-redhat-linux-gnu)
三,例子
1、选择开启主题agnoster,Oh My Zsh 的主题配置在 ~/.zshrc 文件中,通过修改 ZSH_THEME 变量即可切换。
1. 使用内置主题 agnoster
➜ ~ vim ~/.zshrc#找到这一行ZSH_THEME="robbyrussell"#改为ZSH_THEME="agnoster"安装 Powerline 字体(解决乱码)# 克隆字体仓库git clone https://github.com/powerline/fonts.git --depth=1cd fonts./install.shcd ..rm -rf fonts#重新加载source ~/.zshrc
可以看到如下变化
2、配置完,先来试试讲一个笑话
准备函数
penguin() { echo -e "\033[36m" cat << 'EOF' .--. |o_o | |:_/ | // \ \ (| | )/'\_ _/`\\___)=(___/EOF echo -e "\033[0m" # 系统信息 echo "🐧 你好!当前系统: $(uname -s) $(uname -r)" echo "🕒 运行时间: $(uptime -p | sed 's/up //')" # 中文笑话数组(3个) jokes=( "程序员最讨厌康熙的哪个儿子?—— 胤禩(谐音:bug)" "为什么程序员总在万圣节扮鬼?—— 因为他们擅长‘debug’(捉鬼)" "两个程序员在餐厅吵架,为什么最后都沉默了?—— 因为遇到了‘死循环’" ) # 随机选择笑话(优先用shuf,兼容性方案) if command -v shuf &> /dev/null; then random_joke=$(shuf -n1 <<< "$(printf "%s\n" "${jokes[@]}")") else random_joke=${jokes[$RANDOM % ${#jokes[@]}]} fi # 显示笑话(中文黄色高亮) echo -e "\n🎯 今日技术梗:" echo -e "\033[33m$random_joke\033[0m"}
编辑~/.zshrc
vi ~/.zshrc在最后贴上penguin() 函数保存后,重新加载source ~/.zshrc# 每次打开新终端时讲一个笑话(谨慎使用)# echo 'penguin' >> ~/.zshrc测试如下,直接运行penguin
查到还可以直接用api和插件方式,这里我只列举,暂不尝试了
3. 获取笑话 API(免费公开接口)用 https://official-joke-api.appspot.com/random_joke 这个免费接口。4. 在 ~/.zshrc 中添加自定义函数tuxjoke() { # 获取随机笑话(setup + punchline) local joke_json joke_json=$(curl -s "https://official-joke-api.appspot.com/random_joke") if [[ $? -ne 0 || -z "$joke_json" ]]; then echo "🐧: 网络不好,我今天心情也不太好..." return 1 fi local setup=$(echo "$joke_json" | python3 -c "import sys, json; print(json.load(sys.stdin)['setup'])" 2>/dev/null) local punchline=$(echo "$joke_json" | python3 -c "import sys, json; print(json.load(sys.stdin)['punchline'])" 2>/dev/null) # 如果没有 python3,可用 jq(推荐安装) # setup=$(echo "$joke_json" | jq -r '.setup') # punchline=$(echo "$joke_json" | jq -r '.punchline') local full_joke="$setup\n$punchline" # 使用 cowsay + tux if command -v cowsay &>/dev/null && [[ -f ~/.local/share/cows/tux.cow ]]; then echo -e "$full_joke" | cowsay -f tux else # 备用:直接打印企鹅 + 笑话 cat << EOF _______ / \\ | O O | | ∆ | $setup | \\___/ | $punchline 😄 \\_______/EOF fi}
3、更好用的补全功能
1、systemctl 补全:服务名、单元类型# 输入 systemctl restart 后按 Tab,列出所有已安装的服务systemctl restart <TAB># 输入 systemctl enable --now 后按 Tab,补全服务名systemctl enable --now <TAB># 输入 systemctl status *.service 后按 Tab,补全 .service 单元systemctl status <TAB>.service2、ssh 补全:主机名(从 ~/.ssh/config 或 known_hosts)# 输入 ssh 后按 Tab,列出 ~/.ssh/config 中的 Host 条目ssh <TAB># 输入 ssh user@ 后按 Tab,补全已知主机名(从 known_hosts 解析)ssh user@<TAB>3、kill 补全:进程名/PID(通过 ps 解析)# 输入 kill -9 后按 Tab,列出所有进程名(按名称过滤)kill -9 <TAB># 输入 kill <PID> 后按 Tab,自动补全有效 PIDkill 123<TAB> # 如果 123 是无效 PID,不会补全
自定义补全示例
Zsh 会自动加载 fpath 中目录下的补全函数(文件名格式为 _命令名)。步骤 1:创建补全目录mkdir -p ~/.zsh/completions步骤 2:将补全函数保存为文件,将 _mycmd 函数保存到 ~/.zsh/completions/_mycmd(文件名必须以 _ 开头,后接命令名):cat << 'EOF' > ~/.zsh/completions/_mycmd#compdef mycmd_arguments \ '--verbose[Enable verbose output]' \ '--quiet[Suppress output]'EOF注意:文件第一行必须是 #compdef 命令名(这里是 mycmd),表示这是该命令的补全函数。步骤 3:将目录添加到 fpath 并重新加载在 ~/.zshrc 中添加:fpath=(~/.zsh/completions $fpath)autoload -Uz compinit && compinit然后重新加载配置:source ~/.zshrc
验证
⚡ root@localhost /opt mycmd -- #按tab键则弹出提示--quiet -- Suppress output--verbose -- Enable verbose output
四,补充
1、学习资源推荐
- 社区配置参考:awesome-zsh-plugins
2、用好zsh的历程
入门:安装 Oh My Zsh + powerlevel10k + 基础插件进阶:替换为 zinit/zimfw,启用懒加载,集成 fzf/zoxide高手:自定义 prompt 函数,编写插件,优化启动性能极客:用 Zsh 写工具脚本(如日志分析、自动化部署)
五,总结
好了,篇幅有限,今日算是抛砖引玉,浅浅入门分享一下,再次感谢网友提供的思路。
最后的最后(Last but not least),欢迎交流:
关注公众号留言,或者在下方直接留言: