ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux实战指南:LNMP环境搭建Discuz论坛全流程

2026/9/7 16:23:19 拓冰建站 浏览量
Linux实战指南:LNMP环境搭建Discuz论坛全流程 项目标题: Linux综合项目--搭建论坛项目正文: 基于LNMP环境搭建一个Discuz论坛系统掌握Linux常用命令、服务器配置、数据库管理等技能。关键词: Linux, 搭建论坛, LNMP, Discuz, Nginx, MySQL, PHP, 运维最近有个朋友问我怎么验证自己的Linux到底学得怎么样。我都会说一句话别去背题了找个综合项目亲手做一遍。背一百道面试题不如在自己服务器上完整搭一次论坛。为什么因为搭建一个论坛几乎能覆盖Linux运维日常工作中百分之八十的操作——装软件、配服务、调权限、查日志、排错、做优化。你把这一套流程走一遍对Linux的理解完全会上一个台阶。这篇文章就是我整理的一份完整实战记录从零开始在一台干净的Linux服务器上基于LNMP环境搭建Discuz论坛。整个过程我会讲清楚每一条命令为什么这么写、每一个配置项到底在干什么、哪些坑是新手最容易踩的。不管是刚接触Linux的学生还是准备转行运维的开发者照着这份笔记做一遍你收获的不只是“论坛能跑起来”而是真正理解服务器端应用是怎么工作的。1. 搭论坛前先搞明白整体架构啥都不管上来就执行命令遇到问题了根本不知道去哪儿排查。动手之前先把论坛跑起来的整个逻辑链路搞清楚。1.1 LNMP是什么为什么选这套组合LNMP是Linux Nginx MySQL PHP的组合缩写。这四个组件各管一摊Linux操作系统所有服务都跑在它上面。NginxWeb服务器负责接收浏览器的请求。遇到静态资源图片、CSS文件直接自己处理返回遇到动态请求比如用户登录、发帖就转给PHP解析器去处理。MySQL数据库论坛的帖子内容、用户账号、版块设置全部以表格形式存在这里。PHP脚本解析器负责执行Discuz的PHP代码。Discuz是个用PHP写的程序PHP解析完代码之后从MySQL里读数据、把结果生成HTML页面再交给Nginx返回给用户。这套架构的核心在于“动静分离”Nginx处理静态内容又快又省资源PHP只处理需要计算的动态逻辑MySQL专注做数据存储和查询。就好比一家餐厅Nginx是前台服务员静态内容就是水、纸巾这类摆在那就能拿的东西PHP是厨师得现炒菜MySQL是后厨的食材仓库。各司其职效率才高。1.2 Discuz论坛在其中的角色Discuz是国内非常经典的开源论坛系统基于PHP开发数据存储依赖MySQL。它不是基础设施而是业务代码——就像你买了全套厨具LNMP还得有菜谱才知道菜怎么做。Discuz就是这套菜谱已经写好了用户注册、发帖回帖、版块管理、后台运营这些完整功能的代码我们只需要把它放到服务器上、配置好数据库、填好安装信息就能跑起来一个功能齐全的论坛。选择Discuz主要是因为它成熟稳定、网上资料多、对新手友好。另外一个原因是它的安装过程完整覆盖了“下载代码 → 配置文件权限 → 建数据库 → Web安装向导”这条全流程步骤卡在哪一步基本就能对应到Linux哪块知识点没掌握。1.3 环境规划与版本选型我用的是CentOS 7.9云服务器2核4G配置系统盘50G。这套配置对测试环境完全够用。软件版本按照CentOS 7默认源能装到的版本走不追求最新。先说清楚一个坑版本不是越高越好。新版软件往往依赖新版依赖库而生产环境讲究“稳定压倒一切”。很多Linux发行版默认源里的Nginx、PHP版本看着老但都是经过长期测试的能装就用默认源里的省去大量编译折腾的时间。下面是环境清单组件版本方案说明操作系统CentOS 7.9服务器领域经典发行版Nginx1.20.x从官网yum源安装MySQL5.7.x同样走yum源PHP7.4.x用remi源安装避免编译DiscuzX3.5目前官方维护的稳定版本提示如果你手头是Ubuntu/Debian核心步骤一致只是包管理器不同apt代替yum配置路径略有差别。思路完全通用。2. 服务器基础配置环境没准备好后面全是泪很多人装完系统就急着装软件结果后面开个端口要权限、关个防火墙找不到命令四处碰壁。基础系统配置花十分钟搞定后面能省两小时。别嫌这一步啰嗦。2.1 新建部署用户与目录规划虽然我是用root操作的但强烈建议你自己练手时新建一个普通用户来部署代码。为啥因为Discuz程序运行需要读写文件如果你用root部署然后Nginx用root身份运行万一程序有漏洞被攻击了攻击者直接拿到的是服务器最高权限。用普通用户跑攻击者最多拿到这个用户的权限。我新建了一个www用户# 创建用户不创建家目录不允许登录shell useradd -M -s /sbin/nologin www解释一下参数-M表示不创建家目录-s /sbin/nologin表示禁止这个用户登录终端。因为www用户只是给Nginx和PHP进程用的身份不需要登录系统。代码部署在/data/wwwroot/目录下单独划分数据盘和系统盘分离方便以后备份迁移mkdir -p /data/wwwroot/discuz2.2 关闭SELinux和防火墙配置CentOS 7默认开启SELinux这东西是个强制访问控制模块。它在生产环境有意义但对新手来说排查问题实在太痛苦——你明明配好了Nginx所有权限它还是报403查了半天发现是SELinux把访问拦了。测试环境直接关闭咱们把精力集中在业务本身# 临时关闭 setenforce 0 # 永久关闭修改配置文件 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config防火墙方面既然自己搭服务器练手干脆把服务端口放开。CentOS 7默认用的是firewalld# 开放80HTTP和3306MySQL远程按需 firewall-cmd --permanent --add-port80/tcp # 如果是阿里云/腾讯云服务器还要在控制台安全组里放开80端口 firewall-cmd --reload注意firewalld和iptables是两套防火墙系统默认启用哪个就用哪个别混着开否则配置会互相干扰把自己绕晕。2.3 配置yum源CentOS 7默认的yum源在国外服务器上国内服务器下载速度慢。我先把源切成国内镜像源同时安装EPEL扩展源# 备份原配置 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 下载国内镜像源配置以阿里云镜像为例 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 安装EPEL源 yum install -y epel-release yum clean all yum makecache这个操作让后面所有软件安装都受益。yum没法用的时候检查网络是最优先的事其次是确认源地址是不是通——curl -I http://mirrors.aliyun.com就能试出来。3. Nginx安装与配置入口必须先通3.1 用yum安装Nginx从官方源装稳定又省事。先配官方Nginx源# 创建nginx源文件 vim /etc/yum.repos.d/nginx.repo写入以下内容[nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/7/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue然后执行安装yum install -y nginx装完先别急着启动。注意一个细节yum装的nginx默认站点配置在/etc/nginx/conf.d/default.conf主配置文件是/etc/nginx/nginx.conf。我们需要改的是新建一个虚拟主机配置。3.2 Nginx虚拟主机配置一个服务器上可以跑多个网站“虚拟主机”就是让Nginx根据用户访问的域名或端口决定把请求交给哪个网站的配置。我创建论坛专属配置vim /etc/nginx/conf.d/discuz.conf核心配置如下注意带了详细注释server { listen 80; # 如果没有域名可以直接写服务器IP server_name forum.example.com; # 根目录告诉Nginx去哪找文件 root /data/wwwroot/discuz; # 默认首页文件 index index.php index.html; # 处理PHP请求的关键配置转发给php-fpm location ~ \.php$ { root /data/wwwroot/discuz; # 转发给PHP-FPM监听的127.0.0.1:9000端口 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # 以下两行是让PHP能找到SCRIPT_FILENAME环境变量 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 静态文件缓存设置Discuz的很多图片和CSS都走这里 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } }这里最核心的是location ~ \.php$这一段它匹配所有以php结尾的URL请求转发给PHP-FPM处理。如果你漏了这段配置会发现浏览器访问PHP文件直接变成了下载或者白屏。验证配置语法然后启动# 检查语法输出syntax is ok说明配置没问题 nginx -t # 启动nginx并设置开机自启 systemctl start nginx systemctl enable nginx到这一步先用一个测试页面验证Nginx工作正常echo Nginx is working /usr/share/nginx/html/test.html curl http://你的IP/test.html如果能返回Nginx is working说明Nginx入口已经打通。3.3 排错Nginx启动失败怎么办实际操作中Nginx启动失败最常见的原因就是配置写错了。排查顺序如下先跑nginx -t系统会直接告诉你哪一行配置有问题。如果显示端口被占用用netstat -tlnp | grep :80看看是不是有别的服务占着80端口。查看错误日志这是定位问题的宝库tail -f /var/log/nginx/error.log日志里会明确告诉你问题出在哪一行配置、缺少什么文件。学会看日志发现问题能力能提升一大半。4. MySQL安装与数据库创建4.1 安装MySQL 5.7CentOS 7默认源里没有MySQL需要添加官方源。这里使用MySQL官方提供的yum仓库# 下载MySQL官方yum仓库包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm # 安装这个仓库包 yum localinstall -y mysql57-community-release-el7-11.noarch.rpm # 安装MySQL服务端 yum install -y mysql-community-server安装时间取决于网速耐心等待。装完后启动systemctl start mysqld systemctl enable mysqld4.2 获取临时密码并修改MySQL 5.7在初始安装后会自动生成一个临时密码记录在日志文件里grep temporary password /var/log/mysqld.log输出类似A temporary password is generated for rootlocalhost: xxxxxxxx。用这个密码登录MySQLmysql -uroot -p登录后第一件事就是修改root密码不然什么都做不了。MySQL的密码策略默认要求包含大写、小写、数字、特殊字符长度至少8位ALTER USER rootlocalhost IDENTIFIED BY Your_Strong_Passw0rd!; FLUSH PRIVILEGES;疑问为什么要搞得这么复杂MySQL默认安装了validate_password插件在生产环境这是保护数据库安全的重要防线。测试环境你可以降低策略set global validate_password_policyLOW;配合长度设置。但我建议就算测试也别太简单好习惯要从练手时养成。4.3 创建论坛数据库和专用账号数据库安全原则之一禁止应用直接用root账号连接数据库。root的权限太大了论坛程序一旦被SQL注入攻击者能通过root操作整个数据库。所以我们创建一个权限最小化的专用账号-- 创建数据库指定字符集为utf8mb4支持存储emoji表情 CREATE DATABASE discuz DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 创建应用账号密码单独设置 CREATE USER discuz_userlocalhost IDENTIFIED BY Discuz_Passw0rd!; -- 授权 GRANT ALL PRIVILEGES ON discuz.* TO discuz_userlocalhost; FLUSH PRIVILEGES;关于字符集多说一嘴utf8mb4是utf8的超集能存储四字节的emoji表情。论坛这种用户创造内容的场景用户随时可能发个表情选utf8mb4绝对没错。选错了后面数据写入会报错到时候迁移数据可就是个大工程了。discuz.*表示只给这个账号操作discuz这个库所有表的权限不影响其他数据库。这就是最小权限原则的落地。4.4 验证数据库连接用新创建的账号验证能正常登录数据库mysql -udiscuz_user -pDiscuz_Passw0rd!登录后执行SHOW DATABASES;能看到discuz库就算成功。这一步看似简单却能提前暴露很多问题比如密码错误、账号授权没生效比后面装Discuz到“数据库连接失败”那一步才发现错误要省心得多。5. PHP安装与配置数据流动的桥梁5.1 用remi源安装PHP 7.4CentOS 7默认源里的PHP版本是5.4太老了Discuz X3.5要求至少PHP 7.0以上。我使用remi源来安装更新的PHP版本# 安装remi源 yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm # 启用remi-php74仓库 yum-config-manager --enable remi-php74 # 安装PHP及Discuz需要的扩展 yum install -y php php-fpm php-mysql php-gd php-mbstring php-xml php-json这里装的每个扩展都有实际用途php-mysqlPHP连接MySQL数据库的驱动没有它Discuz无法读写数据。php-gd图像处理库Discuz生成验证码、缩略图需要它。php-mbstring多字节字符串扩展处理中文编码必须否则页面会出现乱码。php-xml解析XML文档的扩展Discuz某些功能模块会用到。php-json处理JSON数据格式。实际装完后可以心里做个验证如果安装过程报依赖错误大概率是源冲突了。需要检查下remi源和epel源是否有冲突。5.2 配置PHP-FPMPHP-FPM是PHP的进程管理器。Nginx本身不理解PHP代码需要把请求交给PHP-FPM处理再由它调起PHP解释器执行代码。修改PHP-FPM的配置文件vim /etc/php-fpm.d/www.conf关键配置点; 运行用户和用户组和Nginx保持一致这里都是www user www group www ; 监听方式兼容我们Nginx配置里写的127.0.0.1:9000 listen 127.0.0.1:9000 ; 进程管理方式 pm dynamic pm.max_children 20 pm.start_servers 5 pm.min_spare_servers 5 pm.max_spare_servers 10进程管理参数简单说就是PHP-FPM最多同时开多少个进程处理请求。max_children数量取决于服务器内存——每个PHP进程可能占用30-50MB内存2G内存服务器开20个左右比较安全。开太多内存不够会OOM开太少并发一大就502。关于运行用户www.conf里默认是apache用户必须改成和Nginx一致的www否则会在后面出现权限问题Nginx写完文件、PHP进程读不了或者反过来。检查PHP-FPM主配置中是否启用了www.confgrep ^include /etc/php-fpm.conf然后启动PHP-FPMsystemctl start php-fpm systemctl enable php-fpm5.3 测试PHP和Nginx是否通了在网站目录创建测试文件# 先改一下目录属主因为后面Discuz也是放到这个目录 chown -R www:www /data/wwwroot/discuz echo ?php phpinfo(); ? /data/wwwroot/discuz/test.php浏览器访问http://你的IP/test.php。如果能看到PHP的版本信息和所有配置参数说明PHP已安装成功且Nginx转发正常。如果看到的是空白页原因是php-fpm配置里的listen方式不对或者权限问题。用以下命令确认php-fpm在运行ss -tlnp | grep 9000有监听输出就说明PHP-FPM在正常工作。注意测试完务必删除test.phpphpinfo会暴露服务器详细环境信息上线前忘删等于把钥匙挂在门口。6. Discuz部署代码落地与安装向导6.1 下载Discuz并解压进入官网下载X3.5最新版或者在服务器上直接用wget拉取为了方便我用的是官方提供的下载地址cd /data/wwwroot/discuz # 下载Discuz X3.5 wget https://www.discuz.net/... # 实际下载时请从官网获取最新地址如果下载慢可以本地下载后通过sftp上传或者直接用rz命令上传需要安装lrzszyum install -y lrzsz。上传压缩包后解压unzip Discuz_X3.5_SC_UTF8.zip # 如果没装unzip就执行yum install -y unzip解压后目录结构类似于upload/论坛程序文件上传到Web根目录readme/说明文档utility/工具脚本把upload目录下的所有文件移动到站点根目录# 如果已经在/data/wwwroot/discuz下面解压 mv upload/* /data/wwwroot/discuz/ # 清理无用文件 rm -rf upload *.zip6.2 权限设置最多人踩的坑Discuz安装过程中需要写一些配置文件还会生成缓存目录。权限设不对安装向导会直接提示目录不可写。从安全角度考虑我不建议直接chmod 777。正确做法是# 改属主把Discuz所有文件交给www用户和用户组管理 chown -R www:www /data/wwwroot/discuz # 设置目录权限755 find /data/wwwroot/discuz -type d -exec chmod 755 {} \; # 设置文件权限644 find /data/wwwroot/discuz -type f -exec chmod 644 {} \; # 给需要写入的目录足够权限 chmod -R 777 /data/wwwroot/discuz/config chmod -R 777 /data/wwwroot/discuz/data chmod -R 777 /data/wwwroot/discuz/uc_server/data解释一下为什么是wwwNginx和PHP-FPM都以www身份运行文件的属主必须是wwwnginx才能读取data目录里要生成缓存文件必须允许www去写所以需要777权限。很多教程图省事安装前先对目录整个chmod -R 777它是能跑通但服务器就跟裸奔一样。配置文件和data目录才是Discuz真正需要写的目录。6.3 浏览器端安装向导完成环境配置后在浏览器输入http://你的IP/会看到Discuz安装欢迎页。安装步骤同意协议检查环境依赖是否全部满足。选择“全新安装”。填写数据库信息配置项填写值说明数据库服务器localhost数据库和Web在同一台机器数据库名discuz之前创建的库名数据库用户名discuz_user之前创建的专用账号数据库密码Discuz_Passw0rd!账号对应的密码表前缀pre_默认即可一台机器跑多个Discuz时才需要区分管理员账号admin论坛创始人的登录名管理员密码自定义高强度密码后面登录后台要用管理员Email自己的邮箱用于找回密码和系统通知点击“下一步”安装程序会自动创建数据表、写入配置文件。看到“安装成功”页面论坛就跑起来了。6.4 安装中常见的报错安装过程中容易卡在两处第一处环境检查页面提示某个目录不可写。解决办法就是回到服务器检查目录权限重点看属主是不是www。第二处提示“数据库连接失败”。这时候按顺序排查# 1. 确认MySQL服务在运行 systemctl status mysqld # 2. 确认用户名密码能登录 mysql -udiscuz_user -p密码 -e USE discuz; SHOW TABLES; # 3. 确认账号有权限 SHOW GRANTS FOR discuz_userlocalhost;能通过上面三步数据库连接肯定没问题。如果还报错看PHP错误日志tail -f /var/log/php-fpm/error.log日志信息基本能直接告诉你问题在哪一行代码、什么原因导致的。7. 论坛初始化与安全加固论坛安装成功只是第一步很多人的论坛马上就出各种问题原因在于初始化没做好。我把自己踩过的坑理一遍。7.1 后台基本设置用安装时创建的管理员账号登录后台默认地址是http://你的IP/admin.php重点做这几个设置站点名称和描述在“全局 → 站点信息”里改成自己的论坛名称浏览器标题和搜索引擎收录都会用到。URL静态化在“全局 → SEO设置”里打开伪静态。这需要配合Nginx rewrite规则否则会出现404。Discuz的伪静态规则官方文档有提供加到nginx配置的server块里就行。缓存更新改完设置后在“工具 → 更新缓存”里更新下缓存不然页面显示的还是旧内容。注册机制新手刚上线建议先开“普通注册验证码”等熟悉后台了再考虑要不要邮箱认证。7.2 必须立刻做的安全动作安全这块不能心存侥幸论坛只要暴露在公网上分分钟就会有扫描器来探测。安装完成后立刻做这四件事第一删除安装目录。Discuz安装完成后install目录必须删除或改名否则别人可以重装你的论坛、覆盖数据库危害极大chown -R root:root /data/wwwroot/discuz/install mv /data/wwwroot/discuz/install /data/wwwroot/discuz/install_bak # 但是很多教程会建议删个人建议直接改名加锁就行稳妥点就彻底删掉rm -rf /data/wwwroot/discuz/install第二修改管理员后台入口。把admin.php改名降低被暴力破解的风险。第三关闭目录列表。在Nginx配置里加一行autoindex off;不然用户直接访问某个没有index.html的目录能把目录下所有文件名看个精光这是信息泄漏。第四配置好备份策略。至少保证数据库每天备份一次。论坛最值钱的是用户发的帖子也就是数据库里的数据程序文件丢了能重装数据丢了就真没了# 手动备份命令 mysqldump -uroot -p discuz /backup/discuz_$(date %Y%m%d).sql生产环境建议写个shell脚本配合crontab定时执行这里先不展开了。7.3 添加一个测试帖验证全链路现在真正验证论坛是否正常工作在前台注册一个测试账号记得不要用完删掉后续很多功能测试要用。发一个带着中文、图片、表情的帖子测试数据库写入和对外展示是否正常。换一个浏览器看无需登录能不能正常浏览能浏览说明前台读取没问题。后台能正常登录、退出管理功能没报错。跑通这几个流程说明这条链路已经完整浏览器 → Nginx → PHP → MySQL → 页面返回。8. 常见问题排查自己搭过一遍论坛下面这些问题我基本都遇到过。整理成速查表你遇到类似情况可以直接按表操作。8.1 问题速查表现象可能性排序排查命令/方法访问IP打不开页面防火墙/安全组systemctl status firewalld云控制台确认80端口安全组放行页面返回403 Forbidden目录权限错误ls -ld /data/wwwroot/discuz确认www用户能访问访问PHP文件变成下载Nginx没配置PHP转发检查nginx配置中location ~ .php配置块PHP页面空白PHP-FPM没运行或代码报错systemctl status php-fpm查 /var/log/php-fpm/error.log数据库连接失败账号密码错误或没授权用mysql命令行手动连接测试安装后页面样式丢失伪静态规则不对把Discuz官方的rewrite规则正确写入nginx配置502 Bad GatewayPHP-FPM进程挂了或负载过高看php-fpm日志ps aux | grep php-fpm图片上传失败目录不可写或php-gd没装检查data目录权限确认php -m有gd扩展8.2 502和504怎么判断502 Bad Gateway和504 Gateway Timeout是LNMP环境最常见的错误代码。出现502核心问题是Nginx连不上PHP-FPM。排查路径# 看php-fpm是否活着 ps aux | grep php-fpm # 如果活着看监听端口是否还在 ss -tlnp | grep 9000 # 如果都没问题看是不是php-fpm进程不够用 tail -f /var/log/php-fpm/error.log日志里如果出现server reached pm.max_children说明进程数不够需要修改pm.max_children。2G内存大概可以设置到20-304G可以设置到50左右。出现504说明请求超时。Nginx默认的fastcgi读取超时时间是60秒执行超过60秒脚本就会504。如果你的PHP程序有些操作确实很慢比如导入大量数据可以适当调大fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;8.3 服务器被扫描怎么办服务器上了公网之后查看日志会发现大量扫描请求各种奇怪路径、后台爆破、漏洞探测都有。这不代表被攻击了这是网络世界的常态类似大街上有人挨家挨户敲门试探。正确应对方法定期查看Nginx访问日志了解访问源头的异常情况。tail -f /var/log/nginx/access.log后台登录开启验证码并设置连续失败N次锁定账号一段时间。修改SSH默认端口22改成高位端口比如22000最低成本的防爆破方式。vim /etc/ssh/sshd_config # 找到Port 22修改为Port 22000 # 重启sshd前要保持当前会话不退出防止改错把自己关在门外 systemctl restart sshd这个操作有一定风险性改之前一定要确认新端口在防火墙放行了不然一旦断开连接你就得去云控制台VNC登录才能救回来。9. 个人实操体会论坛跑通那一刻成就感确实很足。但回头看真正让自己水平提升的并不是“把Discuz装好了”这个结果而是中间查询一个个报错、理清一个个组件之间关系的过程。装Nginx后明白了什么是反向代理配PHP-FPM时懂得了动态请求怎么转发创建数据库账号时理解了最小权限的意义改配置搜资料时学会了看官方文档。这是背多少面试题都换不来的。给你几个实在的建议第一每一步操作尽量知道为什么不知道就先查清楚再动手不要出一行错就盲目去CSDN复制一段看不懂的代码。第二养成记笔记的习惯把遇到的问题、解决路径、最终的可行方案写下来。配置服务器这种东西太久不碰真的会忘笔记都是写给未来的自己看的。第三上面这套做完了可以再挑战一下升级比如把HTTP改成HTTPS、给论坛做CDN加速、核心配置改成自动化部署脚本每一步延伸都能捞到新知识。读到这里去敲你服务器上的第一行命令吧。纸上得来终觉浅绝知此事要躬行——Linux就是这样看一百篇教程不如自己踩一次坑来得深刻。