最新资讯

  • 【Linux】基础IO(文件系统)

【Linux】基础IO(文件系统)

2025-05-02 11:00:18 1 阅读

 🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html

目录

理解文件系统

磁盘

磁盘的存储结构

软硬链接

软链接 

 硬链接​编辑

动态库和静态库 

静态库 

 动态库

 动态库加载--可执行程序和地址空间


前言

    💬 hello! 各位铁子们大家好哇。

             今日更新了Linux基础IO的内容
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

理解文件系统

磁盘

图1,2是磁盘,图3是服务器,磁盘插入到服务器的凹槽中。以前的电脑里都是磁盘,但现在大部分的笔记本里都是SSD。 

 

表面光滑的部分叫盘片。盘片:可读可写可擦除。一片两面都可以写。

光碟只可读。

盘片一般都是一摞的,有很多片。

旁边像时针的东西叫磁头,盘片的每一面都有对应的磁头。

磁盘的存储结构

磁盘读写的基本单位是512字节。 

如何找到一个指定位置的扇区?

  1. 找到指定的磁头。 Header
  2. 找到指定的磁道(柱面) Cylinder
  3. 找到指定的扇区。  Sector

这种在硬件上定位某一个扇区的寻址方案叫CHS定址法,即需要三个参数。

文件其实就是在磁盘中占有几个扇区的问题。 

我们把磁盘抽象成巨大的线性结构

 假设是两片四面。尽管扇区大小有差异,但是每个扇区的内存大小都是一样的。每一面上都有很多扇区,最后就把磁盘抽象成数组 。

有了数组,就可以通过下标找到某个扇区,但是磁盘只认CHS,所以要通过算法将下标转换成CHS的地址。我们找到下标后交给磁盘,磁盘内部会把线性地址转换成CHS的地址。进而定位到某一个扇区里。

一般而言,OS未来和磁盘交互的时候,基本单位为;4KB,而不是512字节(一个扇区512字节),因为一次读512字节太少了,要提高效率。 

所以4KB=8个连续的扇区

系统把这8个连续的扇区称为块大小(数据块)。

8个扇区为一个块,块号*8就等于每一个块的第一个扇区的下标,连续往后读就可以知道整个块的下标了。

对于OS而言。未来我们读取数据就可以以块为单位了。

这里的每一个块号的起始地址称作LBA 即逻辑区块地址。 

磁盘的空间很大,需要分区管理,只要能管理好其中一个区,剩下的其他区就可以照搬它的管理方法,全部管理好。 

  假设这里管理其中一个区,这个区还是太大,就要在这个区里面继续分组。只要把一个组管理好了,这个区的每一个组就都能管理好了。

 上图下半部分是磁盘文件系统图。

Linux文件系统特点:文件内容和文件属性 分开存储。

  • Block Group:文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • inode表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容

 Linux中文件的属性是一个大小固定的集合体,也就是inode结构体。

inode Table里面存的是文件的属性,Data blocks里面存的是文件的内容。

inode结构体里面没有文件名。内核层面,每一个inode都有inode number,通过inode号标识一个文件。通过inode号找到inode后,inode里面还有一个数组,可以映射到对应数据块。

GDT描述的是一个块组的使用情况。

Super Block(超级块)描述的是整个分区整体的文件系统的情况。

超级块不止一个,可能有多个,在不同的块组里,这样可以让文件系统更稳定。

通过-i选项,我们可以看到目录或者文件前面都有一个数字,这就是inode编号。 

inode编号是以分区为单位的。一个分区内inode号不能重复,两个分区间可以,所以inode不能跨分区访问。

我们平时都是用文件名找文件,inode就是通过文件名找到的。 

目录=文件属性+文件内容          目录的内容就是文件名和inode编号的映射关系。

所以同一目录下不能有同名文件

找文件的顺序:文件名->inode编号

目录的r权限,本质是是否允许我们读取目录的内容,即文件名和inode的映射关系。

目录的w权限,新建文件时,本质是建立文件名和inode编号的映射关系。

要找到一个文件,就要先找到文件所在的目录,然后打开,通过文件名与inode号的映射关系找到目标文件的inode。可目录也是文件, 就要继续往上找,直到来到根目录下。根目录是系统给我们的,是已知的,就可以找到目标文件了。这种逆向的路径解析由OS完成。这也是为什么Linux定位一个文件时,都要有路径的原因。

 要找到一个文件,需要inode,但更前提的是需要知道在哪个分区。

我们用的云服务器一般只有一个盘,盘里面有分区。要访问一个分区,就需要把该分区挂载。挂载实际是把磁盘分区和文件系统的目录进行关联,未来进入该分区本质就是进入该目录。

一个文件起始在访问之前,都是先有目录的。

文件都是带有路径的,目录也是。所以根据目录的路径,就可以找到对应哪个分区。

所以目录本身除了可以定位文件,还能确定是在哪个分区下的。

软硬链接

下面直接见识一个软连接

如上图,建立了一个软链接,ln就是link的意思,-s就是soft的意思。 后者链接前者。

file1和软链接都是独立的文件,因为他们都有独立的inode。

 下面见识一个硬链接

