news 2026/9/18 21:07:39

Ubuntu系统镜像制作与安装全流程:从ISO到定制化批量部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu系统镜像制作与安装全流程:从ISO到定制化批量部署

很多朋友第一次接触 Ubuntu,第一反应都是去官网下个 ISO 然后拿 Rufus 写进 U 盘,装完就完事了。但真到了要批量部署、给多台机器统一环境、或者做一套离线安装包的时候,就会发现“装系统”这件事远没想象中那么简单。我自己前前后后折腾过很多次 Ubuntu 系统镜像的制作和安装,从最开始只会用官方 ISO 一步步点下一步,到后来用 dd、tar 甚至预配置无人值守安装,中间踩了不少坑,也总结出了一套相对完整的流程。

这篇内容我不想讲太多虚的,直接围绕“Ubuntu 系统镜像制作及安装”这个核心,把从下载官方镜像、校验、做启动盘、定制自己的预装镜像,到安装完成后初始化配置这一整条链路都过一遍。适合刚接触 Ubuntu 的新手,也适合已经在用 Ubuntu 但想自己做定制镜像的老手。

1. 项目整体设计与思路拆解

1.1 先搞清楚:你要的到底是哪一种“系统镜像”

在动手之前,我建议先花两分钟想清楚一件事:你说的“Ubuntu 系统镜像”到底是指什么?

第一种是官方发布的 ISO 安装镜像,也就是从 ubuntu.com 下载的那种,扩展名是 .iso,用来做启动盘、全新安装系统。大部分人的需求都落在这。

第二种是你自己定制的镜像,比如你已经在一台机器上装好了 Ubuntu,配好了各种开发环境、装了 CUDA、配好了 SSH、装好了 Docker,然后希望把这套环境复制到其他机器上。这时候你需要的不是官方 ISO,而是通过打包、克隆等方式做出来的“自定义镜像”,可能是 .iso,也可能是一个 .tar.gz,甚至是整盘克隆出来的 .img 文件。

第三种是云端或者虚拟机里常用的 cloud image,这个主要用于服务器场景,通过 cloud-init 初始化,适合自动化部署。如果你是要用 VMware、VirtualBox 跑虚拟机,也可以直接用官方提供的预装镜像,能省不少时间。

我在实际操作中遇到的很多问题,其实都是因为没想清楚自己是哪一种需求。比如有人想在虚拟机里装 Ubuntu,结果搞了半天是在物理机上烧录 U 盘;有人想批量给实验室电脑统一装系统,结果手动一台台装,装了一下午,最后发现其实做个无人值守安装更省事。

所以,第一步建议先明确自己的使用场景。如果是个人日常用,直接下载官方 LTS 版本最省心;如果是给多台机器部署,优先考虑定制镜像加自动化安装;如果只是想在 Windows 里跑个 Linux 环境体验一下,虚拟机镜像反而是最合适的选择。

1.2 从“能用”到“好用”:镜像制作的整体流程规划

以我自己最常用的一条流程为例,整体的思路是这样的:

先在官方渠道拿到最稳定的基础镜像,然后通过校验保证文件完整性,再用工具做成可启动的安装介质。这一步之后就出现了两个分支:如果只是自己用,直接安装即可;如果需要统一环境,我会把一台装好的系统做镜像封装,再把封装后的镜像批量部署。

这里有一个关键点,很多人会忽略,那就是系统封装(相当于做一个“母盘”)和普通安装有很大区别。你在自己电脑上装好的系统里,会有当前机器的主机名、SSH host key、udev 网卡规则、临时文件、甚至你个人的 shell 历史记录。如果直接拿这种系统去做镜像,分发到其他机器上,轻则每台机器主机名一样,重则网络配置冲突、SSH 指纹不匹配导致连不上。所以制作可分发镜像前,必须做清理和重置操作。

整个流程如果用一句话概括,就是“先标准化基础,再个性化定制”。基础系统保持干净统一,个性化配置通过脚本或者 cloud-init 在首次启动时注入,这样既保证了环境的一致性,又保留了一部分灵活性。

