3天学完linux基础-----第二天
2.1.22 软件安装介绍学软件开发各种台的软件熟练安装是必须要熟练掌握。大家都知道Windows下安装软件时只需用鼠标双击软件的安装程序或者用Zip等解压缩软件解压缩即可安装在android或者apple中安装软件时只需要在手机应用商店点击安装即可。而在Linux下安装软件难度高于Windows、Android、ios和windows phone下软件安装。下面我就详细讲解Linux下如何安装软件。Linux下软件的安装大概可以分为如下几种二进制程序的安装**(最简单安装)**Rpm程序安装**(后缀名为*.rpm)**Yum在线安装**(本质也是rpm安装它只是rpm的一种安装方式而已)**源码安装2.1.23 二进制安装Linux下二进制格式的软件是指事先已经在各种平台编译安装好相关软件然后压缩打包在安装时只需解压或者执行安装可执行文件即可。这种软件发行格式类似与windows系统这样做的原因是保护源代码程序不对外泄露保护知识产权。二进制软件包的优点是安装简单、容易缺点是缺乏灵活性相应的软件包执行在对应平台下安装离开这个环境软件就无法运行。二进制软件包提供了很多类型的打包方式最常见的就是我们上节讲到的RPM格式的包还有以“.tar.gz、.tgz、*.bz2“等形式的二进制软件包最后还有一个就是提供安装程序进行安装的二进制软件包。下面分别介绍1.1安装**“*.tar.gz****、*****.bz2”**二进制软件包这种格式的软件包安装其实就是简单的解压过程根据不同的软件打包格式我们用相应的解压命令解压即可。对于*.tar.gz软件格式解压tar –zxvf xxxxxx.tar.gz对于*.bz2软件格式解压 tar -jxvf xxxxxx.tar.gz这类软件的卸载对于解压后只有单一目录的软件可以直接删除对应软件目录即可如果解压后文件分散在几个目录中需要一一手动删0除目录。例如我们常用的应用服务器容器tomcat软件就是基于这种打包压缩格式发行的。我们只需下载后解压即可完成安装如果需要卸载直接删除对应的tomcat目录即可。1.2提供安装程序的软件包这种软件包都提供了安装脚本或者安装向导程序只需在下载此类软件包后解压然后进入安装目录找到类似的setup、install、install.sh之类的可执行文件运行即可然后根据提示比如安装路径参数设置等等进行相应的设置接着安装就自动完成。这类软件的卸载也提供了相应的卸载脚本或者卸载向导根据提示即可完成软件卸载。例如经常使用的sun jdk就是这种安装方式从网络下载下来的jdk是个二进制可执行文件首先设置文件的可执行权限例如chmod 755 jdk1.6.0_07.bin权限操作本书后面会有详细讲述 然后运行软件也即是./ jdk1.6.0_07.bin即可完成安装。安装完成会在当前目录产生一个对应的jdk程序目录。2.1.24 rpm安装RPM****软件包管理RPM软件包也称为二进制软件包RPM是RedHat Package ManagerRedHat软件包管理工具的缩写这一文件格式名称虽然打上了RedHat的标志但是其原始设计理念是开放式的现在包括RedHat、CentOS、SUSE等Linux的发行版本都有采用可以算是公认的行业标准了。RPM文件在Linux系统中的安装最为简便RPM****命令使用rpm的常用参数i安装应用程序installvh显示安装进度verbose hashU升级软件包updateqa: 显示所有已安装软件包query alle卸载应用程序erase注意如果其它软件包有依赖关系卸载时会产生提示信息可使用–nodeps强行卸载。查询所有安装的rpm包: # rpm –qa查询mysql相关的包 # rpm –qa | grep mysql安装rpm -ivh jdk.rpm卸载 rpm –e mysql*强行卸载rpm –e mysql* --nodeps图形化界面手动挂载2.1.25 yum日常操作yellowdog updater modified软件包管理工具应用yum的好处**?*1,自动解决软件包依赖关系2,方便的软件包升级查询yum list 查询所有可用软件包列表yum search 关键字 搜索服务器上所有和关键字相关的包可以通过yum info 关键字 来查找包名安装yum -y install包名-y 自动回答yes升级yum -y update包名注意****如果不加包名就升级所有的包括内核。必须加包名升级单个软件包慎用升级所有的检测升级 yum check-update卸载yum -y remove 包名帮助yum --help、man yumyum clean all 清除缓存和旧的包yum repolist 查看当前可用的yum源yum deplist httpd 列出一个包所有依赖的包2.1.26 本地yum源安装#cat /etc/yum.repos.d/CentOS-Base.repo[base]nameCentOS-$releasever - Basemirrorlisthttp://mirrorlist.centos.org/?releaseKaTeX parse error: Expected EOF, got at position 11: releasever̲archbasearchrepoos#baseurlhttp://mirror.centos.org/centos/releasever/os/releasever/os/releasever/os/basearch/gpgcheck1gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6解释[base] 容器名称一定要放在[]中name 容器说明这个可以自己随便写mirrorlist 镜像站点这个可以注释掉baseurl yum源服务器的地址。默认是CentOS官方的yum源服务器enabled 此容器是否生效如果不写或写enable1都是生效写成enable0就是不生效gpgcheck 如果是1是指RPM的数字证书生效如果是0则不生效pggkey 数字证书的公匙文件保存位置不用修改挂载光盘# mkdir /mnt/cdrom##命令格式mount [-t vfstype] [-o options] device dir 其中 #1.-t vfstype 指定文件系统的类型通常不必指定。mount 会自动选择正确的类型。常用类型有 光盘或光盘镜像iso9660 DOS fat16文件系统msdos Windows 9x fat32文件系统vfat Windows NT ntfs文件系统ntfs Mount Windows文件网络共享smbfs UNIX(LINUX) 文件网络共享nfs #2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有 loop用来把一个文件当成硬盘分区挂接上系统 ro采用只读方式挂接设备 rw采用读写方式挂接设备 iocharset指定访问文件系统所用字符集 #3.device 要挂接(mount)的设备。 #4.dir设备在系统上的挂接点(mount point)。 ##将镜像文件挂载在/mnt/cdrom下 mkdir /mnt/dvd #在根目录下的mnt目录下创建目录cdrom mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom ##挂载 umount /mnt/dvd ##卸载2**让网络yum源文件失效**cd /etc/yum.repos.d/rename .repo .repo.bak * #重命名所有的.repo文件cp CentOS-Media.repo.bak CentOS-Media.repo #配置一个.repo文件3**修改光盘yum源文件**​vi CentOS-Media.repo[c6-media]nameCentOS-$releasever - Mediabaseurlfile:///mnt/cdrom#这里的地址为自己光盘挂载地址并把不存在的地址注释掉在行首注释# file:///media/cdrom/# file:///media/cdrecorder/gpgcheck1enabled1 #把原来的0改为1让这个yum源配资文件生效gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6可使用 yum repolist 查看 当前可用yum源yum clean allyum repolist2.1.27 源码编译安装由于linux操作系统开放源代码因而在其上安装的软件大部分也都是开源软件例如apache、tomcat、php等软件。开源软件基本都提供源码下载源码安装的方式源码安装的优点是1、用户可以自己定制软件功能安装需要的模块不需要的功能可以不用安装。2、用户还可以自己选择安装路径方便管理。3、卸载软件也很方便只需删除对应的安装目录即可。4、能最大程度和服务器平台融合效率稍微比其他方式高。5、没有windows所谓的注册表之说。源码安装的缺点是1、安装较为繁琐需要自己配置2、安装较为耗时需要自己编译源码3、安装较为容易出错出错也难以解决源码安装软件一般有以下几个步骤组成下载解压源码(查阅README)、分析安装平台环境configure makefile、编译安装软件make make install。下面我们分别介绍。1下载解压源码linux下软件的源码一般都是C或者C语言编写的并且都会在软件的官方网站上提供源码包下载例如apache开源项目的官方网站为http://www.apache.org此外在网上的很多开源社区一般也提供一些常用软件的源码下载源码都打包成压缩文件常见的源码打包压缩格式有“.tar.gz”、“.tar.baz2”等。我们可以从网站上首先下载源码文件然后在传到所在的linux系统下如果你的linux系统处于联网状态下也可以直接在系统内通过wget之类的下载命令将源码包直接下载到linux系统下。下载完成把相应的软件解包即可针对下载软件包的不同使用不同的方法进行解压解压完毕后进入解压生成的目录中在这个目录下一般都存在一个REDAME文件这个文本文件非常重要它详细的介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装方式等等由于linux各个版本的差异以及安装环境的不同软件的安装方式也不尽相同所以在安装软件前一定要事先阅读这个README文件确保安装的正确性。2分析安装平台环境在软件包解压完毕之后我们进入源码目录一般都会存在configure和README这么两个文件README就是上面我们讲到的是对软件的介绍和安装说明linux下软件的安装受到操作系统安装环境的影响比如某些软件在安装或者运行过程中需要调用操作系统本身的库文件或者需要运行系统的某个工具等等但是系统中不存在这个库文件或者这个工具没有安装那么安装或者运行软件就会失败。为了避免这个问题的出现在安装软件的时候就需要分析操作系统环境检测当前系统是否拥有安装软件所需的所有文件和工具如果系统缺少某个文件就给出提示直到满足软件的所有需求为止。这个就是configure文件的功能configure文件一般是个可执行文件可以在当前目录下直接输入“./configure”进行软件安装的环境测试如果提示缺少某些安装包就需要进行安装直到测试通过。通常的源码安装都需要GCC或者CC编译器这些编译器一般在安装系统时定制安装包中的开发工具选项下其实这也是我们在第二章安装linux系统中要求选择开发工具包的原因所在。此外在执行configure分析软件需求时还可以在“./configure”后面加上软件的安装路径以及安装所需的模块等等一些选项来定制用户需要的软件功能。3编译安装软件在验证软件安装环境后正式进入软件的编译步骤在进行编译前首先了解下关于编译的一些基础知识。在linux系统下make是我们经常用到的编译命令无论是安装软件还是项目开发都会经常用到编译安装命令也就是make和make install对于一个包含很多源文件的应用程序使用make和makefile工具可以简单快速的解决各个源文件之间复杂的依赖关系同时make工具还可以自动完成所有源码文件的编译工作并且可以只对上次编译后修改过的文件进行增量编译因此熟练掌握了make和makefile工具之后源码安装软件就变的像windows下安装软件一样简单。Makefile****文件make工具最主要的功能就是通过makefile文件来实现的makefile文件是按照某种语法来进行编写的文件中定义了各个源文件之间的依赖关系并说明了如何编译源文件并生成可执行文件它通过描述各个源程序之间的关系让make工具自动完成编译工作。在linux系统下习惯用Makefile替代makefile文件我们在执行configure通过后就会在当前目录下生成这个文件一般情况下在命令行输入make时make命令会默认去寻找当前目录下的Makefile文件如果我们用其它文件作为makefile就要在make命令选项后指定makefile文件例如我们设定编译规则文件为make_file就需要使用以下命令指定[rootWEBServer ~]#make -f make_file下面我们通过举例了解下Makefile的编写原则和内容。例如有一个test程序有三个源文件file1.c、file2.c、file3.c以及库文件LS编译生成这三个源文件还分别包含了自己的头文件1.h、2.h、3.h。通常C编译器将会输出三个目标文件file1.o、file2.o、file3.o。假定file1.c和file3.c都要声明用到一个apcs的文件但是file2.c不用也就是在file1.c和file3.c文件中都有类似“#include “apcs””的声明。下面这段代码就是对test程序的描述1:#It is a example for describing makefile2:test: file1.o file2.o file3.o3:cc file1.o file2.o file3.o -LS -o test4:file1.o: file1.c 1.h apcs5:gcc -c file1.c6:file3.o: file3.c 3.h apcs7:gcc -c file3.c8:file2.o: file2.c c.h9:gcc -c file2.c这个描述文档其实就是一个makefile文件第一行为注释行第二行指定test程序有file1.o、file2.o、file3.o链接生成第三行描述了如何从test所依赖的文件建立可执行文件接下来的第四、六、八行定义了三个目标文件和它们依赖的“.c”、“.h”和“apcs”文件。剩下的第五、七、九行定义了如何从目标依赖的文件生成可执行文件。在了解Makefile文件结构后我们就可以控制编译的选项定制自己所需的软件功能。接下来我们只需在命令行输入make命令即可进入编译阶段根据软件源程序的大小和系统的硬件配置编译时间不定编译完毕会在当前目录以及子目录下生成相应的可执行文件接下来就进入最后的安装软件阶段在命令行输入make install命令开始安装软件安装进程会首先创建安装目录如果我们没有指定安装的目录安装程序默认会安装在系统的/usr/local目录下创建安装目录然后将相应的文件和可执行程序从源码目录拷贝到安装目录下这样安装就完毕了。2.1.28 克隆安装minimal版本虚拟机(自行安装 )克隆后所需要进行的操作1.eth0删掉 ,eth1改成eth0vim /etc/udev/rules.d/70-persistent-net.rules2.虚拟机改ip地址mac地址,删除uuid 或者 将机器重启也可以vim /etc/sysconfig/network-scripts/ifcfg-eth0 用复制的硬件地址替换掉ifcfg-eth0中的硬件地址 删除掉UUID那一行或者将uuid中的数字或字母改变一个##如果删除了UUID那一行所有配置完成后要重新启动机器3.改主机名和映射文件##改主机名hostname主机名 vim /etc/sysconfig/network##改ip映射vim /etc/hosts4.克隆后,修改了eth0的ip地址,但是ipconfig后,ip没有变化方法:到network-scripts下,将ifcfg-eh0删掉,重启网络5. 使用nat模式实现两台虚拟机局域网通讯1.更改主机名临时永久2.检查网卡是否启动3.关闭NetworkManager网络管理服务4.关闭防火墙5.选择nat模式6.查看vmnet8网关7.更改虚拟机ip地址网关DNS8.更改主机vmnet8的ip地址网关DNS为了使用远程连接工具连接虚拟机9.虚拟机互相ping进行测试7. 操作新linux系统流程1.更改主机名临时永久2.检查网卡是否启动3.关闭NetworkManager网络管理服务4.关闭防火墙5.更改ip地址6.更改主机名称和主机映射7.使用连接工具xshell进行连接8.如果出现问题按照以上流程检查2.1.30 scp命令集群模式下各节点之间如何方便的拷贝文件命令格式scp file 远程用户名远程服务器IP:~/ 注意冒号和目录之间不能有空格如果拷贝目录需要加-r 选项。使用root用户eg: scp /etc/profile rootnode2:/etceg: scp -r /usr/jdk1.8 node2:/usr/javaeg:scp hello.log node2:$PWD注使用$PWD 默认到当前目录。 注意目标主机要有与当前相同的目录~:到当前用户的宿主目录scp /etc/services node2:/root/service.hard可以通过这种方式修改拷贝的文件名。2.1.31 ssh免密登录如何方便的切换到其他节点ssh node2免密登录在第一台机器上生成一对钥匙公钥和私钥当前用户的宿主目录下的.ssh目录多了两个文件将公钥拷贝给要免密码登录的机器注意主机名和ip都可以确保配置了主机名 ip的映射还需要输入密码拷贝完成之后会在要免密登录的机器上生成授权密码文件注意免密码登录是单向的扩展ssh免密登录原理1, node1 使用 ssh-keygen –t rsa 生成公钥和私钥ssh-copy-id rootnode2 将公钥拷贝到node2上实际上是把公钥内容追加到 authorized_keys文件中。请求时1node1向node2发送连接请求时附带主机ip地址等信息node2收到请求后去授权文件里查找node1的公钥找到之后随机生成一个字符串并用公钥加密并发送给node1node1接收到密文之后用私钥解密并把解密结果返回给node2node2拿到解密结果之后与之前的字符串进行比较如果相同则可以登录成功。原理图

