人人都会AI编程

附录 C Linux 高频面试题与核心考点

更新时间:2026-07-12

以下题目覆盖了 Linux 面试中常见的知识领域,包括基础命令、文件系统、进程管理、网络、性能调优和安全等。每个题目都给出了简明的答案要点,帮助你在面试中抓住核心逻辑,而非死记硬背。


一、基础命令与文件系统

1. 如何查看一个文件的第 50 行到第 100 行?

核心考点:sedhead + tail 的组合用法。

sed -n '50,100p' filename
head -100 filename | tail -51

2. >>> 有什么区别?

核心考点:输出重定向的覆盖与追加。

  • > 覆盖目标文件内容,文件不存在则新建。
  • >> 在文件末尾追加内容。
  • 使用 set -o noclobber 可以防止 > 意外覆盖已有文件。

3. 怎样找出 /var/log 下最近 7 天内修改过且大于 10MB 的文件?

核心考点:find 命令的组合条件。

find /var/log -type f -mtime -7 -size +10M
  • -mtime -7 表示修改时间在 7 天以内。
  • -size +10M 表示大于 10 兆字节。

4. 硬链接和软链接(符号链接)的区别是什么?

核心考点:inode 与文件链接的本质。

| 特性 | 硬链接 | 软链接(符号链接) |
|------|--------|-------------------|
| 本质 | 指向同一个 inode 的多个文件名 | 一个特殊的文件,内容为目标路径 |
| 跨文件系统 | 否 | 是 |
| 删除原文件 | 不影响 | 链接失效(变成悬空链接) |
| 创建命令 | ln source link | ln -s source link |
| 适用对象 | 不能链接目录(通常) | 可以链接目录 |


5. 如何使用 rsync 同步两个目录并保持权限和时间戳?

核心考点:rsync 常用选项。

rsync -avz /source/ /destination/
  • -a 归档模式,保留权限、时间戳、递归等。
  • -v 显示详情。
  • -z 传输时压缩(可选)。

二、进程与作业管理

6. 运行中的进程突然卡住了,如何排查?

核心考点:进程状态、跟踪系统调用、查看调用栈。

  • ps aux | grep <proc>top 查看进程状态(D 表示不可中断休眠,可能是 IO 问题)。
  • strace -p <pid> 查看当前系统调用,停在哪个调用上。
  • gdb -p <pid> 然后 thread apply all bt 查看各线程调用栈。
  • cat /proc/<pid>/stack 查看内核调用栈(需 root)。

7. 如何只杀死某个用户的所有进程?

核心考点:pkillkill 配合 ps 的组合。

pkill -u username

或更谨慎的做法(使用 ps 列出,确认后再批量 kill):

ps -u username -o pid= | xargs kill -9

8. nohupdisownscreen/tmux 有什么区别?

核心考点:将进程与终端会话脱钩的不同方式。

  • nohup 在启动命令时忽略 SIGHUP 信号,输出重定向到 nohup.out,但进程仍与当前 shell 有关联。
  • disown 在命令启动后(先按 Ctrl-Z,再 bg 放入后台),将进程从 shell 的作业列表中移除,shell 退出后不会向它发送 SIGHUP。
  • screen/tmux 创建一个完全独立的终端会话,可随时断开和重新连接,最可靠也最灵活。

9. Linux 的进程状态中,SRDZT 分别代表什么?

核心考点:进程生命周期与调度。

  • R (running):正在运行或在运行队列中等待调度。
  • S (sleeping):可中断睡眠,等待某个事件(如 IO 完成、信号)。
  • D (disk sleep):不可中断睡眠,通常等待磁盘 IO,该状态不可被信号打断。
  • T (stopped):进程被任务控制信号(SIGSTOP、SIGTSTP)暂停。
  • Z (zombie):僵尸进程,进程已结束但父进程尚未调用 wait() 回收其资源。

三、内存与性能

10. topVIRTRESSHR 的区别?

核心考点:进程内存占用的多维度理解。

  • VIRT (Virtual Image):进程申请的虚拟内存总量,包括代码、数据、共享库、映射文件以及 swap 出去的页面。对实际物理内存压力参考意义较小。
  • RES (Resident):常驻物理内存的大小,即当前实际占用的物理 RAM(不含 swap),这是最直观的物理内存消耗指标。
  • SHR (Shared):RES 中可被其他进程共享的内存(如共享库、共享内存段)。

11. 系统卡顿,free -h 显示 available 很低,但 buff/cache 很大,怎么办?

核心考点:Linux 内存回收机制,不要混淆 freeavailable

  • buff/cache 是内核用于加速文件访问的页面缓存和缓冲区,属于可回收内存。当应用程序需要更多内存时,内核会自动回收这些缓存,通常不需要人工干预
  • available 列已经扣除了内核保留不可回收的部分,估算出应用程序可立即使用的内存。如果 available 足够,系统并无内存压力。
  • 只需关注 available,不要单纯因为 free 很小而恐慌。若真的内存不足,应排查哪个进程 RSS 异常增长(topps)。

12. 什么是交换空间(swap)?应该如何规划大小?

核心考点:物理内存不足时的补充策略。

  • swap 是磁盘上的一块空间,当物理内存吃紧且内核回收缓存后仍不足时,将部分不常用的内存页暂时写入磁盘。
  • 一般建议:
  • 桌面/笔记本:RAM 大小至 2 倍 RAM(考虑到休眠需要)。
  • 服务器:以物理内存的 50% ~ 100% 为宜,但更重要的原则是观察实际使用(swappiness 值 + 业务对延迟的容忍度)。
  • vm.swappiness 参数(0-100)控制内核交换的积极程度,对于需要低延迟的服务(如数据库),往往调低该值(例如设为 1 或 10),避免不必要的交换。

