Skip to content
第 1 章 运维 ⏱ 12 分钟阅读

第 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',强制问一句。

二、目录与文件命令 ​

bash
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。

三、查找命令 ​

bash
# 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(过滤行) ​

bash
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(替换 / 删除行) ​

bash
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(列处理) ​

bash
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。

bash
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。

六、用户管理 ​

bash
# 增删
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                                      # 之后免密

七、进程管理 ​

bash
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 会丢内存数据,数据库慎用。

八、网络命令 ​

bash
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 才能到最终页面。

九、软件包管理 ​

bash
# 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

动手练习 ​

  1. 用 useradd 建用户 dev,加入 docker 组(组不存在先建)
  2. 用 find 找出 /var/log 下大于 50M 的日志文件
  3. 用 grep -E 统计 nginx 访问日志里 404 出现次数
  4. 配置 SSH 免密登录到另一台机器(用 ed25519 密钥)

下一章:第 2 章:Nginx 实战 →

本站基于 VitePress 构建 · 由 StackHub 团队维护