硬链接与软链接的建立相比,就少了一个-i选项。硬链接和file2的inode都是一样的。

上方红框中的数字,在建立硬链接前是1,建立硬链接后就变成了2。

 综上,可以知道,软链接是一个独立的文件,因为有独立的inode。

硬链接不是一个独立的文件,因为没有独立的inode。

属性中有一列数字表示硬链接数。

软链接 

软链接的内容:目标文件所对应的路径字符串。

如上图,我们可以直接通过软链接,就能打印出目标文件的内容。

软链接类似于windows中的快捷方式,所以删掉软链接对目标文件不会有影响。 

如果把目标文件删了,软链接就没用了。

我们建立6个目录,和一个可执行程序myls。

假设这是个项目,给舍友用,每次运行可执行程序都要带大串路径,很麻烦。这时就可以建立一个软链接来解决,类似于快捷方式。如下图:

 硬链接

如上图,通过硬链接,也可以直接打印出目标文件的内容。删除目标文件后,硬链接能照常打印。他们的inode编号都相同。没删除前,硬链接数是2,删除后变成1。这个数字叫引用计数,inode编号相当于指针,两个指针指向同一对文件属性,引用计数就是2,删除一个inode和文件名的映射关系,引用计数就变成1。

上面这个建立硬链接,然后删除原文件的操作,就相当于重命名。

硬链接本质就是一个文件名和inode的映射关系,建立硬链接,就是在指定目录下,添加一个新的文件名和inode号的映射关系。 

硬链接数就是文件的磁盘级引用计数:有多少个文件名字符串通过inode编号指向我。

如上图,新建立的文件和目录,一个引用计数是1,另一个是2。file是1,因为只有它这一对映射关系。dir也是刚创建的,它的引用计数却是2,为什么是2呢?

如上图,我们知道,任何一个目录下,都有 . 和 .. 两个隐藏文件。dir目录里的. 的inode跟dir的inode一样,即有两个对应的映射关系,所以引用计数是2。

我们再在dir里面新建一个otherdir目录。可以看到dir的引用计数变成了3。他的三对映射关系如上图红框。

因此可得出结论:

任何一个目录,刚开始新建的时候,引用计数一定是2。

目录A内部,新建一个目录,会让目录A的引用计数自动+1。

一个目录内部有几个目录=该目录引用计数-2

Linux系统中,不允许给目录建立硬链接。主要是为了避免路径环绕。

硬链接的意义:

  1. 构建Linux的路径结构,让我们可以使用. ..来进行路径定位。 
  2. 一般用硬链接来做文件备份。

动态库和静态库 

如上图,我们只是调用了接口,并没有实现该函数。可执行程序执行必须要有对应的实现,所以编译时,由gcc默认帮我们链接了对应的库。

 ldd的作用是帮我们找可执行程序所依赖的库。上面红框就是C语言的标准库。

Linux中:.so(动态库) .a(静态库)

windows中:.dll(动态库)  .lib(静态库)

 

上图.c文件变成.o文件是翻译的过程。.o文件的全称是可重定位目标文件,也就是目标文件。

将所有的.o文件链接起来,就形成了可执行文件。

静态库 

假设有一个作业是做库,舍友不会,你又不能直接发原文件给他。因为程序最后都是由.o链接的,所以你就把所有的源文件编成.o文件。

如上图,你把所有的.o文件都发给了舍友。

这些.o文件都是函数的实现,可舍友又不知道函数名是什么,所以你就把头文件也发给了它。

有了.o文件和头文件,舍友只需要自己写个main函数。main函数里面只需要根据头文件提供的函数名和参数就能使用了。 

我们直接编译main.c,发现编译不通过,因为找不到别的文件。所以可以把所有需要的文件揉在一起编译,这样就能形成可执行程序了。

通过上面例子可知,我们不需要给舍友源代码,只需要给他方法的实现,还有头文件就可以。

头文件是一个手册,提供函数的声明,告诉用户怎么用。

.o文件提供实现,我们只需要补上一个main,调用头文件的方法,然后和.o进行链接,就可以形成可执行。

 假设又有一个作业,也是一样的任务,只不过需要更多的库。因为.o文件太多了,你就准备打包给你的舍友,可是它不会解包。于是你就不打包了,而是使用ar 命令。

 选项-r就是replace的意思,-c就是create的意思。上面把所有的.o文件都打包进了libmyc.a文件里面。你告诉舍友libmyc.a直接用就行了,不需要解包。

如上图,舍友可以直接像刚才的方法一样使用。

由此可知,所谓的库文件,本质就是把.o打包。

ar就是打包工具,也是建立静态库的命令。

-c就是.o文件不存在就新建,-r选项是文件存在就替换。 

库的名字一般以lib开头,中间的myc才是真正的名字,.a就是静态亏的后缀。

我们可以把头文件和库文件都放到mylib目录里面,然后再把mylib打包给舍友,如下图:

 舍友不管选项怎么用,想直接用这个库。这就需要把库安装到系统里。

 如上图,这时候就已经把库安装到系统里了。

