☰
Linux面试题50道:命令、权限、进程、网络与故障排查详解
2026/9/26 5:31:49 网站建设 项目流程

Linux面试题这四个字,每年不知道绊倒多少人。我自己做过面试官,也被人面过,既有问懵的时候,也见过候选人答得比答案本身还精彩。大部分人不是不会用Linux,而是不会“说”Linux——明明天天在终端敲命令,真被问到一个简单问题,反而答得支离破碎,甚至把概念搞混。

这篇文章把我近几年高频遇到的50道Linux面试题整理成了一份完整清单,覆盖命令、权限、进程、网络、脚本和故障排查几大块,每道题都给出简洁答法,重点题还会拆解“为什么这么答”以及面试官的追问方向。适合准备运维岗、后端开发岗、嵌入式工程师面试的同学,也适合刚入职被领导问得一愣一愣的职场新人。建议按模块过一遍,能复述答案远比“看过”有用。

1. 面试官到底想考什么:Linux面试题的底层逻辑

1.1 三类题目背后的能力模型

表面上看,Linux面试题考的是命令背没背熟,实际上考的是三件事。

第一,基础概念是否扎实。比如“硬链接和软链接的区别”“僵尸进程怎么产生的”“sudo和su有什么不同”,这些题没有任何场景包装,纯粹看你对操作系统底层原理的理解深度。能答出来不难,难的是能把这个原理讲清楚,比如硬链接为什么不能跨文件系统,这背后是inode机制在起作用。

第二,故障排查思路是否清晰。这类题通常是一个场景:“服务器CPU飙到100%怎么办”“磁盘满了但找不到大文件”“8080端口被占用了怎么定位”。面试官并不指望你背出一条标准答案,而是看你会不会用ps、top、lsof、df、du这些命令组合起来做一条完整的排查链路。这类题也是我面试时最看重的,因为线上出问题没人给你时间慢慢翻文档。

第三,工程习惯和表达方式。同样的命令,有人只报名字,有人会主动说明参数含义、适用场景、风险点。比如问“如何后台运行一个命令”,只说nohup和&是不够的,加分项是说出“nohup只能忽略挂断信号,如果要彻底脱离终端最好配合setsid或使用systemd服务托管”。这种主动性在面试里非常吃香。

1.2 面试答题的通用思路

很多人答题失败不是不会,而是没有结构。我建议遵循“结论先行、原理补充、场景延伸”三步走。

结论先行,就是第一句话直接给答案,别铺垫。面试官问“怎么查看端口占用”,你第一句就答“ss -lntp,如果系统没有ss就用netstat -lntp”,而不是先讲一遍TCP端口的知识。原理补充,是把答案背后的机制讲清楚,比如端口占用本质上是在/proc/net/tcp里找监听记录,ss只不过把这个信息格式化显示出来。场景延伸,是说清楚什么情况下用这个命令、有什么坑,比如ss查不到的时候可能是权限不够,需要加sudo。

这套思路能覆盖八成以上的Linux面试题,不仅答得完整,还能反过来引导面试官往你熟悉的方向提问。

2. 50道高频面试题速查清单

下面这50道题是我从真实面试记录里筛出来的,按领域分为五组,每题给出一句话答案。表格适合快速自测,先盖住答案,自己说一遍,说不顺的就标记下来,回头去查。

2.1 文件与目录命令(1-10)

题号题目一句话答案
1如何查看当前所在的目录pwd,打印工作目录的绝对路径
2ls -l 输出中每个字段分别是什么权限、硬链接数、属主、属组、大小、修改时间、文件名
3如何复制整个目录cp -r 源目录 目标目录,r表示递归
4mv 和 cp 有什么区别mv是移动或重命名,原inode不变;cp是复制内容产生新文件
5如何防止rm误删重要文件加 -i 交互确认,或使用trash命令先移到回收站
6find 和 grep 有什么区别find按文件名、属性、时间搜文件;grep按文件内容匹配文本
7默认权限644和755各自代表什么644:属主读写,组和其他只读;755:属主读写执行,组和其他读执行
8如何查看某个目录占用多大磁盘du -sh 目录,s表示汇总,h表示人类可读
9tar打包和压缩有什么区别tar只打包不改体积,-z调用gzip压缩,-j调用bzip2
10如何快速查找nginx.conf在哪个目录find / -name "nginx.conf" 2>/dev/null,排除权限报错

