Linux用户与组管理实战:从配置文件到权限联动全解析
做Linux运维这些年Linux用户与组管理是让我觉得最基础、也最容易被忽视的一块。很多新手一上来就折腾各种服务部署等碰到权限报错、用户冲突、文件归属混乱时才发现当初没把这套体系吃透。这篇文章不打算讲虚的就当作一次完整的实操复盘从用户和组的核心概念出发逐个拆解配置文件、管理命令、权限联动最后把我在真实环境里踩过的坑一并整理出来。无论你是刚入行的运维新人、正在写自动化脚本的开发者还是自学Linux的爱好者这套内容都能直接用到工作中。1. 权限体系的地基用户和组到底在管什么1.1 用户与组权限分配的基石Linux天生就是多用户操作系统。同一台机器上可以同时存在多个账号不同账号拥有不同的权限边界。用户和组正是这套权限体系中两个最基本单位文件、进程、设备、网络端口所有资源的访问控制都围绕它们展开。内核真正关心的不是用户名而是UID和GID。UID是用户的唯一数字编号GID是组的唯一数字编号。可以类比为公司人事系统里的工号姓名可能重复工号一定唯一。每次运行程序或读写文件内核都会提取当前进程关联的UID/GID比对目标文件上记录的属主、属组和权限位最终决定放行还是拒绝。再打一个生活化的比方用户是你自己的身份证明组相当于你所加入的项目团队。文件上写明了这个团队的人可以看其他人不能动系统就按这套规则放行。这套机制在校验时非常高效系统不需要挨个检查人的姓名只需要做三个数字层面的判断进程的UID是否等于文件属主UID、进程的GID或附加组列表是否覆盖文件属组GID、其他用户权限位是否放行。命中任意一条就返回对应权限。这也是为什么新加入一个组后往往需要重新登录因为会话进程里的附加组列表不会自动刷新权限变化总比你预期慢半拍。1.2 三类用户和两种组形态按职责划分Linux用户分三类。root超级用户的UID固定为0拥有系统最高权限日常操作不应直接使用系统用户的UID通常在1-999范围是安装软件包或运行服务时自动创建的运行账号它们通常不能登录普通用户的UID从1000开始日常登录、开发和运维操作都发生在这些账号下。把这个范围记牢判断一个账号的用途会快很多排查问题时也更容易定位异常。组分成基本组和附加组两种形态。基本组在创建用户时自动生成一般和用户名同名用户记录里的GID字段指向的就是它附加组用于让一个用户同时加入多个权限集合。比如某运维同事既要访问业务系统的共享目录又需要参与备份任务就把他的账号加入两个附加组再配合后面要讲的权限设置就完成了资源授权。这种设计比单独给每个人开权限灵活得多人员变动时只需要调整组成员关系不用逐个改文件权限。| 用户类型 | UID范围 | 典型用途 | | root超级用户 | 0 | 系统最高权限管理 | | 系统用户 | 1-999 | 服务运行、守护进程专用 | | 普通用户 | 1000-60000 | 登录、开发、日常业务操作 |2. 四个配置文件才是底层真相2.1 /etc/passwd 到 /etc/gshadow逐一拆解很多人习惯用命令管理用户却不看底层文件一旦遇到异常排错就无从下手。Linux把用户和组的信息记录在四个核心文件里/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow。命令只是操作这些文件的入口文件才是底层真相理解它们之后许多莫名其妙的权限问题都能自己解释通。/etc/passwd记录用户基础信息每行七个字段用冒号隔开。依次是用户名、密码占位符、UID、基本组GID、注释信息、家目录路径、登录Shell。第七个字段很关键如果写成/sbin/nologin用户不能交互登录如果写成/bin/bash拥有密码就能正常登录。系统账号往往把这一栏设为nologin这是减少攻击面的常用做法。查看任意一个用户的完整记录grep用户名 /etc/passwd就能看到全部字段。/etc/shadow存放密码哈希和密码策略每行九个字段普通用户不可读。密码单独拆出来是有历史原因的早年Unix把密码哈希直接放在passwd里任何能读取passwd文件的人都可能拿到哈希做离线破解所以后来单独拆出shadow并限制读取权限。现在的passwd里用x占位就是告诉系统真实密码去shadow里找。这样做之后普通用户即使看到passwd文件也拿不到任何可用的密码信息。/etc/group每行四个字段组名、组密码占位符、GID、成员列表。注意成员列表只记录额外加入该组的用户基本组是它的用户不会出现在这个列表里。判断某用户是不是某组的附加成员直接看group文件最后一列要看得更清楚用getent group 组名查询。最后一个文件是/etc/gshadow存放组的加密密码和组管理员信息日常用得少但修改组成员时它会被同步写入权限同样严格。2.2 手工编辑配置能做但有底线既然这些文件是底层真相不少老手会直接vim改配置。我不否认手工修改有效但它有明确风险只有满足条件才推荐。第一改动范围确实小第二动手前备份文件第三改完立刻做一致性检查。如果盲目改动漏掉一个分隔符或写坏shadow里的哈希账号锁死、无法登录是小事严重时所有账号都认证失败那基本等于把自己关在门外。更稳妥的入口是用vipw和vigr。vipw负责编辑passwdvigr负责编辑group它们会自动加锁防止多人同时修改导致写入冲突保存后还会提示执行pwck做校验。这里有个常见的误解以为vipw只是vim的别名其实它真正的价值在于文件锁和校验联动。我对新人的建议很直接能用命令完成的就不要碰配置文件确需手工改先复制一份带日期后缀的备份再动编辑器。pwck和grpck这两个校验工具值得记住它们能发现字段数量错误、重复UID这类低级问题。比如某次要调整一个账号的登录Shell我只会精确修改第七列保存后立刻跑一遍pwck确认无异常再让用户测试登录整个过程几分钟内搞定。3. 用户管理的完整实操useradd、usermod、userdel 一次讲透3.1 创建用户useradd 的参数选择与场景示例useradd是创建用户的核心命令。很多教程只让你跑一条useradd用户名这在真实环境里根本不够。举例来说某项目需要一个deploy账号专门跑发布脚本要求它有独立家目录、登录Shell为bash、归属于deploy组并加入ops附加组。我实际会这样执行useradd -m -d /home/deploy -s /bin/bash -c deployment account -G ops deploy这里每个参数都有明确用途-m让家目录不存在时自动创建-d指定家目录路径-s指定登录Shell-c写注释说明账号用途-G指定附加组多个组用逗号分隔。若需要固定UID比如跟另一台机器上的已有账号保持一致再加-u指定编号。不加-u时系统会从/etc/login.defs的UID_MIN开始分配一个当前未被占用的编号自动分配的逻辑是找最小的可用值所以历史上删除过的用户UID可能被新用户复用这一点后面还会展开讲。关于Shell的选择有经验的运维通常遵循最小权限原则不确定账号是否需要交互登录就先给/sbin/nologin等确认有真实需求再改成/bin/bash。运行服务用的账号一律不给Shell这样即使密码意外泄露攻击者也无法直接通过ssh登录。这个习惯帮我减少过很多潜在风险。需要交互操作的账号建议登录后马上用sudo -l检查授权范围避免一个普通账号拥有过宽的sudo权限。3.2 修改和删除用户usermod 与 userdel 的坑用户创建后要调整信息靠usermod。改登录名用usermod -l新名旧名改Shell用usermod -s /bin/bash用户名锁定账号用usermod -L用户名解锁用usermod -U用户名。锁定操作实际是在shadow文件密码哈希前加一个感叹号使现有密码无法匹配但不等同于清空密码所以解锁后原密码仍然有效。这个细节排查时很有用可以区分密码错误和账号被锁两种情况。最容易被坑的是-G参数的覆盖行为。usermod -G ops deploy会清掉该用户现有的全部附加组只保留ops如果只想追加必须写成usermod -aG ops deploy。我见过不少同事因为漏写-a把用户从多个附属组里全部踢出随后业务立即报权限错误排查了半天才反应过来是这里的问题。所以每次执行带-G的操作前我会先执行groups用户名看一眼当前组改完再执行一次确认结果养成这个习惯能少交很多学费。删除用户用userdel不加参数只删账号记录保留家目录和邮件池加上-r会把家目录和邮件池一并清理。真正动手前先确认该用户没有正在运行的进程用pgrep -u用户名查询。若有进程仍在运行直接删账号会导致运行中的程序归属混乱文件属性显示成数字UID后续排查会非常被动。另外删除用户前最好确认系统中没有以该用户为属主的重要文件用find / -user用户名 -type f列出来评估一下代价不大但对数据安全很有帮助。3.3 密码和策略passwd、chpasswd 与 chage 的配合创建用户后系统不会自动生成密码必须由root执行passwd用户名来设置。passwd本身会要求输入两次并校验强度普通用户直接执行passwd只能改自己的密码admin指定用户名才能改别人的。在自动化脚本里要批量设置密码更高效的工具是chpasswd它支持一行一条用户名:密码格式输入可以配合循环完成批量初始化。这里提醒一句写进脚本里的初始密码不要放在明文脚本中暴露太久生产环境建议把脚本权限设为700或通过密钥注入方式管理密码。密码策略的精细化调整用chage。常见组合包括chage -M 90 user让密码最长使用90天chage -m 1 user让两次修改密码之间至少间隔1天chage -W 7 user在过期前7天提醒chage -E某日期 user设置账号到期时间chage -l user查看完整策略。临时禁止登录除了usermod -L也可以chage -E 0让账号立即失效。锁定和过期是两个概念锁定是密码暂时不能通过认证过期是这个账号在某个时间点之后彻底不可用按场景选择即可。4. 组管理实操groupadd、gpasswd 与成员关系维护4.1 创建、修改与删除组组管理命令相对少但同样有细节。创建组用groupadd基础写法是groupadd ops要指定GID用groupadd -g 1500 ops需要系统组时用groupadd -r ops系统组GID会自动落在系统范围内。改组名用groupmod -n new_ops ops。这里有个容易被忽略的点组名变了GID不变文件系统里记录的属组数字依然有效已存在的文件、目录在展示时会自动关联到新组名并不需要额外调整属组。删除组用groupdel最大限制是若某个用户的基本组仍指向这个组删除会失败必须先修改该用户的基本组或删除该用户。例如用户test的基本组是test直接groupdel test会报错因为还有用户以test作为基本组。日常管理中想让组长期存在就要避免把用户的基本组随意改动否则后续清理组的成本会成倍增加。如果确实要清理我习惯先跑getent group和awk从passwd里筛出所有以该组为基本组的用户再逐个处理不遗漏。4.2 用 gpasswd 维护附加组成员维护组成员关系最常用的是gpasswd。gpasswd -a 用户名 组名将用户加入组gpasswd -d 用户名 组名将用户移出组。和用户管理一样这些操作在group文件里实时生效但已登录的会话不会立即感知要等用户重新登录新的组成员关系才会被进程重新读取。经常有人在这里以为命令失效反复执行实际上只是session里缓存了旧权限可以先让用户重新登录验证不要急着改配置文件。gpasswd还有一个组密码功能可以让不属于该组的用户通过密码临时加入组并访问共享资源。但在现代安全要求下组密码既不好管理也难审计我一般建议彻底不用把组密码字段置为!。每次操作完用getent group 组名检查成员列表是最直接的验证方法。如果需要获取全部成员列表并结合基本组做完整统计就要额外写个小脚本基于passwd文件的数据合并判断单纯看group文件会漏掉以该组为基本组的用户。5. 权限联动用户和组如何影响实际访问5.1 文件属主、属组与权限位的对应关系用户和组管理不是孤立存在的最终都要落到文件权限上。ls -l看到的第一列比如-rw-r-----第一位表示文件类型后九位分成三组分别对应属主、属组、其他用户的rwx权限。r读、w写、x执行数字上依次是4、2、1。目录的x权限比较特殊它表示能否进入目录读权限只决定能否列出目录内容。很多新手给目录配了r和w却漏掉x结果目录能看不能进权限合法性校验时也会出现奇怪表现比如ls能列出内容但打开文件时报无权限。团队协作的项目目录通常这样设计目录属组设为团队对应的组组内成员rwx其他用户不可见。用chown -R 用户:组 目录设置归属用chmod 770目录直接锁死其他用户入口。如果需要项目成员动态更替只需调整组成员关系不需要改动文件本身的权限位这正是组管理的价值所在权限和人员解耦人员离职加新人时操作成本最低。当然接手别人的系统时先用ls -l摸清现状别一上来就chmod -R 777这种偷懒做法在商业环境里会留下一堆隐患。5.2 特殊权限位、ACL 与 umask普通rwx之外还有三个特殊权限位值得认真理解。SUID数字为4用在可执行文件上让执行该文件的进程临时获得文件属主身份。典型例子是/usr/bin/passwd普通用户执行它时进程可以临时以root身份修改shadow文件所以普通用户才能更新自己的密码。SGID数字为2放在目录上时新创建的文件会自动继承目录的属组这个特性对团队共享目录很实用再配合组写权限就能实现新成员加入后自动获得写入资格。Sticky数字为1放在目录上表示只有文件属主、目录属主或root才能删除该目录下的文件/tmp目录常见的1777权限就是靠sticky位防止用户互删临时文件。ACL是更细粒度的扩展方案。默认的属主、属组、其他三级模型没法表达给某个特定用户开读写、但其他人保持只读这类需求setfacl就可以直接指定setfacl -m u:某账户:rwx /data/shared查询用getfacl /data/shared。设置了ACL之后ls -l第一列末尾会多一个加号。还有一个容易踩的坑用tar备份ACL时必须加--acls参数否则恢复后ACL信息全部丢失。如果涉及大量ACL规则建议把setfacl的规则整理成脚本统一执行方便回滚。再说说umask。它决定新建文件和目录的默认权限文件默认666、目录默认777再去掉umask对应的位。常见发行版默认0022对应文件644、目录755。多人协作环境我常把umask改成002这样新文件自动变成664、目录变成775配合SGID目录能省掉大量手工chmod操作。改umask的位置看需求/etc/profile影响所有用户~/.bashrc影响单个用户服务进程则要写在启动脚本里别指望用户环境配置文件能生效。6. 高频故障与避坑心得运维排障实录6.1 高频问题速查表把真实环境里反复出现的问题整理成一张速查表排查时对照先做判断| 现象 | 大概率原因 | 快速处理 | | 用户无法登录 | 密码过期或账号锁定 | passwd重置或usermod -U解锁 | | 登录后Shell异常 | 登录Shell被设为nologin | usermod -s /bin/bash 用户名 | | 组删不掉 | 该组还是某用户的基本组 | 先修改用户基本组再groupdel | | 删除用户后文件显示数字 | 文件属主已被删除 | find按UID搜索再chown给新用户 | | root也删不掉文件 | 目录无写权限或受sticky保护 | 检查目录写权限与sticky位 | | 用户没有sudo权限 | 不在sudo附加组 | usermod -aG sudo 用户名 | | 新文件权限总不对 | umask或SGID未设置 | 改成002目录加SGID |这张表不能覆盖全部场景但按它先排查能省下很多时间。用户真正无法登录时我通常先看认证日志从里面定位是密码错误账号被锁还是Shell不对再对症处理比盲目重置密码可靠得多。日志位置不同发行版有差异主流发行版一般是/var/log/auth.log或journalctl -u ssh配合时间戳能还原出完整的登录尝试过程。6.2 管理员避坑心得最后几条避坑心得都是反复实践换来的教训。第一不要在同一个时段既用命令又手工改配置文件两边的状态可能不一致改乱之后很难定位集中用一类方式操作。第二任何涉及passwd、group、shadow等文件的操作之前先备份我习惯写成cp /etc/passwd /etc/passwd.bak.$(date %F)其他文件同理耗时不到一秒出问题时却是救命稻草。第三UID和GID不要随意复用。删除用户后马上创建新用户系统可能把刚释放的UID分给新账号新账号会继承旧账号遗留文件的归属权限边界直接变得模糊。更稳妥的做法是建立一个简单的UID分配记录手动指定未用过的编号或者在复用前先批量chown旧文件。批量开户场景千万不要一条条敲命令。先准备一个csv文件包含用户名、UID、基本组、附加组、注释再用循环脚本调用useradd、gpasswd、chage。脚本里必须加两个判断用户是否已存在、组是否已存在存在就跳过并输出提示。这样脚本反复执行也不会破坏已有数据更适合纳入自动化流程。脚本写好先在小范围跑一遍确认输出无误再全量执行不要一上来就面向几百个账号盲操作。这整套用户与组管理我在真实环境里反复用了很多年踩过的坑比很多教程写到的都多。如果只留一句忠告那就是先把底层配置文件读透再动手干别的。命令记不住反倒没那么要紧man手册和--help随时能查但字段含义、UID/GID分配逻辑、权限位映射一旦理解了大部分故障都能自主定位。平时不妨在自己的测试机上故意制造几个问题例如把passwd字段删掉一个、把账号锁住、把目录权限改成000再尝试一步步恢复。这个过程对提升排障手感特别有帮助。希望这篇实践向的整理能让你在维护Linux系统的路上踏实一些。

