安全铁律:
✅ rm/mv 操作前务必 ls -l 确认路径
✅ 生产环境配置修改必须走 备份→测试→替换→重载 流程
✅ sudo 后加 -i 进入交互模式(如 sudo -i)
🔍 一、基础目录与文件操作
命令 | 作用 | 常用语法 | 关键示例与避坑指南 |
|---|
pwd
| 显示当前路径 | pwd
| pwd → /home/user
|
ls
| 列出目录内容 | ls [选项] [目录]
| ls -la /home(显示隐藏文件+详情) 避坑:ls -l 确认权限再操作
|
cd
| 切换目录 | cd <路径>
| cd /home/web/html/halo
|
mkdir
| 创建目录 | mkdir [-p] 目录名
| mkdir -p halo2/uploads(递归创建) 场景:部署前确保目录存在
|
cp
| 复制文件/目录 | cp [选项] 源 目标
| cp config.yaml config.bak(备份配置)
|
mv
| 移动/重命名 | mv 源 目标
| mv old.yaml new.yaml(重命名配置文件)
|
rm
| ⚠️ 高危! 删除文件/目录 | rm [-rf] 文件或目录
| rm -rf /tmp/*(安全清理临时文件) 血泪教训:rm -rf / 绝对禁止! 正确流程:ls -l /tmp/* → rm -i /tmp/*
|
cat
| 查看小文件 | cat 文件
| cat docker-compose.yaml
|
less
| 分页查看大文件 | less 文件
| less /var/log/syslog(按 q 退出)
|
tail
| 查看文件末尾 | tail -n 行数 文件
| tail -f halo2/logs/app.log(实时日志监控) 场景:Halo启动失败时 tail -f app.log
|
nano
| 简单文本编辑器 | nano 文件
| nano docker-compose.yaml → 保存:Ctrl+O → 回车 → 退出:Ctrl+X
|
rsync -avz
| 生产级文件同步(必用) | rsync -avz /src/ user@host:/dst/
| rsync -avz --progress /data/ /backup/(同步时显示进度) 为什么用它:断点续传+增量同步,避免全量拷贝
|
find
| 精准查找文件(必学) | find <目录> -name <文件名>
| find /var/log -name "*.log" -mtime -7(找7天内修改的log) 场景:定位日志文件
|
tar
| 压缩/解压(比zip强) | tar -czvf file.tar.gz dir/
| tar -xzvf app.tar.gz -C /opt/(解压到指定目录) 优势:-z gzip压缩,-C 指定路径
|
lsof -i :8090
| 端口冲突排查(核心) | lsof -i :8090
| lsof -i :8090 → 若输出 nginx 1234 root 6u IPv6 12345 0t0 TCP *:8090 (LISTEN) → 确认是 Nginx 占用
|
💡 文件操作安全流程
bash
编辑
# 1. 确认路径
ls -l /var/log/halo/*.log
# 2. 测试删除(不实际执行)
find /var/log/halo -name "*.log" -mtime +7 -print
# 3. 真正删除
find /var/log/halo -name "*.log" -mtime +7 -exec rm -f {} \;
🐳 二、Docker & Docker Compose 核心命令
Docker 基础命令(必知必会)
命令 | 作用 | 常用语法 | 关键示例与避坑指南 |
|---|
docker --version
| 查看 Docker 版本 | docker --version
| — |
docker info
| 查看 Docker 系统信息 | docker info
| docker info \| grep "Storage Driver"(确认存储驱动)
|
docker images
| 列出本地镜像 | docker images
| docker images -a(列出所有镜像,包括中间层)
|
docker rmi
| 删除镜像 | docker rmi 镜像ID
| docker rmi $(docker images -q)(删除所有镜像) 避坑:删除前确保无容器在使用
|
docker run
| 运行新容器 | docker run [选项] 镜像 [命令]
| docker run -d -p 8090:8090 --name halo halo:latest 关键:-d 后台运行,-p 端口映射,--name 命名容器
|
docker stop
| 停止容器 | docker stop 容器名
| docker stop halo(停止halo容器)
|
docker start
| 启动容器 | docker start 容器名
| docker start halo
|
docker restart
| 重启容器 | docker restart 容器名
| docker restart halo(与Compose命令相同)
|
docker rm
| 删除容器 | docker rm 容器名
| docker rm -f halo(强制删除运行中容器)
|
docker volume ls
| 列出数据卷 | docker volume ls
| docker volume ls -f "dangling=true"(列出未使用卷)
|
docker volume inspect
| 查看数据卷详情 | docker volume inspect 数据卷名
| docker volume inspect halo_data(确认挂载路径)
|
docker network ls
| 列出网络 | docker network ls
| docker network inspect bridge(查看默认网络)
|
Docker Compose 命令(生产环境必备)
表格
命令 | 作用 | 常用语法 | 关键示例与避坑指南 |
|---|
docker compose version
| 查看 Compose 版本 | docker compose version
| — |
docker compose up -d
| 后台启动所有服务 | docker compose up -d
| 必须在 docker-compose.yml 所在目录执行 场景:Halo部署后启动服务 |
docker compose down
| 停止并删除容器(不删数据卷) | docker compose down
| 数据安全:保留数据库/配置 场景:日常维护重启服务 |
docker compose down -v
| 彻底删除(含数据卷) | docker compose down -v
| ⚠️ 数据会丢失! 仅用于全新部署或重置环境 |
docker compose ps
| 查看容器状态 | docker compose ps
| docker compose ps \| grep healthy(快速确认健康状态)
|
docker compose logs -f <服务名>
| 实时查看日志(排错神器) | docker compose logs -f halo
| Halo启动失败必用:docker compose logs -f halo --tail=50(查看最后50行) |
docker compose restart <服务名>
| 重启某个服务 | docker compose restart halo
| 场景:修改配置后(如 docker-compose.yml)必须重启服务 |
docker compose exec <服务名> sh
| 进入容器调试 | docker compose exec halo sh
| 场景:检查内部文件 ls /app 或执行命令 curl localhost:8090 |
docker compose build
| 重建镜像(更新配置后) | docker compose build --no-cache
| docker compose build --no-cache halo(强制重新构建halo服务) 为什么用:避免缓存旧依赖
|
docker compose pull
| 拉取最新镜像(不启动) | docker compose pull
| docker compose pull nginx(单独更新nginx镜像)
|
docker system df
| 查看 Docker 磁盘占用 | docker system df
| 清理前必看:docker system df → docker image prune -a(释放空间) |
docker inspect -f '{{ .NetworkSettings.IPAddress }}' halo
| 获取容器 IP(云环境必需) | docker inspect -f '{{ .NetworkSettings.IPAddress }}' halo
| ✅ 云上容器 IP 不固定,需动态获取(用于配置 Nginx 反向代理) |
docker volume create halo_data
| 安全备份数据卷 | docker volume create halo_data
| ✅ 数据安全核心:down -v 会删数据卷 → 先备份再删! |
docker compose config
| 验证 Compose 文件 | docker compose config
| docker compose config \| grep "ports"(检查端口映射) 场景:部署前验证配置
|
docker compose pull --no-cache
| 强制拉取最新镜像 | docker compose pull --no-cache
| docker compose pull --no-cache halo(避免缓存旧镜像)
|
docker compose up --build
| 构建+启动 | docker compose up --build
| 场景:修改Dockerfile后启动服务 关键:--build 会重建镜像 |
基础容器删除命令(Docker)
命令 | 作用 | 适用场景 | 关键示例 | 避坑指南 |
|---|
docker rm <容器ID/名称>
| 删除已停止的容器 | 常规删除 | docker rm halo_1
| ❌ 不能删除正在运行的容器 |
docker rm -f <容器ID/名称>
| 强制删除容器(包括运行中) | 紧急情况 | docker rm -f halo_1
| ⚠️ 数据可能丢失,谨慎使用 |
docker container prune
| 批量删除所有已停止的容器 | 日常清理 | docker container prune
| ✅ 安全,只删除已停止容器 |
docker container prune -f
| 无确认提示批量删除 | 自动化脚本 | docker container prune -f
| ✅ 适合CI/CD流程 |
docker rm -f $(docker ps -aq)
| 删除所有容器(包括运行中的) | 重置环境 | docker rm -f $(docker ps -aq)
| ⚠️ 数据全部丢失,仅用于测试环境 |
docker rmi <镜像ID/名称>
| 删除镜像 | 清理镜像 | docker rmi halo:latest
| ❌ 删除镜像前需确保无容器使用 |
💡 删除容器前必做检查:
# 1. 确认容器状态
docker ps -a | grep halo
# 2. 检查容器是否在运行
docker ps | grep halo
# 3. 如果容器在运行,先停止
docker stop halo
Docker Compose 容器删除命令
命令 | 作用 | 适用场景 | 关键示例 | 避坑指南 |
|---|
docker-compose rm
| 删除已停止的Compose项目容器 | 常规清理 | docker-compose rm
| ✅ 仅删除已停止的容器 |
docker-compose rm -f
| 强制删除所有Compose容器(包括运行中的) | 快速重置 | docker-compose rm -f
| ⚠️ 数据可能丢失,慎用 |
docker-compose rm -v
| 删除容器+关联数据卷 | 全新部署 | docker-compose rm -v
| ⚠️ 数据会永久丢失,生产环境禁用 |
docker-compose down
| 停止并删除容器(不删数据卷) | 日常维护 | docker-compose down
| ✅ 保留数据,安全 |
docker-compose down -v
| 停止并删除容器+数据卷 | 彻底重置 | docker-compose down -v
| ⚠️ 数据会丢失,仅用于全新部署 |
docker-compose rm <服务名>
| 仅删除指定服务的容器 | 精准操作 | docker-compose rm db
| ✅ 保留其他服务 |
💡 Docker Compose 删除流程:
# 1. 先停止服务
docker-compose stop
# 2. 确认容器状态
docker-compose ps
# 3. 删除容器(保留数据卷)
docker-compose rm
# 4. 如果需要彻底删除(数据丢失)
docker-compose down -v
📦 三、软件包管理(Ubuntu/Debian)
命令 | 作用 | 关键示例 |
|---|
sudo apt update
| 更新软件包列表 | sudo apt update(每日必做)
|
sudo apt install 软件名
| 安装软件(如 curl, git) | sudo apt install curl git nano(批量安装)
|
sudo apt remove 软件名
| 卸载软件(保留配置) | sudo apt remove docker(保留配置,方便重装)
|
sudo apt purge 软件名
| 彻底卸载(含配置) | sudo apt purge docker(彻底清除)
|
sudo apt list --installed \| grep docker
| 查看已安装的包 | sudo apt list --installed \| grep docker(确认Docker是否安装)
|
🔌 四、网络与端口排查
命令 | 作用 | 关键示例与避坑指南 |
|---|
ip a / ip addr
| 查看 IP 地址(替代 ifconfig) | ip addr show eth0(查看网卡IP)
|
ping 域名或IP
| 测试网络连通性 | ping -c 4 www.baidu.com(发送4次包)
|
curl -I 网址
| 查看 HTTP 响应头 | curl -I http://localhost:8090(确认Halo服务是否启动) 场景:HTTP/1.1 200 OK 表示成功
|
ss -tuln
| 查看监听端口(比 netstat 快) | ss -tuln \| grep 8090(精准过滤端口) 场景:Halo无法访问时检查端口是否监听
|
ss -tuln \| awk '{print $5}' \| sort \| uniq -c
| 统计端口占用 | ss -tuln \| awk '{print $5}' \| sort \| uniq -c(发现端口冲突)
|
curl -v http://localhost:8090
| 详细查看HTTP请求(含headers) | curl -v -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8090/api
|
nc -zv 127.0.0.1 8090
| 快速测试端口连通性(无依赖) | nc -zv 127.0.0.1 8090(替代 telnet)
|
mtr -z -w 1000 -c 10 8.8.8.8
| 动态路由追踪(比 traceroute 强) | mtr -z -w 1000 -c 10 8.8.8.8 → 发现 192.168.1.1 丢包 50% → 确认本地路由器故障
|
tcpdump -i eth0 port 8090 -w debug.pcap
| 抓包分析(深度排错) | tcpdump -i any port 8090 -nn -s 0 -w debug.pcap → 用 Wireshark 分析 HTTP 404 原因
|
🔐 五、权限与用户
命令 | 作用 | 关键配置示例 |
|---|
sudo
| 临时提权 | sudo docker compose up -d(避免用root)
|
sudo usermod -aG docker $USER
| 将用户加入 docker 组 | 首次安装Docker后必做:免 sudo 运行 docker 命令 |
chmod 600 ~/.ssh/id_rsa
| SSH密钥安全权限 | 普通用户 chmod 644 会导致 ssh 拒绝连接(必须 600) |
chmod +x script.sh
| 加执行权限(脚本必备) | chmod +x deploy.sh(确保脚本能执行)
|
chown www-data:www-data uploads/
| 修改文件所有者 | chown www-data:www-data /var/www/halo/uploads(Web服务目录权限)
|
sudo -u www-data -i
| 以特定用户身份执行命令 | sudo -u www-data -i(切换到web服务用户,避免用root操作)
|
getfacl file / setfacl -m u:user:rwx file
| ACL高级权限管理 | setfacl -m u:nginx:rwx /var/www/html(给nginx用户单独读写权限)
|
sudo ufw default deny incoming
| 默认拒绝所有入站连接 | sudo ufw default deny incoming → sudo ufw default allow outgoing(安全基石)
|
🔒 SSH 安全加固配置
# /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
AllowUsers admin
# 重启 SSH
sudo systemctl restart sshd
📊 六、系统信息与资源监控
命令 | 作用 | 关键示例 |
|---|
df -h
| 查看磁盘空间(人类可读) | df -h(生产环境每日必看)
|
du -sh 目录
| 查看目录大小 | du -sh /var/log(定位大日志文件)
|
top / htop
| 查看 CPU/内存使用 | htop(更友好,安装:sudo apt install htop) 场景:htop → 按 F6 → MEM 排序
|
free -h
| 查看内存使用 | free -h(确认是否内存不足)
|
iotop -o
| 按进程查看磁盘IO | iotop -o(发现 /var/log 疯狂写入时用)
|
lsof -i :8090
| 查看占用端口的进程 | lsof -i :8090(快速定位冲突服务,如Nginx和Halo都占8090)
|
journalctl -u docker
| Docker服务日志(Systemd) | journalctl -u docker --since "1 hour ago"(比 docker logs 更全面)
|
dstat -cdngy --top-cpu
| 全能系统监控(替代 top) | dstat -cdngy --top-cpu → 按 F1 切换 CPU/内存/磁盘/网络视图(实时排障神器)
|
⚠️ 七、高危操作安全流程(终极版)
# === 1. 配置文件修改(以 Nginx 为例) ===
sudo cp -a /etc/nginx /etc/nginx.bak # 备份
sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.tmp
sudo nginx -t -c /etc/nginx/nginx.conf.tmp # 测试配置
if [ $? -eq 0 ]; then
sudo mv /etc/nginx/nginx.conf.tmp /etc/nginx/nginx.conf
sudo systemctl reload nginx
else
echo "❌ 配置错误!回滚备份"
sudo cp -a /etc/nginx.bak/nginx.conf /etc/nginx/nginx.conf
sudo systemctl reload nginx
fi
# === 2. 数据库迁移(Halo 专用) ===
# 2.1 备份数据卷
docker volume create halo_data_backup
docker run --rm -v halo_data:/data -v halo_data_backup:/backup alpine tar cvf /backup/backup.tar -C /data .
# 2.2 云环境迁移(阿里云 ECS 间)
scp -P 2222 halo_data_backup/backup.tar user@target-ecs:/tmp/
ssh -p 2222 user@target-ecs "docker volume create halo_data_new"
ssh -p 2222 user@target-ecs "docker run --rm -v halo_data_new:/data -v /tmp/backup.tar:/backup alpine tar xvf /backup/backup.tar -C /data"
🌐 八、UFW 防火墙命令(Ubuntu 专属)
命令 | 作用 | 关键示例 |
|---|
sudo ufw status verbose
| 查看防火墙状态(详细) | sudo ufw status verbose(确认规则是否生效)
|
sudo ufw allow 8090/tcp
| 允许 Halo 端口(云环境必需) | sudo ufw allow 8090/tcp(必须在安全组放行后执行!)
|
sudo ufw allow 22/tcp
| 允许 SSH(救命命令!) | sudo ufw allow 22/tcp(避免锁死服务器)
|
sudo ufw enable
| 启用防火墙(首次启用) | sudo ufw enable(必须在放行 SSH 后执行)
|
sudo ufw disable
| 关闭防火墙(紧急情况) | sudo ufw disable(仅限紧急情况,需立即重新放行 SSH)
|
sudo ufw status numbered
| 查看规则编号 | sudo ufw status numbered(删除规则前必须查看)
|
sudo ufw delete 3
| 删除指定规则(按编号) | sudo ufw delete 3(删除第 3 条规则)
|
sudo ufw default deny incoming
| 默认拒绝所有入站连接(安全基石) | sudo ufw default deny incoming → sudo ufw default allow outgoing(安全基石)
|
💡 UFW 防火墙安全流程
sudo ufw allow 22/tcp # 先放行 SSH(救命!)
sudo ufw allow 8090/tcp # 再放行应用端口
sudo ufw enable # 最后启用防火墙
💎 附:运维效率神器清单
工具 | 安装命令 | 作用 | 为什么必装 |
|---|
htop
| sudo apt install htop
| 彩色 CPU/内存监控,按 F6 排序内存 | 比 top 快 3 倍,实时定位进程 |
zsh
| sudo apt install zsh
| 终端体验升级,搭配 oh-my-zsh(自动补全+语法高亮) | 90% 运维人员必备,减少命令输入错误 |
tmux
| sudo apt install tmux
| 会话管理神器:tmux new -s dev → tmux attach -t dev | 防止 SSH 断开导致任务中断(生产环境必备) |
fail2ban
| sudo apt install fail2ban
| 自动封禁暴力破解 IP(SSH 保护) | 云服务器安全底线,避免被机器人攻击 |
评论区