2.2 用户权限与系统管理(11-20)

题号题目一句话答案
11chmod 754 代表什么属主7=rwx,属组5=r-x,其他4=r--
12如何让普通用户临时获得root权限配置sudoers,执行visudo给用户加sudo权限
13useradd 和 adduser 有什么区别useradd是底层命令;adduser是对相关系统的交互式封装
14如何把用户加入附加组usermod -aG 组名 用户名,a表示追加而不是覆盖
15passwd 和 chpasswd 区别passwd交互式改密码;chpasswd支持从标准输入批量修改
16chown 和 chgrp 区别chown可同时改属主和属组;chgrp只改属组
17如何让日志文件只能追加不能随意改动chattr +a 文件名,root也无法直接覆盖内容
18umask 022 对新建文件有什么影响文件默认权限666减022等于644,目录777减022等于755
19如何把某个用户强制踢下线pkill -u 用户名,或pkill -9 -u 用户名强制杀其所有进程
20root和普通用户的UID各是多少root是0,系统用户通常是1-999,普通用户通常从1000开始

2.3 进程与性能排查(21-30)

题号题目一句话答案
21ps aux 和 ps -ef 有什么区别aux是BSD风格,-ef是Unix风格,显示信息基本一致
22如何实时查看系统资源占用top或htop,内存单独看 free -h
23kill -9 和 kill -15 有什么区别15是SIGTERM优雅退出;9是SIGKILL强制杀死,进程无法捕获
24什么是僵尸进程,怎么处理子进程退出后父进程没有wait回收,状态为Z;需要父进程处理或重启父进程
25如何让命令在终端关闭后继续运行nohup command & 或 setsid command,或在screen/tmux里运行
26如何查看当前终端后台任务jobs -l,只对当前shell有效;跨终端要用ps
27service 和 systemctl 区别service封装SysV init脚本;systemctl管理systemd服务
28如何设置服务开机自启systemctl enable 服务名,会创建systemd符号链接
29free -h 里的buff/cache能手动清理吗可以但不建议,系统内存紧张时内核会自行回收
30uptime负载均值怎么判断是否异常1/5/15分钟平均运行队列,要和CPU核数比较,超过核数说明过载

2.4 网络与故障排查(31-40)

题号题目一句话答案
31查看IP地址用什么命令ip addr,老系统用 ifconfig
32查看端口被哪个进程占用ss -lntp,或netstat -lntp,p参数显示进程名和PID
33ping不通一定是网络问题吗不一定,可能对端禁ICMP或防火墙拦截,要用tcping等测TCP
34curl 和 wget 有什么区别curl支持协议多、可发送请求、便于调试;wget适合简单下载
35如何测试某个TCP端口是否通nc -vz 目标IP 端口,或timeout 1 bash -c "echo >/dev/tcp/目标IP/端口"
36SSH登录特别慢怎么排查常见是UseDNS yes导致反解析,改为no;还要检查GSSAPIAuthentication
37traceroute 是干什么的显示数据包到目标经过的路由节点和每跳延迟
38如何查看本机监听了哪些端口ss -lnt,l表示监听,n不做域名解析,t只看TCP
39scp 和 rsync 有什么区别rsync支持增量同步、断点续传、压缩;scp简单粗暴全量传
40域名解析失败怎么排查nslookup或dig查记录,再看/etc/resolv.conf的DNS配置

2.5 Shell脚本与文本处理(41-50)

题号题目一句话答案
41如何查看文件并显示行号nl 文件,或 cat -n 文件
42awk 和 sed 的区别awk按列处理、擅长统计计算;sed按行流编辑、擅长替换删除
43如何统计日志中访问量前10的IPawk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
44如何全局替换文件中的字符串sed -i 's/旧串/新串/g' 文件名,i表示原地修改
45如何查看文件前10行和后10行head -10和tail -10;动态跟踪用tail -f
46xargs 的作用是什么把标准输入转换成命令行参数,解决管道传参和参数过长问题
47如何把一个大文件按行切分split -l 1000 文件名,每1000行一个文件
48如何把多个文件按行合并成一个cat file1 file2 > all;按列合并用 paste
49脚本里如何判断上一条命令是否成功检查$?是否等于0,或用 if 条件直接在命令后判断
50如何调试Shell脚本bash -x 脚本.sh,逐行跟踪执行;脚本开头set -e遇到错误即退出

