Linux系统管理教程
文章摘要
本文是一份全面的 Linux 系统管理与 Web 服务器环境搭建指南,涵盖从基础到实战的完整知识体系。主要内容包括:
📚 核心章节概览
- Linux 入门基础 - 介绍 Linux 内核、主流发行版、系统安装流程及常用命令
- 文件系统管理 - 详解文件类型、目录结构、权限控制与文件操作命令
- 用户与权限管理 - 用户/组管理、权限控制机制、sudo配置及安全最佳实践
- 软件包管理 - 对比主流包管理器(APT/DNF/YUM/Pacman/Zypper),涵盖编译安装与容器化部署
- LAMP 环境实战 - 在 Ubuntu 和 CentOS 系统上完整搭建 Apache + MySQL/MariaDB + PHP 环境
🛠️ 实战技能要点
- 系统管理:掌握进程监控、服务管理、网络配置等核心运维技能
- 安全配置:学习防火墙配置、用户权限控制、服务安全加固
- 环境搭建:提供详细的 LAMP 环境安装步骤、配置示例和故障排除方法
- 性能优化:包含 Apache MPM 调优、MySQL InnoDB 配置、PHP-FPM 进程管理等高级主题
- 监控维护:介绍系统监控工具、性能测试方法和日志分析技巧
🎯 适用人群
- Linux 系统管理员和运维工程师
- Web 开发者和后端工程师
- 云计算和 DevOps 从业者
- 计算机专业学生和 Linux 爱好者
📖 学习收获
通过本文,您将能够:
- 熟练使用 Linux 常用命令和工具
- 理解 Linux 系统架构和权限模型
- 掌握主流包管理器的使用方法
- 独立搭建和优化 LAMP Web 服务器环境
- 实施系统监控和性能调优策略
本文结合理论讲解与实战示例,提供完整的命令行代码和配置说明,适合作为日常运维参考手册和技能学习指南。
第一章 Linux入门
Linux简介
Linux 是一种开源的类 Unix 操作系统内核,由林纳斯·托瓦兹于 1991 年首次发布。它基于 POSIX 和 Unix 标准,支持多用户、多任务、多线程及多 CPU 架构。
最新版本
- Linux 内核 6.x 系列:2026年最新稳定版本,支持更多硬件和性能优化
- 长期支持版本:Linux 6.6 LTS(支持至 2031 年)
- 开发版本:Linux 6.7-rc 系列
主流发行版
| 发行版 | 包管理器 | 特点 | 适用场景 |
|---|---|---|---|
| Ubuntu/Debian | apt/dpkg | 用户友好,社区活跃 | 桌面、服务器、开发 |
| RHEL/CentOS | yum/dnf | 企业级稳定,长期支持 | 企业服务器、生产环境 |
| Fedora | dnf | 技术前沿,更新快速 | 开发、测试、新技术尝鲜 |
| Arch Linux | pacman | 滚动更新,高度定制 | 高级用户、开发者 |
| openSUSE | zypper | 稳定性好,YaST管理工具 | 企业、桌面 |
安装指南
1. 准备安装介质
# 下载ISO镜像
wget https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso
# 创建启动U盘(Linux/macOS)
sudo dd if=ubuntu-24.04-live-server-amd64.iso of=/dev/sdX bs=4M status=progress
# Windows可使用Rufus或Ventoy
2. 安装步骤
- 从U盘启动,选择"Install Ubuntu Server"
- 选择语言、时区、键盘布局
- 配置网络连接
- 磁盘分区(建议方案):
/boot:1 GB(EFI 系统分区)/:30–50 GB(根分区)/home:剩余空间(用户数据分区)swap:内存大小的 1–2 倍(交换分区)
- 创建用户账户,设置密码
- 选择安装的软件包(SSH服务器必选)
- 等待安装完成,重启系统
系统基础命令
# 系统信息
uname -a # 显示系统信息
hostnamectl # 显示主机名和系统信息
cat /etc/os-release # 显示发行版信息
lscpu # 显示 CPU 信息
free -h # 显示内存使用情况
df -h # 显示磁盘使用情况
# 时间和日期
date # 显示当前日期时间
timedatectl # 时间日期管理
timedatectl set-timezone Asia/Shanghai # 设置时区为 Asia/Shanghai
# 用户管理
whoami # 显示当前用户
id # 显示用户 ID 信息
sudo -i # 切换到 root 用户
adduser username # 添加用户
usermod -aG sudo username # 授予用户 sudo 权限
passwd username # 修改用户密码
# 进程管理
ps aux # 查看所有进程
top / htop # 实时进程监控
kill -9 PID # 强制终止进程
pkill process_name # 按进程名称终止进程
systemctl status service # 查看服务状态
获取帮助
# 命令帮助
man command # 查看完整手册
command --help # 查看简要帮助
info command # 查看信息文档
# 在线资源
- 官方文档:https://www.kernel.org/doc/
- Arch Wiki:https://wiki.archlinux.org/
- Stack Overflow:https://stackoverflow.com/
- 中文社区:Linux 中国、实验楼
第二章 文件管理
文件类型与目录结构
Linux 文件类型
- 普通文件 (
-):文本文件、二进制文件、数据文件 - 目录文件 (
d):文件夹 - 链接文件 (
l):符号链接 - 设备文件:
- 字符设备 (
c):键盘、终端 - 块设备 (
b):硬盘、U 盘
- 字符设备 (
- 套接字文件 (
s):进程间通信 - 管道文件 (
p):FIFO(命名管道)
标准目录结构
/
├── bin/ # 基本命令(所有用户)
├── boot/ # 启动文件、内核
├── dev/ # 设备文件
├── etc/ # 系统配置文件
├── home/ # 用户主目录
├── lib/ # 共享库
├── media/ # 可移动媒体挂载点
├── mnt/ # 临时挂载点
├── opt/ # 第三方软件
├── proc/ # 进程信息(虚拟文件系统)
├── root/ # root用户主目录
├── run/ # 运行时数据
├── sbin/ # 系统管理命令
├── srv/ # 服务数据
├── sys/ # 系统信息(虚拟文件系统)
├── tmp/ # 临时文件
├── usr/ # 用户程序
└── var/ # 可变数据(日志、缓存)
文件与目录操作
基本操作
# 查看文件
ls -la # 详细列表(含隐藏文件)
ls -lh # 人类可读大小
tree -L 2 # 树状显示(2层)
# 创建删除
mkdir -p /path/to/dir # 创建多级目录
touch file.txt # 创建空文件
rm -rf directory # 强制删除目录
rm -i file # 交互式删除
# 复制移动
cp -r source dest # 递归复制目录
mv oldname newname # 重命名或移动
rsync -av source/ dest/ # 同步文件(保留属性)
# 查看内容
cat file # 显示全部内容
less file # 分页查看
head -n 20 file # 前20行
tail -n 50 file # 后50行
tail -f logfile # 实时跟踪日志
文件权限管理
# 权限表示
-rwxr-xr-- 1 user group 4096 Jan 1 12:00 file
# 类型 所有者权限 组权限 其他用户权限
# 修改权限
chmod 755 script.sh # 数字模式:rwxr-xr-x
chmod u+x,g-w,o= file # 符号模式
chmod -R 755 directory # 递归修改
# 修改所有者
chown user:group file # 修改所有者和组
chown -R user:group dir # 递归修改
# 特殊权限
chmod +s file # 设置SUID/SGID
chmod +t dir # 设置粘滞位
查找文件
# find命令
find /home -name "*.txt" # 按名称查找
find /var/log -type f -size +10M # 查找大于10M的文件
find . -mtime -7 # 7天内修改的文件
find /etc -name "*.conf" -exec cp {} /backup/ \; # 查找并执行命令
# locate命令(需要先更新数据库)
updatedb # 更新数据库
locate nginx.conf # 快速查找
# which/whereis
which python3 # 查找命令路径
whereis python3 # 查找命令及相关文件
文件属性与时间
# 查看文件属性
stat file.txt # 详细属性信息
file unknown.bin # 识别文件类型
# 修改时间戳
touch -t 202601011200 file # 修改为指定时间
touch -a file # 只更新访问时间
touch -m file # 只更新修改时间
# 链接文件
ln -s /path/to/original linkname # 创建软链接
ln original hardlink # 创建硬链接
第三章 用户与权限
用户管理
用户配置文件
# 主要配置文件
/etc/passwd # 用户账户信息
/etc/shadow # 用户密码(加密)
/etc/group # 组信息
/etc/gshadow # 组密码
/etc/sudoers # sudo 权限配置
用户操作命令
# 添加用户
useradd -m -s /bin/bash -c "Full Name" username
# -m 创建家目录
# -s 指定shell
# -c 注释信息
# 设置密码
passwd username
echo "password" | passwd --stdin username # 非交互式设置
# 修改用户
usermod -aG wheel,developers username # 添加到附加组
usermod -s /bin/zsh username # 修改shell
usermod -L username # 锁定账户
usermod -U username # 解锁账户
# 删除用户
userdel -r username # 删除用户及家目录
用户信息查询
# 查看用户信息
id username # 查看用户ID和组信息
who # 查看当前登录用户
w # 查看详细登录信息
last # 查看登录历史
lastlog # 查看最后登录时间
# 切换用户
su - username # 完全切换(加载环境)
sudo -u username command # 以指定用户执行命令
组管理
## 组操作
groupadd developers # 创建组
groupmod -n devs developers # 重命名组
groupdel devs # 删除组
## 组成员管理
gpasswd -a user group # 添加用户到组
gpasswd -d user group # 从组移除用户
gpasswd -A user group # 设置组管理员
# 查看组信息
groups username # 用户所属组
getent group groupname # 查看组信息
权限控制
基本权限
# 权限位说明
rwx rwx rwx
所有者 组用户 其他用户
# 权限值
r = 4 (读)
w = 2 (写)
x = 1 (执行)
# 常用权限
755 = rwxr-xr-x # 可执行文件或目录
644 = rw-r--r-- # 普通文件
600 = rw------- # 私密文件
700 = rwx------ # 私密目录
特殊权限
# SUID (Set User ID)
chmod u+s /usr/bin/passwd
# 执行时以文件所有者(而非执行者)的权限运行
# SGID (Set Group ID)
chmod g+s /shared/directory
# 新建文件继承目录的所属组
# Sticky Bit (粘滞位)
chmod +t /tmp
# 只有文件所有者(或目录所有者)能删除自己的文件
ACL 权限(访问控制列表)
# 查看ACL
getfacl file.txt
# 设置ACL
setfacl -m u:alice:rwx file.txt # 为用户设置权限
setfacl -m g:developers:rx directory # 为组设置权限
setfacl -x u:bob file.txt # 删除用户ACL条目
# 默认ACL(继承)
setfacl -d -m u:alice:rwx directory # 设置默认ACL
sudo 配置
# 编辑sudoers文件(使用visudo)
visudo
# 配置示例
# 允许wheel组使用所有命令
%wheel ALL=(ALL) ALL
# 允许用户执行特定命令无需密码
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
# 允许组执行特定目录下的命令
%developers ALL=(ALL) /usr/local/scripts/*
# 命令别名
Cmnd_Alias SERVICES = /usr/bin/systemctl start *, /usr/bin/systemctl stop *
User_Alias ADMINS = alice, bob
ADMINS ALL=(ALL) SERVICES
安全最佳实践
# 1. 禁用 root SSH 登录
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# 2. 使用密钥认证
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id user@server
# 3. 设置强密码策略
# 编辑 /etc/pam.d/common-password
# password requisite pam_pwquality.so retry=3 minlen=12 difok=3
# 4. 定期检查异常用户
awk -F: '($3 == 0) {print $1}' /etc/passwd # 检查UID为0的用户
lastlog | grep -v "Never logged in" # 检查最近登录
# 5. 监控 sudo 使用
tail -f /var/log/auth.log | grep sudo # 实时监控sudo操作
第四章 软件包管理
包管理器对比
| 特性 | apt (Debian/Ubuntu) | dnf/yum (RHEL/Fedora) | pacman (Arch) | zypper (openSUSE) |
|---|---|---|---|---|
| 配置文件 | /etc/apt/sources.list | /etc/yum.repos.d/ | /etc/pacman.conf | /etc/zypp/repos.d/ |
| 本地安装 | dpkg -i package.deb | rpm -ivh package.rpm | pacman -U package.pkg.tar.zst | zypper install ./package.rpm |
| 搜索包 | apt search keyword | dnf search keyword | pacman -Ss keyword | zypper search keyword |
| 更新源 | apt update | dnf check-update | pacman -Sy | zypper refresh |
| 升级系统 | apt upgrade | dnf upgrade | pacman -Syu | zypper update |
| 清理缓存 | apt autoremove | dnf autoremove | pacman -Sc | zypper clean |
APT (Debian/Ubuntu)
# 源管理
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 备份源
sudo nano /etc/apt/sources.list # 编辑源
# 常用命令
sudo apt update # 更新包列表
sudo apt upgrade # 升级所有包
sudo apt full-upgrade # 智能升级(可能删除包)
sudo apt install package1 package2 # 安装包
sudo apt remove package # 删除包(保留配置)
sudo apt purge package # 完全删除包
sudo apt autoremove # 删除不需要的包
sudo apt search keyword # 搜索包
sudo apt show package # 显示包信息
apt list --installed # 列出已安装包
apt list --upgradable # 列出可升级包
# 高级操作
sudo apt install package=version # 安装特定版本
sudo apt-get download package # 下载deb包不安装
sudo dpkg -i package.deb # 手动安装deb包
sudo apt-get build-dep package # 安装编译依赖
DNF/YUM (RHEL/Fedora/CentOS)
# 配置仓库
sudo nano /etc/yum.repos.d/epel.repo # 添加EPEL仓库
sudo dnf config-manager --add-repo=https://repo.url # 添加仓库
# 常用命令
sudo dnf check-update # 检查更新
sudo dnf update # 更新所有包
sudo dnf upgrade # 升级包(同update)
sudo dnf install package1 package2 # 安装包
sudo dnf remove package # 删除包
sudo dnf autoremove # 删除不需要的依赖
sudo dnf search keyword # 搜索包
sudo dnf info package # 显示包信息
dnf list installed # 列出已安装包
dnf history # 查看操作历史
dnf history undo 10 # 撤销第10次操作
# 组操作
sudo dnf group list # 列出软件组
sudo dnf group install "Development Tools" # 安装软件组
sudo dnf group remove "Virtualization" # 删除软件组
编译安装
# 通用编译步骤
# 1. 下载源码
wget https://example.com/software-1.0.tar.gz
tar -xzf software-1.0.tar.gz
cd software-1.0
# 2. 配置
./configure --prefix=/usr/local
# 3. 编译
make -j$(nproc) # 使用所有CPU核心
# 4. 安装
sudo make install
# 5. 清理
make clean
# 卸载编译安装的软件
sudo make uninstall # 如果支持
# 或手动删除
sudo rm -rf /usr/local/bin/software
sudo rm -rf /usr/local/lib/software
容器化部署
# Docker安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable --now docker
# Podman安装(无守护进程)
sudo dnf install podman # RHEL/Fedora
sudo apt install podman # Ubuntu/Debian
# 使用容器
docker run -d -p 80:80 --name nginx nginx:alpine
podman run -d -p 80:80 --name nginx nginx:alpine
## 第五章 实战案例:搭建 LAMP 环境
LAMP(Linux + Apache + MySQL/MariaDB + PHP)是经典的 Web 服务器环境组合。本章将演示如何在 Ubuntu(使用 apt)和 CentOS(使用 dnf)上搭建完整的 LAMP 环境,并配置防火墙、测试页面和服务管理。
### 1. 在 Ubuntu/Debian 上安装 LAMP
#### 1.1 更新系统并安装 Apache
```bash
# 更新包列表
sudo apt update
# 安装 Apache2
sudo apt install -y apache2
# 启动 Apache 并设置开机自启
sudo systemctl start apache2
sudo systemctl enable apache2
# 验证 Apache 是否运行
sudo systemctl status apache2
1.2 安装 MySQL
# 安装 MySQL 服务器
sudo apt install -y mysql-server
# 启动 MySQL 并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
# 运行安全配置脚本(设置 root 密码、移除匿名用户等)
sudo mysql_secure_installation
1.3 安装 PHP 及扩展
# 安装 PHP 及常用扩展
sudo apt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip
# 重启 Apache 使 PHP 模块生效
sudo systemctl restart apache2
# 验证 PHP 版本
php -v
1.4 配置防火墙(UFW)
# 启用 UFW(若尚未启用)
sudo ufw enable
# 允许 SSH(避免锁定自身访问)
sudo ufw allow ssh
# 允许 HTTP(80)和 HTTPS(443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 查看规则
sudo ufw status verbose
2. 在 CentOS/RHEL 上安装 LAMP
2.1 更新系统并安装 Apache
# 更新系统
sudo dnf update -y
# 安装 Apache(在 CentOS/RHEL 8+ 中叫 httpd)
sudo dnf install -y httpd
# 启动 Apache 并设置开机自启
sudo systemctl start httpd
sudo systemctl enable httpd
# 验证 Apache 是否运行
sudo systemctl status httpd
2.2 安装 MariaDB(MySQL 替代)
# 安装 MariaDB 服务器
sudo dnf install -y mariadb-server
# 启动 MariaDB 并设置开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb
# 运行安全配置脚本
sudo mysql_secure_installation
2.3 安装 PHP 及扩展
# 启用 EPEL 和 Remi 仓库(提供较新 PHP 版本)
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm
# 启用 Remi PHP 8.3 模块(可根据需要选择版本)
sudo dnf module enable php:remi-8.3 -y
# 安装 PHP 及常用扩展
sudo dnf install -y php php-mysqlnd php-cli php-common php-gd php-mbstring php-xml php-curl php-zip
# 重启 Apache 使 PHP 模块生效
sudo systemctl restart httpd
# 验证 PHP 版本
php -v
2.4 配置防火墙(firewalld)
# 启用 firewalld(如果未启用)
sudo systemctl start firewalld
sudo systemctl enable firewalld
# 允许 HTTP(80)和 HTTPS(443)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重新加载防火墙规则
sudo firewall-cmd --reload
# 查看已开放的服务
sudo firewall-cmd --list-all
3. 编写 PHP 测试页面
3.1 创建测试页面
在 Ubuntu/Debian 上,Apache 的默认网站根目录是 /var/www/html/;在 CentOS/RHEL 上,默认是 /var/www/html/。
# 创建 PHP 信息测试页面
sudo tee /var/www/html/info.php << 'EOF'
<?php
phpinfo();
?>
EOF
3.2 创建数据库连接测试页面
sudo tee /var/www/html/dbtest.php << 'EOF'
<?php
$host = 'localhost';
$user = 'root';
$password = 'your_password_here'; // 请替换为实际密码
$database = 'test_db';
// 创建连接
$conn = new mysqli($host, $user, $password);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "MySQL 连接成功!<br>";
// 创建测试数据库
$sql = "CREATE DATABASE IF NOT EXISTS $database";
if ($conn->query($sql) === TRUE) {
echo "数据库 '$database' 创建成功或已存在<br>";
} else {
echo "创建数据库失败: " . $conn->error . "<br>";
}
// 关闭连接
$conn->close();
?>
EOF
4. 服务管理与开机自启
4.1 使用 systemctl 管理服务
# 查看服务状态
sudo systemctl status apache2 # Ubuntu/Debian
sudo systemctl status httpd # CentOS/RHEL
sudo systemctl status mysql # Ubuntu/Debian
sudo systemctl status mariadb # CentOS/RHEL
# 启动服务
sudo systemctl start apache2
sudo systemctl start mysql
# 停止服务
sudo systemctl stop apache2
sudo systemctl stop mysql
# 重启服务
sudo systemctl restart apache2
sudo systemctl restart mysql
# 重新加载配置(不中断服务)
sudo systemctl reload apache2
# 查看服务是否启用开机自启
sudo systemctl is-enabled apache2
sudo systemctl is-enabled mysql
4.2 设置开机自启
# 启用开机自启
sudo systemctl enable apache2
sudo systemctl enable mysql
# 禁用开机自启
sudo systemctl disable apache2
sudo systemctl disable mysql
# 同时启动并启用(常用组合)
sudo systemctl enable --now apache2
sudo systemctl enable --now mysql
4.3 查看服务日志
# 查看 Apache 日志
sudo journalctl -u apache2 -f # Ubuntu/Debian
sudo journalctl -u httpd -f # CentOS/RHEL
# 查看 MySQL/MariaDB 日志
sudo journalctl -u mysql -f # Ubuntu/Debian
sudo journalctl -u mariadb -f # CentOS/RHEL
# 查看特定时间段的日志
sudo journalctl -u apache2 --since "2026-01-01 00:00:00" --until "2026-01-01 23:59:59"
5. 验证 LAMP 环境
5.1 测试 Apache
打开浏览器访问:
http://服务器IP地址/- 应显示 Apache 默认页面http://服务器IP地址/info.php- 应显示 PHP 信息页面
5.2 测试 MySQL/MariaDB 连接
# 登录 MySQL/MariaDB
sudo mysql -u root -p
# 在 MySQL 命令行中执行
CREATE DATABASE webapp;
USE webapp;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users (name) VALUES ('测试用户');
SELECT * FROM users;
EXIT;
5.3 测试 PHP 连接数据库
访问 http://服务器IP地址/dbtest.php,应显示"MySQL 连接成功!"和数据库创建信息。
6. 安全配置建议
6.1 Apache 安全配置
# 禁用目录浏览(Ubuntu/Debian)
sudo sed -i 's/Options Indexes FollowSymLinks/Options -Indexes +FollowSymLinks/' /etc/apache2/apache2.conf
# 隐藏 Apache 版本信息
echo "ServerTokens Prod" | sudo tee -a /etc/apache2/conf-available/security.conf
echo "ServerSignature Off" | sudo tee -a /etc/apache2/conf-available/security.conf
# 重新加载 Apache
sudo systemctl reload apache2
6.2 MySQL/MariaDB 安全配置
# 创建专用数据库用户(避免使用 root)
sudo mysql -u root -p
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON webapp.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
6.3 PHP 安全配置
# 编辑 PHP 配置文件
sudo nano /etc/php/8.3/apache2/php.ini # Ubuntu/Debian
sudo nano /etc/php.ini # CentOS/RHEL
# 建议修改的配置
# 关闭错误显示(生产环境)
display_errors = Off
# 开启错误日志
log_errors = On
error_log = /var/log/php_errors.log
# 限制文件上传大小
upload_max_filesize = 10M
post_max_size = 12M
# 禁用危险函数
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
7. 故障排除
7.1 常见问题及解决
# 1. Apache 无法启动
sudo apache2ctl configtest # Ubuntu/Debian 检查配置
sudo apachectl configtest # CentOS/RHEL 检查配置
# 2. PHP 页面显示源码而不是执行
# 确保已安装 libapache2-mod-php(Ubuntu)或 php(CentOS)并重启 Apache
# 3. MySQL 连接被拒绝
# 检查 MySQL 是否运行:sudo systemctl status mysql
# 检查防火墙是否阻止 3306 端口
# 4. 权限问题(无法写入文件)
sudo chown -R www-data:www-data /var/www/html/ # Ubuntu/Debian
sudo chown -R apache:apache /var/www/html/ # CentOS/RHEL
sudo chmod -R 755 /var/www/html/
7.2 查看错误日志
# Apache 错误日志
sudo tail -f /var/log/apache2/error.log # Ubuntu/Debian
sudo tail -f /var/log/httpd/error_log # CentOS/RHEL
# PHP 错误日志
sudo tail -f /var/log/php_errors.log
# MySQL 错误日志
sudo tail -f /var/log/mysql/error.log # Ubuntu/Debian
sudo tail -f /var/log/mariadb/mariadb.log # CentOS/RHEL
8. 一键安装脚本示例
8.1 Ubuntu/Debian 一键安装脚本
#!/bin/bash
# Ubuntu/Debian LAMP 一键安装脚本
set -e
echo "正在更新系统..."
sudo apt update -y
echo "安装 Apache..."
sudo apt install -y apache2
sudo systemctl enable --now apache2
echo "安装 MySQL..."
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
echo "运行 MySQL 安全配置..."
sudo mysql_secure_installation <<EOF
y
your_password_here
your_password_here
y
y
y
y
EOF
echo "安装 PHP..."
sudo apt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip
sudo systemctl restart apache2
echo "配置防火墙..."
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
echo "创建测试页面..."
sudo tee /var/www/html/info.php << 'EOF'
<?php phpinfo(); ?>
EOF
echo "LAMP 安装完成!请访问 http://$(hostname -I | awk '{print $1}')/info.php"
8.2 CentOS/RHEL 一键安装脚本
8. 性能调优与监控
搭建好 LAMP 环境后,性能调优和监控是确保服务稳定高效运行的关键。本节将介绍 Apache、MySQL/MariaDB、PHP-FPM 的调优配置,以及基础系统监控方法。
8.1 Apache MPM 模式选择与参数调优
Apache 支持多种多处理模块(MPM),选择合适的模式对性能影响显著:
# 查看当前启用的 MPM 模式(Ubuntu/Debian)
sudo apache2ctl -V | grep MPM
# 查看当前启用的 MPM 模式(CentOS/RHEL)
httpd -V | grep MPM
# 切换 MPM 模式(Ubuntu/Debian)
sudo a2enmod mpm_event # 启用 event 模式
sudo a2dismod mpm_prefork # 禁用 prefork 模式
sudo systemctl restart apache2
# 切换 MPM 模式(CentOS/RHEL)
# 编辑 /etc/httpd/conf.modules.d/00-mpm.conf,取消注释相应模块
sudo systemctl restart httpd
MPM 模式选择建议:
- prefork:兼容性最好,每个请求一个进程,适合需要稳定性的场景
- worker:混合多进程多线程,内存占用较少
- event:基于 worker 改进,支持异步处理,性能最佳(Apache 2.4+)
关键调优参数(编辑 /etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf):
# prefork MPM 配置示例
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
# event MPM 配置示例
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
# 连接保持配置
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
8.2 MySQL/MariaDB InnoDB 缓冲池配置
InnoDB 缓冲池是 MySQL 性能的关键,应设置为可用内存的 70-80%:
# 查看当前 InnoDB 配置
sudo mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool%';"
# 查看当前缓冲池大小
sudo mysql -u root -p -e "SELECT @@innodb_buffer_pool_size/1024/1024/1024 AS 'Buffer Pool Size (GB)';"
配置优化(编辑 /etc/mysql/my.cnf 或 /etc/my.cnf):
[mysqld]
# InnoDB 缓冲池大小(根据内存调整,如 8GB 内存可设为 6GB)
innodb_buffer_pool_size = 6G
# 缓冲池实例数(建议每 1GB 缓冲池配 1 个实例)
innodb_buffer_pool_instances = 6
# 日志文件大小(建议 256M-2G)
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
# 其他重要参数
innodb_flush_log_at_trx_commit = 2 # 平衡性能与持久性
innodb_flush_method = O_DIRECT # 直接 I/O,减少双缓冲
innodb_file_per_table = ON # 每个表独立表空间
innodb_read_io_threads = 8 # 读线程数
innodb_write_io_threads = 8 # 写线程数
# 查询缓存(MySQL 8.0 已移除,MariaDB 可配置)
# query_cache_type = 1
# query_cache_size = 64M
应用配置后重启服务:
# Ubuntu/Debian
sudo systemctl restart mysql
# CentOS/RHEL
sudo systemctl restart mariadb
8.3 PHP-FPM 进程管理配置
如果使用 PHP-FPM(替代 mod_php),进程管理对性能至关重要:
# 安装 PHP-FPM(Ubuntu/Debian)
sudo apt install -y php-fpm
# 安装 PHP-FPM(CentOS/RHEL)
sudo dnf install -y php-fpm
# 启用 PHP-FPM 模块(Apache)
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm # Ubuntu/Debian
sudo systemctl restart apache2
PHP-FPM 池配置(/etc/php/8.3/fpm/pool.d/www.conf 或 /etc/php-fpm.d/www.conf):
[www]
user = www-data
group = www-data
; 进程管理方式
pm = dynamic ; dynamic, static, ondemand
; dynamic 模式下的参数
pm.max_children = 50 ; 最大子进程数
pm.start_servers = 5 ; 启动时子进程数
pm.min_spare_servers = 5 ; 最小空闲进程数
pm.max_spare_servers = 10 ; 最大空闲进程数
pm.max_requests = 500 ; 每个进程处理请求数后重启
; 进程限制
rlimit_files = 65535 ; 文件描述符限制
rlimit_core = unlimited ; 核心文件大小
; 性能调优
pm.process_idle_timeout = 10s ; 空闲进程超时时间
request_terminate_timeout = 30s ; 请求超时时间
request_slowlog_timeout = 5s ; 慢请求日志阈值
; 状态页(用于监控)
pm.status_path = /status
ping.path = /ping
重启 PHP-FPM 使配置生效:
sudo systemctl restart php8.3-fpm # Ubuntu/Debian
sudo systemctl restart php-fpm # CentOS/RHEL
8.4 基础系统监控命令
使用系统工具实时监控 LAMP 环境性能:
# 1. 实时系统监控
top # 经典系统监控工具
htop # 增强版 top(需安装)
glances # 综合监控工具(需安装)
# 安装 htop 和 glances
sudo apt install -y htop glances # Ubuntu/Debian
sudo dnf install -y htop glances # CentOS/RHEL
# 2. 网络连接监控
netstat -tulpn # 查看所有监听端口和进程
ss -tulpn # 更快的 netstat 替代品
netstat -an | grep :80 # 查看 80 端口连接
# 3. Apache 连接状态
# Ubuntu/Debian
sudo apache2ctl status
# CentOS/RHEL
sudo systemctl status httpd
# 启用状态模块(如果需要)
sudo a2enmod status # Ubuntu/Debian
# 在配置中添加:<Location /server-status> SetHandler server-status </Location>
# 4. MySQL/MariaDB 监控
sudo mysqladmin -u root -p status # 数据库状态
sudo mysql -u root -p -e "SHOW PROCESSLIST;" # 查看当前连接
sudo mysql -u root -p -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';" # 连接数
# 5. 实时日志监控(多终端查看)
# 在一个终端查看 Apache 访问日志
sudo tail -f /var/log/apache2/access.log # Ubuntu/Debian
sudo tail -f /var/log/httpd/access_log # CentOS/RHEL
# 在另一个终端查看错误日志
sudo tail -f /var/log/apache2/error.log # Ubuntu/Debian
sudo tail -f /var/log/httpd/error_log # CentOS/RHEL
# 在第三个终端查看 MySQL 慢查询日志
sudo tail -f /var/log/mysql/slow.log # Ubuntu/Debian
sudo tail -f /var/log/mariadb/slow.log # CentOS/RHEL
# 6. 磁盘 I/O 监控
iostat -x 2 5 # 每2秒刷新,显示5次
iotop # 类似 top 的 I/O 监控(需安装)
# 7. 内存使用监控
free -h # 内存使用情况
vmstat 2 10 # 每2秒刷新,显示10次
# 8. 自定义监控脚本示例
#!/bin/bash
# monitor_lamp.sh - LAMP 环境监控脚本
echo "=== LAMP 环境监控 ==="
echo "时间: $(date)"
echo "--- 系统负载 ---"
uptime
echo "--- 内存使用 ---"
free -h
echo "--- Apache 连接数 ---"
netstat -an | grep :80 | wc -l
echo "--- MySQL 连接数 ---"
mysql -u root -p密码 -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';" 2>/dev/null || echo "MySQL 未运行"
echo "--- 磁盘使用 ---"
df -h / /var/www
8.5 性能测试工具
# 安装性能测试工具
sudo apt install -y apache2-utils siege # Ubuntu/Debian
sudo dnf install -y httpd-tools siege # CentOS/RHEL
# 1. Apache Benchmark (ab) 测试
ab -n 1000 -c 100 http://localhost/ # 1000请求,100并发
ab -n 5000 -c 50 http://localhost/info.php
# 2. Siege 压力测试
siege -c 100 -t 1M http://localhost/ # 100并发,测试1分钟
siege -c 50 -t 30S http://localhost/info.php
# 3. MySQL 性能测试
mysqlslap --user=root --password --concurrency=50 --iterations=10 \
--query="SELECT * FROM webapp.users" --create-schema=webapp
# 4. 网络性能测试
ping -c 10 localhost
traceroute google.com
mtr google.com # 结合 ping 和 traceroute
8.6 监控建议与告警设置
-
设置监控阈值:
- CPU 使用率持续 >80%
- 内存使用率 >85%
- 磁盘使用率 >90%
- Apache 等待连接数 >100
- MySQL 连接数 > max_connections 的 80%
-
配置日志轮转:
# 编辑日志轮转配置
sudo nano /etc/logrotate.d/apache2 # Ubuntu/Debian
sudo nano /etc/logrotate.d/httpd # CentOS/RHEL
# 示例配置
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null
endscript
}
- 使用专业监控工具:
- Prometheus + Grafana:企业级监控方案
- Zabbix:传统监控系统
- Netdata:实时性能监控
- ELK Stack:日志收集与分析
通过合理的性能调优和持续监控,可以确保 LAMP 环境在高负载下依然稳定高效运行。建议在生产环境中定期检查性能指标,根据实际负载调整配置参数。
#!/bin/bash
# CentOS/RHEL LAMP 一键安装脚本
set -e
echo "正在更新系统..."
sudo dnf update -y
echo "安装 Apache (httpd)..."
sudo dnf install -y httpd
sudo systemctl enable --now httpd
echo "安装 MariaDB..."
sudo dnf install -y mariadb-server
sudo systemctl enable --now mariadb
echo "运行 MariaDB 安全配置..."
sudo mysql_secure_installation <<EOF
y
your_password_here
your_password_here
y
y
y
y
y
EOF
echo "安装 PHP..."
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm
sudo dnf module enable php:remi-8.3 -y
sudo dnf install -y php php-mysqlnd php-cli php-common php-gd php-mbstring php-xml php-curl php-zip
sudo systemctl restart httpd
echo "配置防火墙..."
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
echo "创建测试页面..."
sudo tee /var/www/html/info.php << 'EOF'
<?php phpinfo(); ?>
EOF
echo "LAMP 安装完成!请访问 http://$(hostname -I | awk '{print $1}')/info.php"
通过本章的学习,您已经掌握了在 Ubuntu 和 CentOS 系统上搭建完整 LAMP 环境的方法,包括软件安装、防火墙配置、服务管理和安全优化。这些技能是 Linux 系统管理员和 Web 开发者的必备基础。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)