当前位置:首页>Linux>Go 语言大白话入门 拓展阅读 | Linux 基础命令与服务器部署

Go 语言大白话入门 拓展阅读 | Linux 基础命令与服务器部署

  • 2026-08-19 22:20:46
Go 语言大白话入门 拓展阅读 | Linux 基础命令与服务器部署

Linux 基础命令与服务器部署

本文是《Go 语言大白话入门》系列教程的拓展教程,跟着一步步练手,点击查看完整目录

你在 Windows 或 Mac 上写代码,但程序最终要跑在服务器上给别人用。绝大部分服务器的操作系统是 Linux,没有图形界面,只有命令行。这章讲部署 Go 程序必须会的那些命令。

Linux 体系庞大,本章只讲解部署 Go 程序必备的基础命令。若想要系统深耕,可以专门学习 Linux 教程。不用一次性背完所有命令,遵循「用到再学」的思路,善用搜索引擎与 AI 工具解决遇到的问题。

服务器系统怎么选

部署 Go 程序前,先要选服务器装什么 Linux。服务器选什么发行版直接决定了你之后几年怎么运维——选错了换一次代价很大。

💡 新手最常踩的坑:以为「Linux 都一样」。其实不同发行版的包管理器(apt/yum/dnf)、服务管理方式(systemd)、系统目录布局、默认软件版本都不同,命令不通用。 比如 Ubuntu 用 apt install,CentOS 早期用 yum,新版本改 dnf;Debian 偏保守,Arch 滚动更新几乎每天都有新版本。

主流服务器发行版客观对比

发行版
包管理
核心特点
适合场景
不适合场景
Ubuntu LTS
apt
社区最活跃、文档最多、教程最全,云厂商默认镜像
新手首选
、个人项目、中小公司主流服务器
极端定制需求
Debian
apt
Ubuntu 的上游发行版,稳定性第一,软件版本偏旧
生产服务器、金融/政企保守场景
想用最新软件版本
CentOS Stream
dnf
RHEL 的开源测试版,企业级生态最强(曾是企业首选)
已有 CentOS 运维经验的团队
2021 年红帽调整策略,CentOS 停止传统稳定版,改为滚动更新的 CentOS Stream,不再作为 RHEL 稳定下游克隆版本
Rocky Linux / AlmaLinux
dnf
CentOS 停摆后社区推出的"RHEL 替代品",与 RHEL 1:1 兼容
想继续用 CentOS 风格的生产环境
新人学习(中文资料比 CentOS 少)
Amazon Linux
dnf
AWS 官方优化版,深度集成 AWS 生态
AWS 用户首选
其他云/自建机房
Alpine
apk
镜像仅 5MB 左右,musl libc,极小极轻
Docker 镜像、容器场景
跑 GNOME/KDE 桌面或编译型大项目(musl 兼容性坑多)
openEuler
dnf
华为主导,国产化生态,国内运营商/政府首选
国内政企信创场景
国外云、国际项目

⚠️ 新手最稳的选择Ubuntu 22.04/24.04 LTS 或 Debian 12(bookworm)。 LTS = Long Term Support(长期支持 5 年),软件版本不会频繁升级出问题,遇到问题网上能搜到答案的概率最大。

镜像选择

  • 云服务器(阿里云、腾讯云、AWS):直接用云厂商提供的官方镜像,省去装系统、配置网络、SSH、防火墙的麻烦,开机即用
  • 自建机房 / 虚拟机:去发行版官网下载 ISO,用 U 盘或 Ventoy 制作启动盘安装
  • Docker 容器:基础镜像直接从 Docker Hub 拉取(docker pull ubuntu:24.04),不用关心 ISO

下载地址