安装到系统后,这里的mylib相当于安装包,也就没用了,可以删除。

gcc/g++默认认识c/c++库,因为这里的库是我们自己写的,gcc/g++不认识,所以我们要带一个-l选项,后面再带上库的名字就可以了。注意库的名字是中间部分,要去掉前缀和后缀。

我们不建议把非官方的代码放到系统里。 所以要马上删除。

如果舍友不想安装到系统,想在当前目录下直接使用,即动态链接。 就需要用到-I,-L,-l选项,如下图:

-I:表示指定用户自定义头文件路径  (大写的i)

-L:表示指定用户自定义库文件路径

-l:表示指定确定的第三方库的名称  (小写的L)

我们ldd查看依赖的库,发现这里是动态库,这是为什么呢?我们明明是静态库,为什么没有用我们的库。

编译器在形成可执行程序的时候,能动态链接的就动态链接了,只能静态链接的,就把代码里的函数实现拷贝到可执行程序里面。

因为gcc/g++编译器默认是动态链接的,如果带了-static就必须强制全部静态链接。如果不带-static,就优先动态链接,需要对应的动态库就提供,没有就把静态库拷贝到可执行程序里。

 动态库

 形成动态库的目标文件需要带-fPIC选项。动态库的形成可以直接使用gcc,不需要ar,后面要带上-shared选项。

shared: 表示生成共享库格式

fPIC:产生位置无关码

库名规则:libxxx.so

把动态库放到mylib里,编译main.c后形成可执行程序。我们发现该可执行程序不能运行。

为什么这里会显示找不到?我们不是已经在上面指明了路径和库了吗?

这是因为上面的指明只是告诉了gcc/g++编译器,并没有告诉操作系统。

形成了可执行程序后,后面的工作就跟gcc/g++编译器没关系了。

动态库要在程序运行的时候,去找到动态库加载并运行。

静态库没有这个问题,因为在编译期间,就已经将库中的代码拷贝到我们的可执行程序内部了,加载和库就没有关系了。

 系统在运行期间,会自动找对应的动态库。动态库的查找路径默认是/lib64目录下。

第一种找动态库的方法就是,将需要的库拷贝到/libn64目录里。

这种方法不推荐。

第二种方法就是建立软链接。 

第三种方法就是通过环境变量。系统中存在一个环境变量叫LD_LIBRARY_PATH。添加库的路径到该环境变量中,这样就可以找到动态库了。

但是这样做,在我们关闭xshell后,就又找不到了。这是因为环境变量是内存级的,以前的文章讲过。

 上面是第四种方法。如果想在今后的使用中,都有该环境变量,就要在用户的家目录下修改.bashrc配置文件。如上图。

除非是非常重要的库,不然这种方法也不推荐。 

第五种方法。在系统的配置路径下,有一个目录ld.so.conf.d。里面有很多系统级别的配置文件。可以在这里面添加一个配置文件。把要用的动态库所对应的路径添加到配置文件里,最后再把配置文件加载一下即ldconfig,这个配置就永久生效了。ldconfig就是把目录里的所有配置文件生效。注意配置文件的后缀必须是.conf

总结5种找动态库的方法:

  1.  安装到系统
  2. 建立软链接
  3. 命令行导入环境变量
  4. 修改.bashrc配置文件,让环境变量永久生效
  5. /etc/ld.so.conf.d  新增动态库搜索的配置文件,ldconfig

 当动态库和静态库同时使用时,默认使用动态库。当我们带上-static选项后,链接的时候就是静态链接。动态链接和静态链接的文件大小差别很大。

总结:

默认链接的是动态库。

如果没有使用-static,并且只提供.a库,只能静态链接当前的.a库,其他库正常动态链接。

 -static就是强制要求程序进行静态链接,如果没有静态库版本,就会报错。

也就是说,没有带-static时,优先使用动态库,没有动态库就使用静态库。

如果带了-static,一定不要动态库,只要静态库。

 动态库加载--可执行程序和地址空间

静态库不需要考虑加载,因为代码编译后,静态库就已经被拷贝到可执行程序内部了。

可执行程序函数实现在库文件中,所以库文件也要被加载到内存中。

动态库要映射到当前进程的堆栈之间的共享区。

未来如果有新的进程需要用到已经加载到内存的库,可以直接把已加载的库映射到新进程的地址空间里。所以未来不同的进程可以使用同一个库,这个库叫动态库,也叫共享库。

动态库可以被加载到进程的地址空间中的任何位置,所以形成动态库是要带选项-fPIC