相关新闻

卡牌随机生成方案:加权随机算法与词缀池设计实战(含Java示例)

卡牌随机生成方案:加权随机算法与词缀池设计实战(含Java示例)

最近在做一个卡牌玩法原型时,遇到一个挺有意思的需求:能不能让卡牌真正意义上“全部随机生成”,而不是靠策划手动一张张配数值?于是我把整套逻辑拆成了卡牌词缀池、随机算法、稀有度权重、生成校验四层结构来设计。本文整理了一套…

2026/10/16 6:48:57 阅读更多 →
ok-ww 完整鸣潮后台自动化指南:从环境自检到一键日常

ok-ww 完整鸣潮后台自动化指南:从环境自检到一键日常

ok-ww 完整鸣潮后台自动化指南:从环境自检到一键日常 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves ok-ww 是一款鸣潮…

2026/10/16 6:48:57 阅读更多 →
Kafka集群高可用全解析:副本、ISR、选举与运维实践

Kafka集群高可用全解析:副本、ISR、选举与运维实践

Kafka集群高可用这件事,很多人的理解停留在“多副本”三个字上。但真正把集群丢到生产环境,面对机房断电、节点宕机、磁盘损坏、网络抖动这些场景,你才会发现高可用是一整套机制在协同工作:副本怎么同步、ISR怎么收缩、Leader怎么…

