终端与 CLI 技能
在 Linux 终端中工作的参考指南——涵盖从基础 Bash 到容器编排和 AI Agent 执行的完整技术栈。
如何使用本技能
本文档涵盖最常见的模式。如需详细的命令参考,请按需加载 references/ 中的相关文件:
| 主题 | 参考文件 |
|---|---|
| Bash 核心:管道、脚本、文件系统、安装、环境变量 | references/bash.md |
| 容器:Podman、Kubernetes (kubectl)、Helm | references/containers.md |
| HTTP 请求:curl | references/curl.md |
| AI 代理:aider-chat、claude CLI | references/agents.md |
1. 运行 Bash 命令
command [options] [arguments]
# 顺序执行——遇到第一个失败即停止
cmd1 && cmd2 && cmd3
# 无论失败与否都执行
cmd1; cmd2; cmd3
# 将输出捕获到变量
OUTPUT=$(command)
# 重定向 stdout / stderr / 两者
command > out.txt
command 2> err.txt
command &> all.txt
# 丢弃所有输出
command > /dev/null 2>&1
2. 检查工具是否存在
type -a tool_name # 查找工具的所有位置
apropos keyword # 查找匹配关键字的命令
which tool_name # PATH 中第一个二进制文件
whereis tool_name # 二进制、源码和手册页位置
3. 结合 && 使用
# 仅在前一条命令成功时继续执行
sudo apt update && sudo apt upgrade -y
# 安全地链式执行多个步骤
mkdir -p build && cd build && cmake ..
4. 使用 | 管道
# 将一个命令的 stdout 作为 stdin 传递给下一个命令
cmd1 | cmd2 | cmd3
# 常见模式
ls -la | grep ".conf"
ps aux | grep nginx
journalctl -u myservice | grep ERROR | tail -20
cat file.txt | wc -l
5. 使用 cat 读取内容
cat file.txt # 将完整文件输出到 stdout
cat file1.txt file2.txt # 连接多个文件
head -n 20 file.txt # 前 20 行
tail -n 20 file.txt # 后 20 行
tail -f /var/log/app.log # 实时跟踪日志输出
less file.txt # 分页查看(按 q 退出)
grep "pattern" file.txt # 匹配模式的行
grep -r "pattern" ./dir/ # 在目录中递归搜索
grep -n "pattern" file.txt # 显示行号
grep -i "pattern" file.txt # 忽略大小写
6. 排序结果
sort file.txt # 字母序(升序)
sort -r file.txt # 逆序
sort -n file.txt # 数字排序
sort -k2 file.txt # 按第 2 列排序
sort -t: -k3 -n /etc/passwd # 自定义分隔符(:),第 3 列,数字
ls -la | sort -k5 -n # 按文件大小(第 5 列)排序 ls 输出
7. 唯一结果
# uniq 仅移除*连续*重复项——务必先排序
sort file.txt | uniq # 去重
sort file.txt | uniq -c # 统计出现次数
sort file.txt | uniq -d # 仅显示重复项
sort file.txt | uniq -u # 仅显示出现一次的行
# 典型管道:统计日志中错误类型的数量
cat app.log | grep ERROR | sort | uniq -c | sort -rn
8. 使用 heredoc 编写并运行脚本
# 内联创建脚本文件
cat << 'EOF' > myscript.sh
#!/bin/bash
set -euo pipefail # 遇到错误、未定义变量或管道失败时退出
echo "Today: $(date +%Y-%m-%d)"
for i in 1 2 3; do
echo "Step $i"
done
EOF
chmod +x myscript.sh
./myscript.sh
# 或者直接运行而不创建文件
bash << 'EOF'
echo "Inline execution"
ls -la /tmp
EOF
脚本最佳实践:
- 始终以
#!/bin/bash开头 - 使用
set -euo pipefail确保安全默认行为 - 始终引用变量:
"$VAR"而非$VAR - 使用
$(...)而非反引号
9. 文件系统——快速参考
# 导航与查看
pwd && ls -lah # 我在哪 + 这里有什么
tree -L 2 # 目录树(2 层深)
find /path -name "*.log" # 按名称查找
du -sh /path # 目录大小
df -h # 所有挂载点的磁盘使用情况
# 创建 / 复制 / 移动 / 删除
mkdir -p /path/to/dir # 创建(含父目录)
cp -r src/ dst/ # 复制目录
mv src dst # 移动或重命名
rm -rf dir/ # 递归删除(不可逆)
# 权限与所有权
chmod +x file # 设置为可执行
chmod 644 file # rw-r--r--
chown user:group file # 更改所有者
# 链接
ln -s /target /link # 符号链接
readlink -f /link # 解析符号链接到真实路径
# 挂载
mount # 列出所有活跃挂载
lsblk # 块设备树
findmnt # 挂载点树
→ 完整文件系统参考:references/bash.md
10. 安装与更新——快速参考
# APT
sudo apt update && sudo apt upgrade -y
sudo apt install -y package-name
# pip (Python)
pip install package --break-system-packages
# npm (Node.js)
npm install -g package-name
→ 完整安装参考(snap、源码编译、pip 选项):references/bash.md
11. 获取命令帮助
command --help # 内联帮助(最快)
man command # 完整手册页
apropos keyword # 搜索手册页摘要
whatis command # 单行描述
info command # GNU info 页面(适用于 GNU 工具)
help cd # Shell 内建命令的帮助
12. 环境变量——快速参考
export VAR="value" # 为当前 Shell 及其子进程设置
echo $VAR # 读取变量
unset VAR # 移除变量
env # 列出所有环境变量
VAR=value command # 仅为单个命令设置
→ 持久化变量、加载 .env 文件:references/bash.md
详细参考
当你需要完整的命令覆盖时,请加载这些文件:
references/bash.md—— 完整文件系统、安装/更新、环境变量、脚本模式references/containers.md—— Podman、kubectl、Helmreferences/curl.md—— 用于 HTTP 请求的 curlreferences/agents.md—— aider-chat 和 claude CLI