本文地址:https://www.vps345.com/7151.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge llama 算法 opencv 自然语言处理 神经网络 语言模型 数据库 centos oracle 关系型 安全 分布式 python MCP ssh 阿里云 网络 网络安全 网络协议 ubuntu 进程 操作系统 进程控制 Ubuntu deepseek Ollama 模型联网 API CherryStudio RTSP xop RTP RTSPServer 推流 视频 科技 ai java 人工智能 个人开发 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 ssl EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse 物联网 tcp/ip mcu iot 信息与通信 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 智能路由器 外网访问 内网穿透 端口映射 YOLO efficientVIT YOLOv8替换主干网络 TOLOv8 numpy asm android harmonyos typescript 鸿蒙 rust http 开发语言 华为 HarmonyOS Next 运维开发 云原生 面试 性能优化 jdk intellij-idea 架构 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 计算机网络 嵌入式 linux驱动开发 arm开发 嵌入式硬件 macos adb php vscode ide 编辑器 智能手机 NAS Termux Samba Linux 银河麒麟 kylin v10 麒麟 v10 LDAP spring boot websocket postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 windows docker 产品经理 agi microsoft vim 笔记 tomcat maven intellij idea 后端 pycharm pytorch Windsurf 数据结构 学习 c语言 经验分享 学习方法 mysql 电脑 .net word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 nginx dubbo ue5 vr c++ 命名管道 客户端与服务端通信 jar gradle C# MQTTS 双向认证 emqx ESP32 camera Arduino 电子信息 sqlserver 目标检测 unix 单片机 豆瓣 追剧助手 迅雷 nas 微信 前端框架 深度学习 计算机视觉 aws googlecloud vSphere vCenter 软件定义数据中心 sddc golang HCIE 数通 rpc 机器学习 AI 爬虫 数据集 向日葵 jmeter 软件测试 C 环境变量 进程地址空间 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 live555 rtsp rtp node.js json html5 firefox conda pillow WSL2 rust腐蚀 僵尸进程 git elasticsearch WSL win11 无法解析服务器的名称或地址 ESXi 开源 ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 ffmpeg 音视频 vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 kubernetes 容器 程序人生 迁移指南 Qwen2.5-coder 离线部署 ollama 大模型 mac Dify DeepSeek-R1 API接口 源码剖析 rtsp实现步骤 流媒体开发 大数据 数据挖掘 网络用户购物行为分析可视化平台 大数据毕业设计 1024程序员节 pip udp 客户端 java-ee ipython flutter Hyper-V WinRM TrustedHosts ui 华为云 华为od flask AI编程 AIGC 政务 分布式系统 监控运维 Prometheus Grafana jenkins mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 tcpdump debian PVE .netcore github 创意 社区 MacOS录屏软件 c# Agent dell服务器 go 代理模式 cpu 内存 实时 使用 react.js 前端面试题 持续部署 YOLOv8 NPU Atlas800 A300I pro asi_bench YOLOv12 统信UOS 麒麟 bonding 链路聚合 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 ddos qt stm32项目 stm32 gpu算力 chatgpt llama3 Chatglm 开源大模型 zotero WebDAV 同步失败 鸿蒙系统 Dell R750XS protobuf 序列化和反序列化 安装 温湿度数据上传到服务器 Arduino HTTP unity 自动化 rag ragflow ragflow 源码启动 计算机外设 软件需求 cuda cudnn anaconda 微服务 springcloud sql KingBase oceanbase rc.local 开机自启 systemd 微信分享 Image wxopensdk uni-app VMware安装mocOS VMware macOS系统安装 媒体 ollama下载加速 DeepSeek 服务器繁忙 mongodb kylin k8s SSH 远程连接 llm express p2p 跨域 jellyfin vue 大语言模型 游戏机 VMware创建虚拟机 小艺 Pura X SWAT 配置文件 服务管理 网络共享 devops springboot excel gaussdb ruoyi DeepSeek行业应用 Heroku 网站部署 openvpn server openvpn配置教程 centos安装openvpn jupyter 机器人 视觉检测 linux 命令 sed 命令 腾讯云 权限 micropython esp32 mqtt npm nuxt3 实时音视频 职场和发展 远程桌面 IIS服务器 IIS性能 日志监控 fd 文件描述符 蓝耘科技 元生代平台工作流 ComfyUI 其他 log4j apache 并查集 leetcode r语言 数据可视化 数据分析 算力 ansible AI写作 prompt 网络结构图 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 spring 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 spring cloud kafka hibernate AI大模型 大模型入门 Deepseek 大模型教程 IPMI 远程 命令 执行 sshpass 操作 W5500 OLED u8g2 TCP服务器 KylinV10 麒麟操作系统 虚拟机 Vmware 漏洞 bash kind 蓝桥杯 web安全 宝塔面板 同步 备份 建站 安全威胁分析 Open WebUI 网络穿透 云服务器 低代码 ArcTS 登录 ArcUI GridItem Xterminal arkUI eureka k8s集群资源管理 云原生开发 bug 负载均衡 远程工作 弹性计算 裸金属服务器 弹性裸金属服务器 虚拟化 微信小程序 小程序 iBMC UltraISO openEuler unity3d okhttp CORS 雨云 NPS 飞书 ci/cd dns 程序员 恒源云 DevEco Studio RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 致远OA OA服务器 服务器磁盘扩容 Docker Hub docker pull 镜像源 daemon.json gitlab redis Redis Desktop 能力提升 面试宝典 技术 IT信息化 oneapi 大模型微调 LLM 大模型面经 大模型学习 webrtc 缓存 LLMs arm zabbix matplotlib pygame 小游戏 五子棋 code-server MQTT mosquitto 消息队列 rime rabbitmq django sqlite 华为认证 网络工程师 交换机 MS Materials openssl 密码学 监控 自动化运维 课程设计 shell kamailio sip VoIP mariadb safari Mac 系统 系统架构 nvidia 大数据平台 echarts 信息可视化 网页设计 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 软件工程 硬件架构 https AISphereButler 源码 毕业设计 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 信号处理 网络药理学 生信 生物信息学 gromacs 分子动力学模拟 MD 动力学模拟 remote-ssh 混合开发 环境安装 JDK 国产操作系统 ukui 麒麟kylinos openeuler 统信 虚拟机安装 VMware安装Ubuntu Ubuntu安装k8s 框架搭建 gpt mysql离线安装 ubuntu22.04 mysql8.0 hive Hive环境搭建 hive3环境 Hive远程模式 VPS ssh漏洞 ssh9.9p2 CVE-2025-23419 pyqt 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 hadoop centos-root /dev/mapper yum clean all df -h / du -sh RAGFLOW EasyConnect vmware 卡死 京东云 Cline 自动化编程 RustDesk自建服务器 rustdesk服务器 docker rustdesk openwrt 命令行 基础入门 编程 web3.py chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 服务器主板 AI芯片 孤岛惊魂4 WebRTC list 模拟实现 postgresql ux 多线程 ros2 moveit 机器人运动 RTMP 应用层 系统安全 opcua opcda KEPServer安装 gpt-3 文心一言 selenium 测试工具 游戏服务器 TrinityCore 魔兽世界 asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 wireshark 显示过滤器 ICMP Wireshark安装 代码调试 ipdb adobe 传统数据库升级 银行 threejs 3D Python 网络编程 聊天服务器 套接字 TCP Socket SenseVoice telnet 远程登录 IPMITOOL BMC 硬件管理 yum springsecurity6 oauth2 授权服务器 token sas FTP 服务器 实战案例 矩阵 prometheus k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm 飞牛NAS 飞牛OS MacBook Pro 服务器管理 配置教程 服务器安装 网站管理 NFS redhat pdf 群晖 文件分享 中间件 iis Ubuntu Server Ubuntu 22.04.5 多线程服务器 Linux网络编程 云服务 雨云服务器 可信计算技术 企业微信 Linux24.04 deepin 拓扑图 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 Reactor 设计模式 C++ 远程控制 远程看看 远程协助 visualstudio 银河麒麟操作系统 国产化 visual studio code 工业4.0 rsyslog 线程 串口服务器 Trae IDE AI 原生集成开发环境 Trae AI 驱动开发 硬件工程 嵌入式实习 无人机 TRAE 微信开放平台 微信公众平台 微信公众号配置 三级等保 服务器审计日志备份 P2P HDLC 思科 iftop 网络流量监控 RAID RAID技术 磁盘 存储 html css 本地部署 api DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 Kylin-Server dify matlab bootstrap Kali Linux 黑客 渗透测试 信息收集 ecmascript nextjs react reactjs 黑客技术 流式接口 实时互动 CPU 主板 电源 网卡 压测 ECS ssrf 失效的访问控制 安卓 AI代码编辑器 wps xrdp string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 开发环境 SSL证书 半虚拟化 硬件虚拟化 Hypervisor 环境迁移 etcd 数据安全 RBAC thingsboard 金融 腾讯云大模型知识引擎 mamba Vmamba 报错 Java outlook IIS .net core Hosting Bundle .NET Framework vs2022 直播推流 CH340 串口驱动 CH341 uart 485 产测工具框架 IMX6ULL 管理框架 毕设 状态管理的 UDP 服务器 Arduino RTOS JAVA 医疗APP开发 app开发 gitea 开发 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos C语言 springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 svn lio-sam SLAM Invalid Host allowedHosts rdp 实验 fpga开发 Wi-Fi DNS gitee UOS 统信操作系统 交叉编译 多进程 mybatis Node-Red 编程工具 流编程 linux安装配置 云电竞 云电脑 todesk kali 共享文件夹 OD机试真题 华为OD机试真题 服务器能耗统计 压力测试 安全架构 网络攻击模型 transformer ping++ 深度优先 图论 并集查找 换根法 树上倍增 n8n 工作流 workflow firewalld 智能音箱 智能家居 KVM 单元测试 集成测试 功能测试 arcgis 灵办AI kvm wsl 部署 dba Cookie pyautogui ocr 强制清理 强制删除 mac废纸篓 开机自启动 测试用例 Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer 磁盘监控 virtualenv 自动驾驶 服务器配置 ue4 着色器 虚幻 next.js 部署next.js trae 银河麒麟服务器操作系统 系统激活 Ark-TS语言 yum源切换 更换国内yum源 QQ bot Docker playbook 剧本 wsl2 博客 多层架构 解耦 王者荣耀 cmos 硬件 Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 android studio 交互 grafana 分析解读 重启 排查 系统重启 日志 原因 进程信号 图像处理 设备 GPU PCI-Express Google pay Apple pay gcc 办公自动化 自动化生成 pdf教程 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 Erlang OTP gen_server 热代码交换 事务语义 MNN Qwen RAGFlow ip 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 pppoe radius 宠物 免费学习 宠物领养 宠物平台 hugo Netty 即时通信 NIO jvm tidb GLIBC GCC crosstool-ng HTTP 服务器控制 ESP32 DeepSeek 设置代理 实用教程 dns是什么 如何设置电脑dns dns应该如何设置 银河麒麟桌面操作系统 Kylin OS 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 系统开发 binder 车载系统 framework 源码环境 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 集成学习 MacMini 迷你主机 mini Apple 相机 SSH 服务 SSH Server OpenSSH Server AI agent 思科模拟器 Cisco 自动化任务管理 vasp安装 Linux PID WebUI DeepSeek V3 nlp AutoDL AI作画 本地部署AI大模型 信创 信创终端 中科方德 LInux 程序员创富 模拟退火算法 推荐算法 cnn DenseNet 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP VR手套 数据手套 动捕手套 动捕数据手套 计算机 Radius wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 qt项目 qt项目实战 qt教程 minicom 串口调试工具 Xinference av1 电视盒子 机顶盒ROM 魔百盒刷机 CentOS Stream CentOS ruby 3d 数学建模 银河麒麟高级服务器 外接硬盘 Kylin 物联网开发 社交电子 数据库系统 输入法 EMQX 通信协议 keepalived 直流充电桩 充电桩 sonoma 自动更新 ip命令 新增网卡 新增IP 启动网卡 xshell termius iterm2 SEO chfs ubuntu 16.04 neo4j 数据仓库 数据库开发 数据库架构 database minio docker命令大全 DocFlow vscode 1.86 mq rocketmq 火绒安全 Nuxt.js frp 内网服务器 内网代理 内网通信 aarch64 编译安装 HPC VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 HarmonyOS idm chrome devtools chromedriver 边缘计算 Linux的权限 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 langchain deep learning 树莓派 VNC 监控k8s 监控kubernetes uniapp 健康医疗 域名服务 DHCP 符号链接 配置 备选 网站 调用 示例 AD域 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 Cursor rclone AList webdav fnOS Claude AnythingLLM AnythingLLM安装 c 链表 业界资讯 鲲鹏 反向代理 黑苹果 CrewAI sdkman sequoiaDB qemu libvirt 图形渲染 自定义客户端 SAS prometheus数据采集 prometheus数据模型 prometheus特点 GoogLeNet 历史版本 下载 搜索引擎 etl 华为机试 skynet alias unalias 别名 金仓数据库 2025 征文 数据库平替用金仓 做raid 装系统 armbian u-boot LORA NLP 5G 3GPP 卫星通信 elk USB网络共享 监控k8s集群 集群内prometheus ssh远程登录 游戏程序 大大通 第三代半导体 碳化硅 回显服务器 UDP的API使用 ftp web 升级 CVE-2024-7347 考研 h.264 centos 7 docker run 数据卷挂载 交互模式 URL opensearch helm 私有化 xcode MI300x selete 高级IO 文件系统 用户缓冲区 web3 tcp vscode1.86 1.86版本 ssh远程连接 技能大赛 open Euler dde LLM Web APP Streamlit flash-attention 英语 big data Kali MySql linux环境变量 open webui IMM dity make 单一职责原则 eNSP 网络规划 VLAN 企业网络 版本 searxng 崖山数据库 YashanDB PPI String Cytoscape CytoHubba yolov8 Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 视频编解码 spark HistoryServer Spark YARN jobhistory Ubuntu 24.04.1 轻量级服务器 人工智能生成内容 渗透 邮件APP 免费软件 DBeaver kerberos asp.net大文件上传下载 VSCode 移动云 Docker Compose docker compose docker-compose UOS1070e can 线程池 zookeeper nfs 服务器部署ai模型 openstack Xen sqlite3 SSL 域名 Anolis nginx安装 linux插件下载 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 Windows ai工具 v10 软件 ldap nac 802.1 portal QT 5.12.12 QT开发环境 Ubuntu18.04 无桌面 epoll 小智AI服务端 xiaozhi ASR TTS linux上传下载 GIS 遥感 WebGIS AD 域管理 网站搭建 serv00 deepseek r1 Playwright 自动化测试 Ubuntu22.04 开发人员主页 联想开天P90Z装win10 make命令 makefile文件 多个客户端访问 IO多路复用 TCP相关API ROS 聚类 ios iphone 程序 性能分析 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 网工 虚拟局域网 互信 ceph 镜像 键盘 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 SSE 网卡的名称修改 eth0 ens33 yaml Ultralytics 可视化 vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 深度求索 私域 知识库 SRS 流媒体 直播 数据管理 数据治理 数据编织 数据虚拟化 Deepseek-R1 私有化部署 推理模型 路径解析 显卡驱动 大模型应用 sublime text Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 序列化反序列化 常用命令 文本命令 目录命令 python3.11 SSH 密钥生成 SSH 公钥 私钥 生成 jina Attention 匿名管道 dash 正则表达式 pgpool seatunnel 端口测试 性能测试 田俊楠 odoo 服务器动作 Server action 相差8小时 UTC 时间 RAG 检索增强生成 文档解析 大模型垂直应用 netty 远程过程调用 Windows环境 composer es 游戏引擎 远程服务 seleium Linux的基础指令 FTP服务器 昇腾 npu risc-v 稳定性 看门狗 bcompare Beyond Compare Jellyfin swoole 云桌面 微软 AD域控 证书服务器 cursor uv glibc rustdesk 技术共享 我的世界 我的世界联机 数码 软考 gnu SysBench 基准测试 软负载 ecm bpm ArkTs ArkUI HiCar CarLife+ CarPlay QT RK3588 CLion 宕机切换 服务器宕机 执法记录仪 智能安全帽 smarteye EMUI 回退 降级 curl wget 音乐服务器 Navidrome 音流 MCP server C/S windows日志 apt Minecraft DOIT 四博智联 北亚数据恢复 oracle数据恢复 rnn XCC Lenovo 繁忙 解决办法 替代网站 汇总推荐 AI推理 MQTT协议 消息服务器 代码 H3C Dell HPE 联想 浪潮 iDRAC R720xd webstorm freebsd 前后端分离 目标跟踪 OpenVINO 推理应用 edge浏览器 ShenTong 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 IM即时通讯 剪切板对通 HTML FORMAT easyui 运维监控 XFS xfs文件系统损坏 I_O error 图形化界面 saltstack 换源 国内源 Debian embedding 聊天室 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 FunASR file server http server web server 阿里云ECS muduo 个人博客 X11 Xming xml 代理 飞牛nas fnos tensorflow 计算虚拟化 弹性裸金属 OpenManus 虚拟显示器 宝塔 ros grub 版本升级 扩容 x64 SIGSEGV xmm0 miniapp 真机调试 调试 debug 断点 网络API请求调试方法 less ISO镜像作为本地源 AI-native Docker Desktop 显示管理器 lightdm gdm 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? 指令 阻塞队列 生产者消费者模型 服务器崩坏原因 jetty undertow bat Ubuntu共享文件夹 共享目录 Linux共享文件夹 李心怡 HarmonyOS NEXT 原生鸿蒙 信号 Doris搭建 docker搭建Doris Doris搭建过程 linux搭建Doris Doris搭建详细步骤 Doris部署 大模型推理 xpath定位元素 db docker部署Python 知识图谱 大模型部署 xss docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 强化学习 离线部署dify 我的世界服务器搭建 minecraft GameFramework HybridCLR Unity编辑器扩展 自动化工具 策略模式 搭建个人相关服务器 企业网络规划 华为eNSP perf linux内核 软链接 硬链接 banner 查询数据库服务IP地址 SQL Server 分布式训练 react native 智能电视 SVN Server tortoise svn 安卓模拟器 HAProxy 本地环回 bind 单例模式 热榜 opengl 根服务器 clickhouse 7z laravel ubuntu24 vivado24 junit 免费域名 域名解析 区块链 perl 服务网格 istio 需求分析 规格说明书 双系统 lua 影刀 #影刀RPA# Python基础 Python教程 Python技巧 axure 富文本编辑器 autodl WLAN 音乐库 飞牛 OpenHarmony 实习 鸿蒙开发 移动开发 语法 语音识别 idea 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 Headless Linux figma WebVM 捆绑 链接 谷歌浏览器 youtube google gmail 基础环境 wpf 流水线 脚本式流水线 CDN ubuntu20.04 开机黑屏 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR Qwen2.5-VL vllm flink 沙盒 软件构建 Typore java-rocketmq regedit 开机启动 虚幻引擎 virtualbox 项目部署到linux服务器 项目部署过程 c/c++ 串口 浏览器开发 AI浏览器 webgl 本地化部署 计算生物学 生物信息 基因组 onlyoffice 在线office cpp-httplib 嵌入式系统开发 llama.cpp 本地知识库部署 DeepSeek R1 模型 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 支付 微信支付 开放平台 玩机技巧 软件分享 软件图标 PX4 rancher 烟花代码 烟花 元旦 磁盘清理 powerpoint 环境配置 sysctl.conf vm.nr_hugepages cocoapods 移动魔百盒 USB转串口 harmonyOS面试题 DIFY VS Code 僵尸世界大战 游戏服务器搭建 word 代码托管服务 firewall deekseek cfssl TCP协议 抗锯齿 nftables 防火墙 trea 大模型技术 本地部署大模型 GRUB引导 Linux技巧 互联网医院 Logstash 日志采集 MVS 海康威视相机 架构与原理 内网环境 yolov5 毕昇JDK lb 协议 Linux环境 IDEA dock 加速 triton 模型分析 OpenSSH 代理服务器 NAT转发 NAT Server Unity Dedicated Server Host Client 无头主机 IPv4 子网掩码 公网IP 私有IP 主从复制 安防软件 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 conda配置 conda镜像源 css3 sentinel iperf3 带宽测试 K8S k8s管理系统 midjourney TrueLicense 佛山戴尔服务器维修 佛山三水服务器维修 模拟器 教程 存储维护 NetApp存储 EMC存储 虚拟现实 ArtTS WSL2 上安装 Ubuntu 加解密 Yakit yaklang 干货分享 黑客工具 密码爆破 vpn 超融合 线性代数 电商平台 服务器时间 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 IO模型 eclipse 带外管理 嵌入式Linux IPC ubuntu24.04.1 tailscale derp derper 中转 自学笔记 小米 澎湃OS Android 端口 查看 ss fast 中兴光猫 换光猫 网络桥接 自己换光猫 进程优先级 调度队列 进程切换 读写锁 AI Agent 字节智能运维 多端开发 智慧分发 应用生态 鸿蒙OS Mac内存不够用怎么办 fonts-noto-cjk g++ g++13 IMX317 MIPI H265 VCU iventoy VmWare OpenEuler 元服务 应用上架 k8s二次开发 集群管理 su sudo hosts rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK DeepSeek r1 cd 目录切换 AzureDataStudio Spring Security 游戏开发 网络建设与运维 NLP模型 内核 风扇控制软件 安装MySQL 服务器部署 本地拉取打包 通信工程 毕业 fstab MDK 嵌入式开发工具 论文笔记 极限编程 Reactor反应堆 多产物 浪潮信息 AI服务器 网络文件系统 Web服务器 多线程下载工具 PYTHON Web应用服务器 windows 服务器安装 nvm whistle kotlin 欧标 OCPP Carla 智能驾驶 Helm k8s集群 合成模型 扩散模型 图像生成 ebpf uprobe burp suite 抓包 vnc ROS2 Mac软件 Mermaid 可视化图表 zip unzip IO Linux 维护模式 宝塔面板无法访问 samba 软件卸载 系统清理 shell脚本免交互 expect linux免交互 网络爬虫 scapy wsgiref Web 服务器网关接口 电视剧收视率分析与可视化平台 Zoertier 内网组网 问题解决 ardunio BLE mcp服务器 client close java-rabbitmq nosql Sealos 论文阅读 性能调优 安全代理 scikit-learn win服务器架设 windows server 浏览器自动化 proxy模式 ros1 Noetic 20.04 apt 安装 网络搭建 神州数码 神州数码云平台 云平台 visual studio copilot Apache Beam 批流统一 案例展示 数据分区 容错机制 网页服务器 web服务器 Nginx top Linux top top命令详解 top命令重点 top常用参数 ip协议 状态模式 export import save load 迁移镜像 kernel docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 输入系统 多路转接 vu大文件秒传跨域报错cors milvus hexo 项目部署 粘包问题 机柜 1U 2U ubuntu 18.04 notepad tar Alexnet ranger MySQL8.0 隐藏文件 隐藏目录 管理器 通配符 React Next.js 开源框架 云耀服务器 navicat 跨平台 容器技术 mysql安装报错 windows拒绝安装 智慧农业 开源鸿蒙 团队开发 CPU 使用率 系统监控工具 linux 命令 cron crontab日志 Linux权限 权限命令 特殊权限 ABAP 对比 工具 meld DiffMerge MAC SecureCRT 服务器安全 网络安全策略 防御服务器攻击 安全威胁和解决方案 程序员博客保护 数据保护 安全最佳实践 端口聚合 windows11 达梦 DM8 powerbi 查看显卡进程 fuser 开源软件 UEFI Legacy MBR GPT U盘安装操作系统 System V共享内存 进程通信 话题通信 服务通信 UDP 流量运营 MacOS docker desktop image ELF加载 deployment daemonset statefulset cronjob 图片增强 增强数据 oracle fusion oracle中间件 硅基流动 ChatBox WebServer cmake Unity插件 华为证书 HarmonyOS认证 华为证书考试 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 rpa CosyVoice 国产数据库 瀚高数据库 数据迁移 下载安装 maxkb ARG AI员工 MAVROS 四旋翼无人机 Linux find grep 钉钉 fork wait waitpid exit 服务器扩容没有扩容成功 抓包工具 视频平台 录像 视频转发 视频流 python2 ubuntu24.04 授时服务 北斗授时 显示器 csrutil mac恢复模式进入方法 恢复模式 VMware Tools vmware tools安装 vmwaretools安装步骤 vmwaretools安装失败 vmware tool安装步骤 vm tools安装步骤 vm tools安装后不能拖 vmware tools安装步骤 lighttpd安装 Ubuntu配置 Windows安装 服务器优化 数字证书 签署证书 MobaXterm 弹性服务器 lvm 磁盘挂载 磁盘分区 文件传输 js WINCC 服务器ssl异常解决 服务器正确解析请求体 macOS 零售 yum换源 大屏端 stable diffusion 代码规范 搜狗输入法 中文输入法 netlink libnl3 zerotier 工具分享 ubuntu安装 linux入门小白 录音麦克风权限判断检测 录音功能 录音文件mp3播放 小程序实现录音及播放功能 RecorderManager 解决录音报错播放没声音问题 联机 僵尸毁灭工程 游戏联机 开服 生活 西门子PLC 通讯 镜像下载 接口优化 Docker快速入门 DevOps 软件交付 数据驱动 解决方案 qt5 客户端开发