Linux 命令学习:常用场景速查
Linux 常用命令分类整理,涵盖文件管理、文本处理、进程控制、网络诊断和系统信息查询。
背景
#Linux 命令行是开发、运维和 CI/CD 的基本功,以下按场景分类整理,作速查表用。
文件与目录操作
#基础命令
# 列出当前目录内容(隐藏文件、详细信息、按时间排序)
ls -laht
# 递归创建目录
mkdir -p project/{src,docs,test}
# 复制与移动
cp -r source/ dest/ # 递归复制
rsync -avz --progress # 增量同步,更适合大文件
mv oldname newname # 移动或重命名
# 安全删除
rm -rf dir/ # 慎用,-rf 不确认直接删
查找文件
# find:按名称、类型、大小、时间过滤
find . -name "*.log" -mtime +7 -delete # 删除 7 天前的 .log
find . -type f -size +100M # 找超过 100MB 的文件
# fd:更快的现代替代(需要安装)
fd "\.py$" -x wc -l # 找 .py 文件并统计行数
# locate:依赖数据库,查找极快(需要 updatedb 更新索引)
locate nginx.conf
文本处理
#文本处理命令适合在管道中组合。
查看文件
cat file.txt # 全文输出,适合小文件
less file.txt # 翻页查看,/搜索,q 退出
head -n 20 file.txt # 前 20 行
tail -n 50 file.txt # 后 50 行
tail -f app.log # 实时跟踪日志追加
grep:文本搜索
grep -rn "error" --include="*.log" ./
grep -i "warning" app.log # 忽略大小写
grep -c "timeout" access.log # 只计数
grep -v "healthy" check.log # 排除匹配行
# 上下文查看
grep -B 3 -A 5 "Exception" crash.log # 前 3 行 + 后 5 行
sed:流编辑
sed -i 's/old/new/g' file.txt # 原地替换全部匹配
sed -n '10,20p' file.txt # 打印第 10 到 20 行
sed '/^#/d' config.conf # 删除注释行
awk:结构化文本处理
# 列提取与条件过滤
awk '{print $1, $3}' access.log # 打印第 1、3 列
awk '$4 > 500 {print $1, $4}' stats.txt # 输出第 4 列 > 500 的行
# 内置变量
awk 'NR%2==0' file.txt # 只打印偶数行
awk '{sum+=$1} END{print sum}' nums.txt # 累加第一列
排序与去重
sort -k2 -t, data.csv # 按第二列排序
sort -u file.txt # 排序 + 去重
uniq -c sorted.txt # 统计连续重复次数
进程与系统管理
#进程查看与控制
ps aux # 所有进程快照
ps aux --sort=-%mem | head -5 # 内存 TOP 5
top -o %MEM # 交互式进程监视
# 按名称查找 PID
pgrep -f "node app.js"
pidof nginx
# 终止进程
kill -15 <PID> # 优雅退出(SIGTERM)
kill -9 <PID> # 强制杀死(SIGKILL)
pkill -f "node app.js" # 按名称匹配杀死
后台运行
nohup python server.py > output.log 2>&1 &
# 或者使用 systemd 管理长期服务
# 或者用 tmux/screen 保持终端会话
# 查看后台进程
jobs -l
bg/fg # 前后台切换
系统资源
df -h # 磁盘分区使用率
du -sh * | sort -rh | head -10 # 当前目录 TOP 10 大占用
free -h # 内存占用
uptime # 运行时长 + 负载均值
lscpu # CPU 架构信息
网络诊断
## HTTP 请求
curl -v https://api.example.com # 带请求/响应头详情
curl -o file.zip -L https://example.com/file.zip # 下载并跟随重定向
curl -X POST -H "Content-Type: application/json" \
-d '{"key":"value"}' https://api.example.com/endpoint
# 连接诊断
ping -c 4 google.com # 连通性 + 延迟
ss -tlnp # 查看监听端口(现代版 netstat)
netstat -tulpn # 传统版(需要安装)
telnet host 80 # 手动测试 TCP 端口
nc -zv host 22 80 443 # 批量端口探测
# DNS 查询
nslookup example.com
dig example.com +short
权限管理
#chmod 755 script.sh # rwxr-xr-x(所属者可写,其他只读执行)
chmod +x script.sh # 添加可执行权限
chown user:group file.txt # 修改所属用户和组
chattr +i config.yaml # 锁定文件禁止修改(root 才能解除)
# 查看权限
ls -l # 第一列即权限位
stat file.txt # 更详细的元信息
压缩与归档
## tar(最通用)
tar -czf archive.tar.gz dir/ # 创建 .tar.gz
tar -xzf archive.tar.gz # 解压
tar -tf archive.tar.gz # 查看内容
# zip(跨平台交换)
zip -r archive.zip dir/
unzip -l archive.zip # 查看内容而不解压
unzip archive.zip -d dest/
# 快速压缩单个文件
gzip -k file.txt # 保留原文件
gzip -d file.txt.gz # 解压
组合实战:日志排查场景
## 找出所有 5xx 响应的客户端 IP,按次数降序取 TOP 20
zgrep -h "HTTP/1.1\" 5[0-9][0-9]" access.log.2.gz access.log.1.gz access.log \
| awk '{print $1}' \
| sort \
| uniq -c \
| sort -rn \
| head -20
管道顺序:zgrep 匹配多 gz 日志 → awk 取 IP → sort | uniq -c 计数 → 再降序 → 取前 20。
常见陷阱
#容易被误解的命令
# 1. chmod 644 与 755 的含义不要搞混
# 644 = rw-r--r--(文件默认安全权限)
# 755 = rwxr-xr-x(目录和可执行脚本)
# 2. cp 与 mv 的区别
# cp 复制,源文件保留
# mv 移动或重命名,源文件消失
# 3. rm -rf 的谨慎使用
# 习惯用 rm -ri 或先 ls 确认再删
# 设置别名:alias rm='rm -i'
# 4. tar -czf 与 -xzf 的参数顺序
# -f 必须在紧跟的归档文件名之前
# 正确:tar -czf archive.tar.gz dir/
# 错误:tar -cfz archive.tar.gz dir/
管道中变量失效
# 错误的写法
cat file.txt | while read line; do
count=$((count + 1))
done
echo $count # 输出 0!子 shell 变量不传回
# 正确的写法
count=0
while read line; do
count=$((count + 1))
done < file.txt
echo $count # 正确
文件传输
## scp:按文件/目录
scp file.txt user@host:/path/
scp -r dir/ user@host:/path/ # 递归目录
# rsync:增量同步,断点续传,最常用
rsync -avz --progress dir/ user@host:/path/
rsync -avz --delete src/ dst/ # 本地镜像,目标多余文件删除(慎用)
# curl:上传
curl -T file.zip https://example.com/upload/
curl -F "file=@photo.jpg" https://example.com/api/upload
# 从远端拉取
scp user@host:/remote/file.txt ./
rsync -avz user@host:/path/dir/ ./local/
systemd 服务管理
## 查看服务状态与日志
systemctl status nginx
journalctl -u nginx -n 100 -f # 跟踪日志
# 启停与自启
systemctl start/stop/restart nginx
systemctl enable --now nginx # 开机自启并立即启动
# 单元文件位置与重载
/etc/systemd/system/myapp.service # 自定义单元
systemctl daemon-reload # 改单元后重载
systemctl cat myapp # 查看生效配置
[Unit]
Description=My app
After=network-online.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/app
ExecStart=/usr/bin/node /opt/app/index.mjs
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
新机初始化
## 1. 安全别名,防误删
alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'
# 2. 历史时间戳
export HISTTIMEFORMAT="%F %T "
# 3. tldr:简化版 man,快速回忆
npm install -g tldr
# 或 pip install tldr
tldr tar / tldr find