3. 高频重点题详解:这些答案为什么这么给

速查表只是第一关,真正拉开差距的是下面这些高频题。我不光给答案,更想拆解“面试官为什么问”“怎么答才有区分度”。

3.1 CPU飙升到100%怎么排查

推荐的回答不是一上来就top,而是先给一条完整链路。首先top观察,按下大写P按CPU排序,拿到占用最高的PID;然后top -H -p PID查看这个进程内部哪个线程最忙;如果是Java应用,再把线程PID转成十六进制,用jstack导出线程栈,搜对应的线程号;如果是普通C程序,用perf top看一下热点函数;最后结合最近变更判断是业务流量上涨还是死循环或者GC问题。

面试官追问的往往是:为什么不直接用pidstat?答案是可以,pidstat -p PID 1能看到单进程CPU变化,更适合定位瞬时抖动。还有一个高频追问:top里的%CPU超过100%正常吗?正常,那是多核累加的结果,8核CPU单进程最大能到800%。这里很多候选人答不上来,说明对CPU计数机制不理解。这类追问才是真正的分水岭。

3.2 硬链接和软链接的区别

完整答法分三层。第一层是命令层:ln源文件目标文件建立硬链接,ln -s源文件目标文件建立软链接。第二层是原理层:硬链接本质上是同一个inode的多个目录项,文件数据只有一份,所以不能跨文件系统,也不能对目录做硬链接;软链接是独立文件,存的是目标路径,目标被删了链接就失效。第三层是场景层:硬链接适合做备份快照中的去重,软链接适合给可执行文件做快捷方式。为什么硬链接不能跨文件系统?因为inode编号只在当前文件系统内有意义,另一个文件系统里的inode号相同不代表同一文件,硬链接如果允许跨系统,链接就指向了完全无关的数据。

这类题还有个隐含考点:ls -l输出第二列就是硬链接数。普通文件默认是1,每多一个硬链接就加1;目录的硬链接数至少是2,因为目录自身和它内部的.都指向同一个inode。

3.3 怎么查看谁占用了8080端口

第一答ss -lntp | grep 8080,这是最直接的。如果没有权限看不到进程名,加上sudo重试。老系统没有ss就用netstat -lntp。面试官抛出的陷阱是:netstat和ss都查不到,但浏览器就是能访问?那说明监听在IPv6的::或某个网卡别名上,用ss -ltnp实际会显示IPv6地址,只是你没注意看。更隐蔽的情况是端口被Tomcat这类多实例占用,需要看配置文件的server.xml里address=”0.0.0.0”还是具体IP。

这个题的加分项是:先判断端口是监听状态还是连接状态。lnt里的l是listening,只看监听;如果只要找到哪个进程在跟外部建立连接,就不能加l。另一个加分项是fuser 8080/tcp,一条命令直接显示PID,适合脚本里踢掉占用进程。

3.4 磁盘满了df却显示没满,怎么找元凶

