大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
Linux 基础
这一课你将能做到
- 用 SSH 连接远程服务器
- 用常用命令管理文件、进程、服务
- 部署 Node.js 应用并配置 Nginx 反向代理
为什么要学
本地开发用 Windows/Mac,但生产环境 90% 是 Linux 服务器。不会 Linux,代码写完部署不上去,等于白搭。
人话:Linux 是「服务器操作系统」,你的代码最终要跑在它上面。
先建立图像
你的电脑(Windows/Mac) 云服务器(Linux)
│ │
│ 1. 写代码 │
│ 2. git push │
▼ ▼
GitHub ──────────────────────► git pull
npm install
pm2 start app.js
│
▼
用户访问 http://服务器IP
跟着做
步骤 1:SSH 连接服务器
# 连接
ssh root@101.201.41.85
# 首次连接提示 fingerprint,输入 yes
# 然后输入密码
# 用密钥登录(更安全)
ssh-keygen -t rsa -b 4096 # 本地生成密钥对
ssh-copy-id root@101.201.41.85 # 上传公钥到服务器
ssh root@101.201.41.85 # 免密登录
步骤 2:文件与目录操作
# 当前目录
pwd # /root
# 列出文件
ls # 简单列表
ls -l # 详细信息
ls -la # 包含隐藏文件
# 切换目录
cd /var/www # 进入目录
cd .. # 上一级
cd ~ # 回家目录
# 创建、删除
mkdir myapp # 创建目录
touch app.js # 创建空文件
rm file.txt # 删除文件
rm -rf myapp # 递归删除目录(危险!)
# 复制、移动
cp app.js app.js.bak # 复制
mv old.js new.js # 重命名
mv app.js /var/www/ # 移动
# 查看文件
cat app.js # 全部内容
less app.js # 分页查看(按 q 退出)
head -n 20 app.js # 前 20 行
tail -n 20 app.js # 后 20 行
tail -f app.log # 实时追踪日志
# 查找
find /var/www -name "*.js" # 按文件名查找
grep -r "TODO" /var/www/ # 按内容查找
步骤 3:权限管理
# 查看权限
ls -l
# -rw-r--r-- 1 root root 1024 Jan 15 10:00 app.js
# rwxr-xr-x
# ││││││└─ 其他人:读、执行
# │││││└─── 组:读、执行
# │││└───── 所有者:读、写、执行
# │└──────── 文件类型(- 文件,d 目录)
# 修改权限
chmod 755 app.sh # rwxr-xr-x
chmod +x app.sh # 加执行权限
chmod -R 755 /var/www # 递归修改
# 修改所有者
chown www-data:www-data app.js
chown -R www-data:www-data /var/www
步骤 4:进程管理
# 查看进程
ps aux # 所有进程
ps aux | grep node # 查找 node 进程
# 查看端口占用
netstat -tlnp | grep 3000 # 谁占了 3000 端口
ss -tlnp | grep 3000 # 新版命令
# 杀进程
kill 12345 # 正常结束
kill -9 12345 # 强制结束
# 后台运行
nohup node app.js > app.log 2>&1 &
步骤 5:软件安装(以 Ubuntu 为例)
# 更新源
sudo apt update
# 安装软件
sudo apt install nginx
sudo apt install mysql-server
sudo apt install redis-server
# 安装 Node.js(用 nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 18
nvm use 18
步骤 6:部署 Node.js 应用
# 1. 拉代码
cd /var/www
git clone https://github.com/yourname/myapp.git
cd myapp
# 2. 装依赖
npm install --production
# 3. 配置环境变量
cp .env.example .env
vim .env # 编辑配置
# 4. 用 PM2 守护进程
npm install -g pm2
pm2 start app.js --name myapp
pm2 save # 保存进程列表
pm2 startup # 开机自启
# 5. 查看状态
pm2 list
pm2 logs myapp
pm2 restart myapp
步骤 7:Nginx 反向代理
# 安装
sudo apt install nginx
# 配置
sudo vim /etc/nginx/sites-available/myapp
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
# 启用配置
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启
sudo systemctl restart nginx
步骤 8:防火墙
# UFW(Ubuntu 防火墙)
sudo ufw allow 22 # SSH
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw enable # 启用
sudo ufw status # 查看状态
常用命令速查
| 命令 | 作用 | 示例 |
|---|---|---|
df -h | 磁盘使用 | 看磁盘剩多少 |
free -h | 内存使用 | 看内存剩多少 |
top / htop | 进程监控 | 看 CPU/内存占用 |
du -sh * | 目录大小 | 看哪个目录占空间 |
scp | 远程复制 | scp file root@ip:/path |
vim / nano | 编辑文件 | vim app.js |
systemctl | 服务管理 | systemctl restart nginx |
讲清楚要点
- 一切皆文件:Linux 把硬件、进程、网络都抽象成文件。
- 权限是安全基石:rwx 三位一组,所有者/组/其他人。
- 进程管理:前台运行 vs 后台运行,PM2 守护 Node.js 进程。
- Nginx 反向代理:80 端口接收请求,转发给本地 3000 端口的 Node 应用。
- 防火墙只开必要端口:22(SSH)、80(HTTP)、443(HTTPS)。
你可能会懵的地方
-
rm -rf 为什么这么危险? 递归 + 强制删除,不询问。
rm -rf /会删掉整个系统。执行前确认路径。 -
sudo 是什么? 临时用 root 权限执行命令。普通用户改系统文件需要 sudo。
-
为什么要用 PM2? Node 直接跑,进程挂了就停了。PM2 自动重启、日志管理、开机自启。
-
Nginx 和 Apache 选哪个? Nginx 轻量、高并发;Apache 功能全、配置灵活。现代项目用 Nginx。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
rm -rf / var/log | 多了个空格,删掉根目录 | rm -rf /var/log |
| 用 root 跑 Node 应用 | 被入侵 = 拿到 root | 创建普通用户,限制权限 |
| 防火墙全开 | 暴露所有端口 | 只开 22、80、443 |
| 密码登录 + 弱密码 | 被暴力破解 | 用密钥登录,禁用密码 |
直接 node app.js | 进程挂了就停 | 用 PM2 守护 |
卡点急救
- 端口被占用:
netstat -tlnp | grep 3000找进程,kill掉。 - 权限不足:
Permission denied,加sudo或chmod +x。 - 磁盘满了:
df -h看哪个分区满,du -sh *找大文件。
面试常问
-
如何查看服务器性能?
top看 CPU/内存,df -h看磁盘,free -h看内存,iostat看 IO。 -
软链接和硬链接区别? 软链接(符号链接)是快捷方式,删原文件链接失效;硬链接是同一个 inode,删原文件链接仍可用。
-
如何排查服务挂了?
systemctl status nginx→journalctl -u nginx→tail -f /var/log/nginx/error.log。
自测三问
chmod 755是什么意思?- 如何让 Node 应用开机自启?
- Nginx 反向代理的作用?
小结一句话
Linux 是服务器的操作系统,掌握 SSH、文件管理、进程管理、Nginx 配置,就能把代码部署上线。
延伸
- Linux 命令大全
- 下一课:AWS VPC 虚拟私有云。