文章目录
[Linux 常用命令速查手册(工作版)](#Linux 常用命令速查手册(工作版))
[1. 文件与目录操作](#1. 文件与目录操作)
[1.1 查看目录内容](#1.1 查看目录内容)
[1.2 切换与定位目录](#1.2 切换与定位目录)
[1.3 创建与删除目录/文件](#1.3 创建与删除目录/文件)
[1.4 复制与移动/重命名](#1.4 复制与移动/重命名)
[1.5 文件权限](#1.5 文件权限)
[2. 文本查看与内容处理](#2. 文本查看与内容处理)
[2.1 查看文件内容](#2.1 查看文件内容)
[2.2 搜索与过滤](#2.2 搜索与过滤)
[2.3 文本处理与统计](#2.3 文本处理与统计)
[3. 用户与用户组](#3. 用户与用户组)
[3.1 用户管理](#3.1 用户管理)
[3.2 用户组与身份切换](#3.2 用户组与身份切换)
[4. 进程管理](#4. 进程管理)
[4.1 查看进程](#4.1 查看进程)
[4.2 终止进程与后台任务](#4.2 终止进程与后台任务)
[4.3 系统服务管理](#4.3 系统服务管理)
[5. 系统信息](#5. 系统信息)
[5.1 系统与内核信息](#5.1 系统与内核信息)
[5.2 资源与负载监控](#5.2 资源与负载监控)
[6. 网络命令](#6. 网络命令)
[6.1 网络查看与连通性测试](#6.1 网络查看与连通性测试)
[6.2 HTTP 请求与下载](#6.2 HTTP 请求与下载)
[6.3 端口监听排查](#6.3 端口监听排查)
[6.4 远程连接与文件传输](#6.4 远程连接与文件传输)
[6.5 实战演练:网络问题四层排查法](#6.5 实战演练:网络问题四层排查法)
[7. 压缩与解压](#7. 压缩与解压)
[7.1 tar 打包与解包](#7.1 tar 打包与解包)
[7.2 zip / gzip 格式处理](#7.2 zip / gzip 格式处理)
[8. 搜索命令](#8. 搜索命令)
[8.1 文件搜索](#8.1 文件搜索)
[8.2 命令定位](#8.2 命令定位)
[9. 软件包管理](#9. 软件包管理)
[9.1 常用包管理器](#9.1 常用包管理器)
[10. 定时任务](#10. 定时任务)
[10.1 crontab 与一次性任务](#10.1 crontab 与一次性任务)
[11. 日志查看](#11. 日志查看)
[11.1 日志实时跟踪与检索](#11.1 日志实时跟踪与检索)
[12. 容器与编排(Docker / Kubernetes)](#12. 容器与编排(Docker / Kubernetes))
[12.1 Docker 镜像与容器](#12.1 Docker 镜像与容器)
[12.2 Docker Compose 多服务编排](#12.2 Docker Compose 多服务编排)
[12.3 Kubernetes(kubectl)常用命令](#12.3 Kubernetes(kubectl)常用命令)
[📌 写在最后](#📌 写在最后)
Linux 常用命令速查手册(工作版)
📌 摘要:整理 Linux 运维开发高频命令,按文件操作、文本处理、权限、进程、网络、压缩、定时任务等场景分类,每个命令附真实示例,可直接复制使用。
🔍 跳转:日常操作 1-5 | 排障应急 6 | Docker实战 12
1. 文件与目录操作
1.1 查看目录内容
命令
说明
pwd
显示当前所在目录的绝对路径
ls
列出目录内容,常用 ls -l(详细信息)、ls -a(含隐藏文件)、ls -lh(人类可读方式显示)、ls -rtl(按修改时间正序排序)
tree
以树状结构显示目录层级(部分系统需自行安装)
# 查看当前目录详细列表
ls -lh
# 长格式显示,按修改时间正序排序(旧的在上,新的在下)
ls -rtl
# 以树状结构查看目录层级
tree /data/project
1.2 切换与定位目录
命令
说明
cd
切换目录,cd .. 返回上级,cd ~ 回用户主目录,cd - 回到上一次目录,cd / 回到系统根目录
# 进入配置目录
cd /etc/nginx
# 返回上级目录
cd ..
# 回到上一次所在目录(来回切换很好用)
cd -
1.3 创建与删除目录/文件
命令
说明
mkdir
创建目录,mkdir -p a/b/c 递归创建多级目录
touch
创建空文件,或更新文件时间戳
rm
删除,rm -r 递归删除目录,rm -f 强制删除(⚠️ 谨慎使用,不可恢复)
# 递归创建多级目录并进入
mkdir -p /data/logs && cd /data/logs
# 创建空文件
touch file.txt
# 删除目录及内部所有内容(高危操作,慎用!)
rm -rf /tmp/test
1.4 复制与移动/重命名
命令
说明
cp
复制,cp -r 递归复制目录,cp -p 保留权限与时间
mv
移动或重命名文件
# 备份配置文件(保留权限)
cp -p /etc/nginx/sys.conf /etc/nginx/sys.conf.bak
# 递归复制整个目录
cp -r ./dist /data/www/
# 重命名文件(mv 同时支持移动)
mv app_old.jar app.jar
1.5 文件权限
命令
说明
chmod
修改文件/目录权限,数字法 755、644 最常用
chown
修改属主与属组,chown user:group 文件
chgrp
仅修改属组
umask
设置新建文件的默认权限掩码
# 查看文件权限(-rw-r--r-- 等)
ls -l /data/project
# 赋予脚本可执行权限(最常用)
chmod +x run.sh
chmod 755 run.sh
# 修改属主为 www 用户、属组为 web 组
chown www:web /data/project -R
# 递归设置目录权限:目录 755、文件 644
find /data/project -type d -exec chmod 755 {} \;
find /data/project -type f -exec chmod 644 {} \;
💡 提示:数字权限速记------4 读、2 写、1 执行;755 表示属主全权限、组和其他人只读可执行。
2. 文本查看与内容处理
📌 文本处理三剑客 :
🔍 grep(检索) :负责"找",按行过滤,精准定位目标。
📊 awk(分析) :负责"算",按列切割,擅长数据统计与格式化。
✂️ sed(编辑) :负责"改",流式处理,擅长全局替换与内容增删。
2.1 查看文件内容
命令
说明
cat
一次性输出整个文件内容,适合小文件
less
分页查看大文件,/关键词 搜索,q 退出,g 到首行、G 到尾行
head
查看文件开头,head -n 20 显示前 20 行
tail
查看文件末尾,tail -n 20 查看最后 20 行;实时跟踪日志见 11.1
# 查看文件最后 20 行
tail -n 20 /var/log/app.log
# 查看文件前 20 行
head -n 20 /etc/nginx/nginx.conf
2.2 搜索与过滤
命令
说明
grep
文本搜索王者 ,按正则表达式过滤行,常与管道符 `
# 1. 基础搜索与高亮
# 在日志中搜索 ERROR,忽略大小写(-i)并显示行号(-n)
grep -in "error" /var/log/app.log
# 递归搜索(-r)并高亮关键词(--color)
grep -rn --color "exception" ./logs
# 精确匹配单词(-w):搜 "cat" 不会把 "catalog" 搜出来
grep -w "cat" document.txt
# 2. 上下文查看(排查报错必用)
# 查看报错行,以及它的前 5 行和后 5 行 (Context)
grep -C 5 "NullPointerException" app.log
# 只看匹配行的后 10 行 (After) / 前 10 行 (Before)
grep -A 10 "Start Process" app.log
grep -B 10 "Process Failed" app.log
# 3. 多条件与反向过滤(清洗日志噪音)
# 多条件"或"匹配(-E):同时过滤 ERROR 或 WARN 或 FATAL
grep -E "ERROR|WARN|FATAL" app.log
# 反向过滤(-v):排除干扰信息(如健康检查、DEBUG日志)
grep "error" app.log | grep -v "healthcheck"
grep -E "ERROR|WARN" app.log | grep -vE "DEBUG|INFO"
# 4. 递归搜索避坑与统计
# 全局搜代码,排除无关目录(防止搜 node_modules 卡死终端)
grep -rn "TODO" . --exclude-dir={.git,node_modules,target,build}
# 只搜索特定后缀的文件
grep -rn "import" . --include="*.py"
# 统计关键字出现的次数(-c)
grep -c "Timeout" app.log
# 5. 特殊字符搜索避坑
# 避坑:如果要搜索以 "-" 开头的字符串(如 -e),会被误认为是参数
# 正确写法 1:使用 -- 终止参数解析
grep -- "-e" file.txt
# 正确写法 2:使用 -e 显式指定模式
grep -e "-e" file.txt
2.3 文本处理与统计
命令
说明
awk
列处理王者 ,默认按空格分割。-F 指定分隔符,$1 是第一列,$0 是整行
sed
流式编辑器 ,s/旧/新/g 替换,d 删除,p 打印。注意 -i 的跨平台差异
cut
轻量级截取 ,-d 指定分隔符,-f 取列。适合处理简单规则文本
sort
排序 ,-n 数值排序,-r 倒序,-u 去重,-k 按指定列排序
uniq
去重 ,只能去除相邻 重复行,必须先 sort 。-c 计数,-d 仅显示重复行
wc
统计 ,-l 行数,-w 单词数,-c 字节数
strings
二进制提取 ,从二进制文件(如 Core Dump、编译后的程序)中扒出可读字符串
diff
差异对比 ,常加 -u 输出标准 unified 格式
# 经典连招:统计日志中每个 IP 的出现次数,并按次数从高到低排序
awk '{print $1}' access.log | sort | uniq -c | sort -rn
# 提取 CSV 文件的第 2 列
awk -F',' '{print $2}' data.csv
# 找出 access.log 中响应时间(假设在第 10 列)大于 500ms 的慢请求
awk '$10 > 500 {print $0}' access.log
# 全局替换配置中的旧端口并写回
sed -i 's/8080/8081/g' /etc/app/config.yml
# 删除文件中的所有注释行(以 # 开头)和空行
sed -e '/^#/d' -e '/^$/d' config.yml
# 从二进制文件(如日志、核心转储)中扒出可读文字,过滤异常信息
strings ./logs | grep -i "exception"
# 对比两个配置文件的差异
diff nginx.conf nginx.conf.bak
3. 用户与用户组
3.1 用户管理
命令
说明
whoami
显示当前用户名
id
查看当前用户的 UID/GID 及所属组
useradd
创建用户,useradd -m -s /bin/bash 用户名 创建并指定 shell
passwd
设置/修改用户密码
usermod
修改用户属性,-aG 追加到附加组(⚠️ 不加 -a 会覆盖原有组)
userdel
删除用户,userdel -r 连同主目录一起删除
# 1. 创建用户并设置密码
useradd -m -s /bin/bash zhangsan
passwd zhangsan
# 2. 将用户安全地追加到 sudo 组(Debian/Ubuntu 用 sudo,CentOS 用 wheel)
# 💡 记忆口诀:改组必加 a,无 a 必挨骂!
usermod -aG sudo zhangsan
3.2 用户组与身份切换
命令
说明
groupadd
创建用户组
su
切换用户,su - 用户名 切换到其登录环境
sudo
以其他身份(默认 root)执行命令
# 创建用户组
groupadd dev
# 切换为 root 身份执行
sudo apt update
⚠️ 注意:修改用户组时务必使用 -aG 追加,直接 usermod -G 会移除用户原有附加组。
4. 进程管理
4.1 查看进程
命令
说明
ps
查看进程快照,ps aux 显示所有进程,ps -ef 全格式输出
top
动态监控进程资源占用(CPU/内存),P 按 CPU 排序、M 按内存排序
htop
top 的增强版,支持方向键操作(需安装)
# 查看所有进程
ps aux | head -20
# 动态监控,定位占用 CPU/内存最高的进程
top
4.2 终止进程与后台任务
命令
说明
kill
按 PID 杀进程,kill -9 强制杀死(SIGKILL),kill -15 优雅终止(SIGTERM,允许进程清理资源,应优先于-9使用)
pkill
按名字杀进程,pkill -f 按完整命令行匹配
jobs / fg / bg
查看后台任务、切换到前台、放到后台运行
nohup
不挂断运行,配合 & 让程序在退出终端后继续执行
# 查找某服务的进程 PID 并杀死
pgrep -f "app.jar"
kill -9 12345
# 后台启动 Java 服务,日志写入文件,终端关闭也不中断
# nohup (不挂断) + 执行命令 + > (日志重定向) + 2>&1 (错误日志也写入同一文件) + & (放入后台)
nohup java -jar app.jar > app.log 2>&1 &
4.3 系统服务管理
命令
说明
systemctl
管理系统服务,start/stop/restart/reload/status/enable/disable
# 服务管理
systemctl status nginx # 查看运行状态
systemctl restart nginx # 重启(会导致连接短暂中断)
systemctl reload nginx # 平滑重载配置(生产环境首选,不断开连接)
systemctl enable nginx # 设置开机自启
5. 系统信息
5.1 系统与内核信息
命令
说明
uname -a
查看内核与系统版本信息
hostname
查看/设置主机名
date
查看/设置系统时间
# 查看发行版信息(选择包管理命令前先确认)
cat /etc/os-release
# 查看内核版本
uname -a
5.2 资源与负载监控
命令
说明
uptime
查看运行时长与系统负载
free -h
查看内存使用情况(人性化显示)
df -h
查看磁盘分区使用率
du -sh 目录
统计目录占用空间大小
who / last
查看当前登录用户 / 登录历史
# 查看内存(重点看 available)
free -h
# 查看各磁盘挂载点的使用率
df -h
# 统计项目目录总大小
du -sh /data/project
# 查看当前目录一级子目录大小排序(磁盘爆满定位必用)
du -h --max-depth=1 * | sort -rh | head -n 10
# 查看系统负载(load average 三个值分别代表 1/5/15 分钟均值)
uptime
6. 网络命令
6.1 网络查看与连通性测试
命令
说明
ip addr
查看网卡与 IP 地址(ifconfig 的现代替代)
ping
测试网络连通性,ping -c 4 指定发包次数
telnet
测试远端主机端口是否可达(排障神器),如 telnet 192.168.1.10 80;部分系统需先安装 telnet 客户端
# ================= 1. 基础网络与端口 =================
# 查看本机 IP 与网卡信息
ip addr
# 测试远端主机 80 端口是否可达(连通后出现连接提示,Ctrl+] 再输入 quit 退出)
telnet 192.168.1.10 80
6.2 HTTP 请求与下载
命令
说明
curl
发起 HTTP 请求,排障和调试接口必备
wget
下载文件,-c 断点续传
# ================= 2. curl 接口调试与排障 ================
# 测试接口连通性(排障三步:ping → 端口 → 应用日志)
curl -v http://127.0.0.1:8080/api/health
# 仅获取响应头(快速检查 HTTP 状态码、证书、重定向、Nginx版本)
curl -I http://127.0.0.1:8080/api/health
# 静默模式但保留错误信息(日常调试推荐,不刷屏)
curl -sS http://127.0.0.1:8080/api/health
# 发送 JSON POST 请求
curl -X POST -H "Content-Type: application/json" -d '{"key":"val"}' URL
# 脚本健康检查专用(参数拆解记忆法)
# -o /dev/null : 丢弃响应体(不下载文件内容)
# -s : 静默模式(不显示进度条)
# -w "%{http_code}\n" : 只输出HTTP状态码并换行
curl -o /dev/null -s -w "%{http_code}\n" http://127.0.0.1:8080/api/health
# ================= 3. 文件下载 =================
# 下载文件并断点续传(下大文件必备)
wget -c https://example.com/pkg.tar.gz
6.3 端口监听排查
命令
说明
ss / netstat
查看端口监听与连接状态,ss -tlnp 查看监听端口及对应进程
# 查看 80 端口被哪个进程占用
ss -tlnp | grep :80
6.4 远程连接与文件传输
命令
说明
ssh
远程登录,ssh 用户@主机 -p 端口
scp
基于 SSH 复制文件,-r 复制目录
rsync
增量同步文件/目录,支持断点续传,-avz 常用参数
# 远程登录服务器
ssh root@192.168.1.10
# 远程复制文件到服务器
scp ./deploy.sh root@192.168.1.10:/opt/
# 同步本地目录到服务器(-a 归档、-v 显示过程、-z 压缩传输)
rsync -avz ./dist/ root@192.168.1.10:/var/www/html/
6.5 实战演练:网络问题四层排查法
遇到网络问题(比如前端访问不了后端的 API),严格按照以下四层模型逐层排查:
#mermaid-svg-PvtF4a9uCS08Nawq{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PvtF4a9uCS08Nawq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PvtF4a9uCS08Nawq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PvtF4a9uCS08Nawq .error-icon{fill:#552222;}#mermaid-svg-PvtF4a9uCS08Nawq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PvtF4a9uCS08Nawq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PvtF4a9uCS08Nawq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PvtF4a9uCS08Nawq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PvtF4a9uCS08Nawq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PvtF4a9uCS08Nawq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PvtF4a9uCS08Nawq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PvtF4a9uCS08Nawq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PvtF4a9uCS08Nawq .marker.cross{stroke:#333333;}#mermaid-svg-PvtF4a9uCS08Nawq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PvtF4a9uCS08Nawq p{margin:0;}#mermaid-svg-PvtF4a9uCS08Nawq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PvtF4a9uCS08Nawq .cluster-label text{fill:#333;}#mermaid-svg-PvtF4a9uCS08Nawq .cluster-label span{color:#333;}#mermaid-svg-PvtF4a9uCS08Nawq .cluster-label span p{background-color:transparent;}#mermaid-svg-PvtF4a9uCS08Nawq .label text,#mermaid-svg-PvtF4a9uCS08Nawq span{fill:#333;color:#333;}#mermaid-svg-PvtF4a9uCS08Nawq .node rect,#mermaid-svg-PvtF4a9uCS08Nawq .node circle,#mermaid-svg-PvtF4a9uCS08Nawq .node ellipse,#mermaid-svg-PvtF4a9uCS08Nawq .node polygon,#mermaid-svg-PvtF4a9uCS08Nawq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PvtF4a9uCS08Nawq .rough-node .label text,#mermaid-svg-PvtF4a9uCS08Nawq .node .label text,#mermaid-svg-PvtF4a9uCS08Nawq .image-shape .label,#mermaid-svg-PvtF4a9uCS08Nawq .icon-shape .label{text-anchor:middle;}#mermaid-svg-PvtF4a9uCS08Nawq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PvtF4a9uCS08Nawq .rough-node .label,#mermaid-svg-PvtF4a9uCS08Nawq .node .label,#mermaid-svg-PvtF4a9uCS08Nawq .image-shape .label,#mermaid-svg-PvtF4a9uCS08Nawq .icon-shape .label{text-align:center;}#mermaid-svg-PvtF4a9uCS08Nawq .node.clickable{cursor:pointer;}#mermaid-svg-PvtF4a9uCS08Nawq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PvtF4a9uCS08Nawq .arrowheadPath{fill:#333333;}#mermaid-svg-PvtF4a9uCS08Nawq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PvtF4a9uCS08Nawq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PvtF4a9uCS08Nawq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PvtF4a9uCS08Nawq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PvtF4a9uCS08Nawq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PvtF4a9uCS08Nawq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PvtF4a9uCS08Nawq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PvtF4a9uCS08Nawq .cluster text{fill:#333;}#mermaid-svg-PvtF4a9uCS08Nawq .cluster span{color:#333;}#mermaid-svg-PvtF4a9uCS08Nawq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PvtF4a9uCS08Nawq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PvtF4a9uCS08Nawq rect.text{fill:none;stroke-width:0;}#mermaid-svg-PvtF4a9uCS08Nawq .icon-shape,#mermaid-svg-PvtF4a9uCS08Nawq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PvtF4a9uCS08Nawq .icon-shape p,#mermaid-svg-PvtF4a9uCS08Nawq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PvtF4a9uCS08Nawq .icon-shape .label rect,#mermaid-svg-PvtF4a9uCS08Nawq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PvtF4a9uCS08Nawq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PvtF4a9uCS08Nawq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PvtF4a9uCS08Nawq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不通
通
不通
通
异常
正常
报错
客户端报错
第1层: 网络通不通?
检查 ping / 检查 IP 是否配错 / 检查网线
第2层: 端口通不通?
telnet 目标IP 端口 / 检查云服务器安全组、防火墙 / 服务是否监听在 127.0.0.1
第3层: 服务状态正常吗?
systemctl status / 查日志 / 查配置文件
第4层: 应用层逻辑对吗?
用 curl -v 抓包 / 看应用报错日志 / 查数据库
💼 真实工作场景模拟 :前端跑过来喊:"后端!你的登录接口挂了!"
你的反应(按四层模型):
第 1 层 :你在自己电脑上 ping 服务器IP → 通了 ✅
第 2 层 :你 telnet 服务器IP 8080 → 不通 ❌
结论:网络没问题,是端口被挡了!
动作:检查云服务器控制台,发现安全组没开 8080 端口,添加规则 → 问题解决!
第 3 层(假设第 2 层通了) :你 systemctl status tomcat → 发现服务挂了 ❌
动作:journalctl -u tomcat -ex 发现是内存溢出(OOM),调整 JVM 参数 → 重启解决!
第 4 层(假设第 3 层正常) :你在服务器本地 curl -v http://127.0.0.1:8080/login → 返回 500 错误 ❌
动作:看 Spring Boot 日志,发现是数据库密码过期,修改配置 → 问题解决!
💡 提示:排查网络问题时按「连通性 → 端口 → 服务状态 → 日志」的顺序逐层定位,避免跳步。
7. 压缩与解压
7.1 tar 打包与解包
命令
说明
tar
打包/解包,.tar.gz 和 .tar.xz 是最常见格式
## 1. tar (打包/解包)
# 记忆法:c=创建, x=解压, z=gzip, J=xz, v=显示, f=文件, C=指定目录, t=查看
# 打包并压缩 (.tar.gz)
tar -zcvf backup.tar.gz /data/project
# 解压到指定目录
tar -zxvf backup.tar.gz -C /opt/restore
# 排除目录打包 (前端/Node必备)
tar -zcvf backup.tar.gz --exclude='node_modules' --exclude='.git' /data/project
# 查看压缩包内容 (不解压)
tar -ztvf backup.tar.gz
# 高压缩率打包 (.tar.xz,适合大日志/数据库备份)
tar -Jcvf backup.tar.xz /var/log/
7.2 zip / gzip 格式处理
命令
说明
gzip / gunzip
压缩/解压单个 .gz 文件
zip / unzip
处理 .zip 格式(跨平台通用)
# 2. zip / unzip (跨平台)
zip -r site.zip ./site
unzip site.zip -d ./site_out
# 解决 Windows 中文 zip 乱码
unzip -O CP936 site.zip # 或推荐安装 unar 命令
## 3. gzip (单文件压缩)
gzip access.log # 源文件会被删除
gzip -k access.log # 加 -k (keep) 保留源文件
gunzip access.log.gz
8. 搜索命令
8.1 文件搜索
命令
说明
find
全能搜索王 ,按文件名/类型/时间/大小在文件系统中查找
locate
极速搜索 ,基于数据库快速查找(需先运行 updatedb 更新索引)
# 1. 基础与多条件检索
# 显示文件详细信息(-ls 相当于对结果执行 ls -dils)
find . -name "*文件名*" -ls
# 多层目录+多类型文件同时检索(加上 -type f、转义括号、-print0 和 -0)
find ./ -type f \( -name "*.sh" -o -name "*.py" \) -print0 | xargs -0 grep --color "import"
# 2. 时间查找(排查问题 / 清理日志)
# 查找 7 天前修改的日志(清理过期日志必用,写进 crontab)
find /var/log -name "*.log" -mtime +7
# 查找最近 7 天内修改过的文件(审计:最近谁动了数据?)
find /data -mtime -7 -type f
# 查找最近 10 分钟内修改过的文件(神技:刚发完版,看哪些文件变了)
find /opt/project -mmin -10 -type f
# 3. 大小查找(磁盘爆满排查)
# 查找大于 100M 的文件(磁盘爆满排查第一步)
find / -size +100M -type f
# 查找超过 1GB 的大文件,并屏蔽权限报错(2>/dev/null)
find / -type f -size +1G 2>/dev/null
# 找到大文件后,配合 ls -lh 看看具体多大(人类可读格式)
find /var/log -size +500M -type f -exec ls -lh {} \;
# 4. 结合 xargs 与 -exec 的高效处理
# 避坑:普通 xargs 遇到带空格的文件名会报错!
# 终极安全写法:-print0 配合 xargs -0 (用 null 字符分隔)
find . -name "*.log" -print0 | xargs -0 grep --color "warning"
# 使用 -exec 执行复杂操作({} 代表找到的文件,\; 代表结束)
# 批量删除 30 天前的临时文件
find /tmp -type f -name "*.tmp" -mtime +30 -exec rm -f {} \;
# 批量移动文件(将找到的 .bak 文件移到 /backup 目录)
find . -name "*.bak" -exec mv {} /backup/ \;
8.2 命令定位
命令
说明
which
查找命令的可执行文件路径 (只看 $PATH 环境变量里的第一个)
whereis
查找命令的二进制、源码和帮助文档(man)位置 (搜索范围更广)
type
终极鉴别器 ,不仅能找路径,还能识别出命令是别名(alias)还是 内置命令(builtin)
# 1. 基础路径查找
which python3
whereis nginx
whereis -b nginx # 只查找二进制文件 (binary)
whereis -m nginx # 只查找帮助文档 (manual)
# 2. 多版本冲突排查(找出 PATH 中所有同名命令)
# 场景:系统自带了 python,你又装了 conda,想知道到底有几个 python
which -a python3
# 3. 鉴别命令的真实身份(which 的进阶替代者)
type ll # 输出: ll is aliased to `ls -alF' (识别别名)
type cd # 输出: cd is a shell builtin (识别内置命令)
type nginx # 输出: nginx is /usr/sbin/nginx (识别外部程序)
9. 软件包管理
9.1 常用包管理器
系统家族
代表发行版
安装 (自动确认)
更新索引/缓存
搜索包
Debian 系
Ubuntu, Debian
apt install -y 包名
apt update
apt search 关键词
RedHat 系
CentOS, RHEL, Rocky
yum install -y 包名
yum makecache
yum search 关键词
轻量/容器
Alpine Linux
apk add 包名
apk update
apk search 关键词
# 1. Ubuntu 安装 nginx (必须先 update,否则报找不到包)
sudo apt update && sudo apt install -y nginx
# 2. CentOS/Rocky 安装排查工具
sudo yum install -y vim tcpdump net-tools
# 3. Dockerfile 中 Alpine 安装 (必加 --no-cache 减小镜像体积)
apk add --no-cache curl bash
⚠️ 注意:CentOS 8+ / RHEL 8+ 中,yum 命令底层已替换为 dnf,但用法完全一致,直接敲 yum 依然有效
10. 定时任务
10.1 crontab 与一次性任务
命令
说明
crontab -e
编辑当前用户的定时任务
crontab -l
查看当前用户的定时任务
crontab -r
删除全部定时任务(慎用)
at
一次性定时任务(需安装 at 服务)
cron 时间格式:分 时 日 月 周 命令
# 每天凌晨 3 点执行备份脚本
crontab -e
# 写入以下内容
0 3 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
# 每 5 分钟执行一次健康检查
*/5 * * * * /opt/scripts/healthcheck.sh
# 查看已配置的任务
crontab -l
# 查看 cron 执行日志(Debian/Ubuntu)
grep CRON /var/log/syslog
⚠️ 注意:cron 执行时环境变量极少,脚本内建议使用绝对路径,并将输出重定向到日志文件便于排查。
11. 日志查看
11.1 日志实时跟踪与检索
命令
说明
tail -f
实时跟踪日志文件(排障最常用)
journalctl
查看 systemd 日志,-u 服务名 过滤服务,-f 实时跟踪
dmesg
查看内核环缓冲消息(硬件/驱动报错排查)
# 实时跟踪应用日志(Ctrl+C 退出)
tail -f /var/log/app.log
# 查看最后 200 行并持续跟踪
tail -200f /var/log/app.log
# 查看 nginx 服务最近 1 小时的日志
journalctl -u nginx --since "1 hour ago"
# 查看内核相关报错
dmesg | tail -50
12. 容器与编排(Docker / Kubernetes)
12.1 Docker 镜像与容器
命令
说明
docker ps -a
查看所有容器(含已停止),排障第一步:看状态是否为 Exited
docker run
运行容器,-d(后台) -p 宿主机:容器(端口) -v 宿主机:容器(挂载) --name(命名)
docker exec -it 容器名 sh
进入运行中的容器(⚠️ 精简镜像无 bash,用 sh 代替)
docker logs -f --tail 200 容器名
查看日志,-f(实时跟踪) --tail(最后N行) --since 1h(最近1小时)
docker build -t 镜像名:标签 .
根据当前目录 Dockerfile 构建镜像
docker cp
容器与宿主机互拷文件,如:docker cp 容器名:/var/log/app.log ./
docker stats
实时查看容器 CPU / 内存占用(排查资源瓶颈)
docker system prune -a
🧹 清理磁盘神器 :删除所有停止的容器、无用网络和未使用的镜像
# 1. 标准启动(必加 -v 挂载,保证数据持久化与热更新)
docker pull nginx:latest
docker run -d --name web -p 8080:80 -v /data/html:/usr/share/nginx/html nginx
docker logs -f --tail 200 web
# 2. 进入容器排查问题
docker exec -it web sh
# 3. 代码更新后重新构建并启动
docker build -t my-app:v2 .
docker stop web && docker rm web
docker run -d --name web -p 8080:80 my-app:v2
# 4. 服务器磁盘告警时的终极清理(⚠️ 会删除未运行容器及未使用镜像/数据卷)
docker system prune -a --volumes
12.2 Docker Compose 多服务编排
命令
说明
docker compose up -d
后台启动整套服务(加 --build 可强制重新构建镜像)
docker compose down
停止并移除容器与网络(默认不删数据卷,加 -v 才会删除)
docker compose ps
查看各服务运行状态
docker compose logs -f
实时查看日志(加 服务名 指定查看,避免多服务日志混杂)
docker compose exec 服务名 sh
进入指定服务容器(精简镜像无 bash,用 sh 代替)
docker compose restart
重启服务(加 服务名 可单独重启,无需重建镜像)
# 1. 后台启动并检查状态
docker compose up -d
docker compose ps
# 2. 修改代码/Dockerfile 后热更新(仅重建指定服务)
docker compose up -d --build web
# 3. 单独重启某个服务(配置变更后常用)
docker compose restart redis
# 4. 查看指定服务实时日志
docker compose logs -f web
# 5. 进入容器排查问题
docker compose exec web sh
# 6. 停止并清理环境(加 -v 会连数据库等持久化数据一起删除)
docker compose down
12.3 Kubernetes(kubectl)常用命令
命令
说明
kubectl get
查看资源状态:pods / deployments / services / nodes / events
kubectl -n 命名空间
指定命名空间操作,如 -n kube-system
kubectl describe
查看资源详情与事件(排障第一步,优先于 logs)
kubectl logs -f
实时查看 Pod 日志(加 --previous 可查看崩溃前日志)
kubectl exec -it Pod名 -- sh
进入 Pod 容器(精简镜像无 bash,用 sh 代替)
kubectl apply -f
应用 YAML 配置(声明式创建/更新资源)
kubectl delete -f
按 YAML 删除资源(不可撤销,执行前务必 get 核对)
kubectl rollout
滚动更新管理:restart(重启) / status(状态) / history(历史)
kubectl top
查看资源占用:top node / top pod(排查性能瓶颈)
kubectl port-forward
端口转发,本地调试集群内服务用
# 1. 查看资源状态(-o wide 附带节点 IP,便于定位调度问题)
kubectl get pods,svc,deploy
kubectl get pods -n kube-system -o wide
# 2. 排障三件套(按顺序执行,可定位 80% 问题)
kubectl describe pod web-7d9b5c6b8f-abcde
kubectl logs -f web-7d9b5c6b8f-abcde
kubectl get events -n default --sort-by='.lastTimestamp'
# 3. 进入容器排查(精简镜像用 sh)
kubectl exec -it web-7d9b5c6b8f-abcde -- sh
# 4. 声明式部署与回滚
kubectl apply -f deployment.yaml
kubectl rollout restart deployment web
kubectl rollout status deployment web
# 5. 本地调试集群内服务
kubectl port-forward svc/web-service 8080:80
# 6. 安全删除资源(执行前必须确认名称)
kubectl delete -f deployment.yaml
💡 排障心法:严格遵循 get(看状态)→ describe(看事件/详情)→ logs(看应用日志)的顺序,避免盲目翻日志浪费时间。
⚠️ 生产红线:kubectl delete 不可撤销;执行任何删除/更新操作前,必须先 kubectl get 核对资源名称,并 kubectl get events 确认集群无异常事件。
📌 写在最后
以上命令覆盖了日常运维与开发的高频场景,建议按以下方式巩固:
优先掌握 :文件目录、文本处理、进程管理是工作中使用频率最高的三类命令。
善用帮助 :遇到生疏命令优先用 man 或 --help 查阅,比搜索更准确。
动手固化 :多写脚本把重复操作封装成自己的工具集,避免每次手敲。
安全底线 :删除、覆盖、改权限前务必二次确认,生产环境慎用 -rf。
💡 Linux 命令没有捷径,熟能生巧,建议收藏本文并持续补充自己的常用命令清单。