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——这样你就能应对任何文本处理任务。