发行版
官网
下载直达
Ubuntu
https://ubuntu.com
https://releases.ubuntu.com(点进去选 LTS 版本)
Debian
https://www.debian.org
https://www.debian.org/distrib(推荐 netinst 最小镜像)
Rocky Linux
https://rockylinux.org
https://rockylinux.org/download
AlmaLinux
https://almalinux.org
https://almalinux.org/get-almalinux
Amazon Linux
https://aws.amazon.com/amazon-linux
建议在 AWS 控制台直接选 AMI,不单独下载
Alpine
https://alpinelinux.org
https://alpinelinux.org/downloads
openEuler
https://www.openeuler.org
https://www.openeuler.org/zh/download

💡 镜像源加速:国内服务器装完系统后,建议立即配置国内 apt/yum 镜像源(阿里云、清华 TUNA、中科大),不然装个软件可能等半天。

  • Ubuntu/Debian:/etc/apt/sources.list 换成 mirrors.aliyun.com/ubuntu/ 或 mirrors.tuna.tsinghua.edu.cn/ubuntu/
  • CentOS/Rocky:/etc/yum.repos.d/CentOS-Base.repo 换成 mirrors.aliyun.com/centos/

远程登录 Linux

云服务器装好系统、拿到公网 IP 后,第一件事就是远程登录进去——服务器在机房,物理上摸不到键盘鼠标,全靠网络连。

⚠️ 🚨 拿到新服务器后第一件事:放行 22 端口!阿里云 / 腾讯云 / AWS 等云厂商的安全组默认封禁所有外部端口(仅放行极少数管理端口)。 如果你买完服务器就 ssh root@IP,大概率连不上——先在云控制台「安全组」放行 22 端口再登录。 很多新手在这一步卡半天以为密码错、系统坏了,其实就是端口被云厂商挡掉了。

主流方式就一种:SSH(Secure Shell)——加密的远程命令行协议,默认端口 22。 所有云服务器、几乎所有 Linux 服务器,都靠 SSH 登录。

第一步:拿到登录信息

买好云服务器后,控制台会告诉你三样东西:

服务器公网 IP:123.45.67.89登录用户名:root   (Ubuntu 通常第一次是 ubuntu,CentOS/Rocky 是 root)登录密码 / 密钥:购买时设置的密码,或控制台「密钥对」下载的 .pem 文件

⚠️ 新手最常踩的坑 1:用「root」登录后乱删系统文件,一个 rm -rf / 整个服务器就没了。正确做法:用普通用户登录,需要管理员权限时加 sudo。 Ubuntu 默认的 ubuntu 用户就在 sudoers 里,可以直接 sudo

第二步:用密码登录(最简单)

Mac / Linux(自带终端):

ssh root@123.45.67.89# 第一次连接会问 yes/no,输入 yes# 然后输入密码(输入时屏幕不显示,输完回车)

Windows(用 Windows Terminal / PowerShell,自带 OpenSSH 客户端;Win10 1809+ / Win11 默认已装):

ssh root@123.45.67.89

嫌每次输 IP 麻烦?把常用服务器写进 ~/.ssh/config(Windows 路径 C:\Users\你的用户名\.ssh\config):

Host myserver    HostName 123.45.67.89    User root    Port 22

之后直接 ssh myserver 就能连。

第三步(强烈推荐):用密钥登录,免密码更安全

密码登录有两个问题:

  1. 每次输密码麻烦
  2. 服务器放公网,密码会被全世界扫描爆破(每天几千次尝试很正常)

密钥登录用一对文件:

  • 私钥id_rsa / mykey.pem):放在你本地电脑,绝不能泄露
  • 公钥id_rsa.pub / authorized_keys):放到服务器上,公开无所谓

登录时本地用私钥签名,服务器用公钥验签——只有私钥匹配才让进,根本不需要密码。

Mac / Linux 生成密钥

ssh-keygen -t ed25519 -C "你的邮箱"# 私钥密码(passphrase):留空=无密码(开发用方便),建议设一个(生产用更安全)# 会在 ~/.ssh/ 目录下生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)