2. 官方 ISO 镜像的获取、校验与安装介质制作

2.1 下载渠道选择与版本判断

Ubuntu 镜像的下载,我建议认准两个地方:一是 Ubuntu 官网的官方下载页面,二是国内高校的开源镜像站,比如清华 TUNA、阿里云镜像。官方站点胜在权威稳定,但国内访问速度有时候不太理想;镜像站速度快,同步频率也很高,日常使用基本没问题。

版本选择上,有两个概念必须分清楚:普通版本和 LTS 长期支持版本。普通版本的代号是年份加月份,比如 24.10,支持周期只有 9 个月;LTS 版本的代号里带着 LTS 三个字母,比如 24.04 LTS,支持周期长达 5 年甚至更久。如果你是用来做开发、搭服务器或者日常办公,无脑选 LTS 就行,图的就是省心不用频繁升级。

安装镜像也分了好几种,最常见的是“Live Server”和“Desktop”。Desktop 版自带图形化安装界面,新手友好;Server 版现在虽然也有交互式安装菜单,但更多情况下是面向服务器的,默认不装桌面环境。如果你是想做“Ubuntu 系统镜像制作及安装”这个主题的定制镜像,我强烈建议以 Server 版为基础来做,因为桌面版体积大、依赖多、定制起来麻烦,服务器版干净简洁,后期想加什么都能自己装。

2.2 镜像校验:这个环节别跳过

很多人下载完 ISO 之后就直接写盘,从来不做校验。我之前也这样,直到有一次从某个第三方网站下载的镜像,安装到一半提示“无法安装软件包”,排查了半天,最后发现是文件损坏。从那以后,我再也不跳过校验步骤了。

校验的方法很简单,Ubuntu 官方提供了对应的校验文件,后缀是 .iso.sha256。在 Linux 或者 macOS 系统里,打开终端进到 ISO 所在目录,运行:

sha256sum ubuntu-24.04.2-live-server-amd64.iso

Windows 系统可以在 PowerShell 里运行:

Get-FileHash .\ubuntu-24.04.2-live-server-amd64.iso -Algorithm SHA256

然后把输出的哈希值和官方的 .sha256 文件里的值做对比。完全一致没问题,只要有一位不一样,基本就是下载损坏了,重新下载吧。

我见过的很多安装报错,比如引导失败、找不到硬盘、解压包错误,将近三成根因都是镜像文件不完整。校验这一步花不了你几秒钟,却能在后面省下几个小时,建议不要跳过。

2.3 启动盘制作与虚拟机安装的差异处理

拿到 ISO 之后,如果你要在物理机上安装,就需要做一个启动 U 盘。这个环节新手最容易犯的错,是把 ISO 文件直接复制到 U 盘里。这样做是启动不了的,你需要用专门的工具把镜像“写”进 U 盘,让它具备引导能力。

Windows 平台我用得很顺手的是 Rufus,体积小、功能全。打开 Rufus,设备选 U 盘,引导类型选镜像文件,点开始,然后它会提示你选择写入模式。U 盘选的如果是 GPT 分区方案,适用于 UEFI 启动;MBR 分区方案适用于传统 Legacy 启动。现在的新电脑基本都是 UEFI,Rufus 默认配置就能用,不用纠结太多。

如果你在 Linux 环境下面,更简单的方式是直接用 dd 命令写盘,操作之前先确认 U 盘的设备名,别把硬盘写没了。

sudo dd if=ubuntu-24.04.2-live-server-amd64.iso of=/dev/sdX bs=4M status=progress

如果你是在 VMware 或者 VirtualBox 里面装 Ubuntu,没必要做启动盘,直接在虚拟机设置里把 ISO 挂载到虚拟光驱,开机从光驱启动就行。VMware 创建虚拟机时选择“稍后安装操作系统”,然后指定 ISO 路径最方便;VirtualBox 则是在“存储”里把 ISO 添加到控制器下的光驱位置。

3. 定制专属 Ubuntu 镜像:从备份到部署

