第 1 章:Linux 基础
学习目标
- 熟悉 Linux 文件系统结构
- 掌握文件、文本、权限命令
- 学会进程、网络、用户管理
- 避开运维常见坑
一、文件系统结构
Linux 一切皆文件,从根目录 / 出发:
| 目录 | 作用 |
|---|---|
/bin | 基本命令(ls、cp) |
/sbin | 系统命令(ifconfig、reboot) |
/etc | 配置文件 |
/home | 普通用户家目录 |
/root | 超级用户家目录 |
/usr | 应用软件 |
/var | 运行时数据(log、cache) |
/tmp | 临时文件(重启清空) |
/opt | 第三方软件 |
/proc | 进程 / 内核信息(虚拟) |
⚠️ 坑 1:
rm -rf /等于自杀,根目录不能删。生产环境改~/.bashrc加alias rm='rm -i',强制问一句。
二、目录与文件命令
cd /var/log # 绝对路径
cd .. # 上级
cd ~ # 家目录(~ 代表 /home/当前用户)
cd - # 上次所在目录
ls # 简单列表
ls -l # 详细(权限、属主、大小、时间)
ls -la # 含隐藏文件(.开头)
ls -lh # 人类可读(K/M/G)
ls -lt # 按修改时间倒序
mkdir test # 建目录
mkdir -p a/b/c # 递归建,父级不存在一并建
touch file.txt # 建空文件 / 更新 mtime
cp src.txt dst.txt # 复制
cp -r dir1 dir2 # 递归复制目录
mv old new # 移动 / 重命名(原子操作)
rm file.txt # 删文件
rm -rf dir # 强制递归删目录
cat file # 一次性全输出(文件大别用)
less file # 分页(空格翻,q 退)
head -n 10 file # 前 10 行
tail -n 10 file # 后 10 行
tail -f log # 实时追踪日志(必备)⚠️ 坑 2:大文件用
cat会卡死终端,用less或head/tail。看日志永远用tail -f,刷新实时输出。 ⚠️ 坑 3:rm -rf没回收站,删错就找不回来。重要数据先备份再删,或者改用trash-cli。
三、查找命令
# find:功能最全
find / -name "*.log" # 全盘搜 .log
find . -type f -size +100M # 当前目录下大于 100M 的文件
find . -mtime -7 # 7 天内修改过的
find . -perm 777 # 找 777 权限的文件
# which / whereis:查命令位置
which java # /usr/bin/java
whereis nginx # 二进制、源码、man
# locate:快(走数据库)
locate nginx.conf
updatedb # 手动刷新数据库⚠️ 坑 4:
find /会扫全盘(包括/proc、/sys),慢且触发权限噪音。先指定路径find /var -name "*.log"。
四、文本三剑客
grep(过滤行)
grep "error" app.log # 包含 error 的行
grep -i "error" app.log # 忽略大小写
grep -n "error" app.log # 显示行号
grep -v "DEBUG" app.log # 反选(去掉 DEBUG)
grep -E "error|warn" app.log # 多模式(扩展正则)
grep -r "TODO" src/ # 递归目录
grep -c "404" access.log # 统计出现次数
ps aux | grep nginx # 经典组合:进程过滤sed(替换 / 删除行)
sed 's/old/new/' file.txt # 每行替换第一个
sed -i 's/old/new/g' file.txt # 原地全部替换
sed '/^$/d' file.txt # 删空行
sed -n '10,20p' file.txt # 打印 10-20 行
sed 's|old|new|g' file.txt # 分隔符用 |(路径有 / 时)⚠️ 坑 5:
sed不加-i只输出不写文件。默认行为是输出到屏幕。改重要文件先不加-i试一次,确认输出对了再加。
awk(列处理)
awk '{print $1}' file # 打印第 1 列(默认空格分割)
awk -F: '{print $1, $7}' /etc/passwd # 指定 : 分割,打印用户名和 shell
awk '$3 > 100 {print $1, $3}' file # 条件过滤
awk '{sum += $1} END {print sum}' file # 求和
awk 'NR==10,NR==20' file # 打印 10-20 行五、权限管理
权限位 rwxr-xr-- 从左到右:属主 / 属组 / 其他 的 r/w/x。
数值记忆:r=4、w=2、x=1,相加得到 0-7。
chmod 755 file # rwxr-xr-x(典型可执行脚本)
chmod 644 file # rw-r--r--(典型配置文件)
chmod 600 file # rw-------(SSH 私钥必须)
chmod u+x script.sh # 给属主加执行权限
chown user:group file # 改属主 + 属组
chown -R www:www /var/www # 递归改属主
# 特殊位
chmod +x file # 给所有人加执行(简写)
chmod -R 755 /opt/app # 递归设目录权限⚠️ 坑 6:
chmod 777不安全,生产环境绝对禁止。网站目录一般755,文件644,可写目录(如 uploads)755 + 属主 www。 ⚠️ 坑 7:脚本没执行权限 →./script.sh报Permission denied,要么chmod +x要么bash script.sh。 ⚠️ 坑 8:SSH 私钥必须是600,否则ssh拒绝加载,报Permissions 0644 for 'id_rsa' are too open。
六、用户管理
# 增删
useradd -m -s /bin/bash tom # -m 自动建家目录,-s 指定 shell
passwd tom # 设置密码
userdel -r tom # 删用户 + 家目录
# 组
groupadd dev
usermod -aG dev tom # 加入附加组(-a 追加,不覆盖)
# 切换
su - tom # 切用户,加载环境变量
sudo command # 临时提权
id tom # 看 uid、gid、组
# SSH 免密登录(运维必备)
ssh-keygen -t ed25519 # 本地生成密钥
ssh-copy-id user@host # 上传公钥
ssh user@host # 之后免密七、进程管理
ps aux # BSD 风格,全部进程
ps -ef # System V 风格
top # 实时(按 q 退出)
htop # 增强版(需安装)
# CPU / 内存 Top 5
ps aux --sort=-%cpu | head -6
ps aux --sort=-%mem | head -6
# 操作
kill PID # 发 SIGTERM,优雅退出
kill -9 PID # 强制(SIGKILL,数据可能丢)
killall nginx # 按进程名杀
pkill -f "java -jar" # 按命令行模式杀
# 后台运行
nohup java -jar app.jar > log.out 2>&1 & # 退出终端不杀
disown # 把任务从当前 shell 解绑
# systemd(主流发行版)
systemctl start nginx
systemctl enable nginx # 开机自启
systemctl status nginx
journalctl -u nginx -f # 看日志⚠️ 坑 9:
kill PID不加-9是发送信号,进程可以拦截做清理(如关闭连接)。直接-9会丢内存数据,数据库慎用。
八、网络命令
ip addr # 看 IP(macOS 用 ifconfig)
ip route # 路由表
curl -I https://x.com # 只看响应头
curl -v https://x.com # 详细握手过程(排查 HTTPS 必备)
wget url # 下载文件
# 端口监听
ss -tlnp # 谁在监听(替代老的 netstat)
lsof -i:8080 # 谁占着 8080 端口
# DNS
nslookup x.com
dig x.com # 更详细
# SSH / 文件传输
ssh user@host
scp file user@host:/path # 本地 → 远程
scp user@host:/file . # 远程 → 本地
rsync -avz src/ user@host:/dst/ # 增量同步⚠️ 坑 10:
curl不加-L不跟随 301/302 重定向,加-L才能到最终页面。
九、软件包管理
# Debian / Ubuntu
apt update # 刷索引
apt install nginx
apt remove nginx
# CentOS / Rocky / RHEL
yum install nginx # 旧
dnf install nginx # 新
# Alpine(Docker 镜像常用)
apk add nginx
# 查包
dpkg -l | grep nginx # Debian 系
rpm -qa | grep nginx # RHEL 系十、本章小结
| 类别 | 关键命令 |
|---|---|
| 文件 | ls / cd / cp / mv / rm / find |
| 文本 | grep / sed / awk |
| 权限 | chmod / chown(644、755) |
| 进程 | ps / kill / systemctl |
| 网络 | curl / ssh / scp / ss |
| 用户 | useradd / sudo / ssh-keygen |
动手练习
- 用
useradd建用户dev,加入docker组(组不存在先建) - 用
find找出/var/log下大于 50M 的日志文件 - 用
grep -E统计 nginx 访问日志里 404 出现次数 - 配置 SSH 免密登录到另一台机器(用
ed25519密钥)
下一章:第 2 章:Nginx 实战 →