Linux 各种软件安装

目录

  1. [PHP 配置与架构](#PHP 配置与架构)
  2. [MySQL 数据库基础](#MySQL 数据库基础)
  3. [MySQL 用户与权限](#MySQL 用户与权限)
  4. [LAMP 架构编译安装](#LAMP 架构编译安装)
  5. 邮件服务系统
  6. [FTP 文件传输服务](#FTP 文件传输服务)
  7. [NFS 网络文件系统](#NFS 网络文件系统)
  8. [iptables 防火墙](#iptables 防火墙)
  9. [iptables 高级应用](#iptables 高级应用)
  10. [Samba 文件共享](#Samba 文件共享)
  11. [xinetd 与 tcp_wrapper](#xinetd 与 tcp_wrapper)
  12. [Bash 脚本高级编程](#Bash 脚本高级编程)
  13. 关系型数据库理论
  14. [CentOS、Ubuntu 等发行版区别](#CentOS、Ubuntu 等发行版区别)

📌 核心概念一览

主题 核心概念 一句话
PHP Zend 引擎、FastCGI、缓存器 PHP 解释器通过 Zend 引擎解析代码;FastCGI 提高性能;缓存器缓存 opcode
MySQL 关系型数据库、SQL、存储引擎 用表存储数据,用 SQL 查询;支持事务、索引、复制
邮件服务 MTA、MDA、MUA、SMTP/POP3/IMAP MTA 传输邮件,MDA 投递邮件,MUA 是客户端;SMTP 发送,POP3/IMAP 接收
FTP vsftpd、主动/被动模式、虚拟用户 文件传输协议;主动模式服务器连客户端,被动模式客户端连服务器
NFS 网络文件系统、RPC、exportfs 让远程目录像本地目录一样使用;基于 RPC 实现
iptables netfilter、四表五链、NAT Linux 防火墙;filter 过滤、nat 地址转换、mangle 修改报文
Samba CIFS/SMB、共享、用户认证 让 Linux 共享文件给 Windows;基于 SMB 协议
xinetd 超级守护进程、访问控制、tcp_wrapper 管理瞬时守护进程;提供统一的访问控制和日志
数据库理论 关系模型、事务、ACID、索引 用表存储结构化数据;事务保证一致性;索引加速查询

CentOS、Ubuntu 等发行版区别 🐧

本节汇总 CentOS/RHELUbuntu/Debian其他发行版 在软件安装、服务管理、配置文件路径等方面的差异,便于跨平台运维和排错。

包管理与软件源

对比项 CentOS / RHEL / Fedora Ubuntu / Debian 说明
包管理工具 yum(CentOS 7)/ dnf(CentOS 8+/Fedora) apt / apt-get 安装、卸载、更新软件
包格式 .rpm .deb 不能混用
软件源配置 /etc/yum.repos.d/*.repo /etc/apt/sources.list 或 /etc/apt/sources.list.d/ 源写法不同
更新软件列表 yum makecache / dnf makecache apt update 相当于刷新"软件目录"
安装软件 yum install 包名 / dnf install 包名 apt install 包名 包名可能不同
卸载软件 yum remove 包名 apt remove 包名 -
查已安装 rpm -qa | grep 名 / dnf list installed dpkg -l / apt list --installed -

常见服务包名差异

服务/软件 CentOS / RHEL Ubuntu / Debian 备注
Web 服务器 httpd apache2 包名、配置目录都不同
MySQL 服务 mysql-server / mariadb-server mysql-server / mariadb-server 服务名见下表
FTP 服务器 vsftpd vsftpd 包名相同
NFS nfs-utils nfs-kernel-server(服务端)/ nfs-common(客户端) Ubuntu 服务端包名不同
Samba samba samba 包名相同,配置路径可能不同
邮件 MTA postfix postfix 包名相同
防火墙 iptables / firewalld(默认) ufw(默认)/ iptables 默认工具不同
PHP php / php-fpm php / php-fpm 扩展包名可能带版本号 php7.4-xxx

服务管理命令差异

操作 CentOS 6 CentOS 7+ / RHEL 7+ Ubuntu(多数版本) 说明
启动服务 service 服务名 start systemctl start 服务名 systemctl start 服务名 或 service 服务名 start Ubuntu 新版本以 systemd 为主
停止服务 service 服务名 stop systemctl stop 服务名 systemctl stop 服务名 -
重启服务 service 服务名 restart systemctl restart 服务名 systemctl restart 服务名 -
开机自启 chkconfig 服务名 on systemctl enable 服务名 systemctl enable 服务名 -
查看状态 service 服务名 status systemctl status 服务名 systemctl status 服务名 -
服务名示例 mysqld、httpd、vsftpd mysqld 或 mysql、httpd、vsftpd mysql、apache2、vsftpd 注意:Apache 在 Ubuntu 叫 apache2

配置文件与路径差异

组件 CentOS / RHEL Ubuntu / Debian
Apache 主配置 /etc/httpd/conf/httpd.conf /etc/apache2/apache2.conf
Apache 站点配置 /etc/httpd/conf.d/ /etc/apache2/sites-available/、sites-enabled/
Apache 模块目录 /etc/httpd/conf.modules.d/ /etc/apache2/mods-available/、mods-enabled/
MySQL 配置 /etc/my.cnf /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/
MySQL 数据目录 /var/lib/mysql /var/lib/mysql
vsftpd 配置 /etc/vsftpd/vsftpd.conf /etc/vsftpd.conf
NFS 导出配置 /etc/exports /etc/exports
Samba 配置 /etc/samba/smb.conf /etc/samba/smb.conf
Postfix 配置 /etc/postfix/main.cf /etc/postfix/main.cf
防火墙规则 /etc/sysconfig/iptables 或 firewalld 配置 ufw:/etc/ufw/;iptables:规则需自行保存

其他常见差异

项目 CentOS / RHEL Ubuntu / Debian
默认 shell bash bash(可改为 zsh 等)
root 登录 默认可 SSH 登录(可关闭) 部分版本默认禁止 root SSH,用 sudo
网络配置 CentOS 7+:/etc/sysconfig/network-scripts/ 或 nmcli;RHEL 8+ 多用 NetworkManager netplan(新版本)或 /etc/network/interfaces
SELinux 默认开启(Enforcing) 默认未安装,可用 AppArmor
RPC 服务名 portmap(老版本)/ rpcbind rpcbind
日志位置 /var/log/ 下各服务日志 /var/log/ 下,部分在 /var/log/服务名/

使用场景建议(按发行版)

场景 更常见的发行版 原因简述
企业服务器、长期稳定 CentOS / RHEL 长周期支持、企业生态、文档多
云/容器基础镜像 Alpine、Ubuntu、CentOS 看需求:Alpine 小,Ubuntu 生态好,CentOS 兼容 RHEL
开发/桌面/易用 Ubuntu 易安装、驱动支持好、社区活跃
与 Red Hat 生态一致 CentOS、Rocky、AlmaLinux 与 RHEL 兼容,便于迁移
轻量/嵌入式 Debian、Alpine 资源占用少、定制方便

各服务安装与管理快速对照

服务 CentOS / RHEL 安装 Ubuntu / Debian 安装 服务名(systemctl) 主配置
Apache yum install httpd apt install apache2 httpd(CentOS)/ apache2(Ubuntu) /etc/httpd/conf/(CentOS)/ /etc/apache2/(Ubuntu)
MySQL/MariaDB yum install mariadb-server apt install mariadb-server mariadb 或 mysqld /etc/my.cnf(CentOS)/ /etc/mysql/(Ubuntu)
PHP yum install php php-fpm php-mysql apt install php php-fpm php-mysql php-fpm /etc/php.ini 或 /etc/php/版本/
vsftpd yum install vsftpd apt install vsftpd vsftpd /etc/vsftpd/vsftpd.conf 或 /etc/vsftpd.conf
NFS 服务端 yum install nfs-utils apt install nfs-kernel-server nfs-server(Ubuntu)/ nfs(CentOS) /etc/exports
NFS 客户端 yum install nfs-utils apt install nfs-common 仅 mount 使用 -
Samba yum install samba apt install samba smb nmb /etc/samba/smb.conf
Postfix yum install postfix apt install postfix postfix /etc/postfix/main.cf
防火墙 yum install iptables-services 或 firewalld ufw 默认 / apt install iptables iptables 无常驻服务 / firewalld / ufw /etc/sysconfig/iptables 等

说明 :同一行内"服务名"和"主配置"在两种发行版可能不同,部署时以当前系统为准;Ubuntu 新版本普遍使用 systemd,服务名可用 systemctl list-units --type=service 查看。


PHP 配置与架构 🐘

使用场景

场景 说明 典型选型
企业官网、CMS 内容管理、文章发布、简单交互 LAMP + PHP(如 WordPress、DedeCMS)
电商、论坛 高并发、会话、支付对接 Nginx/Apache + PHP-FPM + MySQL + 缓存(Redis)
内部管理系统 OA、ERP、报表 Apache/Nginx + PHP + MySQL,可选 FastCGI
API 后端 提供 RESTful/JSON 接口 Nginx + PHP-FPM,关闭不必要扩展
轻量脚本 定时任务、命令行小工具 仅 CLI 模式 PHP,无需 Web 服务器
与现有 Apache 集成 老项目、共享主机 mod_php 或 CGI(不推荐高并发)

安装可能遇到的问题

现象 可能原因 处理思路
页面空白或 500 PHP 报错未显示、语法错误、扩展缺失 display_errors 排查;看 Web 与 PHP 错误日志;检查 php.ini 与扩展
找不到 php.ini 编译路径或包安装路径不同 php --ini 查加载的 php.ini;CentOS 多在 /etc/,Ubuntu 可能在 /etc/php/版本/
无法连接 MySQL 未装 php-mysql/php-pdo、socket 或权限 安装对应扩展;确认 MySQL 监听与用户 host(如 localhost vs 127.0.0.1)
上传/执行权限问题 进程用户无写权限、SELinux 限制 改目录属主/权限;setenforce 0 试关 SELinux;用 audit2allow 放行
FastCGI 超时 脚本执行久、nginx/apache 超时过短 调大 fastcgi_read_timeoutmax_execution_timerequest_terminate_timeout
opcache 不生效 未启用或路径不一致 php.ini 中启用 opcache;确保 php-fpm 加载的是同一 php.ini

PHP 源码目录结构

PHP 源码结构清晰,主要包含以下子目录:

目录 作用 类比
build 编译相关文件,如 buildconf 脚本、环境检查脚本 像"施工工具箱",放着锤子、扳手等工具
ext 官方扩展目录,包含大多数 PHP 函数的定义和实现(array、pdo、spl 等) 像"功能模块库",每个模块提供一类功能
main PHP 核心文件,实现 PHP 基础设施 像"发动机",是整个系统的核心
Zend Zend 引擎实现目录,负责语法解析、opcode 执行、扩展机制 像"翻译官",把代码翻译成机器能理解的指令
pear PHP 扩展与应用仓库,包含 PEAR 核心文件 像"应用商店",提供第三方扩展
sapi 服务器抽象层代码,如 apache 的 mod_php、cgi、fastcgi、fpm 等接口 像"适配器",让 PHP 能和不同 Web 服务器对接
TSRM 线程安全资源管理器,PHP 线程安全基于此实现 像"交通警察",管理多线程访问资源的秩序
tests PHP 测试脚本集合 像"质检部门",确保代码质量
win32 Windows 平台相关实现 像"Windows 专用工具包"

生活例子:PHP 源码结构像"汽车制造厂"------build 是工具车间,ext 是零件仓库,main 是总装车间,Zend 是发动机工厂,sapi 是不同车型的适配部门(轿车、SUV、卡车)。

PHP 工作原理

Zend 引擎工作流程
📄 PHP 脚本
🔍 词法分析

Lexical Analysis
🔨 语法分析

Syntax Analysis
💾 编译为 opcode

存入内存
▶️ 执行 opcode
📤 输出结果

两个阶段

  1. 第一阶段:词法分析 → 语法分析 → 编译为 opcode(操作码)→ 存入内存
  2. 第二阶段:执行 opcode

PHP 缓存器

为什么需要 PHP 缓存器?

PHP 每次请求都要重新编译脚本为 opcode,浪费 CPU 资源。缓存器将编译好的 opcode 缓存起来,下次直接执行,大幅提升性能。

缓存器 特点
APC Alternative PHP Cache,早期流行的 opcode 缓存
eAccelerator 基于 APC 改进,增加内容缓存功能
XCache 轻量级,稳定性好,适合生产环境

生活例子:PHP 缓存器像"菜谱记忆"------第一次做菜要看菜谱(编译),记住后(缓存)下次直接做,不用再翻菜谱。

httpd 与 PHP 集成方式

对比:CGI、Module、FastCGI

方式 工作原理 优点 缺点 适用场景
CGI 每个请求 fork 一个进程执行 PHP 简单,进程隔离好 性能差,资源消耗大 低并发场景
Module PHP 作为 Apache 模块加载 性能好,无需 fork 稳定性差,PHP 崩溃影响 Apache 中等并发
FastCGI PHP 进程常驻,通过 socket 通信 性能最好,稳定性高,进程隔离 配置复杂 高并发生产环境

CGI
Module
FastCGI
📨 HTTP 请求
🌐 Web 服务器

Apache/Nginx
集成方式?
🆕 Fork 新进程

执行 PHP
📦 加载 PHP 模块

同进程执行
🔄 PHP-FPM

常驻进程池
📤 输出

生活例子:CGI 像"每次叫外卖"(慢),Module 像"厨师住家里"(快但不安全),FastCGI 像"专职厨师在厨房待命"(又快又安全)。

📖 名词解释

名词 解释 生活例子
PHP Hypertext Preprocessor,超文本预处理器,服务器端脚本语言 像"厨师",根据菜谱(代码)做菜(生成网页)
Zend 引擎 PHP 的核心,负责将 PHP 代码编译为 opcode 并执行 像"翻译官+执行官",把人话翻译成机器话并执行
opcode Operation Code,操作码,PHP 编译后的中间代码 像"机器指令",电脑能直接理解的命令
FastCGI 快速通用网关接口,改进的 CGI,进程常驻 像"专职厨师",一直在厨房待命,不用每次叫来
PHP-FPM FastCGI Process Manager,PHP 的 FastCGI 实现 像"厨师长",管理一群厨师(进程池)
SAPI Server API,服务器应用程序接口,PHP 与 Web 服务器的接口层 像"翻译器",让 PHP 能和不同 Web 服务器对话
mod_php Apache 的 PHP 模块,将 PHP 嵌入 Apache 像"内置厨房",厨师住在餐厅里
扩展(Extension) PHP 功能模块,提供额外功能 像"厨具",不同厨具做不同菜(功能)
PEAR PHP Extension and Application Repository,PHP 扩展和应用仓库 像"应用商店",下载第三方扩展
TSRM Thread Safe Resource Manager,线程安全资源管理器 像"交通警察",防止多线程抢资源出事故

MySQL 数据库基础 🗄️

使用场景

场景 说明 典型用法
Web 应用数据存储 用户、订单、文章等结构化数据 LAMP/LEMP 后端数据库
内部系统、OA/ERP 权限、流程、报表数据 业务库 + 只读从库(报表)
读写分离、高可用 主库写、从库读,主从复制 一主多从 + 应用侧分离
开发/测试环境 本地建库、导入导出、调试 SQL 单实例或 Docker MySQL
数据分析、报表 复杂查询、聚合、定时统计 从库或专用分析库,建索引/物化视图
嵌入式/单机应用 桌面软件、本地服务存配置与数据 SQLite 更轻量;需多机则 MySQL

安装可能遇到的问题

现象 可能原因 处理思路
yum/apt 找不到 mysql-server 源里无此包或名称不同 CentOS 7:可用 mariadb-server;Ubuntu:apt search mysql;CentOS 8+ 用 dnf
service mysqld start 失败 服务名不同、未初始化 Ubuntu 多为 mysql;首次安装需执行 mysql_secure_installation 或 mysqld --initialize
root 无法登录、无密码 未设置 root 密码或 plugin 不对 mysql_secure_installation;或 UPDATE mysql.user 设密码并 FLUSH PRIVILEGES
ERROR 2002 (HY000): Can't connect to local MySQL server 未启动、socket 路径错、只监听 127.0.0.1 检查服务状态;确认 php/应用里用的是 socket 还是 127.0.0.1;看 my.cnf 中 socket 与 bind-address
ERROR 1130: Host 'xxx' is not allowed 用户 @'host' 不匹配 创建或修改用户为 @'%' 或对应 IP,并 FLUSH PRIVILEGES
远程连不上 3306 防火墙、bind-address=127.0.0.1 开放 3306;my.cnf 中 bind-address=0.0.0.0 或注释掉
表名大小写问题 lower_case_table_names 不一致 统一设为 0(区分)或 1(不区分),与备份/迁移环境一致

MySQL 安装与启动

bash 复制代码
# 安装 MySQL 服务器
yum -y install mysql-server

# 启动 MySQL 服务
service mysqld start

# 查看端口(默认 3306)
netstat -ntlp | grep mysqld

MySQL 连接方式

bash 复制代码
# 连接本机(socket 方式,Linux)
mysql -uroot -p -h localhost

# 连接本机(TCP 方式)
mysql -uroot -p -h 127.0.0.1

# 连接远程主机
mysql -uroot -p -h 192.168.1.100

对比:localhost 与 127.0.0.1

连接方式 协议 速度 适用
localhost Unix Socket(Linux)/ Memory(Windows) 本机连接
127.0.0.1 TCP/IP 稍慢 本机连接(需测试网络)
远程 IP TCP/IP 取决于网络 远程连接

localhost
127.0.0.1
远程 IP
💻 MySQL 客户端
连接方式?
🔌 Unix Socket

文件通信
🌐 TCP/IP

网络通信
🌍 TCP/IP

互联网通信
🗄️ MySQL 服务器

生活例子:localhost 像"家里内线电话"(socket),127.0.0.1 像"打自己手机"(TCP),远程 IP 像"打朋友手机"。

MySQL 客户端模式

模式 说明 使用场景
交互式模式 直接在 mysql 命令行输入 SQL 日常查询、调试
批处理模式 执行 SQL 脚本文件 批量操作、自动化脚本
bash 复制代码
# 交互式模式
mysql -uroot -p
mysql> show databases;

# 批处理模式
mysql -uroot -p < script.sql
mysql -uroot -p -e "show databases;"

MySQL 命令类型

对比:客户端命令 vs 服务器端命令

类型 特点 示例 是否需要分号
客户端命令 由 mysql 客户端处理,不发送到服务器 helpquit\qsource 不需要
服务器端命令 发送到 MySQL 服务器执行 show databases;select * from t; 必须用分号结束

SQL 语言分类

📝 SQL 语言
🏗️ DDL

数据定义语言
📊 DML

数据操作语言
🔐 DCL

数据控制语言
CREATE

创建
ALTER

修改
DROP

删除
SELECT

查询
INSERT

插入
UPDATE

更新
DELETE

删除
GRANT

授权
REVOKE

撤销权限

对比:DDL、DML、DCL

类型 全称 作用 典型命令 是否自动提交
DDL Data Definition Language 定义数据库结构(库、表、索引) CREATE、ALTER、DROP
DML Data Manipulation Language 操作数据(增删改查) SELECT、INSERT、UPDATE、DELETE 否(可回滚)
DCL Data Control Language 控制访问权限 GRANT、REVOKE

生活例子:DDL 像"盖房子"(建表),DML 像"搬家具"(操作数据),DCL 像"发门禁卡"(授权)。

MySQL 数据类型

字符类型

类型 长度 特点 适用场景
CHAR(n) 定长,最大 255 不足 n 用空格填充,查询快 固定长度字段(如手机号、身份证号)
VARCHAR(n) 变长,最大 65535 按实际长度存储,节省空间 变长字段(如姓名、地址)
TEXT 大文本,最大 64KB 存储长文本 文章内容、评论
BLOB 二进制大对象 存储二进制数据 图片、文件(不推荐)

数值类型

类型 字节数 范围(有符号) 范围(无符号)
TINYINT 1 -128 ~ 127 0 ~ 255
SMALLINT 2 -32768 ~ 32767 0 ~ 65535
MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215
INT 4 -2147483648 ~ 2147483647 0 ~ 4294967295
BIGINT 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615

修饰符

  • UNSIGNED:无符号,只能存正数,范围扩大一倍
  • ZEROFILL :零填充,如 INT(5) ZEROFILL 存 23 显示为 00023

日期时间类型

类型 格式 范围 适用
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-31 生日、日期
TIME HH:MM:SS -838:59:59 ~ 838:59:59 时间段
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 创建时间、更新时间
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 自动更新的时间戳

生活例子:CHAR 像"固定车位"(总是占那么大),VARCHAR 像"弹性车位"(车大占大位,车小占小位),TEXT 像"仓库"(放大件)。

数据库和表操作

创建数据库

bash 复制代码
# 创建数据库
CREATE DATABASE db_name;

# 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS db_name;

# 删除数据库
DROP DATABASE db_name;

# 查看所有数据库
SHOW DATABASES;

# 使用数据库
USE db_name;

创建表

bash 复制代码
# 创建学生表
CREATE TABLE students (
    name CHAR(20) NOT NULL,
    age TINYINT UNSIGNED,
    gender CHAR(1) NOT NULL
);

# 查看所有表
SHOW TABLES;

# 查看表结构
DESC students;

# 查看建表语句
SHOW CREATE TABLE students;

修改表

bash 复制代码
# 添加字段
ALTER TABLE students ADD course VARCHAR(100);

# 修改字段属性
ALTER TABLE students MODIFY age INT;

# 修改字段名称和属性
ALTER TABLE students CHANGE course Course VARCHAR(100) AFTER name;

# 删除字段
ALTER TABLE students DROP course;

# 删除表
DROP TABLE students;

插入数据

bash 复制代码
# 插入单行数据
INSERT INTO students (name, gender, age) VALUES ('令狐冲', 'M', 25);

# 插入多行数据
INSERT INTO students (name, gender) VALUES 
    ('令狐冲', 'M'),
    ('任盈盈', 'F');

# 插入所有字段(可省略字段列表)
INSERT INTO students VALUES ('岳灵珊', 'F', 20, '华山剑法');

更新数据

bash 复制代码
# 更新数据
UPDATE students SET age = 26 WHERE name = '令狐冲';

# 更新多个字段
UPDATE students SET age = 27, course = '独孤九剑' WHERE name = '令狐冲';

查询数据

bash 复制代码
# 查询所有数据
SELECT * FROM students;

# 查询指定字段
SELECT name, age FROM students;

# 条件查询
SELECT * FROM students WHERE age > 20;

# 排序查询
SELECT * FROM students ORDER BY age DESC;

# 限制结果数量
SELECT * FROM students LIMIT 10;

📖 名词解释

名词 解释 生活例子
MySQL 开源关系型数据库管理系统,最流行的数据库之一 像"图书馆管理系统",管理大量书籍(数据)
数据库(Database) 存储数据的容器,包含多个表 像"图书馆",里面有很多书架(表)
表(Table) 存储数据的二维结构,由行和列组成 像"Excel 表格",行是记录,列是字段
字段(Field/Column) 表中的列,定义数据类型和约束 像"表格的列标题",如姓名、年龄
记录(Row/Record) 表中的一行数据 像"表格的一行",一个学生的完整信息
主键(Primary Key) 唯一标识每条记录的字段,不能为空,不能重复 像"身份证号",每人唯一
外键(Foreign Key) 引用其他表主键的字段,建立表间关系 像"学生证上的班级号",指向班级表
索引(Index) 加速查询的数据结构 像"书的目录",快速找到内容
约束(Constraint) 限制字段值的规则 像"规章制度",年龄不能为负数
事务(Transaction) 一组 SQL 操作,要么全成功要么全失败 像"转账",扣钱和加钱必须同时成功
SQL Structured Query Language,结构化查询语言 像"数据库的普通话",所有数据库都懂
存储引擎 表的底层实现方式,如 InnoDB、MyISAM 像"汽车发动机类型",汽油、柴油、电动

MySQL 用户与权限 🔐

创建用户

bash 复制代码
# 创建用户
CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerry';

# 创建本地用户
CREATE USER 'tom'@'localhost' IDENTIFIED BY 'password';

# 创建指定 IP 用户
CREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'password';

# 创建网段用户
CREATE USER 'dev'@'192.168.1.%' IDENTIFIED BY 'password';

HOST 通配符

通配符 含义 示例 匹配范围
% 匹配任意长度的任意字符 'user'@'%' 所有主机
_ 匹配任意单个字符 'user'@'192.168.0.__' 192.168.0.01 ~ 192.168.0.99
IP 精确匹配 IP 'user'@'192.168.1.100' 仅该 IP
网段 匹配网段 'user'@'192.168.1.%' 192.168.1.0/24
域名 匹配域名 'user'@'%.example.com' example.com 所有子域名

%
IP
网段
localhost
👤 MySQL 用户
HOST 限制?
🌍 任何主机

可连接
🏠 指定 IP

可连接
🏘️ 指定网段

可连接
💻 仅本机

可连接

生活例子:HOST 限制像"门禁卡权限"------% 是"万能卡"(所有门都能开),IP 是"指定房间卡"(只能开一个房间),网段是"楼层卡"(能开一层楼的门)。

授权

bash 复制代码
# 授予所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'jerry'@'%';

# 授予特定权限
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'jerry'@'%';

# 授予所有数据库权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'redhat';

# 查看用户权限
SHOW GRANTS FOR 'jerry'@'%';

# 撤销权限
REVOKE INSERT, UPDATE ON mydb.* FROM 'jerry'@'%';

# 刷新权限(使生效)
FLUSH PRIVILEGES;

权限类型

权限 说明 适用对象
SELECT 查询数据 表、列
INSERT 插入数据 表、列
UPDATE 更新数据 表、列
DELETE 删除数据
CREATE 创建数据库、表 数据库、表
DROP 删除数据库、表 数据库、表
ALTER 修改表结构
INDEX 创建/删除索引
ALL PRIVILEGES 所有权限 所有

授权格式

text 复制代码
GRANT 权限列表 ON 数据库.表 TO '用户'@'主机' [IDENTIFIED BY '密码'];
  • 权限列表:SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES 等
  • 数据库.表*.* 表示所有库所有表,db.* 表示 db 库所有表,db.table 表示特定表
  • 用户@主机:指定用户和允许连接的主机
  • IDENTIFIED BY:设置或修改密码(可选)

修改密码

bash 复制代码
# 方法 1:SET PASSWORD
SET PASSWORD FOR 'jerry'@'%' = PASSWORD('new_password');

# 方法 2:mysqladmin 命令
mysqladmin -uroot -p password 'new_password'

# 方法 3:UPDATE user 表
UPDATE mysql.user SET password=PASSWORD('new_password') 
WHERE user='root' AND host='127.0.0.1';
FLUSH PRIVILEGES;

# 方法 4:GRANT 同时授权和设置密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'redhat';
FLUSH PRIVILEGES;

对比:四种修改密码方式

方法 命令 是否需要 FLUSH 适用场景
SET PASSWORD SET PASSWORD FOR 'user'@'host' = PASSWORD('pwd') 推荐,安全
mysqladmin mysqladmin -u user -p password 'new_pwd' 命令行快速修改
UPDATE user UPDATE mysql.user SET password=... 批量修改
GRANT GRANT ... IDENTIFIED BY 'pwd' 授权时顺便设置密码

生活例子:修改密码像"换锁"------SET PASSWORD 是"找锁匠换锁"(专业),mysqladmin 是"自己换锁"(快速),UPDATE 是"直接改锁芯"(危险,要重启),GRANT 是"换锁+配钥匙一起做"。

远程连接配置

允许远程连接

bash 复制代码
# 创建远程用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'redhat';
FLUSH PRIVILEGES;

# 检查防火墙(确保 3306 端口开放)
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

图形化客户端工具

工具 平台 特点
phpMyAdmin Web 基于 Web,无需安装客户端
MySQL Workbench Windows/Linux/Mac 官方工具,功能强大
Navicat for MySQL Windows/Mac 商业软件,界面友好
MySQL Front Windows 轻量级,免费
Toad for MySQL Windows 专业 DBA 工具

📖 名词解释

名词 解释 生活例子
用户(User) 访问 MySQL 的账号,由用户名和主机组成 像"会员卡",卡号+姓名才能用
权限(Privilege) 用户可以执行的操作 像"会员等级",普通会员、VIP、SVIP 权限不同
授权(GRANT) 给用户赋予权限 像"发会员卡",给你权限
撤销权限(REVOKE) 收回用户权限 像"降级会员",收回部分权限
FLUSH PRIVILEGES 刷新权限表,使权限立即生效 像"刷新系统",让改动立即生效
mysql.user 表 存储用户信息和全局权限的系统表 像"会员数据库",记录所有会员信息
HOST 用户允许连接的主机 像"门禁限制",只有特定地方能刷卡
PASSWORD() MySQL 密码加密函数 像"密码加密器",把明文变成密文

LAMP 架构编译安装 🏗️

使用场景

场景 说明 选型建议
企业官网、博客、CMS 内容展示、后台管理、模板多 LAMP 即可;WordPress、DedeCMS 等
中小型电商、论坛 注册登录、订单、帖子、搜索 LAMP + Redis 缓存 + 可选 CDN
内部办公/运维系统 审批、工单、监控展示 LAMP 或 LEMP,内网可简化安全配置
学习与实验 熟悉 Apache、PHP、MySQL 虚拟机或 Docker 一键 LAMP
高并发、需优化 大流量、动态请求多 Nginx + PHP-FPM(LEMP)+ 缓存 + 数据库优化

安装可能遇到的问题

现象 可能原因 处理思路
configure 报错缺少 xxx 缺开发库或头文件 CentOS:yum install xxx-devel;Ubuntu:apt install libxxx-dev;按报错补全依赖
make 报错 依赖不全、gcc 版本、权限 装全 devel 包;看报错行,缺啥装啥;不用 root 编译时检查 PREFIX 权限
httpd/apache2 启动失败 端口占用、配置语法错误、SELinux netstat 查 80/443;apachectl configtest 或 apache2ctl configtest;临时关 SELinux 测试
PHP 不解析,直接下载 .php 文件 未配置 PHP 处理、未加载 mod_php 或 PHP-FPM Apache:加载 mod_php 或 proxy_fcgi 到 php-fpm;Nginx:配 fastcgi_pass 到 php-fpm
访问 403 Forbidden 目录无 index、权限、Options/AllowOverride 检查 DirectoryIndex;目录权限与运行用户;AllowOverride 与 .htaccess
数据库连接失败 MySQL 未启动、用户名密码/host 错、防火墙 先保证本机 mysql 能连;再查应用配置与 GRANT 的 host
CentOS 上 Apache 叫 httpd 包名与 Ubuntu 不同 安装 httpd;配置在 /etc/httpd/;Ubuntu 为 apache2、/etc/apache2/

LAMP 架构概述

LAMP = Linux + Apache + MySQL + PHP
👤 用户浏览器
🌐 Apache

Web 服务器
🐘 PHP

脚本解释器
🗄️ MySQL

数据库

生活例子:LAMP 像"餐厅系统"------Apache 是"服务员"(接待客人),PHP 是"厨师"(做菜),MySQL 是"仓库"(存储食材和菜谱)。

编译安装目录规范

对比:RPM 包 vs 编译安装

对比项 RPM 包安装 编译安装
安装位置 分散(/bin、/usr/bin、/etc、/usr/lib) 集中(/usr/local/软件名/)
配置文件 /etc/ /usr/local/软件名/etc/
二进制 /bin、/sbin、/usr/bin、/usr/sbin /usr/local/软件名/bin、sbin
库文件 /lib、/usr/lib /usr/local/软件名/lib
文档 /usr/share/doc、/usr/share/man /usr/local/软件名/share/doc、man
优点 安装快,管理方便 可定制,版本灵活
缺点 版本固定,难定制 编译慢,管理复杂

编译安装标准目录结构

text 复制代码
/usr/local/软件名/
├── bin/          # 可执行文件
├── sbin/         # 系统管理命令
├── lib/          # 库文件
├── include/      # 头文件
├── etc/          # 配置文件
└── share/        # 文档和手册
    ├── doc/
    └── man/

httpd 2.4 新特性

Apache 2.4 主要改进

特性 说明 优势
MPM 运行时装载 --enable-mpms-shared=all --with-mpm=event 无需重新编译即可切换 MPM
Event MPM 事件驱动模型,改进 worker MPM 更高效处理 Keep-Alive 连接
异步读写 支持异步 I/O 提升性能
条件配置 <If><ElseIf><Else> 灵活的配置逻辑
毫秒级 KeepAlive KeepAlive Timeout 支持毫秒 更精细的超时控制
新模块 mod_proxy_fcgi、mod_ratelimit、mod_remoteip 等 功能更强大

访问控制变化(2.2 → 2.4)
Apache 2.2
Order allow,deny

Allow from all
Apache 2.4
Require all granted

Require ip 192.168.1.0/24

Require host example.com

对比:Apache 2.2 vs 2.4 访问控制

Apache 2.2 Apache 2.4 说明
Order allow,deny Require all granted 允许所有
Order deny,allow Require all denied 拒绝所有
Allow from 192.168.1.0/24 Require ip 192.168.1.0/24 允许特定 IP
Allow from .example.com Require host example.com 允许特定域名
Deny from all Require all denied 拒绝所有

MySQL 配置文件

MySQL 配置文件查找顺序

text 复制代码
/etc/my.cnf → /etc/mysql/my.cnf → $BASEDIR/my.cnf → ~/.my.cnf

配置文件格式(INI 格式)

ini 复制代码
[mysql]
# MySQL 客户端配置

[mysqld]
# MySQL 服务器配置
port = 3306
datadir = /var/lib/mysql

[client]
# 所有客户端通用配置

MySQL 变量类型

变量类型 说明 查看命令 作用域
服务器变量 定义 MySQL 服务器运行特性 SHOW GLOBAL VARIABLES 全局/会话
状态变量 保存 MySQL 运行时统计数据 SHOW GLOBAL STATUS 全局/会话
bash 复制代码
# 查看所有服务器变量
SHOW GLOBAL VARIABLES;

# 查看特定变量
SHOW VARIABLES LIKE 'max_connections';

# 查看状态变量
SHOW GLOBAL STATUS LIKE '%select%';

# 查看当前数据库
SELECT database();

# 查看当前用户
SELECT user();

压力测试工具

对比:常用 Web 压力测试工具

工具 特点 适用场景
ab Apache Bench,Apache 自带,简单易用 快速测试,单一 URL
http_load 支持多 URL,模拟真实用户行为 多页面测试
webbench 轻量级,支持 HTTP/HTTPS 简单压测
siege 功能强大,支持并发、事务 复杂场景测试

ab 压力测试示例

bash 复制代码
# 100 个并发,总共 1000 个请求
ab -c 100 -n 1000 http://www.example.com/index.html

# 调整系统打开文件数限制
ulimit -n 10000

# 生成测试文件
dd if=/dev/zero of=/www/test.html bs=1M count=2

# 查看 httpd 进程模型
ps aux | grep httpd

# 监控系统性能
vmstat 1

📖 名词解释

名词 解释 生活例子
LAMP Linux + Apache + MySQL + PHP 的组合 像"餐厅全套设备",厨房+厨师+仓库
编译安装 从源码编译安装软件 像"定制家具",按需求定制
./configure 配置编译选项,检查依赖 像"量房",看看能不能装
make 编译源码为二进制 像"加工原材料",把木头做成家具
make install 安装编译好的软件 像"安装家具",把家具放到家里
--prefix 指定安装目录 像"选择安装位置",装在客厅还是卧室
依赖关系 软件运行需要的其他软件或库 像"配套设施",装空调需要先有电
apr/apr-util Apache Portable Runtime,Apache 可移植运行库 像"工具箱",提供基础工具
压力测试 模拟大量用户访问,测试性能 像"压力测试桥梁",看能承受多少重量
ab Apache Bench,Apache 自带的压力测试工具 像"测速仪",测试网站速度
并发数 同时访问的用户数 像"同时进餐厅的客人数"
ulimit 限制用户资源使用的命令 像"限流",限制最多开多少个文件

邮件服务系统 📧

邮件系统架构

📨 发件人
📮 MUA

邮件客户端
🚚 MTA

邮件传输代理

SMTP
🚚 MTA

收件服务器

SMTP
📬 MDA

邮件投递代理
📪 邮箱

Mailbox
📭 MRA

邮件检索代理

POP3/IMAP
📮 MUA

邮件客户端
📩 收件人

生活例子:邮件系统像"快递系统"------MUA 是"寄件人/收件人",MTA 是"快递公司"(顺丰、圆通),MDA 是"快递员"(送到小区),MRA 是"快递柜"(取件),Mailbox 是"收件箱"。

邮件系统组件

对比:邮件系统各组件

组件 全称 作用 协议 软件示例
MUA Mail User Agent 邮件客户端,发送和接收邮件 - Outlook、Foxmail、Thunderbird、mutt
MTA Mail Transfer Agent 邮件传输代理,负责邮件路由和传输 SMTP Sendmail、Postfix、Qmail、Exim
MDA Mail Delivery Agent 邮件投递代理,将邮件投递到用户邮箱 - Procmail、Maildrop
MRA Mail Retrieval Agent 邮件检索代理,用户从服务器取邮件 POP3、IMAP4 Dovecot、Cyrus-IMAP
WebMail Web Mail 基于 Web 的邮件客户端 HTTP Openwebmail、Squirrelmail、Extmail

常用 MTA 对比

MTA 特点 优点 缺点
Sendmail 老牌 MTA,功能强大 功能全面,兼容性好 配置复杂(m4 语法),单体结构
Postfix 模块化设计,安全高效 配置简单,性能好,兼容 Sendmail -
Qmail 安全性高 模块化,安全 配置复杂
Exim 灵活性强 配置灵活 学习曲线陡

邮件协议

对比:SMTP、POP3、IMAP4

协议 全称 端口 作用 特点
SMTP Simple Mail Transfer Protocol 25/tcp 发送邮件 只能发送,不能接收
ESMTP Extended SMTP 25/tcp 扩展 SMTP,支持认证 支持 SASL 认证
POP3 Post Office Protocol v3 110/tcp 接收邮件 下载后删除服务器邮件
IMAP4 Internet Mail Access Protocol v4 143/tcp 接收邮件 邮件保留在服务器,支持文件夹
SMTPS SMTP over SSL/TLS 465/tcp 加密发送邮件 安全
POP3S POP3 over SSL/TLS 995/tcp 加密接收邮件 安全
IMAPS IMAP4 over SSL/TLS 993/tcp 加密接收邮件 安全

发送
接收
下载删除
保留服务器



📧 邮件操作
操作类型?
📤 SMTP

25/tcp
接收方式?
📥 POP3

110/tcp
📬 IMAP4

143/tcp
需要加密?
需要加密?
需要加密?
🔒 SMTPS

465/tcp
🔒 POP3S

995/tcp
🔒 IMAPS

993/tcp

生活例子:SMTP 像"寄快递",POP3 像"取快递回家"(快递柜清空),IMAP 像"在快递柜看快递"(快递还在柜子里)。

Postfix 配置

Postfix 配置文件

文件 作用
/etc/postfix/main.cf 主配置文件,定义 Postfix 运行参数
/etc/postfix/master.cf 进程管理配置,定义 Postfix 各模块

postconf 命令

bash 复制代码
# 显示默认配置
postconf -d

# 显示修改过的配置
postconf -n

# 显示支持的查找表类型
postconf -m

# 显示支持的 SASL 客户端插件
postconf -A

# 显示支持的 SASL 服务器插件
postconf -a

# 修改配置并保存
postconf -e 'myhostname=mail.example.com'

SMTP 协议命令

bash 复制代码
# 连接 SMTP 服务器
telnet localhost 25

# SMTP 会话示例
HELO localhost
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
Subject: Test Email
This is a test email.
.
QUIT

SMTP 状态码

状态码 含义 示例
1xx 纯信息 正在处理
2xx 成功 250 OK
3xx 需要更多信息 354 Start mail input
4xx 暂时性错误 450 Mailbox unavailable
5xx 永久性错误 550 User unknown

📖 名词解释

名词 解释 生活例子
MUA Mail User Agent,邮件用户代理,邮件客户端 像"手机邮件 App",用来收发邮件
MTA Mail Transfer Agent,邮件传输代理,负责邮件路由 像"快递公司",负责把邮件送到目的地
MDA Mail Delivery Agent,邮件投递代理,投递到邮箱 像"快递员",把快递送到你家门口
MRA Mail Retrieval Agent,邮件检索代理,从服务器取邮件 像"快递柜",你去取快递
SMTP Simple Mail Transfer Protocol,简单邮件传输协议 像"快递运输协议",规定怎么寄快递
POP3 Post Office Protocol v3,邮局协议第 3 版 像"取快递回家",取完快递柜就空了
IMAP4 Internet Mail Access Protocol v4,互联网邮件访问协议 像"在快递柜看快递",快递还在柜子里
Postfix 流行的 MTA 软件,模块化设计 像"顺丰快递",专业快递公司
Sendmail 老牌 MTA 软件,功能强大但配置复杂 像"老字号快递",历史悠久但流程复杂
SASL Simple Authentication and Security Layer,认证和安全层 像"身份验证",确认你是寄件人
中继(Relay) 邮件服务器帮其他服务器转发邮件 像"快递中转站",帮忙转发快递
邮件别名 一个邮箱地址指向另一个或多个邮箱 像"转发电话",打 A 号码转到 B 号码

使用场景(邮件服务)

场景 说明 典型选型
企业自建邮箱 内部 + 对外收发,可控数据 Postfix + Dovecot + WebMail(如 Roundcube)
邮件网关/中继 只转发,不落地存储 Postfix 仅 MTA,配置 relay_domains、transport
收件服务器 只收不发或主要收 Dovecot(IMAP/POP3)+ 可选反垃圾
开发/测试发信 本地发测试邮件 本机 Postfix + mail 或 mutt
与 LDAP/MySQL 集成 账号统一、虚拟域 Postfix + SASL + MySQL/LDAP 查用户

安装可能遇到的问题(邮件服务)

现象 可能原因 处理思路
25 端口被占用 sendmail 或其他 MTA 已运行 systemctl stop sendmail;chkconfig sendmail off;再启 postfix
发信被拒收 无 PTR、SPF/DKIM 未配、进黑名单 配好反向解析、SPF/DKIM;先发自家或测试邮箱验证
收不到信 MX 未指过来、防火墙、Dovecot 未配 查 MX 与 A 记录;放行 25/110/143/995/993;检查 Dovecot 与 mailbox 路径
SASL 认证失败 saslauthd 未起、mechanism 不匹配 启 saslauthd;postconf -a 看支持;配置 smtpd_sasl_*

FTP 文件传输服务 📁

使用场景

场景 说明 典型选型
公共软件/镜像下载 匿名只读,大量用户下载 vsftpd 匿名用户 + 只读;可配合 CDN
内部文件交换 部门间传大文件、安装包 vsftpd 本地用户或虚拟用户 + chroot
网站上传目录 前端页面上传文件到服务器 vsftpd 虚拟用户映射到 Web 运行用户;或 SFTP 替代
备份/归档上传 定时任务上传备份到 FTP 脚本 + 被动模式;注意防火墙放行 pasv 端口
跨平台传文件(含 Windows) 无需装 Samba,简单共享 vsftpd;Windows 资源管理器或 FileZilla 访问

安装可能遇到的问题

现象 可能原因 处理思路
连接超时、无法列出目录 被动模式端口未放行、防火墙 配置 pasv_min_port/pasv_max_port,防火墙开放该范围;或改用主动模式(客户端支持时)
530 Login incorrect 用户/密码错、PAM 配置、user_list 检查 /etc/vsftpd/user_list、ftpusers;PAM 配置是否指向正确 auth
500 OOPS: vsftpd: refusing to run with writable root chroot 时用户家目录可写 家目录改为 555 或 755,或 allow_writeable_chroot=YES(有风险)
匿名无法上传 未开 anon_upload_enable、目录权限 anon_upload_enable=YES;匿名映射用户(如 ftp)对 upload 目录有写权限
CentOS vs Ubuntu 路径 配置路径略不同 CentOS 多在 /etc/vsftpd/vsftpd.conf;Ubuntu 可能为 /etc/vsftpd.conf,包名均为 vsftpd

FTP 工作原理

FTP 双连接机制
主动模式
被动模式
💻 FTP 客户端
📞 命令连接

21/tcp

持续连接
数据连接

按需建立
📤 服务器 20/tcp

→ 客户端随机端口
📥 客户端随机端口

→ 服务器随机端口
🖥️ FTP 服务器

生活例子:FTP 像"打电话订外卖"------命令连接是"打电话"(一直通着),数据连接是"送外卖"(送完就断开);主动模式是"外卖员主动送上门",被动模式是"你下楼取外卖"。

对比:主动模式 vs 被动模式

对比项 主动模式(PORT) 被动模式(PASV)
数据连接发起方 服务器主动连接客户端 客户端主动连接服务器
服务器端口 20/tcp(固定) 随机端口
客户端端口 随机端口 随机端口
防火墙问题 客户端防火墙可能阻止 服务器防火墙需开放随机端口范围
NAT 问题 客户端在 NAT 后无法使用 可以使用
适用场景 服务器到客户端网络通畅 客户端在 NAT/防火墙后(常用)

服务器 客户端 服务器 客户端 主动模式(PORT) 被动模式(PASV) 命令连接 21/tcp PORT 命令(告知客户端端口) 20/tcp → 客户端端口(数据连接) 命令连接 21/tcp PASV 命令 227 Entering Passive Mode(告知服务器端口) 客户端端口 → 服务器端口(数据连接)

FTP 服务器软件

对比:常用 FTP 服务器

软件 特点 平台 适用
vsftpd Very Secure FTP Daemon,非常安全,性能好 Linux 生产环境首选
wu-ftpd Washington University FTP,老牌 FTP 服务器 Unix/Linux 已较少使用
ProFTPD 功能强大,配置灵活 Linux 需要高级功能时
Pure-FTPd 轻量级,安全性好 Linux 简单场景
Serv-U 商业软件,界面友好 Windows Windows 平台

vsftpd 配置

vsftpd 文件结构

路径 说明
/etc/vsftpd/ 配置文件目录
/etc/vsftpd/vsftpd.conf 主配置文件
/etc/vsftpd/user_list 用户列表(黑/白名单)
/etc/vsftpd/ftpusers 禁止登录的用户列表
/etc/init.d/vsftpd 服务脚本
/usr/sbin/vsftpd 主程序
/var/ftp/ 匿名用户根目录

vsftpd 用户类型
匿名用户
系统用户
虚拟用户
👤 FTP 用户
用户类型?
🌐 anonymous

映射为 ftp 系统用户
👨‍💼 本地系统用户

直接使用系统账号
🎭 虚拟用户

映射为指定系统用户
📁 /var/ftp/
🏠 用户家目录
🗄️ MySQL/文件存储

对比:三种 FTP 用户

用户类型 认证方式 映射 家目录 权限 适用场景
匿名用户 无需密码或 email ftp 系统用户 /var/ftp/ 受限 公共下载
系统用户 系统账号密码 自己 用户家目录 灵活 内部使用
虚拟用户 独立用户数据库 指定系统用户 可配置 灵活 大量用户,安全隔离

vsftpd 常用配置

bash 复制代码
# 编辑配置文件
vi /etc/vsftpd/vsftpd.conf

# 是否允许匿名用户
anonymous_enable=YES

# 是否允许本地用户
local_enable=YES

# 是否允许匿名用户上传
anon_upload_enable=YES

# 是否允许匿名用户创建目录
anon_mkdir_write_enable=YES

# 禁锢用户在家目录
chroot_local_user=YES

# 监听模式(独立守护进程)
listen=YES

# 被动模式端口范围
pasv_min_port=30000
pasv_max_port=31000

启动 vsftpd

bash 复制代码
# 安装 vsftpd
yum install -y vsftpd

# 启动服务
service vsftpd start

# 设置开机启动
chkconfig vsftpd on

# 查看端口
netstat -tunlp | grep vsftpd

FTP 客户端

对比:FTP 客户端工具

类型 工具 平台 特点
CLI ftp Linux/Windows 命令行,简单
CLI lftp Linux 功能强大,支持脚本
GUI FileZilla 跨平台 开源,功能全
GUI FlashFXP Windows 商业,界面友好
GUI WinSCP Windows 支持 FTP/SFTP/SCP

FTP 常用命令

bash 复制代码
# 连接 FTP 服务器
ftp 192.168.1.100

# 常用命令
ls          # 列出服务器文件
cd          # 切换服务器目录
lcd         # 切换本地目录
get file    # 下载文件
mget *.txt  # 下载多个文件
put file    # 上传文件
mput *.txt  # 上传多个文件
binary      # 二进制模式
ascii       # 文本模式
bye/quit    # 退出

📖 名词解释

名词 解释 生活例子
FTP File Transfer Protocol,文件传输协议 像"快递服务",专门传输文件
vsftpd Very Secure FTP Daemon,非常安全的 FTP 守护进程 像"顺丰快递",安全可靠
命令连接 FTP 的控制连接,21/tcp,持续连接 像"打电话",一直通着
数据连接 FTP 的数据传输连接,按需建立 像"送快递",送完就走
主动模式 服务器主动连接客户端传输数据 像"外卖员送上门"
被动模式 客户端主动连接服务器传输数据 像"你下楼取外卖"
chroot 将用户禁锢在指定目录,无法访问上级目录 像"关在房间里",出不去
匿名用户 无需密码即可登录的用户 像"游客",随便进
虚拟用户 不是系统用户,存储在数据库或文件中 像"会员卡",只在这个店用
PAM Pluggable Authentication Modules,可插拔认证模块 像"门禁系统",可以换不同的锁

NFS 网络文件系统 🗂️

使用场景

场景 说明 典型选型
Web 集群共享存储 多台 Web 服务器共用一个目录(代码/上传) NFS 导出 /var/www;各节点 mount 同一 NFS
开发/测试共享代码 多人共用一套代码或数据 NFS 导出项目目录;注意 UID/GID 一致或 all_squash
备份集中存储 各机把备份写到同一 NFS 目录 NFS 只写或读写;配合 cron 备份脚本
容器/虚拟机持久化 容器或 VM 挂载宿主机目录 宿主机做 NFS 服务端;容器/VM 做客户端
Linux 间大文件共享 无需 Samba,纯 Linux 环境 NFS 性能好、配置简单;注意 ro/rw、root_squash

安装可能遇到的问题

现象 可能原因 处理思路
showmount -e 报错或无输出 rpcbind 未启、exports 未生效、防火墙 先启 rpcbind 再启 nfs;exportfs -rav;放行 111(tcp/udp)、2049(tcp/udp)、mountd/quotad 端口
mount.nfs: Connection refused 服务端 NFS 未起、端口被拦 服务端 netstat/rpcinfo -p 确认 nfsd、mountd 在监听;防火墙放行
Permission denied 或 权限错乱 root_squash、UID/GID 不一致 需写且用 root 时 no_root_squash(慎用);或 all_squash + anonuid/anongid 统一为某用户
CentOS 用 rpcbind,老版用 portmap 服务名不同 CentOS 6+ 多为 rpcbind;Ubuntu 也是 rpcbind;先启 rpcbind 再 nfs
Ubuntu 服务端包名 不是 nfs-utils 服务端装 nfs-kernel-server;客户端装 nfs-common

NFS 工作原理

NFS 架构
💻 NFS 客户端
📞 RPC 客户端
🌐 网络
📞 RPC 服务端

portmap/rpcbind
🗄️ NFS 服务器
🔧 内核空间

nfsd
📁 文件系统

ext4/xfs

生活例子:NFS 像"云盘"------你在自己电脑(客户端)上看到的文件,实际存在别人电脑(服务器)上;RPC 像"翻译官",帮你和服务器对话。

为什么 NFS 需要 RPC?

NFS 服务器的端口不固定(除了 nfsd 的 2049),客户端不知道其他服务(mountd、quotad)的端口。RPC(portmap/rpcbind)就像"电话总机",客户端先问 RPC"mountd 在哪个端口",RPC 告诉客户端端口号,客户端再去连接。

NFS 服务组件

组件 端口 作用
nfsd 2049/tcp、2049/udp(固定) NFS 主服务,处理文件操作
mountd 随机(半随机) 处理客户端挂载请求
quotad 随机(半随机) 磁盘配额管理
portmap/rpcbind 111/tcp、111/udp RPC 端口映射服务

对比:NFS vs Samba vs FTP

对比项 NFS Samba FTP
协议 NFS(RPC) SMB/CIFS FTP
平台 Unix/Linux 跨平台(Linux/Windows) 跨平台
使用方式 挂载为本地目录 网络邻居/挂载 上传下载
性能 快(内核级) 中等 中等
权限 Unix 权限 Windows 权限 FTP 权限
适用场景 Linux 服务器间共享 Linux 与 Windows 共享 文件传输

NFS 配置

安装和启动

bash 复制代码
# 安装 NFS
yum install -y nfs-utils

# 启动 RPC(必须先启动)
service rpcbind start    # CentOS 6+
service portmap start    # CentOS 5

# 启动 NFS
service nfs start

# 查看 RPC 服务
rpcinfo -p localhost

# 查看端口
netstat -tunlp | grep -E '(nfs|rpc)'

/etc/exports 配置文件

格式

text 复制代码
/共享目录  客户端1(选项1,选项2)  客户端2(选项3,选项4)

客户端表示方式

方式 示例 说明
IP 192.168.1.100 单个 IP
网段 192.168.1.0/24 或 192.168.1.0/255.255.255.0 整个网段
主机名 client.example.com 单个主机
域名 *.example.com 域内所有主机
通配符 * 所有主机(不推荐)

常用选项

选项 说明 默认值
ro 只读 -
rw 读写 -
sync 同步写入磁盘 推荐
async 异步写入(先写缓存) 快但不安全
root_squash 将 root 映射为匿名用户 默认开启
no_root_squash root 不映射 不安全
all_squash 所有用户都映射为匿名用户 -
anonuid=UID 指定匿名用户 UID -
anongid=GID 指定匿名用户 GID -

配置示例

bash 复制代码
# 编辑 /etc/exports
vi /etc/exports

# 示例 1:只读共享给整个网段
/shared  192.168.1.0/24(ro,sync)

# 示例 2:读写共享,root 不映射
/data  192.168.1.0/24(rw,sync,no_root_squash)

# 示例 3:多个客户端不同权限
/public  192.168.1.0/24(ro,sync)  192.168.1.100(rw,sync)

# 重新导出(使配置生效)
exportfs -rav

# 查看已导出的文件系统
exportfs -v

客户端挂载

bash 复制代码
# 查看服务器共享的目录
showmount -e 192.168.1.100

# 挂载 NFS
mount -t nfs 192.168.1.100:/shared /mnt/nfs

# 查看挂载
df -h

# 卸载
umount /mnt/nfs

# 开机自动挂载(/etc/fstab)
192.168.1.100:/shared  /mnt/nfs  nfs  defaults  0  0

NFS 管理命令

bash 复制代码
# showmount - 查看 NFS 服务器信息
showmount -e 服务器IP    # 查看导出的文件系统
showmount -a 服务器IP    # 查看所有挂载
showmount -d 服务器IP    # 查看被挂载的目录

# exportfs - 管理导出的文件系统
exportfs -rav    # 重新导出所有
exportfs -uav    # 取消导出所有
exportfs -v      # 显示详细信息

📖 名词解释

名词 解释 生活例子
NFS Network File System,网络文件系统 像"云盘",远程文件像本地文件一样用
RPC Remote Procedure Call,远程过程调用 像"翻译官",帮不同程序对话
portmap/rpcbind RPC 端口映射服务 像"电话总机",告诉你服务在哪个端口
nfsd NFS 守护进程,处理文件操作 像"文件管理员",负责文件读写
mountd 处理客户端挂载请求的守护进程 像"门卫",检查你能不能挂载
quotad 磁盘配额守护进程 像"限额管理",限制你能用多少空间
exportfs 管理 NFS 导出文件系统的命令 像"共享管理器",管理哪些目录共享
showmount 查看 NFS 服务器信息的命令 像"查看共享列表"
root_squash 将客户端 root 映射为匿名用户 像"降权",root 变成普通用户
/etc/exports NFS 导出配置文件 像"共享配置表",定义谁能访问什么

相关推荐
蜡笔小炘2 小时前
Haproxy -- 动/静/混合态算法实验
运维·服务器·vim·haproxy
政安晨2 小时前
政安晨【人工智能项目随笔】OpenClaw(AI人工智能助手)集成SMB服务器实现自动化音效素材处理实战
运维·自动化·自动化运维·samba·ai-agent·openclaw·音频素材openclaw处理
huohaiyu2 小时前
数据链路层与网络协议全解析
服务器·网络·数据链路层
乾元3 小时前
合规自动化:AI 在资产发现与数据合规治理中的“上帝之眼”
运维·网络·人工智能·安全·web安全·机器学习·安全架构
沄媪3 小时前
Web渗透测试详细技术总结(基于Kali Linux)
linux·前端·渗透测试·web
落羽的落羽3 小时前
【C++】深入浅出“图”——最短路径算法
java·服务器·开发语言·c++·人工智能·算法·机器学习
之歆3 小时前
Linux系统管理与运维基础
linux·运维·服务器
Maynor9963 小时前
OpenClaw 第2章:环境搭建
运维·人工智能·飞书
人间打气筒(Ada)3 小时前
SQL Server 之创建和管理数据表
运维·服务器·数据库·windows·sql语句·sql server·windows server