news 2026/9/30 6:32:38

Linux面试题大全:覆盖命令、权限、进程、网络与Shell脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux面试题大全:覆盖命令、权限、进程、网络与Shell脚本

Linux面试题,经典Linux面试题,常见Linux面试题带答案

这段时间一直在帮团队做Linux方向的招聘,前前后后整理了几十份面试题,也实际面了不少候选人。每次面完我都会把问过的问题、踩过的坑、候选人的典型回答重新过一遍,慢慢就沉淀出一套"经典、常见、还带答案"的Linux面试题库。今天就把它们按知识模块整理出来,题目覆盖文件命令、用户权限、进程管理、网络排查、磁盘文件系统、Shell脚本这几个方向,基本是面试官最爱问、也是工作中最容易出实际问题的核心考点。

这篇文章适合正在准备Linux运维、SRE、后端开发、嵌入式Linux相关岗位面试的同学,也适合平时只会在界面上点点点、想系统补一下基础的人。我不会只给一句"答案是xxx",而是会把"面试官在考察什么"、"为什么这么答"、"实际工作里这是个什么场景"都讲清楚,争取让你看完之后不是背题,而是真正能把原理讲明白。

1. 基础命令类高频面试题

基础命令这部分几乎是所有Linux面试的暖场题,同时也是淘汰率最高的一个环节。很多候选人能背出grep、find、awk的语法,但一旦面试官把问题换成实际工作场景,比如"线上日志一直刷报错,你想统计每个小时报错多少次",不少人就会卡住。所以这部分的面试题看起来简单,背后考察的是你平时有没有真的在命令行里干过活。

1.1 文件查询与文本处理:面试中的必考题

面试题:如何在一个大日志文件里快速找到包含某些关键字的行,并统计出现次数?

这道题看似基础,答案一般都会说用grep,但真正拉开差距的地方在于:

# 基础查法 grep "ERROR" app.log # 带行号、忽略大小写 grep -n -i "error" app.log # 统计出现次数 grep -c "ERROR" app.log

这里有几个细节必须知道。grep -c统计的是"有多少行匹配",不是"有多少个匹配"。如果一行里出现了10次ERROR,grep -c只会记1行。真要统计出现的次数,得上grep -o:

grep -o "ERROR" app.log | wc -l

这个区别在面试里出现频率极高,我见过不少候选人就在这个地方栽跟头。实际应用里,排查线上问题时常常还要配合时间维度来统计,这就会用到更进阶一点的组合:

# 统计每个小时ERROR出现的次数 grep "ERROR" app.log | cut -d: -f1-2 | uniq -c

这里的思路是先把ERROR行筛出来,再用cut把小时字段截出来,最后用uniq -c去重计数。注意uniq只能处理相邻的重复行,所以前面必须先sort排序,或者在知道时间戳本身就有序的情况下直接用。很多面试官会追问"为什么我uniq -c统计出来的数是乱的",答案就在这里。

面试题:如何找到系统中大于100M的文件?

find / -type f -size +100M -exec ls -lh {} \;

考察点有两个。一个是find的-size语法,+100M表示大于100MB,-100M表示小于,精确大小不带符号。另一个是"为什么用-exec而不用管道",因为xargs在遇到文件名里包含空格或特殊字符时会出问题,-exec更加稳妥。实际生产环境里,磁盘告警时用这条命令能快速定位大文件。

1.2 管道与重定向:理解数据流的正确姿势

面试题:管道符"|"和重定向">"有什么区别?标准错误怎么单独输出到文件?

这道题考的是操作系统底层的数据流概念。管道是把前一个命令的标准输出作为后一个命令的标准输入,重定向是把命令的输出写到文件里或者从文件读入。更关键的是标准错误的重定向:

# 标准输出和标准错误分开存 some_command > output.log 2> error.log # 丢弃标准错误,只保留标准输出 some_command > output.log 2>/dev/null # 标准输出和错误全写进同一个文件 some_command > all.log 2>&1

