第一篇把安全基础搭好了,现在来装开发工具和终端环境。安装各种东西之前,有一件事得先处理:这台机器在国内,很多工具链(GitHub、raw.githubusercontent.com 等)的域名要么解析慢、要么直接超时。所以第一步不是装软件,而是让 DNS 先通。
DNS 前置配置:让 GitHub 可访问
后续要装的 Oh My Zsh、Homebrew 全都依赖 GitHub 和其 CDN。如果 curl 连接 raw.githubusercontent.com 直接报 Connection timed out,后面的步骤全白搭。
解决思路:手动查询这些域名对应的可用 IP,写入 /etc/hosts 跳过 DNS 污染。
查询可用 IP
去 ipaddress.com 逐个查询以下域名,记下测出的 IP 地址(选延迟最低的那个):
github.comraw.githubusercontent.comgithub.githubassets.com
网站返回的 IP 示例(这些值会变,以你查询时的结果为准):
| 域名 | 解析到的 IP(示例) |
|---|---|
github.com | 140.82.113.4 |
raw.githubusercontent.com | 185.199.108.133 |
github.githubassets.com | 185.199.110.154 |
除了 ipaddress.com,也可以试试 itdog.cn 做 ping 测试,选一个对你服务器延迟最低的 IP。
写入 hosts
编辑 /etc/hosts,把你查到的 IP 追加上去:
sudo vim /etc/hosts
# GitHub 及相关 CDN(手动解析,绕过 DNS 污染)
140.82.113.4 github.com
185.199.108.133 raw.githubusercontent.com
185.199.110.154 github.githubassets.com
保存后验证一下:
ping -c 2 github.com # 能通说明 hosts 生效
curl -sI https://raw.githubusercontent.com | head -1 # 应返回 200 或 301
现在 GitHub 资源可以正常访问了,后面安装 Oh My Zsh、Homebrew 都不会因为 DNS 问题卡住。
Homebrew:用户态的包管理
以前我在服务器上零散地混用 apt 和 curl | bash 来装各种 CLI 工具,时间长了根本记不清谁是谁装的、版本怎么更新。现在统一用 Homebrew——在 macOS 上它就是主力包管理器,在 Linux 上以 Linuxbrew 身份运行,所有工具装在一处、一条命令升级全部。
安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
装完后脚本会提示添加环境变量,按提示执行:
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.zshrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
brew --version # 验证
注意:上面这行写到
~/.zshrc,等会儿我们才会把默认 shell 切成 zsh。如果当前还是 bash,这里先用~/.bashrc,切 zsh 后再补写到~/.zshrc。对应的,文章后续的source操作你根据当前实际 shell 调整。
用在哪
有了 brew 之后,后面的 CLI 工具原则上能用 brew 装的都用 brew。系统级服务走 apt,shell 本身也走 apt:
- CLI 开发工具 →
brew install(本文的 zoxide、eza、fzf、fd、ripgrep,以及后续的 fnm) - 系统服务 →
apt install(Nginx 等需要 systemd 管理的) - zsh 本体 →
apt(shell 本身应该走系统包管理,brew 的 zsh 路径在/home/linuxbrew下面,chsh不太好处理)
Shell 环境:zsh + Oh My Zsh
包管理器就位,DNS 也通了,现在把终端环境升级一下。Ubuntu 24.04 默认的 Bash 够用,但 zsh 的自动补全、命令纠错和历史搜索用起来顺畅得多,再搭配 Oh My Zsh 管理插件和主题,日常 SSH 进去操作体验提升明显。并且和我本地相似,让我无缝切换工作场景。
安装与切换
# zsh 本身走系统包管理
sudo apt install -y zsh
# Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Oh My Zsh 安装脚本会询问是否将默认 shell 切换为 zsh,选 yes 即可。如果没有自动切换,手动执行:
chsh -s $(which zsh)
重新登录后 echo $SHELL 应该输出 /usr/bin/zsh,确认切换成功。
切成 zsh 后,检查
~/.zshrc里有没有前面 Homebrew 那一步的环境变量(brew shellenv),没有的话补上,不然 brew 命令会找不到。
主题与插件
Oh My Zsh 配置文件在 ~/.zshrc,在这里选主题和开插件:
vim ~/.zshrc
主题:我选择的是 spaceship 这款主题。还可以去 zsh 的 主题列表 里选择其他主题。
插件:推荐至少开这几个:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
git:Oh My Zsh 内置,显示分支名和仓库状态zsh-autosuggestions:根据历史记录灰字提示补全,按→接受,非常省键盘zsh-syntax-highlighting:命令输入时实时检查语法,正确绿色、错误红色
后两个是第三方插件,克隆到 Oh My Zsh 的插件目录即可:
git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
改完 ~/.zshrc 后 source ~/.zshrc 让配置生效。
常用 CLI 工具
有了 Homebrew 和 zsh 环境,接下来装几个能大幅提升日常操作效率的命令行工具。它们都可以通过 brew install 一键安装。
zoxide:更智能的 cd
zoxide 会记录你访问过的目录,之后只需输入目录名的一部分就能跳转过去,不用再打完整路径。
brew install zoxide
在 ~/.zshrc 中添加初始化代码:
eval "$(zoxide init zsh)"
source ~/.zshrc 后即可使用。比如你经常去 /var/www/blog,之后只要 z blog 就到了,z - 回到上一个目录。
eza:现代化的 ls
eza 是 ls 的现代替代品,支持彩色输出、图标、树形视图、git 状态等。
brew install eza
建议在 ~/.zshrc 中设置别名:
alias ls='eza'
alias ll='eza -l'
alias la='eza -la'
alias tree='eza --tree'
配置后 ll 就能看到带权限、大小、日期的彩色列表,tree 直接显示目录树。
fzf:模糊搜索神器
fzf 是一个通用的模糊搜索工具,可以搜索文件、命令历史、进程等等,配合 zsh 使用效果极佳。
brew install fzf
# 安装 fzf 的 shell 集成(自动补全、历史搜索绑定)
$(brew --prefix)/opt/fzf/install
安装脚本会问是否启用 key bindings 和 auto-completion,都选 yes。装完后:
Ctrl+R在终端中模糊搜索命令历史Ctrl+T模糊搜索当前目录下的文件名**<TAB>在命令中触发模糊补全
fd:更快的 find
fd 是 find 的现代替代品,用法更直观、速度更快、输出带颜色。
brew install fd
常用示例:
fd nginx # 递归查找包含 "nginx" 的文件名
fd -e md # 查找所有 .md 文件
fd -x vim {} # 找到后用 vim 打开(xargs 的替代)
对比 find . -name "*.md",fd -e md 少敲一多半键盘。
ripgrep (rg):更快的 grep
ripgrep 是 grep 的现代替代品,递归搜索时自动忽略 .gitignore 中的文件,速度极快。
brew install ripgrep
常用示例:
rg "pattern" # 递归搜索当前目录
rg "import" src/ # 限定目录
rg -i "error" # 忽略大小写
rg -l "TODO" # 只列出包含匹配的文件名
rg 默认忽略隐藏文件和 .gitignore 中的内容,搜索结果干净很多。
收尾
现在终端环境已经好用了不少:
- DNS Hosts 就绪,GitHub 相关域名可正常访问
- Homebrew 就绪,开发工具集中管理
- zsh + Oh My Zsh 就绪,终端体验提升
- zoxide、eza、fzf、fd、ripgrep 就绪,日常操作效率提升
下一篇装运行环境——Node.js、pnpm 和 Nginx。