3.1 用 tar 打包:最简单也最灵活的系统复制方案

如果你只有一台已经配好环境的 Ubuntu,想把这台机器的系统原封不动搬到一个新硬盘或者另一台机器上,最快的方法就是用 tar 打包。这招特别适合迁移或者备份,也是我日常用得最多的方式。

操作思路是:启动到一个 Live 系统,或者直接在当前系统里用 root 权限打包整个根文件系统,排除掉几个不需要的目录,然后到目标机器上解压,再修一下引导。

具体的打包命令是这样的:

sudo tar -cvpzf ubuntu-backup.tar.gz --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp --exclude=/media --exclude=/mnt --exclude=/lost+found --exclude=/backup.tar.gz /

这几个排除目录的原因很简单:proc、sys、dev、run 都是系统的虚拟文件系统,每次开机都会重新生成,打包它们没有意义还容易导致问题;tmp、media、mnt 是临时目录,不该打进系统包里;lost+found 是 EXT4 的恢复目录,也是不必要的。

恢复的时候,先把磁盘分区格式化、挂载到某个目录,然后解压进去:

sudo tar -xvpzf ubuntu-backup.tar.gz -C /mnt

之后还需要重新生成引导。用 chroot 切进解压出来的系统,重装 GRUB:

sudo mount --bind /dev /mnt/dev sudo mount --bind /dev/pts /mnt/dev/pts sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo chroot /mnt mount /dev/sda1 /boot/efi grub-install /dev/sda update-grub

这一步非常关键,很多人在恢复的时候忘了修引导,导致开机黑屏或者直接进入 GRUB 命令行。其实问题不大,就是引导没装好而已。

3.2 用 dd 做整盘克隆:笨但彻底

比 tar 打包更简单粗暴的做法,是用 dd 做整盘克隆。这种方法会把源盘的每一个字节都复制到目标盘上,包括分区表、引导记录、所有数据,可以说是像素级复制。

好处是恢复后系统毫无差别,直接开机就能进系统;坏处是目标盘容量必须大于等于源盘,而且如果你把一块装好的盘克隆到其他机器,会连同原来的主机名、MAC 地址绑定信息一起复制,出现我之前说的“镜像打架”问题,需要用命令重新配置网络。

dd 的命令很简单,但危险系数很高,一定要确认好设备名:

sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress

这个操作真正把“复制”这件事做到了极致,但不建议作为日常定制镜像的方案,更适合做数据搬家和整盘备份。如果你想做可分发的镜像,建议还是用 tar 打包,这样灵活度高很多。

3.3 定制预装软件与系统清理:让镜像更干净

如果你想把装好的系统做成一个标准“母盘”分发给多台机器,单纯做备份是不够的,最关键的一步是对系统做清理,让它回到“待初始化”的状态。

要清理的项我列一下:

  • 删除临时文件和缓存:/tmp 下面的文件、忍者的 apt 缓存(/var/cache/apt/archives)都可以清掉。
  • 重置主机名:把 /etc/hostname 改成默认值,比如 ubuntu。
  • 删除 SSH host key:机器第一次开机时重新生成,否则所有克隆机器的 SSH 指纹都一样。
  • 清理 udev 网卡规则:/etc/udev/rules.d/70-persistent-net.rules 这种文件记录了当前机器的网卡 MAC,分发出去会导致网络接口名混乱。
  • 删除用户历史记录:当前用户 home 目录下的 .bash_history。

我第一次做定制镜像的时候,就是忘了清理 SSH host key 和主机名,结果一批机器装完,密码登录没问题,但 SSH 工具一直提示 host key 不一致,排查了好久才发现是这个原因。

3.4 用 cloud-init 实现无人值守和批量部署

当你要面对一批机器、数量比较多的时候,纯手工安装已经不够了。这时候有两种自动化路线:一种是基于 ISO 的自动应答安装(用 autoinst 或 preseed 方式),另一种就是现在服务器领域更常见的 cloud-init。