这里必须彻底理解2>&1为什么要放在后面,而且2>&1和1>&2是不同的。2>&1是把标准错误重定向到"当前标准输出指向的地方",所以如果写成some_command 2>&1 > all.log,标准错误还是去了终端而不是文件。这个顺序问题非常经典,不少工作两三年的候选人都会回答错。

实际场景里还有个高频用法,就是nohup启动服务时把日志重定向:

nohup java -jar app.jar > /app/logs/run.log 2>&1 &

面试如果只到这一步,那还是基本功。对方接着追问的话,大概率会问管道和重定向组合的情况,比如把进程输出过滤之后写文件:

ps -ef | grep java | grep -v grep > java_process.txt

这里grep -v是排除,也是日常排查进程时必用的思路,因为直接ps | grep的时候会匹配到grep自己的进程,必须排除掉。

2. 用户权限与文件系统专题

用户和权限是Linux安全模型的核心,也是每个面试官必问的大模块。这个模块我最深的体会是:很多人会背chmod 777,但完全不知道为什么要这样设计,更不知道系统里那些默认权限是怎么设置的。面试时如果能把权限模型讲清楚,很容易和只会背命令的候选人拉开差距。

2.1 用户管理:新建用户到sudo授权的完整链路

面试题:如何新建一个用户并给它sudo权限?

实操步骤通常是这样的:

# 新建用户并创建家目录 useradd -m testuser # 设置密码 passwd testuser # 加入sudo组(Debian/Ubuntu系) usermod -aG sudo testuser # 或者加入wheel组(CentOS/RHEL系) usermod -aG wheel testuser

每一步都值得展开讲讲。useradd不带-m参数时,很多发行版默认不创建家目录,用户登录之后连home都没有,在/home下找不到自己的目录,就会一脸懵。passwd是单独一步,因为useradd本身不提供交互设置密码的能力,这是它和adduser(Debian系封装脚本)的显著区别。usermod里的-aG参数,-a是append追加,-G是附加组,如果漏了-a,这个用户的附加组会被整个覆盖掉,原来加过的组全没了,这是生产环境里发生过不少次的事故。

面试官还喜欢追问:"添加sudo权限除了加组还有没有别的办法?"答案是直接改sudoers文件:

# 推荐用visudo编辑,不要直接vi,保存时会检查语法 visudo # 然后添加一行 testuser ALL=(ALL) NOPASSWD:ALL

NOPASSWD表示执行sudo时不需要再输一次密码。实际部署脚本和自动化运维时,经常需要给某个用户免密sudo权限,这条配置就很有用。不过安全起见,尽量把权限限定在特定命令上。

2.2 权限模型:从rwx到ACL的进阶认知

面试题:Linux文件权限rwx分别代表什么?数字权限755、750、644分别是什么意思?

先快速过一下基础:r表示读(4),w表示写(2),x表示执行(1)。权限位一共三组,分别是属主、属组、其他人。常用目录和文件的权限规则是:目录一般755,普通文件644,可执行文件或脚本755。

这里要重点区分文件权限和目录权限的差异。文件有x权限代表可以执行这个文件,目录有x权限代表可以进入这个目录。两个目录正则进不去,往往不是没有r权限,而是没有x权限。这个细节每次面试都会有人翻车。

面试题:sticky bit是什么意思?/tmp为什么是1777?

这个属于进阶题。sticky bit(粘滞位)主要用在共享目录上,作用是让目录里的文件只能被文件属主、目录属主或root删除,别人即使对目录有写权限也删不了你的文件。/tmp的权限是1777,1就是sticky bit,777是所有人可读可写可执行。面试官一般还会追问:"那如果没有sticky bit,/tmp会怎样?"答案是任何用户都能删掉别人的临时文件,系统安全性和可用性都会出问题。

还有setuid和setgid这两个特殊权限。面试常考的就是为什么/usr/bin/passwd这个命令属主是root,却带着s权限:

ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 ...

这个s就是setuid位,意思是任何用户执行这个命令时,会临时拥有命令属主(root)的权限。因为修改密码必须去写/etc/shadow,而这个文件只有root能写,所以passwd命令必须通过setuid拿到root权限。理解了这个机制,才算真正理解了Linux权限模型。

3. 进程管理与系统资源排查

线上系统出问题时,大部分都和进程、资源相关。这个模块面试不仅考命令,还考排查思路,是所有Linux面试题里最"活"的部分。我面过很多候选人,命令背得很熟,一说排查思路就乱了,只能一条命令一条命令地试,没有整体规划。这里我会把常用的排查链路一起讲清楚。

3.1 进程查看与信号控制

面试题:ps -ef和ps aux有什么区别?怎么杀一个进程?

这两个命令本质一样,都是查看进程信息,区别在于输出格式。ps aux是BSD风格,ps -ef是System V风格。日常使用ps aux更多一些,因为能看到CPU和内存占用率,而ps -ef输出里没有这两列。

杀进程这块,重点在于对kill信号的理解:

# 正常终止,让进程做清理工作 kill -15 PID # 强制杀死,内核直接回收进程 kill -9 PID # 批量杀匹配某个名字的进程 pkill -f "java -jar app.jar" # 杀掉某个进程的所有子进程 pkill -P PID

面试官一定会追问"kill -15和kill -9的区别"。这里有一个很多人忽略的关键点:kill -15是发送SIGTERM信号,告诉进程"你可以准备一下然后退出",进程可以捕获这个信号做清理工作,比如保存配置、关闭数据库连接,然后自己退出。kill -9是SIGKILL信号,直接由内核强制杀掉进程,进程没有任何机会做善后,一旦杀错就可能丢数据或者留下残缺的临时文件。所以正确的做法永远是先kill -15,等几秒看进程退不退,实在不行再kill -9。

3.2 系统负载分析与性能排查思路

面试题:服务器CPU飙到100%,怎么排查?

这道题几乎是我每次面试必问的。回答的质量能直接反映候选人是不是真的处理过线上问题。一个比较完整的回答应该是这样的:

第一步,先用top看一眼整体情况:

top

按大写P按CPU排序,按大写M按内存排序,按大写T按时间排序,这三个快捷键必须记住。top第一行的load average是1分钟、5分钟、15分钟的平均负载,这个数字如果长期大于CPU核心数,说明系统处于过载状态。

第二步,定位到CPU占用高的进程之后,如果是多线程应用,还要进一步找到具体是哪个线程在跑:

# 查看进程内所有线程的状态 top -Hp PID # 或者把线程信息dump出来 ps -Lf PID

第三步,根据应用类型深入排查。Java应用就jstack PID导出线程栈,找到对应线程编号;C/C++应用可以用gdb或者strace看系统调用;如果是PHP、Python脚本,可能要配合业务日志来看。还有一点经验:CPU打满很多时候不是计算密集,而是死循环或者频繁GC,这些都要结合具体情况分析。

面试还有一个变体:"load average高,但CPU使用率不高,是什么原因?"答案是系统在等IO,比如磁盘读写慢、网络IO阻塞,进程处于不可中断睡眠状态(D状态)。排查时用iostat看磁盘、用vmstat看系统整体IO情况。这个问题的精髓在于,load average是"可运行线程+不可中断睡眠线程"的数量,它不等于CPU使用率。

4. 网络配置与故障排查

网络是Linux环境里绕不开的重头戏。不管是服务上不了网、端口被占用、还是数据库连不上,最终都要回到网络排查。面试官在这个模块一般会出场景题,比如"给你一台服务器,SSH连不上,你怎么排查",这种题目没有标准答案,但回答的完整度能看出候选人的经验深浅。

4.1 IP地址配置与DNS解析:通过配置看原理

面试题:Linux下怎么配置IP地址?改了配置不生效怎么处理?

不同发行版的配置方式差异很大。CentOS 6/7用/etc/sysconfig/network-scripts/ifcfg-eth0这类文件,Ubuntu 18.04之后用netplan的yaml配置,老Debian/Ubuntu则用/etc/network/interfaces。无论哪种,核心概念都一样:网卡名、IP地址、掩码、网关、DNS。

CentOS系列里需要改的内容大概是:

BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8

Ubuntu的netplan是yaml格式,缩进极度敏感,一个小空格错误整个配置都应用失败。改完配置之后还需要systemctl restart networking或者netplan apply才能生效。这里面试官常问的坑是:临时用ifconfig或ip addr add配置的IP,重启之后就没了,因为它们只是运行时修改,没写进配置文件。

DNS这块也是高频考点。配置文件在/etc/resolv.conf,但很多发行版这个文件会被NetworkManager覆盖,直接改经常生效不了。排查DNS问题时,一条命令链路是:

# 测试系统解析 getent hosts www.example.com # 测试指定DNS服务器解析 nslookup www.example.com 8.8.8.8 # 用dig看详细过程 dig www.example.com

面试场景题:能ping通IP,但域名解析不了,怎么排查?

这个场景我线上遇得多了,很多时候就是DNS服务器配置错了,或者/etc/resolv.conf被清空了。回答思路是:先确认不是网络层问题(能ping通IP说明链路是通的),然后用nslookup指定一个公共DNS测试,能解析就是本地DNS配置坏了,不能解析就是域名本身解析有问题或者上游DNS挂了。这个链路说出来,面试官就知道你脑子里有清晰的排查路径。

4.2 端口与连接排查

面试题:怎么查看某个端口被哪个进程占用?

# ss命令,现代推荐用法 ss -lntp | grep :8080 # netstat(老命令,部分系统默认没装) netstat -lntp | grep :8080 # lsof 按端口倒查 lsof -i :8080

这里要注意几个参数:-l显示监听的端口,-n不反解域名显示数字地址,-t只看TCP,-p显示进程信息。面试时经常有人端口没写对,比如ss -lntp看到的是00:8080,:8080前面有个*号,这表示监听在所有网卡的8080端口。如果写成了127.0.0.1:8080,就说明只监听了回环地址,外部机器访问不了——这是排查"端口明明开了但别人连不上"的典型原因之一。

还有一个实用命令fuser,可以直接杀掉占用端口的进程:

fuser -k 8080/tcp

这条命令在实际工作中非常有用,比如tomcat启动报端口被占用,用fuser -k 8080/tcp直接解决。但要注意,它会直接杀掉占用端口的进程,操作前必须先确认这个进程是不是可以被杀的服务。

5. 磁盘与文件系统管理

磁盘满、inode耗尽、删文件不释放空间,这些问题在线上环境里几乎每个月都会遇到几回。面试官在这个模块特别喜欢出实际案例,既考命令,又考对Linux存储机制的理解。

5.1 磁盘占用分析与清理

面试题:磁盘满了怎么办?

这个问题的标准回答流程是这样的:

# 1. 先看整体情况 df -h # 2. 定位哪个目录占用最大 du -sh /* 2>/dev/null | sort -hr | head # 3. 逐层深入找大文件 find / -type f -size +1G -exec ls -lh {} \;

很多人都能走到前三步,真正的分水岭在下一步。如果df显示磁盘满了,但du统计了半天都找不到大文件,或者明明删了文件空间还是没释放,就要考虑到"文件被进程占用但已经删除"的情况:

# 查看已删除但仍被占用的文件 lsof | grep deleted

这个场景在日志文件上特别常见。程序打开了日志文件,运维用rm把它删了,但进程还持有文件句柄,空间一直没有真正释放。解决办法是找到对应进程,重启或者kill掉,空间才会真正回来。

面试官还会问一个变体:"磁盘还有空间但写不进文件,报No space left on device,怎么回事?"答案可能是inode耗尽了。查一下:

df -i

如果Inodes这一列是100%,说明小文件太多了,把inode用完了。磁盘够,inode不够,同样不能创建新文件。清理思路就是找那些目录下文件数特别多的地方,删掉不需要的临时文件。这个问题虽然不难,但实操中非常多见,面试时答出来会非常加分。

5.2 文件系统与inode认知

面试题:硬链接和软链接有什么区别?

