“刚毕业的大学生,没有多少工作经验,需要多准备一些面试题,反复练习记录方法和思路是有必要的,至少给面试官的影响是你有所准备,具备一定的学习能力和linux基础理解能力。对应问题的知识点让你在拓展一点,试探你学习的基础。在竞争不太激烈的情况下,通过面试应该问题不大的,这里我准备了一些常见的面试题,提供大家参考和学习。”
说实话,我很少去看过什么面试题库,可能是我太懒了,或者说面试题的内容太多了,懒的刷题。先准备了一点点内容,看看大家的反响,后续会跟进面试专题的更新。社招很多都是寻求一个工作机会,对目标公司的选择不是很看重。但如何说是你有一个目标性很强的公司,刚好有个面试机会,那你就必须得从这个岗位要求上下功夫,多准备一些时间,来应对面试官的灵魂拷问。
01
—
基础知识点梳理
问题:假如我有一个在执行中的tailf进程,查看的这个日志文件被另外一个进程执行了删除动作,那么当前tailf是什么状态。
答案:tailf监控该文件的进程不会受到影响
知识点:在linux系统中,删除一个文件实际上是“解除链接”(unlink)。只要还有进程打开着这个文件(比如tail -f正在读它),文件的数据并不会立即从磁盘上清除。文件的inode会一直保留,直到所有打开它的文件描述符都被关闭。
tailf /var/log/audit/audit.logrm -rf /var/log/audit/audit.log # 另外一个终端执行
问题:被删除的文件能否找回。
答案:是可以的
知识点:在linux系统中,删除一个文件实际上是“解除链接”(unlink)。只要还有进程打开着这个文件(比如tail -f正在读它),文件的数据并不会立即从磁盘上清除。文件的inode会一直保留,直到所有打开它的文件描述符都被关闭。
问题:磁盘可用空间还有60%,但是部署一个服务器提示我空间不足。如何排查问题所在
答案:这个答案会有很多个,能说几个是几个。
1.检查inode是否耗尽。Linux文件系统不仅限制空间大小,还限制inode数量(每个文件/目录都需要一个inode)。即使磁盘有空间,inode用完也会报“空间不足”。
df -i#如果Iuse 是 100%那就说明inode耗尽了。#可以使用for循环查询inode使用最多的目录。或者更加高效的命令ncdufor i in /var/*; do echo $i; find $i | wc -l; donencdu -i /
2.检查具体挂载点的文件占用情况,找到占用对多的那个目录,确认是否能删除
df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 20G 19G 1.0G 95% /var ← 这里满了!/dev/sda3 100G 40G 60G 40% /
3.检查被删除但没有释放的大文件。有些大文件已被rm删除,但进程仍在写入(如日志),空间不会释放,直到进程关闭fd。
lsof +L1# 或lsof | grep deleted
问题:命令执行反应太慢,从哪些角度排查问题所在。
答案:涉及系统反应慢的问题,可以从如下几个点确认
1.检查磁盘I/O,或者inode耗尽
# 检查 inode 使用df -i# 检查 I/O 等待(%wa 高表示磁盘瓶颈)top # 看 %wa (iowait)iostat -x 1 # 看 await、%util# 检查是否有进程在疯狂写磁盘iotop
2.检查文件系统挂载问题,一些网络共享磁盘,可能会因为网络问题卡住命令执行的结果返回
# 查看挂载点mount | grep -E "nfs|cifs|fuse"# 检查是否有“stale”挂载ls /mnt/nfs_share # 如果卡住,说明 NFS 无响应# 查看 dmesg 是否有错误dmesg | tail -20 | grep -i "stale\|timeout"
3,检查系统资源瓶颈
top # 看 CPU、内存、负载(load average)free -h # 内存和 swap 使用vmstat 1 # 查看是否频繁 swap(si/so 列)
4,还有时间问题也会影响,如果系统时间严重错误可能会执行命令超时。
问题:客户反馈网站访问变慢了,从哪些角度排查。
答案:明确访问网站的请求过程:从客户端——>网络——>服务器——>应用——>数据库——>资源。
1.复现客户问题,确认故障范围。
是所有用户,还是个别用户;特定页面慢还是某个接口慢;和客户都沟通更多的问题现象。如果是所有用户,那就是服务器故障,网络故障,应用层故障。接口慢那就是数据库问题
2.服务器资源瓶颈。
CPU使用率,内存和swap使用率,网络带宽
top # 查看 %CPU、load averagehtop # 更直观(需安装)free -h # 查看内存和 swap 使用vmstat 1 # si/so 列非零表示频繁 swap,性能严重下降iostat -x 1 # 查看 %util、await(响应时间)iotop # 查看哪个进程在大量读写df -h && df -i # 检查磁盘空间和 inode 是否耗尽
3.排查网站服务日志
服务日志,最大连接数,服务应用状态
# Nginxtail -f /var/log/nginx/error.loggrep "upstream timed out" /var/log/nginx/error.log# Apachetail -f /var/log/httpd/error_logss -s # 查看 TCP 连接总数nginx -T | grep worker_connections # Nginx 最大连接数#是否有大量的TIME_WAIT 或 CLOSE_WAITss -tan | awk 'NR>1 {print $1}' | sort | uniq -c
4.排查应用层问题,这个可能更多的是bug了
应用日志,线程阻塞,node.js等
5.排查数据库层
-- MySQL 开启慢查询日志(默认可能未开),分析slow.logSET GLOBAL slow_query_log = 'ON';SET GLOBAL long_query_time = 1; -- 超过1秒记录-- MySQL 查看当前运行的慢查询SHOW FULL PROCESSLIST;-- 查看是否有锁等待SELECT * FROM information_schema.innodb_lock_waits;
nethogs # 按进程查看带宽iftop # 实时流量监控dig your-site.com @8.8.8.8
文件描述符耗尽,TIME_WAIT过多,SSL握手慢
#Web 服务器或应用 fd 不足会导致新连接拒绝或超时cat /proc/$(pgrep nginx)/limits | grep "Max open files"lsof | wc -l # 总打开文件数#优化内核参数net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 30#/dev/random阻塞会导致SSL握手慢cat /proc/sys/kernel/random/entropy_avail # < 200 可能有问题
问题:如果linux系统启动失败,从哪些角度排查。
答案:明确linux系统的启动过程
1.硬件检查。确认是否存在硬件故障,磁盘、驱动等
2.加载引导程序。确认linux系统引导grub是否损坏,内核或者initramfs文件丢失
#检查/boot/vmlinuz-*和/boot/initramfs-*是否存在。#修复方案# 挂载原系统根分区(假设为 /dev/sda2)mount /dev/sda2 /mntmount /dev/sda1 /mnt/boot # 如果 /boot 是独立分区# 重新安装 GRUBgrub2-install --root-directory=/mnt /dev/sdagrub2-mkconfig -o /mnt/boot/grub2/grub.cfg
#在GRUB菜单按"e"编辑启动项,查看linux行的 root= 和 resume= 参数#尝试添加rd.shell或break参数进入initramfs shell(dracut环境),手动检查设备ls /dev/sd*lvm lvscan # 如果用了 LVMfsck /dev/sda2 # 手动修复文件系统
4.启动init进程。可能卡在某个初始化服务启动过程中,这个一般和磁盘有关系,比如系统分区挂载失败,系统盘使用100%,inode耗尽等
mount -a # 测试 fstab 是否有错5.系统初始化和服务启动。systemd服务启动,启动基础系统,启动本地服务,图形界面等。
6.用户会话初始化。启动shell,桌面环境,执行用户配置文件,启动用户级的systemd服务。
问题:忘记linux系统root用户密码,该如何解决。
答案:单用户模式下重置root用户密码。
1.重启服务器,在grub菜单出现时按esc或者/键
2.选择要启动的内核版本,按“e”进入编辑模式
3.找到以linux或者linuxefi开头的行,修改行末ro
rw init=/sysroot/bin/sh #或者rw rd.breakrw rd.break #单独需要gua在根文件系统mount -o remount,rw /sysrootchroot /sysroot
4.按CTRL+x或者F10启动
5.重置root密码
passwd root6.退出并重启
exitreboot
问题:如何确认服务器需要增加内存资源了。
答案:不单单是查看内存的使用率,还得看是否频繁使用swap。
1.是否频繁使用swap资源
# 查看 Swap 使用量free -h# 实时监控 Swap 活动(si = swap in, so = swap out)vmstat 1# 查看历史 Swap 使用(需安装 sysstat)sar -W 1 3
2.可用内存长期接近0
free -h3.系统日志OOM(内存溢出,内存耗尽)。OOM触发的原因是物理内存和swap都被占满了。
dmesg -T | grep -i "oom\|kill"journalctl -k --since today | grep -i "oom"
问题:CPU资源不足的表现有哪些,如何定位。
答案:表现为系统卡顿、服务响应慢、负载高
#组合命令nproc && uptime && top -bn1 | head -10# 查看 CPU 核数nproc# 查看系统负载和 CPU 使用率uptime #load average显示1,5,15分钟进程使用数top[root@test ~]# uptime04:50:12 up 2:55, 3 users, load average: 0.00, 0.01, 0.05#Load Average 表示正在使用 CPU 或等待 CPU 的平均进程数#如果 1 分钟负载 > CPU 核数 × 2 → 系统过载;#如果 持续 5/15 分钟负载远高于核数 → CPU 瓶颈
定位cpu消耗过程,top实时排序。
top # 按 Shift+P 按 CPU 使用率排序进程cpu使用率查询
ps aux --sort=-%cpu | head -n 10pidstat查看cpu使用率,结合进程pid查看cpu使用率
pidstat -u 1 3 # 每秒采样,共 3 次知识点:
为什么会有CPU资源不够用呢,得确认具体原因,是否有被恶意攻击,挖矿,进程失控等,需要找对对应进程,并且判定是否为业务核心进程。然后决定如何处理CPU不足的问题。
# 检查网络连接数,确认是否存在外部攻击和异常流量ss -tnp | grep :80 | wc -lnetstat -ant | awk '/:80/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
02
—
问题验证总结
文件删除的过程理解
文件删除不等于就直接消失了,如果读取这个文件的进程在删除前执行的,那么它依旧可以继续读取数据,也就是说此时这个文件虽然被另外一个进程删除了,但是它的Inode会一直存在,直到读取这个文件的所有进程都已结束。当然如果这个读取文件的这个进程还没有结束,删除的文件依旧可以还原回来。
# 确定tailf这个进程的进程idps -elf| grep tail# 或者通过lsof查看该文件被哪个进程占用,fsuer也可以查看文件被谁占用# 也还可以使用lsof | grep "(deleted)" 或 lsof +L1查看谁在使用已删除的文件lsof /var/log/audit/audit.log# 从文件标识符fd中恢复cd /proc/进程id/fd/cp /proc/进程id/fd/3 /var/log/audit/audit.log
有个例外情况,如果该文件在你执行rm删除的时候,只有tailf进程在查看且已经读到了最后的EOF,也没有被写入的进程占用,那你执行rm删除操作的时候,tailf也会自动结束,该文件就无法被正常恢复了。
已删除的文件恢复
恢复已删除的文件,只需要确定该文件还有进程在占用中,通过lsof查看文件描述符id恢复。这里的5w就是文件描述符,654是占用该文件的进程id,fd是文件描述符的固定目录,执行ls -l即可看到已删除文件的inode。
[root@test audit]#[root@test audit]# ls -l audit.logls: 无法访问audit.log: 没有那个文件或目录[root@test audit]# lsof |grep '(deleted)'auditd 654 root 5w REG 8,3 4691990 51251671 /var/log/audit/audit.log (deleted)auditd 654 655 root 5w REG 8,3 4691990 51251671 /var/log/audit/audit.log (deleted)[root@test audit]# ls -l /proc/654/fd/5l-wx------ 1 root root 64 12月 30 02:58 /proc/654/fd/5 -> /var/log/audit/audit.log (deleted)[root@test audit]# cp /proc/654/fd/5 ./audit.log