cloud-init 原本是给云主机用的,但它同样可以跑在物理机和虚拟机上。思路就是:你的镜像里预装好了 cloud-init 服务,首次开机时它会去读取一个配置文件,里面写了要创建的用户、要写入的 SSH 公钥、要安装的软件包或者要执行的脚本。

我自己的做法是,在定制镜像前写好一个 user-data 文件,内容大概是这样的:

#cloud-config hostname: node01 users: - name: dev sudo: ALL=(ALL) NOPASSWD:ALL shell: /bin/bash ssh_authorized_keys: - ssh-rsa AAAAB3... packages: - docker.io - git - curl runcmd: - systemctl enable docker - echo "export PATH=$PATH:/opt/bin" >> /etc/profile

然后用 cloud-localds 工具把这个配置写成一个种子镜像,虚拟机或物理机启动时加载它,系统就会自动完成初始化。这样同一份定制镜像,加上不同的 user-data,就能在一批机器上批量部署出不同的配置,效率和手工安装完全不是一个量级。

4. 镜像安装实操:从引导到初始化的完整路径

4.1 全新安装的完整步骤拆解

无论是官方 ISO 还是你自己做出来的定制镜像,安装流程的核心逻辑是一样的。这里我以物理机安装 Ubuntu Server 24.04 LTS 为例,拆一下完整路径。

启动 U 盘插上,开机按 F12 或者 Del 选择从 U 盘启动。进入 GRUB 界面之后,选第一项“Install Ubuntu Server”。第一步会让你选语言,这一步选 English 就好,后面装完了可以再改 locale,选别的语言后面处理中文字符集反而容易踩坑。

接下来会提示你配置网卡。这里要特别说一句:默认安装是用 DHCP 自动获取 IP 的,如果你是给服务器做固定 IP,建议先在路由器上把 MAC 地址和 IP 做绑定,或者直接在这里手动设置。DHCP 分配出来的 IP 一旦变化,后面 SSH 连接、软件源的访问都要跟着改。

分区这块是新手容易发懵的地方。Ubuntu 安装器给了你几个选项:使用整块磁盘、使用整块磁盘并设置 LVM、手动分区。LVM 这个东西相当于把多块物理磁盘合并成一个逻辑卷组,在里面再划分逻辑分区,好处是以后可以动态扩容。如果你只是单块盘,容量不大,直接选“使用整块磁盘”就行,简单可靠。

安装过程中会让你创建一个初始用户和密码。这里注意,默认勾选了“Require my password to log in as root”,其实可以取消,后面需要 root 权限时用 sudo 就够了,没必要直接开 root 登录。

4.2 安装后的必要初始化:SSH、软件源、显卡驱动

装完系统第一件事,我建议是确认网络通不通、SSH 能不能连。因为后头很多操作都要远程执行,先把通道打通最省心。

ip a ping -c 4 mirrors.ubuntu.com sudo apt update sudo apt install openssh-server -y sudo systemctl enable --now ssh

然后就是换软件源。国内服务器直接用官方源的话,apt update 能卡到怀疑人生。我一般会替换成清华源或者中科大源,方法是编辑 /etc/apt/sources.list.d/ubuntu.sources,把 URL 里的 archive.ubuntu.com 或者 ports.ubuntu.com 改成 mirrors.tuna.tsinghua.edu.cn,然后重新 apt update 就好。

另外,很多人在 Ubuntu 上装 NVIDIA 显卡驱动也是一道坎。新手建议不要自己去官网下 .run 文件手动装,很容易装完黑屏。走 apt 源安装是最稳妥的:

ubuntu-drivers devices sudo apt install nvidia-driver-550

装完重启,用 nvidia-smi 验证。如果你要先确认系统架构再找对应的驱动,可以用 uname -m 看,x86_64 对应 amd64 架构,ARM 设备则是 aarch64,选驱动和软件包的时候一定要把架构对上,否则装不上。

4.3 中文输入法、Docker 等常用环境配置

如果你是装完系统当主力开发机用,中文输入法和 Docker 基本是跑不掉的。