💡 私钥设了密码 = 每次 ssh 都要输一次密码?不一定要: 设了密码的私钥,配合 ssh-agent 可以在当前会话只输一次密码,之后都免密:

eval"$(ssh-agent -s)"# 启动 ssh-agentssh-add ~/.ssh/id_ed25519    # 添加私钥,输一次密码# 之后所有 ssh / scp / git 操作都不用再输密码

VS Code / JetBrains IDE / 终端多开都能共享这个状态。 不设密码就是「裸私钥」,只在你物理安全的工作机上能用,笔记本丢了别人能直接登服务器。

把公钥传到服务器(最方便)

ssh-copy-id root@123.45.67.89# 输入一次密码后,公钥自动追加到服务器的 ~/.ssh/authorized_keys# 之后再 ssh 就不用密码了

Windows 用 PuTTYgen

PuTTY 自带的 PuTTYgen 工具(下载地址)生成 .ppk 密钥,然后在 PuTTY 里配置。

云服务器后台直接绑定

阿里云 / 腾讯云 / AWS 买服务器时都支持「创建密钥对」,控制台直接帮你把公钥注入到 ~/.ssh/authorized_keys,最省事。

第四步:服务器安全加固(3 分钟做完)

服务器只要暴露公网 22 端口,每天就会被全球机器人扫描爆破。下面三件事买完服务器第一件事就做

  1. 改 SSH 端口(避开 90% 的扫描)

    sudo vim /etc/ssh/sshd_config# 找到 Port 22,**先在下面加一行 Port 2222,保留 Port 22 暂时不注释删除**# 同时加两行是为了用新端口测试成功后再删 22,避免把自己锁在外面sudo systemctl restart sshd# 之后登录要加 -p 参数:ssh -p 2222 root@123.45.67.89

    ⚠️ 🚨 极容易把自己锁在外面,顺序必须是

    顺序错了直接进不去服务器,只能走云控制台的「VNC 远程连接」或「救援模式」救回来,千万别在生产环境踩

    1. 第一步:先在云服务器控制台「安全组」放行 2222 端口(云厂商那一层,不放行直接拒绝)
    2. 第二步:服务器内防火墙放行 2222sudo ufw allow 2222/tcp 或 firewall-cmd --add-port=2222/tcp
    3. 第三步:sshd 配置加 Port 2222(保留 Port 22),重启 sshd
    4. 第四步:另开一个终端,用 ssh -p 2222 测试能连进去
    5. 第五步:确认新端口能登,再回去把 Port 22 注释掉并重启 sshd
  2. 禁用密码登录(只允许密钥)

    # 同一份配置文件里PasswordAuthentication no# ⚠️ 一定要先确认密钥能登录成功再禁用!否则把自己锁在外面
  3. 配置防火墙(只放行需要的端口)

    # Ubuntu (ufw)sudo ufw allow 2222/tcp    # SSHsudo ufw allow 80/tcp      # HTTPsudo ufw allow 443/tcp     # HTTPSsudo ufw enable# CentOS/Rocky (firewalld)sudo firewall-cmd --permanent --add-port=2222/tcpsudo firewall-cmd --reload

💡 云服务器额外多一层:阿里云/腾讯云/AWS 控制台还有个「安全组」,相当于云厂商的防火墙。服务器内防火墙 + 云安全组,两层都要配,缺一不可。 只配安全组、不配内防火墙 → 服务器被攻破后横向移动没人拦 只配内防火墙、不配安全组 → 别人照样能直接访问你的端口

工具推荐

场景
工具
备注
Mac / Linux 命令行登录
系统自带 ssh 命令
无需安装
Windows 命令行登录
Windows Terminal + OpenSSH(Win10 1809+ 自带)
比 PuTTY 现代化
Windows 图形化登录
MobaXterm(免费版有会话数量限制,够用)
自带文件传输、标签页、X11 转发
Windows 老牌工具
PuTTY + PuTTYgen
经典但界面陈旧,新人不推荐
文件传输(基于 SSH)
scp
 命令 / WinSCP(Windows)
