Shell 与终端
zsh 和 bash 的通用用法。命令行里的光标移动、删除等键位见 Emacs 键位。
基础条目参考:Bash 官方手册。
重定向与管道
>、>>、2>&1、|,把输出写进文件或交给下一条命令。
把标准输出和错误保存到日志
python train.py > train.log 2>&1
- 助记:
>把标准输出写文件;2是标准错误,&1指标准输出的位置,所以2>&1合并两路输出。 - 作用:> 覆盖文件,>> 追加;2>&1 必须放在输出重定向之后。脚本名按实际替换。
筛选命令输出
ps aux | grep '[p]ython'
- 助记:
|是 pipe(管道);grep可记成搜索匹配行,名称源于编辑器命令g/re/p(全局/正则/打印)。 - 作用:管道把左侧输出交给右侧;[p]ython 避免匹配 grep 自身。
历史与补全
搜索和复用历史命令,善用 Tab 补全。
查看历史命令
history
- 助记:
history= 历史;终端保存执行过的命令,可查看后再复用。 - 作用:交互式终端用上箭头取回历史;Tab 补全路径或命令。
别名与函数
alias 和 shell 函数,把常用的长命令缩短。
给长命令起别名
alias ll='ls -lah'
- 助记:
alias= 别名;ll是自己选的名字,不是系统规定的命令缩写。 - 作用:当前终端生效,长期使用可写入对应 shell 配置文件。
创建并进入目录
mkcd() {
mkdir -p -- "$1" && cd -- "$1"
}
- 助记:
mkcd是这里自定义的名字,组合了 make directory + change directory;&&表示前一步成功才继续。 - 作用:先定义函数,再运行 mkcd 目录名。
环境变量与配置文件
export、PATH、~/.zshrc、~/.bashrc,以及让修改生效的方法。
设置环境变量
export DEMO_DATA_DIR="$HOME/datasets"
- 助记:
export= 导出;把 shell 变量导出给子进程,双引号保留路径为一个参数。 - 作用:只影响当前终端及其后启动的子进程;程序需主动读取该变量。
重新加载 zsh 配置
source ~/.zshrc
- 助记:
source= 在当前 shell 读取执行;rc常指 run commands(启动配置),不是启动另一个 shell。 - 作用:在 zsh 中执行;bash 对应 source ~/.bashrc。
确认命令来自哪里
command -v python
- 助记:
command -v用于查询命令如何被当前 shell 解析,重点看它指向哪个环境的可执行文件。
引号与通配符
单引号、双引号、*、? 的区别,避免变量和通配符被意外展开。
区分字面文本和变量展开
printf '%s\n' '$HOME'
printf '%s\n' "$HOME"
- 助记:单引号保留原文;双引号允许变量展开,同时把结果保留为一个参数。
- 作用:单引号保留 $HOME 字面值,双引号展开变量并保留为一个参数。
脚本基础
写 shell 脚本:参数、条件、循环和 set -euo pipefail。
遍历匹配文件并保留空格
for file in ./*.txt; do
[ -f "$file" ] || continue
printf "%s\n" "$file"
done
- 助记:
for ... in ...= 对列表中的每一项循环;-f判断是否为普通文件,continue跳过当前项。 - 作用:文件变量总是加引号;zsh 无匹配时可能在进入循环前报错,可在脚本中使用 bash。