部署一次网站用到的 30 个 Linux 命令

不是命令大全,是我在阿里云服务器上真实敲过的那些。按「刚连上服务器 → 装环境 → 跑服务 → 出问题排查」的顺序排。

说明

网上的 Linux 命令大全动辄两百条,看完一条也记不住。这篇只收我为了让这个博客跑起来真的敲过的命令,按实际使用顺序排。

一、刚连上服务器

ssh root@你的服务器IP        # 连接服务器
whoami                       # 我现在是谁
pwd                          # 我现在在哪
uname -a                     # 这是什么系统
df -h                        # 磁盘还剩多少(-h = 人类可读)
free -h                      # 内存还剩多少

df -hfree -h 建议养成习惯。轻量服务器通常只有 2G 内存、40G 磁盘,很容易满。

二、找路、看文件

ls -lah                      # 列出所有文件,含隐藏文件和大小
cd /opt/blog                 # 进目录
cat app/config.py            # 看完整文件
less /var/log/nginx/error.log  # 分页看大文件(按 q 退出)
tail -f logs/app.log         # 实时盯着日志刷(排错神器)
head -20 requirements.txt    # 只看前 20 行

tail -f 是排错时用得最多的命令

开一个终端 tail -f 盯日志,另一个终端去访问网站, 出错的那一瞬间日志会直接刷出来。比事后翻日志高效得多。

三、搜索

grep -rn "DATABASE_URL" app/     # 在 app/ 里递归搜关键词,显示行号
find / -name "nginx.conf"        # 全盘找文件
which python3                    # python3 这个命令在哪
ps aux | grep uvicorn            # 找正在跑的 uvicorn 进程

ps aux | grep xxx 里的 | 叫管道,意思是「把左边命令的输出交给右边命令处理」。这是 Linux 最核心的思想之一。

四、装环境

apt update && apt upgrade -y           # 更新软件源(Ubuntu/Debian)
apt install -y python3-pip python3-venv git nginx mysql-server
python3 -m venv .venv                  # 建虚拟环境
source .venv/bin/activate              # 激活它
pip install -r requirements.txt        # 装依赖

&& 的意思是「前一个命令成功了才执行后一个」。如果 apt update 失败了,就不该继续 upgrade。

五、权限

chmod +x deploy/deploy.sh     # 给脚本加可执行权限
chmod 600 .env                # 只有文件主人能读写(放密码的文件必须这样)
chown -R www-data:www-data /opt/blog   # 改文件归属

chmod 600 里的数字是权限位:6 = 读+写,4 = 只读,0 = 没权限,三位分别对应「文件主人 / 同组用户 / 其他所有人」。

所以 600 = 主人可读写,其他人完全碰不到。放数据库密码的 .env 必须是 600。

六、管理服务

systemctl start blog          # 启动
systemctl stop blog           # 停止
systemctl restart blog        # 重启
systemctl status blog         # 看状态(排错第一步)
systemctl enable blog         # 开机自启
journalctl -u blog -f         # 实时看这个服务的日志
journalctl -u blog -n 50      # 看最近 50 行

服务起不来的时候,systemctl statusjournalctl -u 服务名 -n 50 这两条基本能定位到问题。

七、端口和网络

ss -tlnp                      # 看哪些端口在监听、被谁占用
curl http://127.0.0.1:8000/healthz    # 在服务器本机测试服务通不通
ping baidu.com                # 测网络通不通

排查「网站打不开」时的正确顺序:

  1. systemctl status blog —— 服务活着吗?
  2. curl 127.0.0.1:8000 —— 服务器本机能访问吗?
  3. ss -tlnp —— 端口真的在监听吗?
  4. 都正常 → 那就是防火墙/安全组的问题

这个顺序是从里往外排,能少走很多弯路。

八、传文件

scp ./本地文件 root@服务器IP:/opt/blog/     # 从本机传到服务器
scp root@服务器IP:/opt/blog/日志 ./         # 从服务器拉回本机

不过用 Git 更好:本地 git push,服务器 git pull

九、救命的几个

Ctrl + C                      # 停掉当前命令
Ctrl + D / exit               # 退出当前登录
history                       # 看我之前敲过什么
kill -9 进程号                 # 强制杀掉进程(先用 ps aux 找到进程号)
du -sh *                      # 看当前目录下每个文件夹多大(找谁占满了磁盘)

小结

真正需要背的其实就这些。剩下的等你遇到具体问题时再查,那时候才记得住。

我的建议:把这篇存成书签,每敲一个命令的时候想一下它是干嘛的,而不是复制粘贴。三次之后就不用看了。