跳转至内容
让每一次思考都有价值
💡 温馨提示:因监管政策,所有文章及评论均需审核,敬请谅解。
  • WAF原理和使用场景:一文看懂Web应用防火墙

    Web应用 waf
    1
    0 赞同
    1 评论
    2 浏览
    小黑
    目录一、先搞懂:WAF是什么?它解决了什么问题?二、WAF的核心原理:怎么识别和拦截攻击?1. 第一步:接收并解析Web请求2. 第二步:匹配攻击规则,判断是否“危险”3. 第三步:执行防护动作(放行/拦截/告警)三、WAF的部署方式:它放在哪里工作?1. 云WAF(最常用,适合中小企业)2. 硬件WAF(适合大型企业/政企)3. 软件WAF(适合技术能力强的团队)四、哪些场景必须用WAF?看完就知道要不要装1. 有用户交互的网站(如电商、论坛、社交平台)2. 有后台管理系统的网站(如企业官网、CRM系统)3. 处理敏感数据的网站(如金融、医疗、政务平台)4. 高流量的网站(如门户网站、直播平台)5. 对外提供API接口的服务(如APP后台、SaaS服务)6. 采用开源框架的网站(如用WordPress、Django、ThinkPHP搭建的网站)五、常见误区:这些关于WAF的错误认知要避开1. 误区1:“装了WAF,网站就绝对安全了”2. 误区2:“我的网站是小网站,没人会攻击,不用装WAF”3. 误区3:“WAF会影响网站访问速度,不适合高并发场景”总结 在上网时,你可能遇到过“网站被黑客攻击导致数据泄露”“网页被篡改显示恶意内容”的新闻——这些问题,大多可以通过WAF来解决。WAF的全称是“Web应用防火墙”(Web Application Firewall),简单说就是“保护网站和Web应用的安全卫士”。但它具体怎么工作?哪些场景需要用它?下面用通俗的语言,从原理到场景一步步讲清楚。 一、先搞懂:WAF是什么?它解决了什么问题? 在讲原理前,先明确WAF的核心定位——它不是“万能防火墙”,而是专门针对“Web应用”的安全防护工具。 首先要区分两个常见概念:网络防火墙和WAF: 网络防火墙(比如家里路由器的防火墙、公司机房的硬件防火墙):相当于“小区大门”,只管“谁能进小区”(比如限制某个IP地址访问),不管“进了小区后做什么”(比如这个人是去正常拜访,还是去破坏); WAF:相当于“小区里每栋楼的门禁+保安”,不仅管“谁能进楼”,还管“进楼后做什么”——比如有人想通过“撬锁”(黑客攻击手段)进楼,WAF能及时拦截。 简单说:网络防火墙防的是“网络层攻击”(比如IP黑名单、端口封禁),而WAF防的是“Web应用层攻击”(比如黑客通过网页表单注入恶意代码、利用网站漏洞窃取数据)。这些Web应用层攻击,网络防火墙根本“看不见”,必须靠WAF来防护。 二、WAF的核心原理:怎么识别和拦截攻击? WAF的工作逻辑很像“火车站安检”——先“检查行李”(分析请求内容),再“判断是否危险”(匹配攻击规则),最后“决定放行还是拦截”(执行防护动作)。具体分三步: 1. 第一步:接收并解析Web请求 所有访问Web应用的请求(比如你打开网页、提交表单、点击按钮),都会先经过WAF——就像所有乘客都要先过安检一样。 WAF会先“拆解”这个请求,提取关键信息,比如: 请求的来源(谁发的请求?IP地址、浏览器信息); 请求的目标(要访问哪个页面?比如https://xxx.com/login); 请求的内容(带了什么数据?比如表单里的用户名密码、URL里的参数); 请求的方式(是“查看页面”(GET请求),还是“提交数据”(POST请求))。 举个例子:你在某网站登录时,输入用户名“admin”、密码“123456”并点击提交,这个请求会先传给WAF。WAF会解析出:“来源IP是192.168.1.100,目标是/login页面,请求内容是用户名和密码,请求方式是POST”。 2. 第二步:匹配攻击规则,判断是否“危险” 这是WAF的核心环节——就像安检员用X光机检查行李,看有没有刀具、炸药等危险物品。WAF会用“攻击规则库”(相当于“危险物品清单”),对比第一步解析出的请求信息,判断这个请求是不是“黑客攻击”。 常见的“攻击规则”对应以下黑客手段,你可以理解为WAF能识别的“危险行为”: SQL注入攻击:黑客在表单或URL里输入恶意SQL代码,比如在“用户名”框输入' or 1=1 --,试图绕开登录验证,甚至窃取数据库里的用户数据。WAF会识别这种“包含SQL关键字(如or、–)的异常请求”,直接拦截; XSS跨站脚本攻击:黑客在评论区、表单等地方注入恶意JavaScript代码,比如输入<script>alert('盗取cookie')</script>,当其他用户打开页面时,代码会执行,导致Cookie被窃取、网页被篡改。WAF会识别“包含<script>等危险标签的请求”,阻止恶意代码提交; CSRF跨站请求伪造:黑客诱导用户点击恶意链接,让用户在“已登录状态”下,自动向目标网站发送恶意请求(比如转账、修改密码)。WAF会检查请求是否带“合法的CSRF令牌”(相当于网站给用户的“身份验证码”),没有令牌的请求会被拦截; 路径遍历攻击:黑客在URL里输入../等符号,试图访问网站服务器上的敏感文件(比如https://xxx.com/../etc/passwd,想读取服务器的用户密码文件)。WAF会识别这种“试图跳转到根目录的异常路径”,拒绝请求; 恶意爬虫攻击:有些黑客用爬虫大量抓取网站数据(比如电商的商品价格、用户信息),导致服务器压力过大或数据泄露。WAF会识别“高频次、无正常浏览器标识的请求”(比如1秒内发100次请求),限制爬虫的访问速度或直接封禁IP。 这些“攻击规则”不是固定的——WAF厂商会定期更新规则库,就像杀毒软件更新病毒库一样,确保能识别最新的黑客攻击手段。 3. 第三步:执行防护动作(放行/拦截/告警) 当WAF判断出请求的“危险等级”后,会执行对应的动作,常见的有三种: 正常放行:如果请求符合所有安全规则,没有异常,WAF会把请求“原封不动”地传给Web服务器(比如你的正常登录请求、浏览页面请求),你完全感觉不到WAF的存在; 拦截并返回错误:如果请求是明确的攻击(比如包含SQL注入代码),WAF会直接“拦截”这个请求,不传给服务器,同时给用户返回一个错误页面(比如“403 Forbidden”),阻止攻击触达网站; 告警并记录日志:如果请求“疑似攻击”(比如请求频率略高,但没到封禁阈值),WAF不会直接拦截,但会记录详细日志(包括请求IP、时间、内容),并向网站管理员发送告警(比如短信、邮件),让管理员后续排查是否是攻击。 此外,很多WAF还支持“自定义规则”——比如网站管理员可以设置“只允许某个IP段访问后台管理页面”“禁止提交包含‘赌博’‘色情’关键词的评论”,让防护更贴合自身业务。 三、WAF的部署方式:它放在哪里工作? 要让WAF生效,需要把它“放在Web服务器和用户之间”,确保所有用户请求都先经过WAF。常见的部署方式有三种,不同场景适合不同方式: 1. 云WAF(最常用,适合中小企业) 云WAF是“放在云端的WAF服务”,比如阿里云WAF、腾讯云WAF、百度智能云WAF。使用方式很简单: 不需要购买硬件设备,也不需要自己部署软件; 只需要把网站的域名解析(DNS)指向云WAF的服务器地址,用户的请求就会先经过云WAF,再转发到自己的Web服务器。 优点:成本低(按年付费,中小企业能承受)、无需维护(厂商负责更新规则、修复WAF自身漏洞)、抗DDoS能力强(云厂商有大量服务器分担攻击流量); 缺点:对网络延迟有轻微影响(请求要多走一次云端),但普通网站用户基本感知不到。 适合场景:中小电商网站、企业官网、个人博客、SaaS服务(如在线办公软件)。 2. 硬件WAF(适合大型企业/政企) 硬件WAF是“一台专门的物理设备”,比如深信服、启明星辰的硬件WAF。部署时需要把它放在公司机房的“网络出口处”,比如放在路由器和Web服务器之间,所有用户请求必须经过这台设备。 优点:性能强(能处理每秒几十万次请求,适合高流量网站)、延迟低(物理设备直接处理,不经过云端)、安全性高(数据不经过第三方,适合对数据隐私要求高的场景); 缺点:成本高(一台设备几万到几十万不等)、需要专人维护(定期更新规则、检查设备状态)。 适合场景:大型电商(如京东、拼多多)、金融机构(银行、证券的官网和APP后台)、政府部门网站(政务服务平台)。 3. 软件WAF(适合技术能力强的团队) 软件WAF是“安装在服务器上的软件”,比如开源的ModSecurity(可以和Apache、Nginx服务器配合使用)、商用的软件WAF(如F5的软件版WAF)。部署时需要在Web服务器上安装软件,配置防护规则。 优点:灵活(可以自定义所有规则,适合特殊业务场景)、成本中等(开源版免费,商用版按服务器数量收费); 缺点:对技术要求高(需要自己配置规则、维护软件)、性能依赖服务器(如果服务器性能差,WAF可能成为瓶颈)。 适合场景:技术团队强的创业公司、有特殊防护需求的定制化Web应用(如企业内部管理系统)。 四、哪些场景必须用WAF?看完就知道要不要装 不是所有网站都需要WAF,但以下6类场景,WAF是“刚需”——没有WAF,网站很容易被攻击,造成损失: 1. 有用户交互的网站(如电商、论坛、社交平台) 这类网站允许用户提交数据(比如电商的订单提交、论坛的评论发布、社交平台的内容发布),是黑客攻击的“重灾区”: 黑客可能通过SQL注入窃取用户的手机号、地址、支付信息; 可能通过XSS攻击篡改商品价格、在评论区植入恶意链接; 可能用恶意爬虫抓取商品数据,恶意竞争。 比如某小型电商网站,没装WAF时,黑客通过SQL注入获取了5000条用户手机号,导致用户投诉和监管处罚;装了WAF后,类似的注入请求全被拦截,再也没出现数据泄露问题。 2. 有后台管理系统的网站(如企业官网、CRM系统) 几乎所有网站都有后台管理系统(比如管理员登录后发布文章、修改商品信息),如果没防护,黑客可能通过以下方式攻击: 用“暴力破解”(反复尝试用户名密码)登录后台,篡改网站内容(比如把企业官网首页改成恶意广告); 利用后台的漏洞(比如路径遍历),下载服务器上的敏感文件(如数据库备份); 通过CSRF攻击,诱导管理员点击链接,自动执行“删除数据”“添加管理员”等恶意操作。 比如某公司的CRM系统(客户关系管理系统),没装WAF时,黑客暴力破解了管理员账号,删除了所有客户数据,导致业务停滞3天;装了WAF后,WAF开启了“暴力破解防护”,连续输错5次密码就临时封禁IP,彻底杜绝了这类攻击。 3. 处理敏感数据的网站(如金融、医疗、政务平台) 金融(银行、支付平台)、医疗(医院官网、在线问诊系统)、政务(政务服务平台、社保查询系统)等网站,存储或处理的是“高敏感数据”(比如银行卡号、病历、身份证号),一旦被攻击,后果极其严重: 金融网站被攻击可能导致用户资金损失; 医疗网站被攻击可能泄露患者隐私,违反《个人信息保护法》; 政务网站被攻击可能影响公共服务,甚至引发社会问题。 根据监管要求,这类网站必须具备“Web应用防护能力”,WAF是最基础的防护手段。比如某银行的手机银行Web端,通过WAF拦截了大量SQL注入和XSS请求,确保用户的账户信息安全。 4. 高流量的网站(如门户网站、直播平台) 高流量网站不仅容易被“针对性攻击”,还可能遭遇“恶意爬虫”或“DDoS攻击”(分布式拒绝服务攻击,通过大量虚假请求压垮服务器): 恶意爬虫会大量抓取内容(比如门户网站的新闻、直播平台的主播信息),占用服务器带宽和资源,导致正常用户访问变慢; DDoS攻击会发送每秒几十万次的虚假请求,让服务器“忙不过来”,最终瘫痪(用户打不开网站)。 WAF的“爬虫防护”和“基础DDoS防护”功能能解决这些问题:比如某门户网站用了云WAF后,爬虫请求减少了60%,服务器负载降低,正常用户的访问速度明显提升;同时WAF抵御了多次小规模DDoS攻击,网站从未出现瘫痪。 5. 对外提供API接口的服务(如APP后台、SaaS服务) 现在很多APP(如外卖APP、打车APP)的后台,都是通过“API接口”提供服务(比如APP调用/api/getOrder接口获取订单信息)。这些API接口如果没防护,会被黑客利用: 黑客可能“恶意调用”API(比如每秒调用1000次/api/sendSms接口,发送垃圾短信,导致企业短信费用激增); 可能通过“API参数注入”(比如在/api/getUser?id=1里把id改成1' or 1=1 --),窃取所有用户信息; 可能“越权访问”(比如普通用户调用/api/admin/deleteUser接口,删除其他用户)。 WAF可以对API接口做“专项防护”:比如设置“API调用频率限制”(每个IP每分钟最多调用10次)、“参数合法性校验”(id必须是数字,不能包含特殊字符)、“权限校验”(只有管理员IP能调用/admin接口),确保API安全。 6. 采用开源框架的网站(如用WordPress、Django、ThinkPHP搭建的网站) 很多网站用开源框架搭建(比如个人博客用WordPress,企业网站用ThinkPHP),这些框架一旦曝出漏洞(比如WordPress的文件上传漏洞、ThinkPHP的远程代码执行漏洞),黑客会批量扫描使用该框架的网站,发起攻击: 比如某漏洞曝光后,黑客用工具批量扫描“使用ThinkPHP 5.0版本的网站”,一旦找到,就上传恶意代码,控制服务器; 而WAF会及时更新“针对开源框架漏洞的防护规则”,即使网站没来得及修复漏洞,WAF也能拦截利用该漏洞的攻击。 比如某用WordPress搭建的企业官网,没装WAF时,因WordPress漏洞被黑客植入恶意代码,网站被搜索引擎标记为“危险网站”;装了WAF后,WAF拦截了利用WordPress漏洞的请求,后续即使有新漏洞曝光,网站也能安全运行,直到开发者修复漏洞。 五、常见误区:这些关于WAF的错误认知要避开 很多人对WAF有“过高或过低”的期待,导致防护不到位或资源浪费,以下是3个常见误区: 1. 误区1:“装了WAF,网站就绝对安全了” WAF不是“万能神药”,它只能防“Web应用层攻击”,不能防所有攻击: 比如“服务器操作系统漏洞”(如Windows的远程桌面漏洞)、“数据库漏洞”(如MySQL的弱密码),WAF管不了——这些需要靠服务器加固、设置强密码来防护; 比如“社会工程学攻击”(黑客伪装成员工骗管理员密码),WAF也管不了——需要靠员工安全意识培训来防范。 正确认知:WAF是“Web安全的第一道防线”,不是“唯一防线”,需要和服务器加固、数据加密、安全意识培训等结合,才能实现“多层防护”。 2. 误区2:“我的网站是小网站,没人会攻击,不用装WAF” 黑客攻击不是“挑大拣小”,而是“批量扫描、有漏洞就攻”: 黑客用工具批量扫描互联网上的网站,不管是大网站还是小网站,只要有漏洞(比如SQL注入、弱密码),就会发起攻击; 小网站的防护往往更弱(比如管理员用“admin/admin”当密码),反而更容易成为攻击目标——比如个人博客可能被植入广告,小企业官网可能被篡改内容。 正确认知:只要网站能被互联网访问,就有被攻击的风险,哪怕是小网站,也建议装免费或低成本的云WAF(比如有些云厂商提供基础版免费WAF)。 3. 误区3:“WAF会影响网站访问速度,不适合高并发场景” 早期的WAF确实可能因性能不足导致延迟,但现在的WAF(尤其是云WAF和硬件WAF)性能已经很好: 云WAF有“全球节点”,用户会连接最近的节点,延迟可能比直接访问服务器还低(比如用户在广州,云WAF在广州有节点,请求不用绕到北京的服务器); 硬件WAF能处理每秒几十万次请求,完全满足高并发场景(比如大型电商的双十一活动,WAF也能正常工作)。 正确认知:只要选对WAF(高并发选硬件WAF或大厂云WAF),不仅不会影响速度,还可能因WAF的“缓存功能”(比如缓存静态页面)提升访问速度。 总结 WAF就像“Web应用的保安”——它站在用户和服务器之间,通过“解析请求→匹配规则→拦截攻击”的逻辑,挡住SQL注入、XSS等Web应用层攻击,保护网站的数据和正常运行。 如果你是网站管理员,判断是否需要装WAF很简单:只要你的网站“能被互联网访问”“允许用户交互”“处理敏感数据”,就建议装WAF;至于选哪种部署方式,中小网站选云WAF(成本低、省心),大型企业/政企选硬件WAF(性能强、安全高),技术团队强的选软件WAF(灵活)。
  • Vite 和 Webpack 这两款主流前端打包工具

    记录与分享
    1
    0 赞同
    1 评论
    3 浏览
    水文大师
    目录一、核心工作原理:从“是否打包”看本质差异1. Vite:开发不打包,生产轻量打包2. Webpack:全阶段依赖打包二、实际使用体验:从“开发效率”到“配置成本”1. 开发效率:Vite 碾压式领先2. 配置复杂度:Vite 开箱即用,Webpack 需手动搭建3. 生态与插件:Webpack 全面,Vite 够用但不冗余三、适用场景:没有最优,只有匹配1. 优先选 Vite 的场景2. 优先选 Webpack 的场景四、常见认知误区澄清总结 一、核心工作原理:从“是否打包”看本质差异 1. Vite:开发不打包,生产轻量打包 Vite 最核心的特点是“开发阶段跳过打包步骤”: 开发时,利用浏览器原生支持的 ES Module(ESM)特性,直接让浏览器加载项目源码(比如 import './component.vue'),无需像传统工具那样先把所有代码合并成 bundle 文件。这就导致它的启动速度极快——中小型项目通常 1-3 秒就能启动,修改代码后热更新也只针对变化的模块,不会全量重新处理。 生产阶段,为了兼容低版本浏览器和优化性能,Vite 会基于 Rollup 进行打包,自动完成代码压缩、Tree-Shaking(删除未使用代码)等基础优化,且配置简单,无需手动组合大量插件。 2. Webpack:全阶段依赖打包 Webpack 的核心逻辑是“万物皆模块,全阶段打包处理”: 开发时,必须先分析所有模块的依赖关系(包括 JS、CSS、图片等),将其打包成一个或多个 bundle 文件后,再启动开发服务。这个过程会消耗大量时间,项目越大(比如依赖多个第三方库、代码量超 10 万行),启动越慢,可能需要 10-30 秒,热更新时也可能因为 chunk 体积大而延迟。 生产阶段,Webpack 依赖丰富的插件实现深度优化(比如用 SplitChunksPlugin 拆分公共依赖、MiniCssExtractPlugin 提取 CSS 为单独文件),但需要开发者手动配置插件组合,门槛较高。 二、实际使用体验:从“开发效率”到“配置成本” 1. 开发效率:Vite 碾压式领先 启动速度:Vite 秒级启动,Webpack 需等数倍时间。比如开发一个 Vue 后台管理系统,Vite 1 秒启动,Webpack 可能需要 8-12 秒,大型项目差距更明显。 热更新体验:Vite 修改代码后,仅更新当前模块(比如改一个表格组件,只重新加载这个组件),视图瞬间刷新;Webpack 可能需要重新打包整个 chunk(包含多个关联模块),尤其是组件嵌套深的项目,热更新延迟会很明显。 2. 配置复杂度:Vite 开箱即用,Webpack 需手动搭建 Vite 零配置起步:默认支持 Vue/React/TypeScript/CSS 预处理器,甚至不需要手动配置入口文件。即使有复杂需求(比如设置路径别名 @ 指向 src 目录),也只需在 vite.config.js 中写 3-5 行代码,新手 10 分钟就能搞定。 Webpack 配置门槛高:基础配置需要写 webpack.config.js,处理 CSS 要装 css-loader+style-loader,处理图片要装 url-loader,开发热更新要配置 webpack-dev-server。如果要实现代码分割、缓存策略等进阶功能,还需要组合多个插件,新手可能需要 1-2 天才能搭好可用的环境。 3. 生态与插件:Webpack 全面,Vite 够用但不冗余 Webpack 生态极成熟:插件数量超 10 万,几乎能解决所有前端场景——从 PWA(渐进式Web应用)、国际化,到模块联邦(跨项目共享组件)、代码质量分析(如 eslint-webpack-plugin),无论多复杂的需求都能找到对应插件。 Vite 生态较新但聚焦核心:插件数量远少于 Webpack,但覆盖了 90% 的常规需求(如 Vue/React 支持、低版本浏览器兼容插件 @vitejs/plugin-legacy、SVG 处理插件 vite-plugin-svg-icons)。对于“模块联邦”这类小众复杂场景,支持度不如 Webpack,但也满足了大部分中小型项目的需求。 三、适用场景:没有最优,只有匹配 1. 优先选 Vite 的场景 个人项目/中小型团队项目:比如个人博客、3 人以内开发的后台管理系统、移动端 H5。这类项目追求“快速开发、少折腾配置”,Vite 的开箱即用和高速体验能大幅提升效率,且生态完全能覆盖需求。 仅支持现代浏览器的项目:比如面向年轻用户的社交 APP 前端、内部协作工具(仅用 Chrome/Firefox)。Vite 开发阶段不兼容 IE 等旧浏览器,但现代浏览器场景下,其优势能完全发挥。 对开发体验要求高的项目:比如 UI 组件库开发、频繁迭代的业务系统。开发者每天需要多次启动项目、修改代码,Vite 的秒级启动和热更新能减少等待时间,避免打断开发思路。 2. 优先选 Webpack 的场景 大型企业级项目:比如电商平台(淘宝、京东级)、多团队协作的中台系统。这类项目常有“多入口打包”“精细化缓存”“跨项目组件共享”等复杂需求,Webpack 成熟的生态和插件系统能更好地支撑,且长期维护性更强。 需兼容低版本浏览器的项目:比如面向老年用户的健康类网站、企业内部旧系统(需支持 IE11)。Vite 开发阶段依赖 ESM,IE 完全不支持,无法正常开发;Webpack 则可通过 babel-loader 转 ES5、postcss 处理 CSS 兼容,轻松适配旧浏览器。 已有 Webpack 配置的存量项目:如果项目已用 Webpack 稳定运行,且团队熟悉配置,不建议盲目迁移到 Vite——迁移需解决插件兼容性问题(比如部分 Webpack 插件在 Vite 中无法使用),还需团队重新学习,成本远大于“提升开发速度”的收益。 四、常见认知误区澄清 “Vite 会淘汰 Webpack”:不会。两者是互补关系,Vite 擅长现代、中小型项目,Webpack 擅长复杂、旧浏览器兼容项目。比如 React 官方推荐的 Create React App 仍基于 Webpack,Vue 官方虽推 Vite,但大型 Vue 项目若需兼容 IE,还是得用 Webpack。 “Vite 完全不需要配置”:错。Vite 的“零配置”是针对基础场景,复杂需求(如路径别名、低版本兼容)仍需配置,只是比 Webpack 简单得多。比如配置路径别名,Vite 只需 3 行代码,Webpack 需 5 行以上,且要引入 path 模块。 “Webpack 开发速度无法优化”:可以优化,但门槛高。比如用 hard-source-webpack-plugin 缓存打包结果,第二次启动速度提升 50%;用 module.noParse 跳过 jQuery 等大型库的解析,减少打包时间。但这些优化需要熟悉 Webpack 原理,新手很难掌握。 总结 选择 Vite 还是 Webpack,核心看“项目规模”“浏览器兼容要求”和“团队能力”: 新手、中小型项目、现代浏览器场景:选 Vite,省心高效,能快速出成果; 大型项目、旧浏览器兼容、复杂需求场景:选 Webpack,生态全、能扛住复杂业务; 存量 Webpack 项目:不盲目迁移,除非“开发速度慢”成为核心痛点,且团队有精力适配。 本质上,两者都是工具,没有绝对的好坏——能匹配项目需求、让团队开发效率最高的,就是最好的选择。
  • 从0开始认识Vue

    记录与分享 vue
    2
    0 赞同
    2 评论
    6 浏览
    小黑
    @昵称长度要四个字
  • 各位佬还有谁在运营个人博客吗?

    闲聊吹水
    4
    1 赞同
    4 评论
    10 浏览
    十二
    @kmy 必应收录还是可以的,现在我身边基本都没人用百度了,必应收录一般没违规内容和之前域名有过问题基本都收录能搜索到,可以试试提交收录,AI时代,信息多就能采集到的了
  • Linux配置Docker环境(以Ubuntu为例)

    系统与软件 docker
    1
    0 赞同
    1 评论
    14 浏览
    小黑
    目录一、为什么在Ubuntu上配置Docker?二、前置准备:确认Ubuntu环境与权限1. 检查Ubuntu系统版本2. 确认当前用户权限3. 卸载旧版本Docker(可选)三、核心步骤:Ubuntu上安装Docker1. 安装必要的依赖工具2. 添加Docker官方GPG密钥3. 配置Docker官方仓库4. 安装Docker Engine5. 验证安装是否成功四、关键配置:让Docker用起来更顺手1. 配置免sudo使用Docker(推荐)2. 更换Docker国内镜像源(解决拉取慢问题)3. 检查Docker服务状态(日常维护)五、常见问题:安装与使用中的坑及解决方法1. 安装时提示“无法定位包docker-ce”2. 运行docker run hello-world时提示“permission denied”3. 拉取镜像时出现“timeout”或“no such host”4. Docker服务无法启动,提示“failed to start docker.service: Unit docker.service is masked”六、总结:Ubuntu配置Docker的完整流程回顾 一、为什么在Ubuntu上配置Docker? 在Linux系统中,Ubuntu是最主流的发行版之一,它不仅社区活跃、文档丰富,还对Docker有完美的兼容性——Docker本质上依赖Linux内核的容器化技术(如Namespace、Cgroups),在Ubuntu上运行时无需额外的虚拟化层(如Windows的Hyper-V、macOS的虚拟机),性能更接近原生,且配置步骤更简洁。 对开发者而言,在Ubuntu上配置Docker,既能避免Windows/macOS下的“环境割裂”问题,又能模拟生产环境(大多数生产服务器使用Linux),让“开发环境与生产环境一致”的目标更容易实现。 [示意1:Ubuntu与Docker的适配优势] Windows/macOS运行Docker → 依赖虚拟机/Hyper-V → 性能损耗+配置复杂 | 对比 | Ubuntu运行Docker → 直接调用Linux内核 → 原生性能+配置简洁 我曾在Windows上遇到过Docker容器无法访问宿主机网络的问题,切换到Ubuntu后,只需简单配置网络参数就能解决,这也是我推荐在Ubuntu上使用Docker的重要原因。 二、前置准备:确认Ubuntu环境与权限 在开始配置前,需要完成两项基础检查,避免后续出现兼容性问题。 1. 检查Ubuntu系统版本 Docker对Ubuntu的版本有明确要求,需确保系统为 Ubuntu 20.04 LTS、22.04 LTS 或更高版本(LTS版本长期支持,更稳定)。 检查版本的命令: lsb_release -a 若输出中“Release”字段为20.04、22.04等,说明版本符合要求;若版本过低,建议先升级系统(执行sudo apt upgrade)或重新安装LTS版本。 2. 确认当前用户权限 Docker命令默认需要root权限(或加入docker用户组的权限),后续操作中需频繁使用sudo,建议提前确认当前用户是否有sudo权限: # 执行简单的sudo命令,测试权限 sudo echo "权限正常" 若输出“权限正常”,说明sudo权限可用;若提示“xxx is not in the sudoers file”,需联系系统管理员添加sudo权限(或切换到root用户操作)。 3. 卸载旧版本Docker(可选) 若之前安装过旧版Docker(如docker、docker.io、docker-engine),需先卸载,避免冲突: sudo apt-get remove docker docker-engine docker.io containerd runc 即使从未安装过,执行此命令也不会报错,可放心操作。 三、核心步骤:Ubuntu上安装Docker 按照“配置仓库→安装依赖→安装Docker”的顺序操作,全程通过官方源安装,确保安全性和稳定性。 1. 安装必要的依赖工具 首先安装apt-transport-https、ca-certificates等工具,这些工具用于支持HTTPS协议的仓库访问和GPG密钥验证: sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common apt-transport-https:允许apt通过HTTPS访问仓库; ca-certificates:用于验证HTTPS证书,确保仓库来源可靠; curl:用于下载Docker官方GPG密钥。 2. 添加Docker官方GPG密钥 为了确保后续安装的Docker包是官方发布的(避免篡改),需要添加Docker的官方GPG密钥并验证: # 下载官方GPG密钥并添加到系统信任列表 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 验证密钥(可选,确保密钥正确) sudo gpg --no-default-keyring --keyring /usr/share/keyrings/docker-archive-keyring.gpg --list-keys 若验证时输出包含“Docker Release (CE deb) docker@docker.com”,说明密钥正确。 3. 配置Docker官方仓库 将Docker官方仓库添加到Ubuntu的apt源列表中,后续安装Docker时会从官方源下载,而非Ubuntu默认的第三方源: echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $(dpkg --print-architecture):自动识别系统架构(如amd64、arm64); $(lsb_release -cs):自动获取Ubuntu的版本代号(如20.04对应focal,22.04对应jammy)。 4. 安装Docker Engine 配置完仓库后,即可安装最新版的Docker Engine(包含docker-ce、docker-ce-cli、containerd.io): # 更新apt源列表(让系统识别新添加的Docker仓库) sudo apt-get update # 安装Docker Engine sudo apt-get install -y docker-ce docker-ce-cli containerd.io 5. 验证安装是否成功 安装完成后,通过启动Docker服务并运行hello-world容器,验证Docker是否正常工作: # 启动Docker服务(Ubuntu 20.04+/22.04默认使用systemd) sudo systemctl start docker # 设置Docker开机自启(避免每次重启系统后手动启动) sudo systemctl enable docker # 运行hello-world容器,测试Docker功能 sudo docker run hello-world 若输出包含“Hello from Docker!”的欢迎信息,说明Docker已成功安装并能正常运行。 四、关键配置:让Docker用起来更顺手 基础安装完成后,还需要做一些优化配置,比如免sudo使用Docker、更换国内镜像源,避免后续使用中频繁踩坑。 1. 配置免sudo使用Docker(推荐) 默认情况下,每次执行docker命令都需要加sudo,频繁操作很繁琐。通过将当前用户加入docker用户组,可以实现免sudo使用Docker: # 将当前用户加入docker用户组 sudo usermod -aG docker $USER # 注销当前用户并重新登录(使配置生效) ⚠️ 注意:修改用户组后,必须注销当前会话(如关闭终端重开、重启系统),否则配置不会生效。 生效后,执行docker ps(无需sudo),若能正常显示容器列表(即使为空),说明配置成功。 我第一次配置时忘记注销,以为命令出错,后来才发现是用户组配置未生效,这个细节一定要注意。 2. 更换Docker国内镜像源(解决拉取慢问题) Docker默认使用国外的官方仓库(https://hub.docker.com/),国内访问时经常出现拉取镜像慢、超时的问题。通过配置国内镜像源(如阿里云、网易云),可以大幅提升拉取速度。 步骤如下: 创建Docker配置目录(若不存在): sudo mkdir -p /etc/docker 编写配置文件daemon.json: sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", # 中国科学技术大学镜像 "https://hub-mirror.c.163.com", # 网易云镜像 "https://cr.console.aliyun.com" # 阿里云镜像(需登录阿里云获取专属地址,更稳定) ] } EOF ⚠️ 阿里云镜像建议使用专属地址:登录阿里云控制台(https://cr.console.aliyun.com/),在“镜像加速器”中获取自己的专属地址,替换上述配置中的阿里云地址,速度更快且更稳定。 重启Docker服务,使配置生效: sudo systemctl daemon-reload sudo systemctl restart docker 验证镜像源是否生效: docker info 若输出中“Registry Mirrors”字段包含刚才配置的国内地址,说明配置成功。 3. 检查Docker服务状态(日常维护) 后续使用中,若遇到Docker无法启动的问题,可通过以下命令检查服务状态: # 查看Docker服务状态 sudo systemctl status docker # 若服务异常,重启Docker sudo systemctl restart docker # 查看Docker日志(排查故障) sudo journalctl -u docker -f 五、常见问题:安装与使用中的坑及解决方法 在配置过程中,可能会遇到各种小问题,这里总结几个我踩过的坑及解决方案。 1. 安装时提示“无法定位包docker-ce” 原因:Docker仓库配置错误,导致apt无法找到docker-ce包。 解决方案: 检查/etc/apt/sources.list.d/docker.list文件是否正确:cat /etc/apt/sources.list.d/docker.list 确保内容包含“https://download.docker.com/linux/ubuntu”和正确的版本代号(如focal、jammy)。 重新执行“添加GPG密钥”和“配置仓库”的步骤,确保命令没有拼写错误。 再次更新apt源列表:sudo apt-get update 2. 运行docker run hello-world时提示“permission denied” 原因:当前用户未加入docker用户组,无权限操作Docker。 解决方案: 重新执行“配置免sudo使用Docker”的步骤,确保用户已加入docker组:groups $USER # 查看当前用户所属组,若包含docker则说明已加入 注销当前用户并重新登录,使用户组配置生效。 3. 拉取镜像时出现“timeout”或“no such host” 原因:国外镜像源访问不畅,或国内镜像源配置错误。 解决方案: 检查网络连接是否正常(如ping baidu.com)。 重新配置国内镜像源,确保daemon.json中的地址正确(尤其是阿里云专属地址)。 重启Docker服务:sudo systemctl restart docker 尝试手动指定镜像源拉取(临时方案):# 以拉取nginx为例,指定阿里云镜像源 docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx 4. Docker服务无法启动,提示“failed to start docker.service: Unit docker.service is masked” 原因:Docker服务被“屏蔽”(masked),通常是误操作导致。 解决方案: 解除服务屏蔽:sudo systemctl unmask docker.service sudo systemctl unmask docker.socket 重启Docker服务:sudo systemctl start docker 六、总结:Ubuntu配置Docker的完整流程回顾 将整个配置过程梳理为“5步核心流程”,方便后续查阅或重新配置: 前置检查:确认Ubuntu版本(20.04+/22.04 LTS)、sudo权限,卸载旧版Docker; 安装依赖:sudo apt-get install apt-transport-https ca-certificates curl software-properties-common; 配置仓库:添加Docker官方GPG密钥→配置官方仓库→更新apt源; 安装Docker:sudo apt-get install docker-ce docker-ce-cli containerd.io→启动服务并设为开机自启; 优化配置:将用户加入docker组(免sudo)→配置国内镜像源→验证生效。 按照这个流程操作,在Ubuntu上配置Docker通常能一次成功。后续使用中,若遇到问题,可通过docker info、systemctl status docker、journalctl -u docker等命令排查,大部分问题都能快速解决。
  • npm如何切换源以及推荐可用源

    教程与经验
    1
    0 赞同
    1 评论
    3 浏览
    kmyK
    目录一、npm源到底是什么?1. 源(Registry)—— npm的"软件仓库"2. 为什么需要切换源?二、npm切换源的常用方法1. 临时切换——单次安装时指定源2. 全局切换——修改默认源3. 使用nrm工具——源管理神器三、推荐可用的npm源1. 官方源——最权威但国内访问慢2. 淘宝npm镜像——国内最常用3. 腾讯云npm镜像——稳定的备选4. 华为云npm镜像——企业级选择5. cnpm源——专为cnpm工具设计四、实际应用:我在工作中怎么管理npm源?1. 日常开发配置2. 发布包时的配置3. 解决特殊问题时的技巧4. 项目级别的源配置 一、npm源到底是什么? 1. 源(Registry)—— npm的"软件仓库" 在我看来,npm源就像是一个存放各种JavaScript包的"超级仓库"。当我们执行npm install命令时,npm会从这个仓库里下载需要的包到本地项目中。 简单来说,源就是一个URL地址,指向存储着海量npm包的服务器。默认情况下,npm使用的是官方源https://registry.npmjs.org/,这个服务器位于国外,所以在国内访问时经常会遇到速度慢、连接超时等问题。 [示意1:npm安装包的流程] 执行 npm install 包名 ↓ npm 向配置的源(Registry)发送请求 ↓ 源服务器返回对应的包文件 ↓ npm 将包下载到本地 node_modules 目录 ↓ 更新 package.json 和 package-lock.json 比如我第一次用npm安装React时,执行npm install react,npm就会从官方源下载React相关的包。但因为网络原因,有时候要等很久,甚至失败,这时候就需要切换到国内的源来解决问题。 2. 为什么需要切换源? 最主要的原因就是速度。由于网络环境的差异,国内用户访问国外的官方源常常速度很慢,甚至出现超时错误。 还有一个原因是稳定性。某些地区可能会因为网络波动导致无法稳定访问官方源,这时候切换到一个稳定的国内源就能解决问题。 我曾经开发一个项目时,连续三次执行npm install都失败了,错误信息显示"ETIMEDOUT"(连接超时)。后来切换到国内源后,瞬间就安装完成了,效率提升非常明显。 二、npm切换源的常用方法 1. 临时切换——单次安装时指定源 如果只是偶尔需要从其他源安装某个包,可以在安装命令中直接指定源,不会影响全局配置。 命令格式: npm install <包名> --registry=<源地址> 使用示例: # 从淘宝镜像安装Vue npm install vue --registry=https://registry.npmmirror.com 这种方式适合临时需要安装某个包,又不想修改全局配置的场景。比如我有时候需要测试某个包在不同源上的版本差异,就会用这种方法。 2. 全局切换——修改默认源 如果希望长期使用某个源,可以修改npm的全局配置,这样每次执行npm命令都会默认使用这个源。 设置新的默认源: npm config set registry <源地址> 示例: # 设置淘宝镜像为默认源 npm config set registry https://registry.npmmirror.com 查看当前使用的源: npm config get registry 执行后会显示当前源的URL,比如https://registry.npmmirror.com/ 恢复官方源: npm config set registry https://registry.npmjs.org/ 我在自己的开发电脑上就全局设置了国内源,这样日常开发时就不用每次都指定源了,省了很多麻烦。 3. 使用nrm工具——源管理神器 nrm(npm registry manager)是一个专门用于管理npm源的工具,可以快速切换不同的源。 安装nrm: npm install -g nrm 查看可用源列表: nrm ls 执行后会显示类似下面的列表,带*号的是当前正在使用的源: npm ---------- https://registry.npmjs.org/ yarn --------- https://registry.yarnpkg.com/ tencent ------ https://mirrors.cloud.tencent.com/npm/ cnpm --------- https://r.cnpmjs.org/ taobao ------- https://registry.npmmirror.com/ npmMirror ---- https://skimdb.npmjs.com/registry/ 切换源: nrm use <源名称> 示例: # 切换到淘宝源 nrm use taobao 测试各源速度: nrm test 这个命令会测试当前列表中所有源的响应速度,方便我们选择最快的源。比如我执行后发现某个源的响应时间是50ms,而其他源是200ms以上,那我就会选择这个响应快的源。 我在多个项目间切换时,经常用nrm来快速切换不同的源,非常方便。 三、推荐可用的npm源 1. 官方源——最权威但国内访问慢 地址:https://registry.npmjs.org/ 特点:包含所有npm包,更新最及时,但国内访问速度慢 适用场景:发布npm包(必须使用官方源)、需要最新版本包的场景 我每次发布自己开发的npm包时,都会先切换回官方源,因为只有官方源才能发布包。 2. 淘宝npm镜像——国内最常用 地址:https://registry.npmmirror.com/(旧地址https://registry.npm.taobao.org已更换) 特点:每10分钟同步一次官方源,国内访问速度快,稳定性好 适用场景:国内日常开发,大部分项目都可以使用 这是我最常用的源,无论是个人项目还是公司项目,用这个源都能满足需求,速度也比较稳定。 3. 腾讯云npm镜像——稳定的备选 地址:https://mirrors.cloud.tencent.com/npm/ 特点:腾讯云提供的镜像服务,速度和稳定性都不错 适用场景:淘宝源偶尔抽风时的备选 有一次淘宝源临时出现问题,我就切换到了腾讯云的源,同样可以正常工作,是个不错的备选方案。 4. 华为云npm镜像——企业级选择 地址:https://mirrors.huaweicloud.com/repository/npm/ 特点:华为云提供的镜像服务,适合企业用户 适用场景:使用华为云服务的企业项目 我之前参与的一个企业项目,因为整个基础设施都在华为云,所以npm源也统一使用了华为云的镜像,和整体环境更匹配。 5. cnpm源——专为cnpm工具设计 地址:https://r.cnpmjs.org/ 特点:由cnpm团队维护,与cnpm工具配合使用效果好 适用场景:使用cnpm命令时 如果平时习惯用cnpm install命令,那么这个源会是比较好的选择。 四、实际应用:我在工作中怎么管理npm源? 1. 日常开发配置 在日常开发中,我会把默认源设置为淘宝镜像,因为速度快且稳定: npm config set registry https://registry.npmmirror.com 然后安装nrm工具,方便随时切换和测试: npm install -g nrm 每周我会执行一次nrm test,看看哪个源速度最快,根据结果调整当前使用的源。 2. 发布包时的配置 当需要发布自己开发的npm包时,我会先切换回官方源: nrm use npm # 或者 npm config set registry https://registry.npmjs.org/ 发布完成后,再切换回国内源: nrm use taobao 这样既保证了发布的顺利进行,又不影响后续的开发工作。 3. 解决特殊问题时的技巧 有一次,我安装某个包时,发现国内源还没有同步最新版本,这时候我就用临时指定源的方式从官方源安装: npm install some-package@latest --registry=https://registry.npmjs.org/ 还有一次,团队中有人反映安装依赖总是失败,我让他执行nrm test,发现他当前使用的源响应时间特别长,切换到响应快的源后问题就解决了。 4. 项目级别的源配置 对于一些特殊项目,我会在项目根目录下创建.npmrc文件,指定该项目专用的源: # .npmrc文件内容 registry=https://registry.npmmirror.com 这样,即使全局配置了其他源,这个项目在安装依赖时也会使用.npmrc中指定的源,实现了项目级别的源隔离。 通过合理管理npm源,可以大幅提升依赖安装速度,减少开发过程中的网络问题,让我们的工作更高效。
  • 详细介绍npm、npx、pnpm、cnpm和yarn

    记录与分享
    3
    0 赞同
    3 评论
    8 浏览
    小黑
    @十二 闭嘴,我从我博客复制粘贴的(虽然也是AI处理过的),不算水
  • localhost和127.0.0.1到底啥区别

    记录与分享
    2
    0 赞同
    2 评论
    13 浏览
    十二
    欢迎小黑哥哥
  • 你们内网穿透都用啥啊

    已解决 提问与解答
    8
    0 赞同
    8 评论
    19 浏览
    豆浆加辣
    不考虑ngrok吗,也还行
  • 信息内容规范

    已固定 公告 官方公告
    1
    1 赞同
    1 评论
    12 浏览
    星态思
    您评论、发布、传播的内容应自觉遵守宪法法律、法规、遵守公共秩序,尊重社会公德、社会主义制度、国家利益、公民合法权益、道德风尚和信息真实性等要求。您同意并承诺不制作、复制、发布、传播法律、法规禁止的下列信息内容,不得自行或允许、协助任何人利用“星态思”及其相关服务从事下述行为: (1)反对宪法确定的基本原则的; (2)危害国家安全,泄露国家秘密的; (3)颠覆国家政权,推翻社会主义制度、煽动分裂国家、破坏国家统一的; (4)损害国家荣誉和利益的; (5)宣扬恐怖主义、极端主义的; (6)宣扬民族仇恨、民族歧视,破坏民族团结的; (7)煽动地域歧视、地域仇恨的; (8)破坏国家宗教政策,宣扬邪教和迷信的; (9)编造、散布谣言、虚假信息,扰乱经济秩序和社会秩序、破坏社会稳定的; (10)散布、传播暴力、淫秽、色情、赌博、凶杀、恐怖或者教唆犯罪的; (11)侵害未成年人合法权益或者损害未成年人身心健康的; (12)未获他人允许,偷拍、偷录他人,侵害他人合法权利的; (13)包含恐怖、暴力血腥、高危险性、危害表演者自身或他人身心健康内容的; (14)危害网络安全、利用网络从事危害国家安全、荣誉和利益的; (15)侮辱或者诽谤他人,侵害他人合法权益的; (16)对他人进行暴力恐吓、威胁,实施人肉搜索的; (17)涉及他人隐私、个人信息或资料的; (18)散布污言秽语,损害社会公序良俗的; (19)违反商业道德、侵害商业秘密、侵犯他人隐私权、名誉权、肖像权、知识产权等合法权益内容的; (20)散布商业广告,或类似的商业招揽信息、过度营销信息及垃圾信息; (21)使用本网站常用语言文字以外的其他语言文字评论的; (22)与所评论的信息毫无关系的; (23)所发表的信息毫无意义的,或刻意使用字符组合以逃避技术审核的; (24)涉及他人隐私、个人信息或资料的,例如,非法收集或披露个人身份信息或教育、财务或其他受保护的记录,例如地址、电话号码、电子邮件地址、个人身份证明文件中的号码和特征(例如,社会保险号码、护照号码、身份证号码)或信用卡号码; (25)其他违反法律法规、政策及公序良俗、干扰“星态思”正常运营或侵犯其他用户或第三方合法权益内容的其他信息。 涉及以上内容会被禁止发布,如有以上行为,请点击举报或致信jubao@xintest.cn,我们将第一时间处理! 详细细则请阅读:用户协议 感谢您的支持
  • 【WAF】SafeLine - 雷池 - 不让黑客越过半步

    Web应用 waf
    1
    1
    0 赞同
    1 评论
    14 浏览
    十二
    目录简介官方介绍免费安装自动安装 简介 官网:SafeLine - 雷池 - 不让黑客越过半步 演示环境:商业版演示 可以直接用来当反代,也建议是使用反代,条件允许的情况下,不要把雷池直接部署到项目所在的服务器上,WAF所在的服务器应该是独立的。 架构:互联网(Internet)→ 公网边界防护设备(部署 “雷池” Web 应用防火墙 / WAF)→ 业务服务器集群 / 内网服务器(通过内网穿透技术实现公网可访问) 官方介绍 SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注入、命令注入、CRLF 注入、ldap 注入、xpath 注入、RCE、XXE、SSRF、路径遍历、后门、暴力破解、CC、爬虫 等攻击。 工作原理: [image: 1759029287792-how-it-works.png] 免费安装 自动安装 一键安装:3 分钟即可完成自动安装。 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)" 雷池安装成功以后,你可以打开浏览器访问 https://<safeline-ip>:9443/ 来使用雷池控制台。 更多详细介绍及官方安装文档请前往雷池 WAF 帮助文档
  • 0 赞同
    3 评论
    24 浏览
    豆浆加辣
    @kmy 支持<style>标签的,你可以参考一下 在 Vanilla Back To Top,微小简单的返回顶部按钮插件 中说: (文本按钮) 的<style>标签配置来设置一下。 如果是被其他元素遮挡,用 zIndex: 9999; /* 显示在最顶层 */ 如果是想通过移动位置避免被遮挡,用 right: 90px !important; /* 数值越大离右边越远 */ 要加 !important 的,要覆盖掉默认的样式才可以,希望对您有帮助
  • 一句命令,从Win11 恢复Win10右键传统菜单

    系统与软件 windows
    1
    2
    0 赞同
    1 评论
    8 浏览
    豆浆加辣
    右击左下角的徽标,在弹出菜单中选择 终端管理员 [image: 1758972409347-%C3%A5-%C3%A5-%C3%A6-%C2%AA%C3%A5-2025-09-27-192401.png] 复制粘贴如下命令,回车即可完成设置。(请注意,此操作将强制重启资源管理器!) reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f taskkill /F /IM explorer.exe explorer.exe [image: 1758972620157-ea15c2ec10f9f56a.webp] 注意事项:有概率需要回车两次,如果发现资源管理器关闭之后没有自动重启就再回车一次即可。
  • Ubuntu Server 20.04.6 安装与配置教程

    已移动 系统与软件 linux ubuntu
    3
    17
    1 赞同
    3 评论
    39 浏览
    小新
    @十二 我也是等了好久就这样重启了,目前使用一切正常

热门标签