Ubuntu 24.04 自带的中文输入法框架是 IBus,配置路径在“设置 -> 键盘 -> 输入源”里,添加汉语(Intelligent Pinyin)。如果找不到,先确认系统有没有安装 ibus-libpinyin,没有就执行 apt install ibus-libpinyin。装完再用 im-config 把输入法框架切到 ibus,重启一下就好了。

有些朋友习惯用搜狗输入法,Ubuntu 下也能装,但注意搜狗的 Linux 版是基于 fcitx 的,你得先去安装 fcitx 框架,再装搜狗输入法的 deb 包装。装完之后把输入法框架环境变量改成 fcitx,不然调不出来。我在 X11 下面折腾过几次,经验是 Ubunu 桌面西捷版本越新,fcitx 越容易出问题,所以图省心的话,还是优先系统自带的 IBus 拼音靠谱。

Docker 的安装方式,官方推荐先配置 Docker Apt 源,然后安装 docker-ce:

sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io

如果你的机器是内网隔离环境,没法访问外网的 Docker 源,那就只能离线部署。提前在一台能上外网的机器上拉好需要的镜像,然后导出来:

docker save -o my-image.tar my-image:latest

把 tar 文件拷到目标机器上,再 docker load 导入:

docker load -i my-image.tar

这个方法也非常实用,离线环境下部署 Docker 容器基本就是这么干的。

5. 常见问题与排查技巧实录

5.1 安装过程中的常见故障

Ubuntu 安装看着简单,实际上出错的点不少。我把见过的高频问题整理成了一张速查表:

问题现象可能原因处理方法
安装启动后黑屏,只有两个小图标显卡驱动不兼容,进入桌面环境失败在 GRUB 界面按 e 编辑启动参数,在 quiet splash 后加上 nomodeset,启动后再装显卡驱动
U 盘启动提示无法找到启动设备U 盘写入方式不对或分区方案不匹配用 Rufus 重写,检查分区方案是 GPT 还是 MBR,与 BIOS 模式对应
安装到一半报“无法将 GRUB 安装到 /dev/sda”EFI 分区格式有问题或引导目标不正确检查磁盘分区表类型是否设为 GPT,EFI 分区是否格式化为 FAT32
进入系统后网络无法连接网卡固件未包含在安装镜像中用网线先临时连接,apt update && apt install firmware-b43-installer 之类的固件包
重启后直接进 Windows,没有 GRUB 引导选择BIOS 启动顺序或安全启动设置问题进入 BIOS 把 UEFI 启动顺序调整,或关闭 Secure Boot

5.2 Ubuntu SSH 无法连接与系统网络故障排查

很多装了 Ubuntu Server 的朋友,第一反应是用 Xshell 或者 MobaXterm 远程连上去,结果发现根本连不上。这种情况我先让你用三步定位:

先用 ping 测网络连通性。ping 不通,检查网线、IP 地址、网关设置;ping 得通但 SSH 连不上,检查 SSH 服务有没有启动;SSH 服务启动正常但仍连不上,检查防火墙。

systemctl status sshd sudo systemctl enable --now ssh sudo ufw status

如果你装了 ufw 并且没有放行 SSH 端口,默认策略会把你挡在门外:

sudo ufw allow OpenSSH sudo ufw enable

很多人在“System has not been booted with systemd as init system”这个报错上卡过,多见于容器环境里。问题就是容器没有用 systemd 作为 1 号进程,systemctl 命令自然没法用。解决方法是启动容器时加特权参数并挂载 cgroup,或者换个思路用 service 命令代替。

5.3 系统工具链与输入法相关的典型问题

在 Ubuntu 上装 GCC 失败,十有八九是软件源没更新。一个新装的系统,直接 apt install 容易出现依赖找不到的错误,先执行 sudo apt update,再 apt install build-essential,基本就解决了。

环境变量配置错了导致连 ls 都提示找不到命令,这是最惊悚的,问题是 PATH 被覆盖了。这种不要慌,直接用绝对路径调用命令:

/usr/bin/sudo /usr/bin/vi /etc/environment

把 PATH 还原成系统默认值,重启终端就好。这个经验我在配 CMake 和 Miniconda 的时候踩过好几次,真是让人印象深刻。

还有一个高频问题,是在 Ubuntu 上装微信。原生微信没有 Linux 桌面版,大家普遍用新版微信4.0的Linux原生版,直接从官网拿到 deb 包安装。方法虽然简单,但依赖库偶尔会缺,装不上就 apt install -f 补一下依赖。有个坑是 Ubuntu 24.04 默认使用 Wayland,有些微信渲染会花屏,登录时在启动器里选择使用 X11 运行,能缓解兼容问题。

6. 稳定部署的心得与进阶思路

做 Ubuntu 系统镜像这件事,本质上不是在“做安装包”,而是在“做环境标准化”,这一点我摸索了很久才想明白。你花时间去定制镜像、清理系统、写自动化脚本,最终得到的好处是:每一台机器拿到手就是可用的,不用再花一两天去配环境、踩新坑。

我实际使用中发现,把定制镜像配合 cloud-init 一起用,是最理想的组合。镜像保持基础纯净,所有的个性化东西全部放到 user-data 里,换一个配置就能适配新的用途。比如同一个基础镜像,加上不同的 user-data,可以同时用于开发机、编译服务器、容器宿主机三种角色,维护成本低很多。

最后分享一个小技巧:如果你要做的镜像将来要在多种硬件上安装,做定制系统的时候尽量不要针对当前机器做太特定的优化,比如绑定某款网卡驱动、设置某一段固定内存参数,除非你确认所有目标机器型号一致。不同硬件之间,保留通用性,比追求单台性能更重要。

镜像这件事,掌握了原理之后难度就不大了。最关键的是动手之前先想清楚自己要在哪一层做定制,然后在镜像的通用性和个性之间找一个平衡点。下次遇到需要重复装多台机器的时候,记得先停下来想一想,要不要做一套自己的 Ubuntu 系统镜像,很可能比你想象中节省更多时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 21:07:12

vue-print-designer 实战:轻量化 Web 打印模板设计与集成方案

做了几年后台管理系统,我最头疼的需求不是权限设计,不是表格导出,而是打印。说到web打印插件,很多人第一反应是 Lodop、JsPrintSetup 这些老牌方案,它们能力确实强,但动不动就要装控件、配 ActiveX&#xf…

作者头像 李华
网站建设 2026/9/18 21:06:54

Proteus仿真51单片机全攻略:环境搭建、最小系统与Keil联调

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 21:05:42

Ghost-Downloader-3 多协议下载器的 Docker 容器化极简部署实战指南

Ghost-Downloader-3 多协议下载器的 Docker 容器化极简部署实战指南 【免费下载链接】Ghost-Downloader-3 The only downloader you need. 下载器的集大成者。 项目地址: https://gitcode.com/GitHub_Trending/gh/Ghost-Downloader-3 你有没有为搭一个多协议下载器&…

作者头像 李华
网站建设 2026/9/18 21:05:03

基于微信小程序与PHP的汽车库存管理系统设计与实现

我以前刚接触这类项目时,第一个感觉是“汽车库存管理系统?不就是个带增删改查的小程序吗”。真正入行做了几套后才意识到,难的不是CRUD,而是车辆在整个销售周期里状态怎么流转、价格权限怎么控制、多人并发改同一台车怎么办。这篇…

作者头像 李华
网站建设 2026/9/18 20:58:21

RHCSA备考:文件管理与用户管理高频考点与避坑指南

RHCSA备考到了第三轮,我发现最让我心里没底的居然不是SELinux和LVM这些看起来“高级”的内容,反而是文件管理和用户管理这两个大家普遍觉得简单的板块。文件管理里那些边角料,比如软硬链接、时间戳、umask、tar的排除规则,用户管理…

作者头像 李华
网站建设 2026/9/18 20:56:45

卷积的本质是滑动窗口:从numpy计算到图像边缘检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华