Developer Tools
每位开发者都应掌握的 Linux 命令行基础
开发日常中常用 Linux 命令的实用参考手册——涵盖文件系统导航、权限管理、进程管理、文本处理与网络操作。
9分钟阅读
Linux 命令行是服务器、容器、CI 流水线和开发环境的通用接口。无论是凌晨两点 SSH 进生产服务器,还是调试 Docker 容器,熟练掌握这些命令是从迷茫走向自信的关键所在。
导航与文件管理
# 目录导航
pwd # 显示当前工作目录
cd /var/log # 绝对路径
cd .. # 返回上一级
cd - # 返回上一个目录
cd ~ # 主目录
# 列出文件
ls # 基本列表
ls -la # 长格式 + 隐藏文件
ls -lh # 人类可读的文件大小
ls -lt # 按修改时间排序(最新在前)
# 创建、复制、移动、删除
mkdir -p path/to/dir # 创建目录及其父目录
cp -r source/ dest/ # 递归复制
mv oldname newname # 重命名或移动
rm -rf directory/ # 删除目录及其内容(不可恢复!)
touch file.txt # 创建空文件 / 更新时间戳
# 查看与浏览文件
cat file.txt # 打印完整文件
less file.txt # 分页查看(q 退出,/ 搜索)
head -n 20 file.txt # 前 20 行
tail -n 20 file.txt # 后 20 行
tail -f /var/log/app.log # 实时跟踪日志
文件权限
Linux 权限以三组读/写/执行位来表示,分别对应所有者、所属组和其他用户:
-rwxr-xr-- 1 alice devs 4096 Apr 8 10:00 script.sh
解读权限字符串 -rwxr-xr--:
-— 文件类型(d = 目录,l = 符号链接)rwx— 所有者:读、写、执行r-x— 所属组:读、执行(无写权限)r--— 其他用户:仅读
chmod — 修改权限
# 符号表示法
chmod u+x script.sh # 为所有者添加执行权限
chmod g-w file.txt # 移除所属组的写权限
chmod o=r file.txt # 将其他用户设为只读
chmod a+r file.txt # 为所有人添加读权限(a = all)
# 数字(八进制)表示法
chmod 755 script.sh # rwxr-xr-x(可执行文件常用)
chmod 644 file.txt # rw-r--r--(普通文件常用)
chmod 600 ~/.ssh/id_rsa # rw-------(SSH 密钥必须)
chmod 700 ~/.ssh/ # rwx------(.ssh 目录必须)
使用我们的 Chmod Calculator 可视化生成权限字符串,并了解每个八进制值的含义。
搜索与文本处理
# 查找文件
find /var/log -name "*.log" # 按名称查找
find . -name "*.ts" -newer package.json # 比 package.json 更新的文件
find . -type f -size +10M # 大于 10MB 的文件
find . -name "node_modules" -prune # 排除指定目录
# 搜索文件内容
grep "error" app.log # 在文件中搜索
grep -r "TODO" ./src # 递归搜索
grep -i "error" app.log # 忽略大小写
grep -n "error" app.log # 显示行号
grep -v "DEBUG" app.log # 不匹配的行
grep -E "error|warning" app.log # 正则:error 或 warning
# 流式文本处理
cat access.log | grep "404" | wc -l # 统计 404 错误数量
cat data.csv | cut -d',' -f1,3 # 提取第 1 和第 3 列
cat file.txt | sort | uniq # 排序并去重
cat file.txt | sort | uniq -c | sort -rn # 统计出现次数,按频率排序
awk — 基于字段的处理
# 打印特定字段(默认以制表符分隔)
awk '{print $1, $3}' file.txt
# 处理 CSV(逗号分隔)
awk -F',' '{print $2}' data.csv
# 对某列求和
awk -F',' '{sum += $3} END {print sum}' data.csv
# 打印匹配某模式的行
awk '/ERROR/ {print $0}' app.log
sed — 流编辑器
# 替换文本
sed 's/foo/bar/' file.txt # 替换每行第一个匹配项
sed 's/foo/bar/g' file.txt # 替换所有匹配项(全局)
sed -i 's/foo/bar/g' file.txt # 原地编辑(直接修改文件)
# 删除行
sed '/^#/d' file.txt # 删除注释行
sed '5,10d' file.txt # 删除第 5-10 行
# 打印特定行
sed -n '10,20p' file.txt # 打印第 10-20 行
进程管理
# 查看运行中的进程
ps aux # 所有进程及详细信息
ps aux | grep nginx # 查找 nginx 进程
top # 交互式进程查看器
htop # 更好的交互式查看器(需安装)
# 进程控制
kill PID # 发送 SIGTERM(优雅终止)
kill -9 PID # 发送 SIGKILL(强制终止)
pkill nginx # 按名称终止
killall node # 终止所有匹配的进程
# 后台任务
command & # 在后台运行
jobs # 列出后台任务
fg %1 # 将任务 1 调到前台
nohup command & # 忽略挂断信号运行(注销后仍存活)
# 系统资源
free -h # 内存使用情况
df -h # 磁盘空间使用情况
du -sh /var/log/ # 目录大小
lsof -i :3000 # 查看占用 3000 端口的进程
网络命令
# 连通性测试
ping google.com # 测试连通性
curl -I https://example.com # 仅显示 HTTP 头
curl -o file.zip https://example.com/file.zip # 下载文件
wget https://example.com/file.zip # 备选下载工具
# 检查连接
ss -tulpn # 监听端口及对应进程
netstat -tulpn # 备选方式(旧系统)
lsof -i :80 # 查看占用 80 端口的进程
# DNS
dig example.com # DNS 查询
dig example.com MX # 查询 MX 记录
host example.com # 简单 DNS 查询
nslookup example.com # 交互式 DNS 查询
SSH 与远程访问
# 连接到服务器
ssh user@server.com
ssh -p 2222 user@server.com # 非标准端口
ssh -i ~/.ssh/id_rsa user@server.com # 指定密钥
# 复制文件
scp file.txt user@server.com:~/ # 复制到远程主目录
scp user@server.com:~/file.txt . # 从远程复制
scp -r ./dist user@server.com:~/app/ # 递归复制
# SSH 隧道(端口转发)
ssh -L 5432:localhost:5432 user@server.com # 将远程数据库隧道到本地端口
使用我们的 SSH Key Generator 生成 SSH 密钥对,实现安全身份验证。
环境变量与 Shell
# 环境变量
export API_KEY=abc123 # 为当前会话及子进程设置变量
echo $API_KEY # 打印变量
env # 列出所有环境变量
printenv PATH # 打印指定变量
unset API_KEY # 删除变量
# Shell 历史记录
history # 列出历史命令
!! # 重复上一条命令
!grep # 重复上一条 grep 命令
Ctrl+R # 反向搜索历史(输入关键字搜索)
# 实用快捷键
Ctrl+C # 中断当前进程
Ctrl+Z # 挂起到后台
Ctrl+L # 清屏(与 clear 相同)
Ctrl+A # 跳到行首
Ctrl+E # 跳到行尾
Ctrl+U # 清除光标前的内容
管道与重定向
# 管道——串联命令
ls -la | grep ".log" | wc -l
# 重定向输出
command > file.txt # 用标准输出覆盖文件
command >> file.txt # 将标准输出追加到文件
command 2> errors.txt # 重定向标准错误
command > all.txt 2>&1 # 将标准输出和标准错误重定向到同一文件
command &> all.txt # 上述命令的简写
# /dev/null — 丢弃输出
command > /dev/null 2>&1 # 丢弃所有输出(静默运行)
开发者实用单行命令
# 在目录下所有文件中查找并替换
find . -name "*.tsx" | xargs sed -i 's/OldComponent/NewComponent/g'
# 获取公网 IP
curl -s ifconfig.me
# 监控文件变化
watch -n 2 "ls -la uploads/"
# 压缩目录
tar -czf archive.tar.gz ./directory/
# 解压 tar.gz
tar -xzf archive.tar.gz
# 显示当前目录中最大的 10 个文件
du -sh * | sort -rh | head -10
# 按文件类型统计代码行数
find . -name "*.ts" | xargs wc -l | sort -rn | head -20
命令行值得持续投入学习。每掌握一条命令,都会成为构建更强大组合的基础模块。从导航和 grep 开始,再加上管道,然后学 awk——这样你就能应对任何文本处理任务。