标准场景:df -h看到/分区100%,但du -sh /*一层层追下去,所有目录加起来远小于分区大小。这时候要想到文件被删除却仍被进程占用。Linux里文件被unlink之后,如果还有进程持有它的文件描述符,磁盘空间不会立刻释放,直到进程关闭文件或退出。

排查命令是lsof | grep deleted,找到deleted状态的文件和对应进程PID。解决方案一般是重启这个进程或者让运维确认业务能否平滑重载,切忌直接kill,可能引发线上事故。更大的教训是运维规范:删大文件之前先lsof确认没有进程持有它。还有一个变体是磁盘没满但写不进去,通常是inode耗尽,df -i查看,大量小文件把inode吃光了,清理思路是find / -type f -size -1k统计小文件再批量清理。

3.5 僵尸进程形成的原因和处理

僵尸进程不是真在运行,是子进程退出后,父进程没调用wait/waitpid回收它的退出状态,于是子进程变成一个存有退出码的“残影”,在ps里显示Z。它不占CPU和内存,但占着PID和进程表项,积累多了会导致新进程fork失败。

处理三步:先ps -ef | grep defunct找到僵尸进程的PID和父进程PPID;再ps -p PPID确认父进程是谁;然后用kill -15通知父进程处理,如果父进程是脚本或失控程序,kill -9也杀不掉僵尸本身,只能杀掉父进程,让僵尸被init进程收养并回收。面试里如果能主动讲出“真正应该修的是父进程的代码,子进程退出后必须wait”这一点,说明你真的理解,而不是背命令。

3.6 sudo和su的完整对比

很多人只知道sudo提权、su切换用户,但这道题真正想听的是权限模型区别。su直接切换身份,需要目标用户密码,如果切root就需要root密码,切换后拿到完整的shell环境;sudo是以当前用户身份执行单条命令,验证的是当前用户自己的密码,而且靠sudoers规则精确控制能执行哪些命令。

关键概念是:sudo执行时进程的euid变成root,但环境变量和当前用户保持原样,所以能做到最小权限;su切换后整个身份都变了。换句话说,sudo是“借权”,su是“换人”。追问环节通常问“sudo是否能执行任意命令”,答案是否,一切取决于/etc/sudoers里怎么授权,比如可以只让某个用户执行systemctl restart nginx,却禁止他执行useradd。

3.7 定时任务的写法与常见坑

crontab -e编辑当前用户的定时任务,格式是五个字段:分、时、日、月、周,再加命令。最容易踩的坑不是格式,而是环境变量——cron执行环境是非交互shell,不会加载你的.bashrc,脚本里如果用了自定义PATH变量下的命令就会找不到。解决办法是脚本开头export PATH=/usr/local/bin:/usr/bin:/bin,或干脆用命令的绝对路径。

面试官还经常问:如何实现每秒执行一次?标准cron最小粒度是每分钟一次,可以用while循环脚本自己sleep,或者在cron里写30条错峰任务。另一个坑是脚本执行结果不落盘,排查问题时根本不知道跑没跑,建议crontab里把标准输出和错误都重定向:/path/script.sh >> /var/log/script.log 2>&1。定时任务执行失败时系统会发邮件给本地用户,很多人收不到也不看,实战中就错过了排查线索。

3.8 负载均值到底怎么判断

uptime输出load average: 1.50, 0.80, 0.60,不少人只知道“超过1就不行”,这是错的。负载均值是单位时间内处于可运行状态和不可中断睡眠状态的进程平均数,不同核数的机器标准完全不一样。4核机器负载4才算满载,8核机器负载4还很健康。更准确的做法是看平均负载和CPU核数的比值,长期大于1说明有排队,结合top里的us、sy、wa、id各项判断瓶颈是CPU计算还是IO等待。

有一个比较进阶的加分点:不可中断睡眠D状态的进程也在拉高负载,而D状态往往是等待IO,比如NFS网络文件系统卡死,此时就算CPU空闲,负载也会很高。能答到这一层,面试官基本就认可你遇到过真实生产问题。

4. 实战场景题与排障套路

4.1 CPU跑满三部曲

线上告警说CPU使用率100%,第一步先登录机器执行top -c看哪个进程在最前面,重点看COMMAND列有没有异常名字。第二步对嫌疑进程执行top -H -p PID,找到内部线程,比如Java进程会看到GC线程或业务线程CPU高。第三步把线程号转成16进制printf '%x\n',再用jstack PID | grep -A 20找到对应线程栈,基本就能定位到具体代码行。

这套流程的关键是冷静,别上来就重启。重启虽然能暂时恢复,但下次还会再犯,而且重启会丢掉线程dump,等于把证据销毁了。我在实际处理中会先保留现场top和jstack输出,再决定是否重启。

4.2 磁盘告警标准处理流

收到磁盘空间告警,第一反应df -h看哪个分区满了。找到分区后执行du -sh /分区/*按一级目录从大到小排序,逐层定位大目录。但一定要警惕文章前面说的deleted文件问题,所以无论找没找到大文件,执行一遍lsof | grep deleted都有必要。还有inode耗尽单独用df -i检查。

经验之谈:/var/log/journal是日志的隐形杀手,journald默认会把系统日志积累到很大规模,限流配置是/etc/systemd/journald.conf里的SystemMaxUse,我记得设置成500M比较常用。另一个容易被忽略的是/root/.bash_history这种单用户文件也能长到好几个G,别一刀切删光,用cat /dev/null >文件清空而不是rm,能保留文件句柄给当前会话继续写。

4.3 网络不通的排查顺序

网络问题是Linux面试的常客,实际场景里也是最让新手慌乱的。我建议记住“从底层往上查”的口诀:先ping 127.0.0.1验证本机协议栈,通了说明网卡驱动和核心没问题;再ping网关IP验证二层通信;最后ping外网IP验证三层路由,域名不通额外看DNS解析。

有个细节容易被忽略:防火墙iptables或nftables的规则可能拦住了ICMP或特定端口,导致ping不通但业务其实正常。所以排查到一定阶段要检查iptables -L、firewalld状态,必要时临时放行测试。如果服务器A能ping通B,但B的端口一直连接超时,优先检查B本机是否监听正确,ss -lnt确认端口没被别的进程抢先占用。

4.4 服务起不来的通用排查法

应用启动失败,最忌讳直接看日志,而应该按顺序排查:第一,进程是否已经在跑,ps -ef | grep服务名,端口是否被占用ss -lntp;第二,依赖的资源是否存在,比如工作目录、配置文件、数据库连接;第三,看真正的错误日志journalctl -u服务名或应用自己的log文件。

我之前遇到过一个典型问题:systemd服务明明配置了ExecStart指向了一个脚本,却一直启动失败。用systemctl status查看才发现exit code是203/EXEC,真实原因是脚本没有执行权限或者第一行解释器路径写错。这种问题不看status只看应用日志,能排查一整天。所以遇到systemd服务失败,第一件事永远是systemctl status服务名,看头部几行输出,哪怕只看最后一句Exited with code,也比盲目翻日志快。

5. 面试中的常见错误与备考建议

5.1 答得不错但被刷的几个原因

我面试过不少基础不错的候选人,最后挂在几个很隐蔽的问题上。第一个是答案太短,问“怎么查看磁盘占用”,回答一个du就结束了,完全没有上下文,面试官想听到的是:先df -h看全局,再看du找具体目录,接着讲deleted文件坑。第二个是不说风险,比如问rm -rf,直接说“删除文件就完了”,没有补充“生产环境要谨慎,建议先mv到一个临时目录再确认后删除”。第三个是主动暴露短板,比如自己提了一句“LVM不太熟”,结果面试官顺着问了两个小时LVM,本来有优势的岗位就这么被带偏了。

应对策略很简单:不熟的东西不要主动提,被问到就诚实说“这部分生产环境用得少,我了解基本概念但不深入”,比硬编一个答案体面得多。

5.2 一个月备Linux面试怎么安排

时间紧凑的话,我建议分成四周。第一周打基础:把50道题前两组过一遍,每个命令都要亲手敲,重点是权限、链接、用户管理的原理。第二周攻性能:集中练top、ps、free、vmstat、iostat,拿自己电脑或服务器做实验,故意制造CPU占用和僵尸进程,亲手去查。第三周练网络和脚本:ss、netstat、curl、nc,同时每天写两个awk/sed一行流,统计日志练到条件反射。第四周模拟面试:找一个朋友互相提问45分钟,或者自己开着录音讲题,讲完之后回听,你会发现很多当时觉得顺的逻辑其实断断续续。

刷题清单本身不是最重要的,重要的是每个命令都对应一个场景,每个场景都要能讲出排查步骤和坑。

5.3 简历上的Linux技能怎么写

简历这一块也能明显拉开面试体验。只写“熟悉Linux”等于没写,面试官根本不知道你熟到什么程度。建议改成“熟练使用Linux常用命令,能够独立处理CPU、磁盘、网络类故障,熟悉systemd服务管理与Shell脚本编写,日均处理线上问题若干起”。每个能力点都对应一个可验证的产出,比形容词更有说服力。

如果简历里能写一个具体的故障案例更是加分项。“在XX项目中定位并解决磁盘空间异常增长问题,最终发现是日志未轮转导致,通过配置logrotate将磁盘使用率从95%降至50%”,这种描述比“熟悉Linux运维”具体一百倍,面试官也会顺着你的案例往下问,相当于你主动设定好了面试范围。

准备Linux面试,本质上是把零散的知识点串成排查思路和工程意识。我自己做面试官这几年最深的体会是:能背下命令的人很多,能把一条命令背后的代价和坑讲清楚的人很少,而后者才是工作中真正需要的人。最后分享一个我自己备考时用的小技巧:每学一个新命令,就问自己三个问题——它解决什么问题、原理是什么、如果我不用它还有哪些备选方案。用这个方式过完这50道题,再去面试,你会明显感觉到那些问题不再是问题,而是你展示经验的切入口。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询