一、Linux 是什么
Linux 是一个开源的类 Unix 操作系统内核,由 Linus Torvalds 于 1991 年创建。它广泛应用于服务器、嵌入式设备、超级计算机和移动端(Android),是后端开发和 DevOps 的核心环境。
前端工程师为什么需要 Linux
- 服务器环境:生产环境 90%+ 运行在 Linux 上
- CI/CD 流水线:GitHub Actions、GitLab Runner 默认 Linux 环境
- 命令行工具:npm/node、git、Docker 在 Linux 上表现最佳
- SSH 运维:排查线上问题、查看日志、部署代码
二、目录结构
1 2 3 4 5 6 7 8 9 10 11 12
| / 根目录 ├── bin/ 系统命令(ls、cp、mv) ├── sbin/ 系统管理命令(reboot、fdisk) ├── etc/ 配置文件(nginx.conf、hosts) ├── var/ 可变数据(日志 /var/log、缓存) ├── usr/ 用户程序(/usr/local 常用来安装软件) ├── home/ 用户主目录(/home/ubuntu) ├── root/ root 用户主目录 ├── tmp/ 临时文件(重启后清除) ├── opt/ 可选软件包 ├── proc/ 进程信息(虚拟文件系统) └── dev/ 设备文件
|
三、文件操作
查看与导航
1 2 3 4 5 6 7 8 9 10 11
| pwd ls ls -l ls -a ls -lh ls -lt ls -la /var/log
cd /home/ubuntu cd ~ cd -
|
创建与删除
1 2 3 4 5 6 7 8 9 10 11 12 13
| touch file.txt mkdir dir mkdir -p a/b/c
cp file.txt /tmp/ cp -r dir/ /tmp/ cp file.txt file_backup.txt
mv file.txt /tmp/ mv old.txt new.txt
rm file.txt rm -rf dir/
|
查看文件内容
1 2 3 4 5 6 7 8
| cat file.txt less file.txt head -20 file.txt tail -50 file.txt tail -f app.log
wc -l file.txt wc -w file.txt
|
搜索
1 2 3 4 5 6 7 8 9 10 11
| grep "error" app.log grep -i "error" app.log grep -r "TODO" src/ grep -n "error" app.log grep -c "error" app.log
find . -name "*.js" find /var -size +100M find . -mtime -1
|
解压缩
1 2 3 4
| tar -czvf archive.tar.gz dir/ tar -xzvf archive.tar.gz unzip file.zip zip -r archive.zip dir/
|
四、文件权限
权限结构
1 2 3 4 5 6 7
| ls -l -rw-r--r-- 1 root root 1024 Jan 1 12:00 file.txt │└┬┘└┬┘└┬┘ │ │ │ └ 其他用户权限(r-- = 可读) │ │ └─── 同组用户权限(r-- = 可读) │ └────── 所有者权限(rw- = 可读写) └──────── 文件类型(- 普通文件,d 目录,l 符号链接)
|
修改权限(chmod)
1 2 3
| chmod 755 script.sh chmod +x script.sh chmod -R 644 public/
|
常见权限值:
| 权限 | 数字 | 说明 |
|---|
rwx | 7 | 可读、可写、可执行(程序/脚本) |
rw- | 6 | 可读可写(配置文件) |
r-x | 5 | 可读可执行(公共程序) |
r-- | 4 | 只读 |
修改所有者(chown)
1 2
| chown user:group file.txt chown -R ubuntu:ubuntu /app/
|
五、进程管理
1 2 3 4 5 6 7 8 9 10 11 12
| ps aux ps aux | grep nginx top htop kill 1234 kill -9 1234 kill -15 1234
nohup node server.js & jobs fg %1
|
六、网络相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| curl https://example.com curl -I https://example.com wget https://example.com/file
ping -c 4 google.com ss -tlnp ss -tunap
nslookup example.com dig example.com
ssh user@192.168.1.100 ssh -i key.pem user@host scp file.txt user@host:/tmp/ scp user@host:/remote/file ./
|
七、磁盘与内存
1 2 3 4 5 6 7
| df -h du -sh /var/log/ du -h --max-depth=1
free -h uname -a lscpu
|
八、包管理
Debian/Ubuntu(apt)
1 2 3 4 5 6 7 8 9
| sudo apt update sudo apt upgrade sudo apt install nginx sudo apt remove nginx apt search keyword
dpkg -l | grep nginx dpkg -L nginx
|
CentOS/RHEL(yum/dnf)
1 2 3
| sudo dnf update sudo dnf install nginx sudo dnf remove nginx
|
Node.js 相关(nvm)
1 2 3
| nvm install 20 nvm use 20 nvm ls
|
九、Shell 技巧
管道与重定向
1 2 3 4 5 6 7 8 9 10
| command1 | command2
ls -la > output.txt ls -la >> output.txt cat < input.txt
ps aux | grep node cat access.log | grep "500" | wc -l ls -la | sort -k5 -n
|
文本处理三剑客
1 2 3 4 5 6 7 8 9 10 11
| grep "ERROR" app.log
sed 's/foo/bar/g' file.txt sed -i 's/foo/bar/g' file.txt
awk '{print $1, $4}' access.log awk '{sum+=$NF} END {print sum}' awk '$9 == 500 {count++} END {print count}' access.log
|
环境变量
1 2 3 4 5 6 7 8
| echo $PATH export MY_VAR="hello" echo $MY_VAR
~/.bashrc ~/.bash_profile ~/.zshrc
|
别名
1 2 3 4 5 6
| alias ll='ls -la' alias ..='cd ..' unalias ll
echo "alias ll='ls -la'" >> ~/.bashrc
|
快捷键
| 快捷键 | 作用 |
|---|
Ctrl + C | 终止当前命令 |
Ctrl + D | 退出终端 |
Ctrl + Z | 暂停命令(fg 恢复) |
Ctrl + R | 搜索历史命令 |
Ctrl + A | 光标移到行首 |
Ctrl + E | 光标移到行尾 |
Ctrl + U | 删除光标前的内容 |
Ctrl + K | 删除光标后的内容 |
Ctrl + W | 删除前一个单词 |
Tab | 自动补全文件名/命令 |
十、Vim 基础
| 模式 | 操作 | 说明 |
|---|
| 普通模式 | i | 进入插入模式 |
| 普通模式 | dd | 删除当前行 |
| 普通模式 | yy | 复制当前行 |
| 普通模式 | p | 粘贴 |
| 普通模式 | u | 撤销 |
| 普通模式 | :w | 保存 |
| 普通模式 | :q | 退出 |
| 普通模式 | :wq | 保存并退出 |
| 普通模式 | :q! | 不保存强制退出 |
| 普通模式 | /keyword | 搜索 keyword |
| 普通模式 | n / N | 下一个/上一个搜索结果 |
十一、实战场景
场景一:排查线上问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| ps aux | grep node
ss -tlnp | grep 3000
tail -f /var/log/app/error.log
grep "Uncaught Exception" /var/log/app/error.log
top -o %MEM
df -h
|
场景二:部署前端项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ssh ubuntu@your-server
sudo apt update sudo apt install nginx -y
git clone https://github.com/user/project.git cd project
npm install npm run build
sudo cp -r dist/* /var/www/html/
sudo systemctl restart nginx
|
场景三:日志分析
1 2 3 4 5 6 7 8 9 10 11
| cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
cat access.log | awk '{print $9}' | sort | uniq -c | sort -rn
cat access.log | awk '$9 ~ /^5/ {print $0}' | wc -l
awk -v date="$(date -d '5 minutes ago' '+%d/%b/%Y:%H:%M')" '$4 > "[" date' access.log
|
十二、常见问题
Q1: command not found
1 2 3 4 5 6
| which nginx export PATH=$PATH:/usr/local/bin
sudo apt install nginx
|
Q2: Permission denied
1 2 3 4 5 6 7 8
| chmod +x script.sh
sudo chown -R $USER /path
sudo apt install nginx
|
Q3: 端口被占用
1 2
| ss -tlnp | grep 3000 kill -9 <PID>
|
Q4: 磁盘空间满了
1 2 3 4
| df -h du -sh /var/log/* | sort -rh | head -5
sudo journalctl --vacuum-time=7d
|
Q5: 如何查看历史命令
1 2 3 4 5
| history history | grep nginx !! !$ !233
|
十三、推荐学习路径
- 掌握文件和目录操作(
ls、cd、cp、mv、rm) - 学会查看文件(
cat、less、tail、grep) - 理解权限和进程管理(
chmod、ps、kill) - 掌握管道和重定向(
|、>、>>) - 学习包管理和 Vim 基本操作
- 综合实践:部署项目、分析日志