2026/10/16 6:48:57 阅读更多 →

最新新闻

安卓模拟器抓包环境搭建:HTTPS证书与代理配置全攻略

安卓模拟器抓包环境搭建:HTTPS证书与代理配置全攻略

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

2026/10/16 7:35:10 阅读更多 →
本地开源AI 3D模型闭合网格修复与游戏资产转换工作流

本地开源AI 3D模型闭合网格修复与游戏资产转换工作流

1. 项目概述:为什么“能用了”这三个字值得单独强调?“3D AI模型终于能用了!”——这句话不是营销话术,而是过去半年里我反复在本地工作站上敲下回车键后,真实发出的感叹。它背后藏着一个被严重低估的现实:…

2026/10/16 7:35:10 阅读更多 →
Android手机SLAM数据集采集:Camera2与IMU时间戳对齐实战

Android手机SLAM数据集采集:Camera2与IMU时间戳对齐实战

简介:VideoIMUCapture-Android 是一款面向 SLAM 与 Structure from Motion(SfM)研究者的 Android 数据采集工具,用于同步录制相机帧与 IMU 数据,为三维重建提供原始素材。应用以约 30Hz 采集视频帧、约 100Hz 采集惯性…

2026/10/16 7:35:10 阅读更多 →
QQ开放OpenClaw机器人创建通道:个人也能轻松拥有5个专属AI助手

QQ开放OpenClaw机器人创建通道:个人也能轻松拥有5个专属AI助手

最近看到“腾讯QQ开放OpenClaw机器人创建通道”这个消息,第一反应是:聊天机器人这事总算从“开发者专属”往“普通用户也能上手”迈了一大步。以前想在QQ里挂一个自动化机器人,要么自己写服务端代码折腾接口,要么只能在各种群里手…

2026/10/16 7:35:10 阅读更多 →
Linux loadavg全解:内核计算原理、高负载排查与容器陷阱

Linux loadavg全解:内核计算原理、高负载排查与容器陷阱

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

2026/10/16 7:35:10 阅读更多 →
airllm分层加载实战:8GB显存跑70B大模型推理

airllm分层加载实战:8GB显存跑70B大模型推理

1. 当大模型装不进显卡时,我在想什么第一次看到 airllm 这个项目名的时候,我正对着自己那台只有 8GB 显存的旧笔记本发愁。想跑一个 70B 参数级别的大语言模型,按常规思路算一下显存占用:光是模型权重以 FP16 精度加载&#xff0c…

2026/10/16 7:34:10 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →