资讯动态

Linux面试题精讲:常用命令、排障与内核进阶实战

发布时间:2026/9/30 8:56:18 来源:尧图企业网站定制
1. 面试官到底想在Linux题里问出什么面试必备Linux面试题和答案这套东西网上搜出来能装满几个硬盘可真正能帮你拿到offer的没多少。我面过也面过人最直观的感受是面试官问Linux从来不是考你背了多少命令而是考你有没有在真实环境里被系统教育过。这个区别很大。背命令的人能说出chmod 755但说不清为什么Web目录用755而配置文件用644被系统教育过的人会告诉你644是因为不能让同组和其他人有写权限755是因为目录必须有x位才能进入。同样是回答一个问题深度差着一条街。所以这篇内容我想聊的是把市面上散落的Linux面试题按考察意图重新归类告诉你每类题的标准答法、加分点和致命错误再补上那些面试官不问但入职第一天就要用的实操细节。适合谁看如果你是刚学Linux不久、准备找运维/后端/嵌入式/测试岗的求职者这篇能帮你把零散知识串成体系如果你已经工作几年想跳槽也可以拿它当自查清单看看哪些原理层面的东西被日常脚本掩盖了。这里先说个前提。Linux相关的岗位面试题分布差异很大运维岗偏系统管理、故障排查、Shell后端偏进程模型、IO、内存嵌入式偏交叉编译、设备树、驱动测试岗偏环境搭建、日志分析。热词里能看到linux常用命令、linux面试题测试、嵌入式面试题、软件测试面试题这些词同时出现说明大家的关注点是散的。我下面会按文件操作—系统管理—内核进阶—准备方法这条主线走尽量让不同方向的人都能各取所需。还有一个心态问题得先摆正。很多人一看到100个Spark面试题熟背100遍这种标题就焦虑觉得要背的东西太多。其实Linux这块的题有个特点核心考点就那么二三十个剩下的都是换皮。你把一道题的原理吃透能覆盖五六道同类题。真正要背的东西不多要理解的东西不少。这是我带了几个新人之后最深的体会也是我写这篇文章想传达的核心——别做题库的搬运工要做原理的翻译官。2. 高频文件与目录操作题拆解2.1 文件查找与权限类题目的标准答法文件这一块几乎每场面试都会碰到典型问法是怎么找出7天前的日志并清理怎么找出占用空间最大的文件怎么批量改权限。新手容易上来就报命令老手会先反问一句你要找的目标在哪个目录范围、有没有软链接、要不要处理隐藏文件。这个反问本身就是加分项因为它说明你想过边界条件。拿查找并清理7天前的日志举例。常见答案是find /var/log/myapp -type f -name *.log -mtime 7 -delete但我会这么答并且补一句为什么-type f限定只处理普通文件避免误删目录-mtime 7表示修改时间在7天以前注意这是按24小时整数天算的边界是模糊的如果要精确到小时得用-mmin-delete比-exec rm {} \;效率高因为它不需要为每个文件fork一个进程但也更危险所以实际生产里我会先跑一遍不带-delete的版本确认列表没问题再执行删除。find /var/log/myapp -type f -name *.log -mtime 7 -print关于找大文件du和find是两个方向du -ah /var | sort -rh | head -n 20 find / -type f -size 500M -exec ls -lh {} \;du -ah递归列出所有文件的大小sort -rh按人类可读单位逆序排head取前20。这里-h和sort -r配合有个坑sort -h才能正确理解1.5G这种单位用sort -n会把1.5G当成1.5来排结果全乱。这个细节我踩过第一次用的时候排出来的顺序莫名其妙后来才发现是排序参数的问题。权限题的必答点是数字权限的二进制含义。r4、w2、x1三位分别对应属主、属组、其他。所以644属主读写、属组只读、其他只读适合普通配置文件755属主读写执行、其他读执行适合脚本和目录600只有属主读写适合密钥和敏感配置。面试官如果追问umask要答出新建文件的默认权限是666 ~umask新建目录是777 ~umask常见umask是022所以文件默认644、目录默认755。这个-1的差异很多人答不上来其实是因为系统不允许新建文件默认带执行权限避免误执行。注意改属主属组用chown user:group file只改属组可以用chgrp递归加-R前一定要确认路径chown -R写错一个字符可能导致整个系统目录权限崩掉这类事故我听过不止一次。还有一类是特殊权限SUID、SGID、Sticky。SUID4xxx让执行者临时获得属主权限典型是/usr/bin/passwdSGID2xxx在目录上会让新建文件继承目录属组团队协作目录常用Sticky1xxx在目录上保证只有文件属主能删自己的文件典型是/tmp。这三个能讲清楚权限这块基本就稳了。2.2 解压乱码这类小坑题为什么总被问热词里有个linux 解压文件乱码这词看着不起眼但它是面试里特别常见的实战判断题。因为这个问题在真实工作中太普遍了——Windows上打包的zip传到Linux解压中文文件名全是问号或者方块。面试官问这个就是想看你有没有处理过跨平台文件的实际经验。根因其实很简单zip格式本身没规定文件名编码Windows下用GBK/CP936Linux默认按UTF-8解编码对不上就乱码。解决方法有两个方向。一是解压时指定编码unzip -O CP936 filename.zip unzip -O GBK filename.zip-O参数指定源编码让它按GBK去解读再转成系统编码。但要注意不是所有版本的unzip都编译了-O支持有些发行版默认不带会报invalid option。这时候可以用7z或者convmv绕7z x filename.zip convmv -f GBK -t UTF-8 -r --notest ./target_dirconvmv是先按错误编码解出来文件名变成乱码串再对文件名做编码转换。-r递归、--notest真正执行不加的话只是预览。这个思路值得记因为它在处理tar包、老项目文件时都能复用。实操心得乱码问题的正确调试顺序是——先确认zip的来源系统看是否Windows打的包再用unzip -l列出内容看是否已经乱码然后决定是在解压阶段指定编码还是解压后转换。直接上手-O容易在版本不支持的机器上卡半天。顺带说一个相关题tar包的解压参数。tar -xzvf是解压gzip压缩的tar-c是创建-x是解压-z处理gzip-j处理bzip2-J处理xz-f指定文件名-C指定解压目录。面试官常问怎么只解压包里的某个文件答案是tar -xzvf pkg.tar.gz path/to/file。这类题答得利索说明你命令熟了但真正区分高下的是能不能把参数拆开解释每个字母干嘛而不是当成一个整体背下来。3. 系统管理与进程排查类面试题3.1 进程、端口、负载三件套怎么答这部分是运维和后端面试的重灾区。典型问题链是服务器变慢了你怎么查一个端口被占用怎么找是谁CPU跑满怎么定位到具体线程这三个问题其实是一条排查链路答得好能直接让面试官判断你有没有真实排障经验。先说负载。uptime和/proc/loadavg能看1、5、15分钟平均负载但很多人不知道负载要结合CPU核数看。单核机器负载1.0就是满载8核机器负载8.0才算满载。所以看到负载高先nproc或lscpu确认核数。进一步用top看是us用户态高还是sy内核态高us高一般是应用计算密集sy高往往涉及系统调用、IO、锁竞争。top里按1可以展开每个核的利用率这个快捷键很多人不知道。再说进程定位。ps -ef和ps aux是两套风格BSD风格用auxSystem V风格用-ef都能列出进程。找具体进程ps -ef | grep java | grep -v grep pgrep -af javapgrep -af比管道grep更干净-a显示完整命令行-f匹配整个命令行。如果CPU高想知道具体哪个线程top -Hp pid-H显示线程拿到线程TID后再转成16进制去jstack输出里找nid0x...的线程堆栈。这条链路是Java后端排查CPU飙高的标准姿势能完整讲出来是明显加分项。端口占用题ss -tunlp | grep 8080 lsof -i:8080 netstat -tunlp | grep 8080ss是新工具比netstat快因为netstat要遍历/proc下所有信息-tTCP、-uUDP、-n不解析服务名、-l监听状态、-p显示进程。lsof -i:端口更直观直接告诉你哪个进程占的。补充一点如果没有权限看进程名加sudo因为-p需要root才能看到别人的进程信息。注意容器环境里ss和netstat看到的是容器网络命名空间的端口宿主机上看到的又是另一套。排查容器端口映射问题光在容器里ss可能看不出宿主机映射关系得去宿主机docker port或看iptables规则。这个坑我在K8s环境里踩过一开始一直以为是应用没监听其实是网络命名空间隔离导致的错觉。3.2 用户与权限管理题的答法linux新建用户是高频词对应的题也简单但要答全。标准流程useradd -m -s /bin/bash -G docker,dev tom passwd tom-m创建家目录有些发行版默认不建得手动加-s指定登录shell-G附加到多个组。这里要能说清useradd和adduser的区别前者是底层命令参数多但可控后者是交互式封装会帮你建家目录、复制骨架文件、提示设密码适合手工操作。生产环境批量建用户我喜欢用useradd配合脚本因为可控。相关文件必须知道/etc/passwd存用户基本信息用户名:x:UID:GID:描述:家目录:shell/etc/shadow存加密密码权限600只有root能读/etc/group存组信息。面试官常追问为什么passwd里的密码位是x答因为真正的密码哈希移到了shadow里shadow对普通用户不可读这样避免被离线破解。这个设计思路能讲出来说明你理解权限隔离的意义而不只是记文件路径。改用户usermod -aG group user-a一定要加否则会覆盖掉用户原有的附加组这是新手最容易犯的错之一。usermod -aG和usermod -G一字之差后者会清空原有组把用户踢出其他团队目录。删用户userdel -r user-r连家目录一起删不加的话家目录会残留这个残留有时是好事留证据有时是垃圾。切换用户su - user-表示加载目标用户的环境变量不加的话你还在原来用户的环境里PATH可能都不对。还有sudo相关题/etc/sudoers的编辑一定要用visudo因为它会做语法检查防止你改坏文件导致所有sudo失效。粒度控制常用tom ALL(ALL) NOPASSWD: /usr/bin/systemctl restart myapp这行表示tom可以免密重启myapp服务但干不了别的。这种最小权限原则在面试里是加分点说明你有安全意识。3.3 DNS配置排错题的完整思路linux中配置dns出现的问题也是热词之一说明这是很多人的痛点。DNS排查我总结了一个从近到远的顺序面试时按这个顺序讲会很清晰。第一步看本地解析优先级。/etc/nsswitch.conf里hosts:那一行决定了解析顺序一般是files dns表示先查/etc/hosts再查DNS。如果hosts里有一条错误映射DNS配得再对也没用因为hosts优先。这个先查本地的顺序很多人忽略导致排查方向全错。第二步看DNS服务器配置。传统上是/etc/resolv.confnameserver 223.5.5.5 nameserver 8.8.8.8 search example.com但现在的坑在于很多发行版用systemd-resolved接管了DNS你改/etc/resolv.conf会被覆盖因为它其实是个软链接指向/run/systemd/resolve/stub-resolv.conf。正确的改法是改/etc/systemd/resolved.conf里的DNS然后systemctl restart systemd-resolved。或者干脆禁用resolved自己维护resolv.conf。这个改了没用的问题我见得太多了新手会反复改同一个文件然后怀疑人生。第三步是验证工具dig 223.5.5.5 example.com short nslookup example.com host example.comdig指定server能直接测某个DNS服务器通不通、返回对不对比ping域名更精准因为ping可能走缓存或者hosts。short只输出结果方便脚本用。第四步看缓存。如果解析结果和预期不符可能是本地缓存systemd-resolved有缓存或者上游缓存。resolvectl flush-caches能清systemd-resolved的缓存。还有nscd这个老缓存服务如果装了也可能捣乱。实操心得DNS问题最迷惑人的是命令行能通但应用不通。这时候要怀疑应用自己实现的解析逻辑或者它读的是另一份配置比如某些程序会绕过系统解析直接用自己配置的DNS。排查时别只盯着resolv.conf要看具体应用怎么解析域名的。我遇到过Java应用因为JVM的DNS缓存TTL设置问题改了DNS后要等很久才生效最后-Dnetworkaddress.cache.ttl0才解决。4. 内核与进阶方向的高分回答4.1 file_operations 拦截 read/write 的题目怎么答热词里出现了linux 内核 动态加载 file_operations 拦截 read write这说明有些进阶岗位确实会问到内核模块层面的东西。这类题难度不低但答得好能直接把你和其他候选人拉开档次。我先说清楚它在问什么怎么通过一个内核模块拦截某个字符设备或文件的读写操作。思路是这样的。字符设备驱动在注册时会提供一个file_operations结构体里面挂着read、write、open等函数指针。想拦截读写本质上就是拿到目标设备的file_operations把它的read/write指针替换成你自己的函数在你的函数里做点处理记录、过滤、转发再调用原来的函数。骨架大致是#include linux/module.h #include linux/fs.h #include linux/kallsyms.h static struct file_operations *orig_fops; static ssize_t (*orig_read)(struct file *, char __user *, size_t, loff_t *); static ssize_t hooked_read(struct file *filp, char __user *buf, size_t len, loff_t *off) { pr_info(read intercepted, len%zu\n, len); return orig_read(filp, buf, len, off); } static int __init hook_init(void) { struct file *filp filp_open(/dev/target, O_RDONLY, 0); if (IS_ERR(filp)) return PTR_ERR(filp); orig_fops filp-f_op; orig_read orig_fops-read; orig_fops-read hooked_read; filp_close(filp, NULL); return 0; }面试时关键是讲清这几层第一你要先拿到设备的file_operations可以通过filp_open打开设备取f_op也可以从cdev取第二替换指针要在正确的时机且要考虑多核并发下的可见性和原子性第三卸载模块时一定要把指针还原否则系统会崩因为orig_read地址失效了还在被调用。这第三点是面试官最爱追的还原不干净就是内核崩溃。再往深一层面试官可能问kallsyms_lookup_name在新内核里为什么用不了。答案是较新的内核不再导出这个符号因为它被滥用做inline hook属于降低内核安全性的操作所以被限制。替代方案是结合kprobe去取地址或者在允许的场景用ftrace、tracepoint这种官方hook机制。这里要能说清一个观点修改file_operations指针属于比较粗暴的hook官方更推荐用LSMLinux Security Modules或者eBPF来做观测和拦截因为它们有明确的挂载点和更可控的安全模型。面试里如果能主动提到用eBPF做无侵入观测更优雅基本就是高级答案了。注意这类内核开发内容只应在你有权限的环境和自己负责的设备上做实验随意在共享的生产内核上加载hook模块风险极大指针还原出问题或者并发处理不当都会导致系统不稳定。4.2 嵌入式与ARM Linux方向常考什么热词里有嵌入式linux、qt5.5.10 arm linux开发、vs工程转到linux里编译这条线是另一拨人的主战场。嵌入式Linux面试和服务器Linux面试的关注点差别很大我按常见问题串一下。第一类是交叉编译。面试官会问为什么需要交叉编译工具链答开发机是x86目标板是ARM指令集不同必须用能在x86上跑、但产出ARM可执行文件的编译器比如arm-linux-gnueabihf-gcc。工具链三件套是binutils链接器、汇编器、gcc编译器、glibc或uclibc运行时库。要能说清sysroot的概念编译时头文件和库要指向目标板的根文件系统否则链接的是开发机的库跑到板子上就缺符号。第二类是VS工程转到Linux编译。核心是先搞清楚工程用了哪些只有Windows才有的东西路径分隔符\和/、大小写敏感的文件名、Windows API调用、.sln/.vcxproj这些MSBuild文件。移植步骤一般是先把代码抽出来用CMake或Makefile重新组织构建替换掉Windows特有API线程、文件、socket都用POSIX接口重写处理字节序和类型长度差异long在64位Linux是8字节Windows是4字节涉及序列化要特别小心。这个long长度差异是很隐蔽的坑跨平台通信协议里经常因为它出错。第三类是设备树Device Tree。ARM平台用.dts/.dtsi描述硬件资源内核启动时解析设备树匹配驱动。面试会问设备树里的compatible属性干嘛用答它是驱动和设备的匹配键驱动里of_match_table的compatible字符串要和设备树里的对上内核才能把驱动probe到设备上。这个匹配机制是嵌入式Linux的入门核心讲不清基本过不了。第四类是根文件系统。busybox提供精简的shell和常用工具rootfs里要有/bin /sbin /etc /dev /proc /sys等目录init进程负责挂载文件系统和启动服务。面试常问uboot、kernel、rootfs三者的关系答uboot负责硬件初始化和加载内核内核启动后挂载rootfs最后执行init拉起用户空间整条启动链缺一不可。5. 面试前怎么准备与模拟5.1 建立自己的命令速查体系准备Linux面试我不建议去背1000个常用命令大全那玩意儿背完就忘。更有效的做法是按场景建自己的速查表每个场景记三五个最常用的命令加一句适用条件。比如场景主力命令关键参数说明找文件find-type -name -mtime -size组合看进程ps / pgrep / top-ef、-Hp看线程看端口ss / lsof-tunlp、-i:port看磁盘df / du-h、sort -rh看内存free / vmstat关注available和swap抓日志grep / journalctl-A -B -C看上下文文本处理awk / sed按列处理、流式替换这张表不用多覆盖你目标岗位最常用的场景就行。关键不是命令数量而是你能不能在答题时说出为什么选这个命令。比如问怎么实时看日志答tail -f是基础补一句频繁滚动会刷屏生产里我更喜欢tail -f log | grep --line-buffered keyword或者直接用journalctl -u service -f就是加分。这种比较级的答案永远比单一名词更打动人。另外把man和--help当工具用起来。面试答不上来的参数如果你能说我会先看man确认语义再操作反而体现了严谨。真实工作里没人记得住所有参数记得住怎么查才是本事。实操心得我准备面试时有个习惯每道题都逼自己回答三层——命令是什么、参数为什么这么选、什么情况下这么写会出问题。第三层最难也最值钱因为它来自真实踩坑而不是文档。能答出这个命令在文件量极大时会有参数过长的问题得配合xargs这种细节面试官会明显感觉到你是干过活的。5.2 答题话术与常见陷阱最后聊点软的东西。Linux面试的答题话术有个原则结构清晰、边界明确、诚实。结构清晰指先给结论再补细节别绕圈子。比如问怎么看系统负载先说看uptime的三个数值分别是1、5、15分钟平均负载再展开怎么结合核数判断。边界明确指回答问题时要主动划清适用范围。比如被问删除大文件我会说rm只能删文件删目录要rm -r另外如果文件正在被进程占用rm只是删了目录项、空间不会释放得先找到占用进程或者重启才知道——这个现象用lsof L1能看到。这一说面试官知道你想得比题目深。诚实是底线。不会的题别硬编直接说这块我实战经验有限我理解的原理是……不知道理解对不对。我有次面一个候选人问他内核参数调优他坦率说没在生产调过但讲了几个他查到的参数原理态度很实在最后照样过了因为面试官看的是学习能力而不是现成答案。要说常见陷阱最大的一个是把面试题当知识竞赛。背了一堆冷门命令结果被问你调过什么系统参数、为什么调就答不上来。面试官想听到的是判断力不是记忆力。第二大的陷阱是只讲命令不讲后果比如聊kill -9只说能强杀不说它不给进程清理机会、可能导致数据损坏、应该先kill -15等优雅退出。第三是忽略环境差异同一个命令在CentOS、Ubuntu、Alpine、容器里行为可能不同答题时带上这在不同发行版可能有差异能体现你的实战意识。关于面试心态我个人经验是把它当成一次技术交流而不是考试。你有问题也可以反问面试官你们生产环境主要跑什么发行版、排障主要靠什么工具这既显得你认真也能帮你判断这个团队的实际水平。我见过太多人紧张到只等对方问、不敢互动其实一段有来有回的对话远比单向答题更能证明你的水平。最后分享一个我自己用的小技巧每次面试完不管是过了还是挂了当晚把被问到的问题和当时的回答整理成文档标出哪些答得好、哪些卡壳了。这个习惯坚持几个月你会发现自己卡壳的地方越来越少因为真实面试暴露的短板比任何题库都准。Linux这东西题会变原理和思路不会变把原理吃透题怎么换你都不慌。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