相关新闻

根据JDK深入详细学习理解JAVA线程池

根据JDK深入详细学习理解JAVA线程池

笔者,之所以写这篇博客,是因为,很多博客或者书籍,在介绍线程池相关内容的时候,太理论化,直接上结论,并不能正确的表述出来所说的每一个结论,是为什么,怎么理解。所以在此…

2026/10/15 10:39:33 阅读更多 →
油轮导流罩供应商选择指南:核心指标与实船验证

油轮导流罩供应商选择指南:核心指标与实船验证

油轮导流罩是一种安装在螺旋桨前方的水动力节能装置,学名桨前预旋导流罩(PFFP),其核心作用是改善螺旋桨入流流场,减少尾流能量损失,使推进效率提升5%至15%。对于油轮这类长期高油耗运营的船型,导流罩是应对IMO EEXI与CII新规的关键低成本方案,直接决定燃油成本与碳排放…

2026/10/11 3:31:46 阅读更多 →
办公效率翻倍!OpenClaw 2.7.9 本地部署 + 实用自动化指令汇总

办公效率翻倍!OpenClaw 2.7.9 本地部署 + 实用自动化指令汇总

当下主流对话式 AI 工具大多局限于文本交互场景,很难直接操控本地文件、浏览器、各类办公软件,难以覆盖电脑端重复操作需求。而 OpenClaw 核心亮点在于本地部署 自动化执行能力,能够读懂自然语言指令并自主完成各类电脑操作,非常…