四、网络

13. 如何查看某个端口被哪个进程占用?

核心考点:ss / netstat + grep,以及需要 root 权限查看进程信息。

ss -tlnp | grep :80
  • -t:TCP
  • -l:监听端口
  • -n:以数字形式显示地址和端口
  • -p:显示进程信息(需 root)

或旧的 netstat

netstat -tlnp | grep :80

14. 如何检查从本机到远程主机的网络连通性和路由路径?

核心考点:pingtraceroutemtr

  • ping 测试基础连通性(ICMP 回显)。
  • traceroute / tracepath 显示数据包经过的每一跳。
  • mtrpingtraceroute 的合体,实时更新每一跳的丢包率和延迟,特别适合排查间歇性网络问题。

15. iptables 中 filter 表的三个默认链以及各自的作用?

核心考点:Netfilter 的包过滤流程。

  • INPUT:处理目的地是本机的入站数据包。
  • OUTPUT:处理本机生成的出站数据包。
  • FORWARD:处理经本机路由转发的数据包(非本地产生也非本地接收)。

数据包流经路径常问及:PREROUTING → (路由决策) → INPUT 或 FORWARD → POSTROUTING。


16. 怎样找出当前系统中的所有 TCP 连接并统计各状态的连接数?

核心考点:ss 的状态统计及 awk 组合。

ss -tan | awk 'NR>1 {state[$1]++} END {for (s in state) print s, state[s]}'

或者:

ss -s

五、系统管理与安全

17. chmod 755 file 中的 755 是什么意思?

核心考点:Linux 权限模型和八进制表示法。

  • 7 = 4(读)+ 2(写)+ 1(执行)= rwx(所有者权限)
  • 5 = 4 + 0 + 1 = r-x(所属组权限)
  • 5 = r-x(其他用户权限)

最终权限字符串为:rwxr-xr-x


18. 一个进程以 root 运行,但需要对某些目录的操作进行更细粒度的限制,该如何实现?

核心考点:能力(capabilities)、SELinux/AppArmor。

  • 可以给进程赋予必要的 Linux capabilities(如 CAP_NET_BIND_SERVICE 绑定低于 1024 的端口),而不给完整 root 权限。
  • 使用 SELinux 或 AppArmor 定义强制访问控制(MAC)规则,将进程限制在最小权限范围,即使进程被攻破也难以波及整个系统。
  • 也可以利用命名空间做容器化隔离(如 Docker)。

19. Linux 系统中 /etc/passwd/etc/shadow 的作用分别是什么?

核心考点:用户账户信息和密码的分离存储。

  • /etc/passwd:存储用户账户基本信息,如用户名、UID、GID、全名、家目录、默认 shell。历史上一度也存储加密密码,现在该字段通常为 x
  • /etc/shadow:存储加密后的用户密码及密码过期策略,文件权限为 000400(仅 root 可读),提升安全性。

20. 发现 CPU 使用率很高,但 top 中没有任何进程的 CPU 时间异常,可能是什么原因?

核心考点:可运行进程队列、中断处理、内核线程。

  • 使用 top 按“1”展开各 CPU 核心,观察 %us(用户态)、%sy(内核态)、%id(空闲)的分布。
  • 如果 %sy 很高,可能系统正在处理大量中断或内核上下文切换,用 vmstat 1 观察 in(中断数)和 cs(上下文切换)。
  • 可能是短时进程过于频繁创建销毁,top 来不及捕获,可用 perf toppidstat 1 查看。
  • 也可能是虚拟化环境中的 steal time,通过 %st 字段判断(CPU 被宿主机其他虚拟机占用)。

21. 运行 ls 都报错 Too many open files,如何定位和解决?

核心考点:文件描述符限制。

  • 查看当前系统全局限制:cat /proc/sys/fs/file-max
  • 查看当前用户的软/硬限制:ulimit -Snulimit -Hn
  • 查看某个进程当前打开的文件描述符数:ls /proc/<pid>/fd | wc -l
  • 临时增大限制:ulimit -n 65535 或修改 /etc/security/limits.conf 持久化。

22. Linux 开机启动流程大致是怎样的?

核心考点:BIOS/UEFI → bootloader → 内核 → init 系统。

  1. 固件阶段:BIOS/UEFI 加电自检,找到引导设备。
  2. Bootloader:GRUB 或 systemd-boot 加载内核和 initramfs。
  3. 内核初始化:初始化硬件、挂载根文件系统(可借助 initramfs),启动第一个用户态进程 init
  4. init 系统:传统 SysV init 或 systemd,根据配置启动各项服务,到达目标运行级别(如 multi-user.target、graphical.target)。

23. 如何排查磁盘使用率突然飙升(如根分区满)?

核心考点:dudf、查找大文件及被删除但未释放的文件。

  • df -h 查看各文件系统使用率。
  • du -h --max-depth=1 / 逐层查找大目录。
  • 查找大于 100MB 的文件:find / -type f -size +100M
  • 有时 df 显示满但 du 总和小很多,可能是进程仍持有已删除文件的句柄,使用 lsof | grep deleted 找到这些文件,重启对应服务或通知进程释放。

以上考点覆盖了多数 Linux 技术面试中从基础到进阶的实际问题。掌握这些题型背后的原理和工具,远比机械记忆答案更重要,因为灵活的组合和应用才是 Linux 真正的精髓。