scp 用法见下文「传文件」
VS Code 远程开发
Remote - SSH 插件
强烈推荐
,可以直接在本地 VS Code 改服务器代码,跟本地开发没区别
服务器面板(Web)
1Panel / 宝塔
可视化管理,新手友好但增加攻击面,生产慎用

💡 VS Code Remote-SSH 是部署 Go 服务的秘密武器: 在 VS Code 里装上 Remote-SSH 插件,配置好服务器后,可以直接编辑服务器上的代码、跑调试、看日志、打开终端——跟本地开发完全一样。 部署 Go 服务时尤其有用:改完代码 Ctrl+S 保存,go run / go build 都在远程跑,比本地交叉编译再 scp 传上去再重启服务快一个量级

常用命令

命令
作用
例子
ls
列出当前目录文件
ls
ls -la
详细信息(含隐藏文件)
ls -la
cd
切换目录
cd /home/app
pwd
显示当前目录
pwd
mkdir
创建文件夹
mkdir myapp
rm
删除文件
rm test.txt
rm -rf
删除文件夹(谨慎!)
rm -rf old_folder
cp
复制文件
cp a.txt b.txt
mv
移动或重命名
mv old.txt new.txt
cat
查看文件内容
cat config.yaml
less
分页查看长文件
less app.log
tail -20
看最后20行
tail -20 app.log
tail -f
实时跟踪日志
tail -f app.log
ps aux | grep myapp
查找 myapp 进程
见下方代码块
kill 12345
终止进程
chmod +x myapp
给文件加执行权限
chmod 755 myapp
数字方式设权限(rwxr-xr-x)
chown -R app:app /home/app
把目录所有者改成 app 用户
sudo 命令
用 root 权限执行命令
sudo systemctl restart nginx
# 查找 myapp 进程(管道符 grep)ps aux | grep myapp# 输出示例:# ubuntu  12345  0.5  0.1  123456  23456 ?  Ssl  10:00  0:01 ./myapp# 第二个数字 12345 就是 PID,可以 kill 12345 终止

💡 权限高频场景(部署 Go 程序常遇到):

  • chmod +x myapp —— 编译出的二进制文件没执行权限,./myapp 报 Permission denied 时用它
  • chown -R app:app /home/app —— 用普通用户跑服务时,文件归属要改成对应用户,root 跑的文件业务用户读不到会出诡异 bug
  • 数字权限速记:4 读 r2 写 w1 执行 x755 = rwxr-xr-x(所有者全权,其他人只能读+执行)
  • 部署常见组合:配置文件 chmod 640(所有者读写、组读、其他无),密钥文件 chmod 600(只有所有者能读,安全要求)

⚠️ chown -R 慎用,千万不要对系统目录执行**:

  • 只对自己应用目录用,比如 chown -R app:app /home/app 安全
  • 绝不要执行 chown -R xxx /chown -R xxx /usrchown -R xxx /etc 之类的命令
  • 这会把整个系统目录的所有者改了,系统启动失败、SSH 登不上、各种服务崩溃,只能重装系统救回
  • chmod -R 777 / 同样致命,新手最容易踩的"删库跑路"式操作

交叉编译:在本机编译 Linux 版本

Go 编译出的是单个可执行文件,不需要在服务器上安装 Go 环境。在你的开发机上编译 Linux 版本:

# Mac/LinuxGOOS=linux GOARCH=amd64 go build -o myapp main.go# ARM 架构服务器(阿里云倚天、AWS Graviton、树莓派等云上 ARM 实例)GOOS=linux GOARCH=arm64 go build -o myapp main.go

💡 架构要看目标服务器,不是看开发机: 苹果 M1/M2 笔记本是 ARM 没错,但编译出来的目标平台是给服务器用的——

  • 服务器是 amd64(绝大多数云主机)→ 编译用 amd64
  • 服务器是 arm64(少数 ARM 云主机)→ 编译用 arm64