2026/9/27 5:05:22 阅读更多 →

最新新闻

SpringBoot+Vue医院预约挂号系统设计与优化

SpringBoot+Vue医院预约挂号系统设计与优化

1. 项目概述:现代化医疗预约解决方案这个基于SpringBootVue的医院预约挂号系统,是我去年为某三甲医院信息化改造设计的核心模块。传统医疗机构的预约挂号流程普遍存在页面卡顿、数据不同步、操作繁琐等问题,而采用前后端分离架构后&#xff0…

2026/10/15 10:39:41 阅读更多 →
微信小游戏是什么?运行原理与开发入门全解析

微信小游戏是什么?运行原理与开发入门全解析

做前端时间长了,总有人问我:微信小游戏到底是个什么东西?能像网页一样不用下载就玩,又能做出挺复杂的游戏,还能在朋友圈里被疯转。说实话,我一开始也绕了不少弯路,总觉得它像小程序,…

2026/10/15 10:39:41 阅读更多 →
超帧在SLAM中的作用:从关键帧组织到局部优化的全面解析

超帧在SLAM中的作用:从关键帧组织到局部优化的全面解析

1. 为什么我会盯上 Hyperframes 这个概念做了这么多年SLAM相关的工作,我逐渐意识到一个残酷的事实:绝大多数做视觉SLAM的人,对关键帧的认知停留在“选一帧长得不一样的图”这个层面,更别说超帧(Hyperframes&#xff09…

2026/10/15 10:39:41 阅读更多 →
D-S证据理论:用不确定性推理解决急诊分诊与医疗AI评估难题

D-S证据理论:用不确定性推理解决急诊分诊与医疗AI评估难题

急诊分诊这件事,表面上是个分诊护士按个红黄绿标签的过程,实际上是个高压、高噪声、高代价的决策现场。病患到急诊的那一刻,能采集到的信息往往是零散的:病人自己的口述、家属慌张的补充、监护仪上跳动的几个数字、既往病历里一段…

2026/10/15 10:39:41 阅读更多 →
superpowers安装全攻略:从环境准备到排错重装的一条龙实操

superpowers安装全攻略:从环境准备到排错重装的一条龙实操

“superpowers”这个词最近在我几个技术交流群里出现的频率高得离谱,不少人在问“想要安装superpowers”,还有人把它列进新机器必备清单。我最初以为是什么夸张的营销宣传,直到自己在全新的机器上完整走了一遍安装、配置、排错的全流程&#…

2026/10/15 10:39:41 阅读更多 →
学Simulink——储能变流器(PCS)中 PWM 整流器的恒流充放电(CC Charge / CC Discharge)仿真

学Simulink——储能变流器(PCS)中 PWM 整流器的恒流充放电(CC Charge / CC Discharge)仿真

目录 手把手教你学Simulink——储能变流器(PCS)中 PWM 整流器的恒流充放电(CC Charge / CC Discharge)仿真 一、为什么储能 PCS 要做 恒流(CC)充放电双向 PWM 整流器 二、PCS 双向控制与 CC 模式原理** 2.1 功率平衡估算(用于 idref​折算) 2.2 模式定义 三、关键…

2026/10/15 10:38:32 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/15 9:49:14 阅读更多 →