Linux 运维必备:文件、权限、软件包、进程服务与排障命令
面向部署实战讲最常用的 Linux 知识:目录结构、权限模型、apt 装软件、systemd 把程序变成开机自启的服务、用环境变量管密钥,以及端口/磁盘/内存/日志的一整套排障命令
- 熟悉 Linux 目录结构,知道配置、日志、程序分别放在哪
- 看懂用户/组与读写执行权限,会用 chmod/chown
- 会用 apt 装软件、用 systemctl 管理并设置服务开机自启
- 掌握环境变量管密钥的做法,以及端口、磁盘、内存、日志排障命令
部署不是图形界面,是和命令行打交道
服务器一般没有图形界面,你通过 SSH 敲命令完成一切。这一课不追求把你训成运维专家,只讲部署一个 Web 应用真正高频用到的那部分 Linux 知识——看懂目录、管得住权限、装得上软件、把后端变成常驻服务、出问题知道用哪几条命令定位。朋友好学的服务器就是用这套方式运行 Nginx、Node(PM2) 和 TTS 服务的。
目录结构:东西都放在哪
Linux 文件系统层级(FHS)高频目录
/etc 系统与服务的配置文件(如 /etc/nginx、/etc/systemd)
/var 经常变化的数据:/var/log 日志、/var/lib 数据
/home 普通用户的家目录
/root root 用户家目录
/usr 安装的程序与命令
/opt 可选/第三方软件,常用来放自己部署的应用
/tmp 临时文件(重启可能清空)
~ 当前用户家目录的简写;. 当前目录;.. 上级目录权限模型:用户、组与 rwx
Linux 每个文件/目录都有「所有者、所属组、其他人」三类身份,每类有读(r=4)、写(w=2)、执行(x=1)三种权限。用 ls -l 看到的 -rwxr-xr-- 就分别对应这三类。部署高频操作:chmod 改权限(如 chmod 600 私钥表示仅所有者可读写,SSH 对私钥权限过宽会直接拒绝使用)、chown 改属主。
ls -l file
# -rw------- 1 ubuntu ubuntu 私钥(600,仅自己读写)
# rwx=7 rw-=6 r-x=5 r--=4
chmod 600 ~/.ssh/id_ed25519 # 私钥必须收紧,否则 ssh 拒绝
chown -R ubuntu:ubuntu /opt/app # 把目录属主改成普通用户
sudo # 以管理员身份执行本条命令装软件:包管理器 apt
Ubuntu/Debian 用 apt 管理软件(CentOS 系用 yum/dnf)。装 Nginx、Node 运行时、证书工具都靠它。注意先 update 刷新软件源索引,再 install:
sudo apt update # 刷新软件包索引(不是升级软件)
sudo apt install -y nginx # 安装 Nginx,-y 自动确认
sudo apt upgrade -y # 升级已装软件
nginx -v # 看版本,验证装好了让程序「常驻 + 开机自启」:systemd 与 PM2
你直接 node server.js 启动的程序,一关 SSH 窗口就被杀了,更不会开机自启。生产要用进程管理器。Linux 自带 systemd,用 systemctl 把程序注册成服务;Node 生态常用更轻量的 PM2。朋友好学的 Node 后端用 PM2 守护、TTS 用 systemd 服务,都能做到崩溃自动重启、开机自启。
# systemd:启停/看状态/开机自启(以 nginx 为例)
sudo systemctl start nginx
sudo systemctl enable nginx # 设为开机自启
sudo systemctl status nginx # 看运行状态(绿色 active)
sudo systemctl restart nginx # 改完配置重启
journalctl -u nginx -f # 实时跟踪该服务日志
# PM2 守护 Node 进程
pm2 start server.js --name pyxis # 启动并命名
pm2 save && pm2 startup # 保存进程列表并生成开机自启Nginx、systemd 服务改完配置不会自动生效,要重启或热加载;Nginx 重启前务必先 sudo nginx -t 检查语法,配置写错又直接 restart 会让正在运行的网站一起挂掉。这是「一次小改动导致全站 502」的经典原因。
用环境变量管理密钥,别写进代码
数据库密码、大模型 API Key、支付私钥绝不能硬编码在源码里(会进 Git、会被看到)。标准做法是放进环境变量,程序启动时读取;本地用 .env 文件(且 .env 必须写进 .gitignore),服务器通过服务配置或进程管理器注入。这叫配置与代码分离,是十二要素应用的基本原则,Stage15-m7 还会展开。
# 服务器上给服务注入环境变量(示意)
export ARK_API_KEY="你的密钥" # 仅当前会话
# 持久化写进 systemd 的 EnvironmentFile 或 PM2 的 ecosystem 配置
# 程序里读取:Node -> process.env.ARK_API_KEY排障命令工具箱
服务器出问题别慌着改。先确认现象层:是端口没监听(ss -ltnp)、进程崩了(systemctl status/pm2 list)、磁盘满了(df -h,磁盘满会让数据库和日志集体异常)、还是内存不足被系统杀掉进程(free -h、dmesg 看 OOM)。定位到具体服务后再看它的日志,日志里的第一条 Error 往往就是根因,后面一大串都是连锁反应。记住:状态命令告诉你「哪里坏了」,日志告诉你「为什么坏」。
修改 Nginx 配置后,既想让新配置生效、又怕语法错误把正在运行的网站带挂,正确操作是?
本节小结
Linux 部署高频:FHS 目录里 /etc 配置、/var/log 日志、/opt 放应用、~ 家目录;权限按所有者/组/其他人各分 r(4)w(2)x(1),chmod 改权限(私钥 600)、chown 改属主、sudo 提权。Ubuntu 用 apt update 再 install 装软件。常驻与开机自启靠 systemd(systemctl start/enable/status/restart、journalctl 看日志)或 PM2(start/save/startup),改配置先 nginx -t 自检再加载。密钥用环境变量注入、.env 不进 Git,做到配置与代码分离。排障由外到内:ss -ltnp 看端口、df -h 看磁盘、free -h 看内存、top/ps 看进程、journalctl/tail 看日志,抓住第一条 Error。
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
把会话、上传文件、定时任务状态从应用进程里挪到 Redis、对象存储或数据库后,任何一台应用实例都能处理任何请求,扩容就是多开几个实例挂到负载均衡后面。反过来,只要状态留在某台机器的内存里,它就既无法横向扩容,也无法滚动更新(一重启用户就掉线)。面试答「如何支撑更高并发」,先讲无状态化,再谈加机器和缓存。