linxu系统启动过程
1.硬件检查。确认是否存在硬件故障,磁盘、驱动等
2.加载引导程序。确认linux系统引导grub是否损坏,内核或者initramfs文件丢失
#检查/boot/vmlinuz-*和/boot/initramfs-*是否存在。#修复方案# 挂载原系统根分区(假设为 /dev/sda2)mount /dev/sda2 /mntmount /dev/sda1 /mnt/boot # 如果 /boot 是独立分区# 重新安装 GRUBgrub2-install --root-directory=/mnt /dev/sdagrub2-mkconfig -o /mnt/boot/grub2/grub.cfg
#在GRUB菜单按"e"编辑启动项,查看linux行的 root= 和 resume= 参数#尝试添加rd.shell或break参数进入initramfs shell(dracut环境),手动检查设备ls /dev/sd*lvm lvscan # 如果用了 LVMfsck /dev/sda2 # 手动修复文件系统
4.启动init进程。可能卡在某个初始化服务启动过程中,这个一般和磁盘有关系,比如系统分区挂载失败,系统盘使用100%,inode耗尽等
mount -a # 测试 fstab 是否有错5.系统初始化和服务启动。systemd服务启动,启动基础系统,启动本地服务,图形界面等。
6.用户会话初始化。启动shell,桌面环境,执行用户配置文件,启动用户级的systemd服务。
DNS解析过程
1. 客户端检查本地缓存:浏览器缓存 → 操作系统缓存(如 /etc/hosts 或 Windows hosts 文件)
2. 向本地 DNS 服务器(LDNS)发起查询: LDNS 通常是 ISP 提供的 DNS(如 8.8.8.8、114.114.114.114)或企业内网 DNS
3. LDNS 递归查询:查询根域名服务器(.com),查询顶级域名服务器(baidu.com),查询权威dns服务器(www.baidu.com)
4. LDNS 缓存结果并返回给客户端
常用dns调用工具