这是一个非常经典的考察点。硬链接和软链接的根本区别在于底层存储机制。

  • 硬链接:多个文件名指向同一个inode,也就是同一份数据。删除其中任何一个文件名,只要还有别的链接指向这个inode,数据就还在。硬链接不能跨文件系统创建,也不能针对目录创建。
  • 软链接;软链接最直观的理解就是Windows里的快捷方式。它本身是一个独立的小文件,内容存的是目标文件的路径字符串。目标文件被删了,软链接就变成broken状态。
# 硬链接 ln /path/to/file /path/to/hardlink # 软链接 ln -s /path/to/file /path/to/softlink

判断一个链接是硬链接还是软链接,chmod之后看inode号,或者看ls -l输出:软链接的文件名后面会带->指向路径,硬链接看起来和普通文件一样,只是inode号相同。面试官常追问的就是"软链接文件被删了,怎么排查",这个可以配合readlink、stat命令来看。

还有一个考得比较细的点:硬链接和文件复制有什么区别?复制是新建了一个inode和一份新数据,修改其中一份不影响另一份;硬链接是同一份数据,多个文件名,修改任何一个文件名下的内容,另一个也能看到变化。

6. Shell脚本与文本三剑客

Shell脚本是Linux能力的重要分水岭。基础命令是搬砖,会写脚本就是能把重复工作自动化。面试里Shell相关的题目也比较两极分化,简单的考语法,难一点的考实战场景。我见过不少候选人grep和awk用得很溜,但让他写个带循环的脚本就卡壳,说明平时的自动化水平还不够。

6.1 条件判断与循环:写脚本的基本功

面试题:用Shell写一个脚本,输出1到100之间所有能被3整除的数。

先看一个面试中的常见答案:

#!/bin/bash for i in $(seq 1 100); do if [ $((i % 3)) -eq 0 ]; then echo $i fi done

写这段脚本的人基本语法是过关的,但有几个细节可以优化。首先,$((i % 3))是算术展开,[-eq]两边必须是整数,不能有空格问题,这个写法没问题。其次,如果追求效率,可以改步长:

#!/bin/bash for i in $(seq 3 3 100); do echo $i done

这种写法直接跳过了不需要判断的数,意味着循环次数下降三分之一。虽然对面试结果没决定性影响,但能体现出你平时会考虑脚本的执行效率。

脚本里还有一个高频考点,就是条件判断里test命令的写法。下面几种写法的区别必须搞清楚:

# 判断文件是否存在 [ -f /etc/passwd ] # 判断目录是否存在 [ -d /tmp ] # 判断字符串是否为空 [ -z "$VAR" ] # 判断变量是否相等 [ "$VAR" == "test" ]