Go 默认会根据本机架构自动选择,但交叉编译时必须显式指定目标架构,否则传到服务器会报 exec format error

💡 示例默认关闭了 CGO(Go 1.10+ 行为): 如果你的代码用 import "C" 启用了 CGO,交叉编译复杂度大幅上升——需要目标平台的 C 工具链(glibc 版本、gcc 头文件),Mac 上几乎编不出 Linux 兼容二进制。新手先尽量不要用 CGO:少碰 cgo 库(一些老牌 MySQL 驱动、图像处理库会引入),用纯 Go 实现代替。 如果一定要用,在目标 Linux 服务器上直接 go build 最稳。

# Windows PowerShell(Win10 1809+ / Win11 默认终端)$env:GOOS="linux"; $env:GOARCH="amd64"; go build -o myapp main.go
:: Windows CMD(老版本的 cmd.exe 终端)set GOOS=linuxset GOARCH=amd64go build -o myapp main.go

⚠️ Windows 用户最容易踩的坑: 上面三段代码不能混用。在 PowerShell 里运行 set GOOS=linux 不会报错,但环境变量也没生效,结果编译出来还是 Windows 版本。 怎么判断当前终端类型?看提示符PS C:\Users\xxx> 是 PowerShell,C:\Users\xxx> 是 CMD。 不确定时直接 go env GOOS 看当前生效的目标系统是不是 linux,不对就换语法重新执行。

💡 想永久设置:把环境变量写进「系统属性 → 高级 → 环境变量」里,所有终端都生效,不用每次临时设。

把文件传到服务器

scp myapp root@你的服务器IP:/home/app/

root@IP 是登录用的用户名和服务器地址,冒号后面是目标目录。

⚠️ **如果按前文改了 SSH 端口(如 2222),scp 必须用大写 -P**:

scp -P 2222 myapp root@123.45.67.89:/home/app/

注意大小写差异:ssh 用小写 -pscp 用大写 -P这是历史遗留,新手最容易抄错。 完整路径示例(目标服务器目录不存在会报错):

scp -P 2222 myapp root@123.45.67.89:/home/app/myapp

💡 更现代的替代rsync -avz -e "ssh -p 2222" myapp root@123.45.67.89:/home/app/

  • 断点续传、增量同步、保留文件属性,大文件 / 频繁部署首选

⚠️ 目标目录不存在会报错:scp 不会自动创建中间目录,新服务器第一次部署前先 SSH 上去创建:

ssh root@123.45.67.89 "mkdir -p /home/app"

否则会报 No such file or directory(最容易在第一部署时遇到)。

运行程序

chmod +x myapp   # 加执行权限./myapp          # 运行

直接 ./myapp 的问题是:关掉终端程序就停了。临时用可以这样后台运行:

nohup ./myapp > app.log 2>&1 &
  • nohup:退出终端也不停
  • > app.log:标准输出写进日志文件
  • 2>&1:错误输出也写进同一个文件
  • &:放到后台跑

💡 执行后会在当前目录生成一个 nohup.out 文件:这是 nohup 兜底输出,即便你已经重定向到 app.log,它还是会创建(空文件,占点空间)。 不想看到这个文件,最简单的办法是 rm nohup.out(运行中删除不影响),或者重定向都加上:nohup ./myapp >/dev/null 2>nohup.err &

⚠️ nohup 只是临时方案,生产禁止长期使用: 不具备自动重启、进程崩溃恢复、日志切割、开机自启能力。 服务器一重启程序就再也起不来;日志文件会无限膨胀把磁盘塞满;崩溃后没人管就只能等到你发现。本地调试或临时验证用用可以,部署到生产请直接用下面的 systemd

用 systemd 管理服务(生产推荐)

nohup 的问题是服务器重启后程序不会自动恢复。生产环境要用 systemd:

# /etc/systemd/system/myapp.service[Unit]Description=My Go App[Service]ExecStart=/home/app/myappWorkingDirectory=/home/appRestart=alwaysEnvironment=APP_PORT=8080[Install]WantedBy=multi-user.target

⚠️ service 文件权限不要设 777

sudo vim /etc/systemd/system/myapp.servicesudo chmod 644 /etc/systemd/system/myapp.service
  • 生产规范要求使用 644(所有者读写、其他人只读)
  • 真正会阻止 systemd 加载的是把 service 文件放在全局可写 + 其他用户可执行的目录,普通 777 权限会触发安全告警但多数系统仍可启动
  • 改完文件记得 sudo systemctl daemon-reload 让 systemd 重新读取

常用操作:

sudo systemctl daemon-reload   # 改了 .service 文件后**必须**执行,否则改动不生效sudo systemctl start myapp     # 启动sudo systemctl enable myapp    # 设置开机自启sudo systemctl status myapp    # 查看状态sudo systemctl restart myapp   # 重启sudo systemctl stop myapp      # 停止journalctl -u myapp -f         # 实时查看日志

WorkingDirectory 容易漏但很重要。 如果代码里用了相对路径读文件(比如 os.ReadFile("./config.yaml")),手动执行时没问题,但 systemd 启动时当前目录不是你的项目目录,文件就找不到了。WorkingDirectory 就是解决这个问题的。

Restart=always 表示程序崩溃后自动重启。

💡 Restart=always vs Restart=on-failure 怎么选

  • Restart=always:进程任何方式退出(含主动 os.Exit(0))都会被拉起。适合长驻服务(HTTP server、消息消费)
  • Restart=on-failure:只有非正常退出(崩溃、超时、被信号杀掉)才重启。适合任务型服务(worker、定时任务),主动 os.Exit(0) 不会被错误地拉起
  • 还有 Restart=no(默认不重启)、Restart=on-abnormal(只在异常时重启)
  • 新手用 Restart=always 最省心——线上出 bug 自动拉起总比服务挂了好

查看日志

tail -50 app.log        # 看最后50行tail -f app.log         # 实时跟踪(新内容自动刷出来)journalctl -u myapp -f  # 如果用 systemd 管理

网络相关

curl http://localhost:8080/hello   # 在服务器上测试接口ss -tlnp                           # 查看哪些端口在监听(推荐,系统自带)netstat -tlnp                      # 备选,部分新系统未预装(Ubuntu 20.04+/Debian 11+ 需 apt install net-tools)

💡 **优先用 ss -tlnp**:

  • ss 是 iproute2 工具集的一部分,现代 Linux 默认已装
  • netstat 属于老牌 net-tools,在 Ubuntu 20.04+ / Debian 11+ / CentOS 8+ 等新版系统里默认不再预装,执行会报 command not found
  • 性能上 ss 直接读内核 netlink,比 netstat 快一个量级,连接数上万时差距明显
  • 老教程的 netstat 命令在老系统上能跑,但新系统优先用 ss

两者参数基本一致:

  • -t TCP
  • -l 监听中
  • -n 显示数字端口(不解析服务名,更快)
  • -p 显示进程名(⚠️ 需要 root 才能看到其他用户的进程,普通用户执行只看到自己的,加 sudo ss -tlnp 才能看全

环境变量

不要把数据库地址、密钥这些配置写死在代码里,用环境变量传入:

# 临时设置export APP_PORT=8080# 运行时传入APP_PORT=9090 ./myapp

Go 代码里读取:

port := os.Getenv("APP_PORT")if port == "" {    port = "8080"// 给个默认值}

在 systemd 的 service 文件里,用 Environment=APP_PORT=8080 设置,或者用 EnvironmentFile=/home/app/.env 从文件里读。

动手做

  1. 把你的 hello-go 项目交叉编译成 Linux 版本
  2. 用 scp 传到服务器
  3. chmod +x 后 ./myapp 运行
  4. 用 curl localhost:端口 测试
  5. 写一个 systemd service 文件让它开机自启(记得修改 ExecStart 路径、WorkingDirectory、APP_PORT,直接复制不能运行

学习建议

命令看着简单,真正卡住人的是遇到报错不会排查——同一个错误码在 Ubuntu / CentOS / Alpine 上原因可能完全不同,搜出来答案抄过去也不一定管用。

新手最有效的路径:

  1. 先用熟一个发行版(推荐 Ubuntu 22.04 LTS),别一上来就 Ubuntu/CentOS/Arch 一起学
  2. 装一台云服务器实操,2C2G 一年几十块,比本地虚拟机省心,出问题能随时 rebuild 重建
  3. **学会用 man 命令**:Linux 自带的手册,写得比任何教程都权威(虽然全英文),man systemctl 看一眼就知道 systemd 怎么用
  4. 记一个排错命令清单journalctl -xe(看日志)、systemctl status xxxdmesg | tail(内核日志)、strace -p PID(追踪进程系统调用)—— 90% 的部署问题用这四条就能定位

国内最值得收藏的社区

社区
定位
推荐理由
Linux 中国
(linux.cn)
官方运营的中文 Linux 资讯/教程站
翻译国外优质文章,质量比公众号转载靠谱太多,每天一篇适合通勤看
开源中国(OSChina)
(oschina.net)
国内最大技术社区之一
Linux/Go/Python/云原生板块都有,提问有人回,适合搜报错时带上 site:oschina.net 搜中文解决方案
知乎 Linux 话题
(zhihu.com/topic/19559450)
综合问答社区
「XX 命令怎么用」「CentOS 怎么换 Ubuntu」
这类对比问题的高质量答案最集中
V2EX
(v2ex.com)/go/devops 节点
程序员聚集地
服务器踩坑、买云主机、上云迁移讨论氛围最真实,能看到各种"血泪经验"
掘金 / 思否(SegmentFault)
(juejin.cn / segmentfault.com)
程序员内容社区
大量中文部署实战文章,按阅读量排序比按时间排序有用得多

💡 排错黄金组合:英文报错原文 + 谷歌 + site:stackoverflow.com 或 site:github.com/issues。 中文社区适合入门概念、对比选型具体报错、底层原理、bug 复现几乎都必须靠英文。 不建议把希望全押在百度上——同一个问题百度前 3 页都是复制粘贴的同一篇,CSDN 还夹带私货。

顺带一句:本书所有示例都在 Ubuntu 22.04 LTS 上跑过验证,跟着练出问题的概率最小。

本文由作者原创首发于微信公众号。本教程全网同名,谢绝任何形式的跨平台无授权转载与洗稿。如需开白或业务合作,请在公众号后台留言联系。

本文部分内容由AI辅助生成,经人工润色、修改、校对。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 14:33:54 HTTP/2.0 GET : https://f.mffb.com.cn/a/511343.html
  2. 运行时间 : 0.233739s [ 吞吐率:4.28req/s ] 内存消耗:4,709.09kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c32f0ee87cb65083cf9648b5b19523d9
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001173s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.002038s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000801s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000673s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001334s ]
  6. SELECT * FROM `set` [ RunTime:0.000544s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001498s ]
  8. SELECT * FROM `article` WHERE `id` = 511343 LIMIT 1 [ RunTime:0.001479s ]
  9. UPDATE `article` SET `lasttime` = 1787294034 WHERE `id` = 511343 [ RunTime:0.032613s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000844s ]
  11. SELECT * FROM `article` WHERE `id` < 511343 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001278s ]
  12. SELECT * FROM `article` WHERE `id` > 511343 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000891s ]
  13. SELECT * FROM `article` WHERE `id` < 511343 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001572s ]
  14. SELECT * FROM `article` WHERE `id` < 511343 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.013544s ]
  15. SELECT * FROM `article` WHERE `id` < 511343 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001974s ]
0.237496s