TCP/IP七层模型
OSI七层模型
TCP/IP是互联网的实际协议栈,简化了OSI模型,通常分为4层(有时把网络接口层拆成两层,称为5层)
网络访问在OSI七层模型中的逻辑关系
当你在浏览器输入 http://example.com:
应用层:生成 HTTP 请求传输层:加上 TCP 头(源/目的端口,如 50000 → 80)网络层:加上 IP 头(源/目的 IP)链路层:加上 Ethernet 帧头(源/目的 MAC)物理层:转换为电信号/光信号发送
接收方则逐层解封装,反向处理。
物理层:转换为电信号/光信号发送链路层:加上 Ethernet 帧头(源/目的 MAC)网络层:加上 IP 头(源/目的 IP)传输层:加上 TCP 头(源/目的端口,如 50000 → 80)应用层:生成 HTTP 请求
更多linux和云计算运维知识,请看公众号订阅或者公众号路途-在路上。

往期推荐:
持续分享了 Linux 运维中的实用技巧和工具,希望能为你的日常工作带来帮助。
系统稳定,始于细节;运维之道,贵在积累。
🔹 欢迎点赞 + 在看 + 转发,让更多同行看到!
🔹 关注本号,持续更新 Linux、Shell、云计算等技术干货!
🔹 留言区开放:你在实践中遇到过哪些运维问题?欢迎交流!