注意[和变量之间有空格,变量要用双引号包起来,防止变量为空时语法错误。这个细节极其容易被忽略,但线上脚本出bug十有八九都是这个原因。

6.2 awk与sed的实战用法

面试题:从nginx访问日志里统计每个IP的访问次数,按从高到低排序,输出前10个。

这是一道非常经典的实战题,结合了awk、sort、uniq、head一串命令:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

nginx默认日志格式第一个字段是客户端IP,所以awk '{print $1}'就能取出IP。sort是先排序让相同IP相邻,uniq -c才能正确统计次数,sort -rn是按照次数从大到小排序,head取前10条。这个命令链里每一步都不能少,少了sort,uniq统计的就会错乱。实际生产环境里,统计PV、UV、接口调用量也基本都是这套思路。

sed也是文本处理大户。最常用的就是替换:

# 全局替换 sed -i 's/old/new/g' file.txt # 只替换第一次出现 sed -i 's/old/new/' file.txt # 删除匹配行 sed -i '/pattern/d' file.txt

这里的坑主要在于跨平台兼容。macOS的sed -i要求必须带一个备份后缀,比如sed -i '' 's/old/new/g' file.txt,而Linux直接sed -i就行。如果脚本要在两种环境跑,建议用sed -i.bak然后用完删掉备份文件,或者干脆改用perl -pi -e,至少跨平台一致性会好一些。这种事只有真正在Mac和Linux之间来回切换工作过的人才会知道。

7. 面试综合场景题与答题策略

前面几大部分是"单点知识",到了面试后期,面试官一定会出综合场景题。这类题目没有唯一答案,考察的是你有没有一套清晰的排查方法论。答得好的人,往往在面试官说出场景的那一瞬间,脑子里就已经浮现出完整的命令链路了。

7.1 服务器异常排查:从现象到定位的完整链路

面试场景题:半夜收到告警,说某台服务器负载很高,登录上去之后你会按什么顺序排查?

这道题综合度很高,我的回答一般是这样的:

第一步,先看现象的整体面:

# 负载和运行时长 uptime # 内存使用概览 free -h # 磁盘空间和IO情况 df -h iostat -x 1 # 系统日志看有没有kernel报错 dmesg -T | tail -50

第二步,用top定位到具体是哪个进程吃资源:

top -o %CPU

第三步,根据进程类型进一步深挖。如果是数据库,关注慢查询;如果是Web服务,可能要看请求量突增;如果是Java应用,jstack导出线程栈。这一步没有一个固定答案,也是区分候选人经验深浅的地方。

这种题面试官真正想看到的,不是你背了多少命令,而是你有没有一套"从现象到根因"的思考路径。最忌讳的回答是"我上去先top看看",就没了。至少应该遵循"先看整体负载→再看具体进程→再分析为什么这个进程会高"这样的递进逻辑。

7.2 面试官没说的潜规则:答题话术与避坑清单

最后聊点面试中不太好量化、但直接影响结果的"潜规则"。

第一,回答问题先说结论,再讲过程。面试官问"怎么看端口占用",不要上来就背命令参数,先说"我会用ss -lntp查看正在监听的所有TCP端口,如果需要定位到具体进程,再加-p参数",这个顺序能让对方快速理解你的思路。

第二,不确定的事情大方承认,别硬编。面试官经验丰富,编的答案一听就假。比如连"ps aux的CPU使用率是累计值还是瞬时值"这种问题都拿不准的话,直接说"我平时一般用top看CPU,ps这块没细研究过",反而会留下诚实、不装懂的好印象。

第三,尽量结合线上经验补充细节。比如回答完磁盘满的排查步骤,补一句"如果是日志文件被删除但进程还占着句柄,需要用lsof|grep deleted才能找到真正占空间的文件"。这种细节不可能从书里背出来,只要讲一两句,面试官就会把你和其他候选人的层次区分开来。

第四,注意别犯基础错误。比如把chmod和chown记反、把软链接硬链接的概念说反、ip addr和ifconfig混在一团、DNS配置文件路径说成/etc/resolv.conf但说不出其它相关文件,这些都是扣分点。基础命令记错一两个也许还能容忍,概念性错误印象分一下子就会拉下来。

我个人的体会是,Linux面试题准备到最后,拼的不是死记硬背,而是你对操作系统基本原理的真正理解。把每个命令背后"为什么这样设计"想透彻,面试时自然能举一反三。这套题目看起来是一道道题,其实是一张网——只要把这些知识点串成一线,面试官怎么变换场景,你都能接得住。

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

Vue3中安全获取当前路由的四种方法与实战选型指南

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

作者头像 李华
网站建设 2026/9/30 6:30:12

面积法到消点法:几何定理机器证明的底层逻辑与解题实战

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

作者头像 李华
网站建设 2026/9/30 6:29:42

嵌入式内存管理实战:从malloc/free到RTOS内存池与泄漏排查

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

作者头像 李华
网站建设 2026/9/30 6:28:24

Keil MDK下载安装配置教程:STM32嵌入式开发环境搭建与避坑

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

作者头像 李华
网站建设 2026/9/30 6:26:01

VisDrone转YOLOv5:无人机俯视小目标检测数据预处理与调参实战

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

作者头像 李华
网站建设 2026/9/30 6:25:15

GTK界面设计完全指南:从布局到CSS信号,构建Linux桌面应用

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

作者头像 李华