💻 命令行基础
对开发者来说,Linux 命令行不是"可选技能",而是日常工具。本章覆盖开发者 80% 场景用到的命令。
学习策略
不要死记硬背所有参数!记住核心命令 + 常用 flag,其他用 --help 或 man 查。
我的命令行学习路径:
1. 先会 20 个核心命令(ls/cd/cat/grep/awk/...)
2. 理解管道 `|` 和重定向 `>/>>/2>/&>/`
3. 学会 `--help` 和 `man` 查文档
4. 实际用的时候再查具体参数
📁 文件系统导航
核心导航命令
pwd # 打印当前工作目录(Print Working Directory)
ls # 列出当前目录内容
ls -la # 详细列表(含隐藏文件)
cd /path # 切换到绝对路径
cd ~ # 切换到家目录
cd - # 切换到上一个目录
cd .. # 上级目录
# 实用技巧:Tab 补全
cd /u<Tab>shr<Tab> # 自动补全路径,按两次 Tab 显示所有选项
Linux 目录结构(开发者最需要知道的)
/ # 根目录
├── home/ # 用户家目录(你的地盘)
│ └── ubuntu/ # 你的用户目录 ← 你大部分时间在这里
├── etc/ # 系统配置文件(nginx/redis/... 配置在这里)
├── var/ # 可变数据(日志 /var/log、缓存 /var/cache)
│ └── log/ # 系统日志(排查问题必看)
├── usr/ # 用户程序(/usr/bin、/usr/lib)
├── opt/ # 可选软件(第三方大型软件)
├── tmp/ # 临时文件(重启清空)
└── mnt/ # 挂载点(外接磁盘、共享文件夹)
不要乱动 /etc 和 /var
/etc— 改错配置文件可能导致系统无法启动/var/log— 删错日志可能影响故障排查
开发者主要活动区域:/home/你的用户名/ 和项目目录。
文件操作三剑客
# 创建
touch file.txt # 创建空文件
mkdir -p dir1/dir2 # 递归创建目录
# 复制
cp file.txt backup.txt # 复制文件
cp -r dir1 dir2 # 递归复制目录
# 移动/重命名
mv old.txt new.txt # 重命名
mv file.txt dir/ # 移动到目录
# 删除(慎用!)
rm file.txt # 删除文件
rm -rf dir/ # 递归强制删除目录(危险!)
⚠️
rm -rf /是著名灾难命令(删除整个系统)。现代 Linux 有--preserve-root保护,但好习惯是:删除前先用ls确认。
查看文件内容
cat file.txt # 一次性输出整个文件
less file.txt # 分页查看(空格翻页,q 退出)
head -n 20 file.txt # 看前 20 行
tail -n 20 file.txt # 看后 20 行
tail -f /var/log/syslog # 实时追踪日志(排查问题神器)
🔍 文本处理三剑客
开发者的日常:从日志、配置文件、命令输出里找信息、提取数据、替换文本。这三个工具是核心。
grep — 文本搜索
grep "error" file.log # 在文件中搜索 "error"
grep -i "error" file.log # 忽略大小写
grep -r "TODO" src/ # 递归搜索目录
grep -n "error" file.log # 显示行号
grep -v "info" file.log # 反向匹配(不含 "info" 的行)
grep -E "error|warn" file.log # 扩展正则(支持 |)
实战场景:
# 场景 1:排查服务错误日志
grep -i "error\|exception" /var/log/app.log | tail -20
# 场景 2:在代码里找 TODO
grep -rn "TODO\|FIXME" src/ --include="*.ts"
# 场景 3:查看某个 IP 的访问日志
grep "192.168.1.100" /var/log/nginx/access.log
awk — 列处理 / 数据提取
awk '{print $1}' file.txt # 打印第一列
awk '{print $1, $3}' file.txt # 打印第一、三列
awk -F: '{print $1}' /etc/passwd # 用 : 分割(处理 /etc/passwd)
实战场景:
# 场景 1:分析 nginx 访问日志,统计访问量 TOP 10 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# 场景 2:计算 CSV 文件第二列的平均值
awk -F, '{sum+=$2; count++} END {print sum/count}' data.csv
# 场景 3:找出内存占用超过 1GB 的进程
ps aux | awk '$6 > 1024*1024 {print $0}'
sed — 流编辑器(查找替换)
sed 's/old/new/g' file.txt # 替换(输出到终端,不改原文件)
sed -i 's/old/new/g' file.txt # 直接修改原文件
sed -i.bak 's/old/new/g' file # 修改前备份
实战场景:
# 场景 1:批量修改配置文件
sed -i 's/8080/3000/g' config.yaml
# 场景 2:删除空行
sed -i '/^$/d' file.txt
# 场景 3:在每行开头加时间戳
sed -i "s/^/$(date '+%Y-%m-%d %H:%M:%S') /" file.txt
🔗 管道与重定向
管道 | — 命令组合的艺术
Linux 哲学:每个命令只做一件事,用管道组合。
# 经典组合:找进程 → 过滤 → 统计
ps aux | grep nginx | wc -l
# 经典组合:查看日志 → 过滤错误 → 分页查看
tail -f /var/log/app.log | grep "ERROR" | less
# 经典组合:列出大文件 → 排序 → 取 TOP 10
du -sh * | sort -rh | head -10
命令组合流程图:
ps aux ← 列出所有进程
│
▼
grep nginx ← 过滤出含 "nginx" 的行
│
▼
wc -l ← 统计行数(= nginx 进程数)
重定向 — 输入输出控制
| 符号 | 含义 | 示例 |
|---|---|---|
> | 输出覆盖写 | ls > files.txt |
>> | 输出追加写 | echo "new line" >> log.txt |
2> | 错误输出重定向 | cmd 2> error.log |
&> | 标准+错误都重定向 | cmd &> output.log |
< | 输入重定向 | wc -l < file.txt |
<<< | Here String | grep "error" <<< "$var" |
<<EOF | Here Document | 多行输入(见下) |
Here Document 实战:
# 快速创建配置文件
cat <<EOF > config.yaml
server:
port: 3000
host: localhost
database:
url: postgres://localhost:5432/mydb
EOF
⚡ 效率技巧
1. 历史命令搜索(Ctrl+R)
按 Ctrl+R → 输入关键词 → 自动搜索历史命令
→ 按 Enter 执行,或 → 按 → 编辑后再执行
2. 别名(alias)定制
# 临时设置(当前 session 有效)
alias ll='ls -la'
alias gs='git status'
# 永久设置(写入 ~/.bashrc 或 ~/.zshrc)
echo "alias ll='ls -la'" >> ~/.bashrc
source ~/.bashrc
开发者推荐别名:
alias ll='ls -la --color=auto'
alias la='ls -A --color=auto'
alias grep='grep --color=auto'
alias ..='cd ..'
alias ...='cd ../..'
alias gst='git status'
alias gco='git checkout'
alias glog='git log --oneline --graph --decorate'
3. 快速目录跳转(z.sh / zoxide)
# 安装 zoxide(智能目录跳转)
# https://github.com/ajeetdsouza/zoxide
zoxide init --cmd cd bash >> ~/.bashrc # 替换 cd 命令
# 使用:跳转到常去的目录(z 会记住你常去的目录)
z project # 跳转到包含 "project" 的常用目录
z blog # 跳转到包含 "blog" 的常用目录
4. 后台运行与 nohup
# 方式 1:& 后台运行(终端关闭则进程终止)
npm run dev &
# 方式 2:nohup(终端关闭进程继续)
nohup npm run dev > app.log 2>&1 &
# 方式 3:disown(从 shell 作业表移除)
npm run dev &
disown
# 推荐:用 tmux(终端复用器)
tmux new -s dev # 新建 session
# Ctrl+B D detachment
tmux attach -t dev # 重新连接
5. 快速文件搜索(fd / ripgrep)
# fd 比 find 更快更友好(需要安装)
fd "pattern" # 搜索文件名
fd "\.ts$" src/ # 按扩展名搜索
# ripgrep (rg) 比 grep 更快
rg "TODO" src/ # 递归搜索代码内容
rg -i "error" --type log # 忽略大小写,限定文件类型
📚 下一步
- 下一章:📝 Shell 脚本编程 — 把重复命令写成脚本
- 进阶:🛠️ 开发环境配置 — 配置编译器、调试器、构建工具