以下题目覆盖了 Linux 面试中常见的知识领域,包括基础命令、文件系统、进程管理、网络、性能调优和安全等。每个题目都给出了简明的答案要点,帮助你在面试中抓住核心逻辑,而非死记硬背。
一、基础命令与文件系统
1. 如何查看一个文件的第 50 行到第 100 行?
核心考点:sed 或 head + 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. 如何只杀死某个用户的所有进程?
核心考点:pkill 或 kill 配合 ps 的组合。
pkill -u username
或更谨慎的做法(使用 ps 列出,确认后再批量 kill):
ps -u username -o pid= | xargs kill -9
8. nohup、disown 和 screen/tmux 有什么区别?
核心考点:将进程与终端会话脱钩的不同方式。
nohup在启动命令时忽略 SIGHUP 信号,输出重定向到nohup.out,但进程仍与当前 shell 有关联。disown在命令启动后(先按Ctrl-Z,再bg放入后台),将进程从 shell 的作业列表中移除,shell 退出后不会向它发送 SIGHUP。screen/tmux创建一个完全独立的终端会话,可随时断开和重新连接,最可靠也最灵活。
9. Linux 的进程状态中,S、R、D、Z、T 分别代表什么?
核心考点:进程生命周期与调度。
R(running):正在运行或在运行队列中等待调度。S(sleeping):可中断睡眠,等待某个事件(如 IO 完成、信号)。D(disk sleep):不可中断睡眠,通常等待磁盘 IO,该状态不可被信号打断。T(stopped):进程被任务控制信号(SIGSTOP、SIGTSTP)暂停。Z(zombie):僵尸进程,进程已结束但父进程尚未调用wait()回收其资源。
三、内存与性能
10. top 中 VIRT、RES 和 SHR 的区别?
核心考点:进程内存占用的多维度理解。
VIRT(Virtual Image):进程申请的虚拟内存总量,包括代码、数据、共享库、映射文件以及 swap 出去的页面。对实际物理内存压力参考意义较小。RES(Resident):常驻物理内存的大小,即当前实际占用的物理 RAM(不含 swap),这是最直观的物理内存消耗指标。SHR(Shared):RES 中可被其他进程共享的内存(如共享库、共享内存段)。
11. 系统卡顿,free -h 显示 available 很低,但 buff/cache 很大,怎么办?
核心考点:Linux 内存回收机制,不要混淆 free 和 available。
buff/cache是内核用于加速文件访问的页面缓存和缓冲区,属于可回收内存。当应用程序需要更多内存时,内核会自动回收这些缓存,通常不需要人工干预。available列已经扣除了内核保留不可回收的部分,估算出应用程序可立即使用的内存。如果available足够,系统并无内存压力。- 只需关注
available,不要单纯因为free很小而恐慌。若真的内存不足,应排查哪个进程 RSS 异常增长(top或ps)。
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. 如何检查从本机到远程主机的网络连通性和路由路径?
核心考点:ping、traceroute、mtr。
ping测试基础连通性(ICMP 回显)。traceroute/tracepath显示数据包经过的每一跳。mtr是ping和traceroute的合体,实时更新每一跳的丢包率和延迟,特别适合排查间歇性网络问题。
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:存储加密后的用户密码及密码过期策略,文件权限为000或400(仅 root 可读),提升安全性。
20. 发现 CPU 使用率很高,但 top 中没有任何进程的 CPU 时间异常,可能是什么原因?
核心考点:可运行进程队列、中断处理、内核线程。
- 使用
top按“1”展开各 CPU 核心,观察%us(用户态)、%sy(内核态)、%id(空闲)的分布。 - 如果
%sy很高,可能系统正在处理大量中断或内核上下文切换,用vmstat 1观察in(中断数)和cs(上下文切换)。 - 可能是短时进程过于频繁创建销毁,
top来不及捕获,可用perf top或pidstat 1查看。 - 也可能是虚拟化环境中的 steal time,通过
%st字段判断(CPU 被宿主机其他虚拟机占用)。
21. 运行 ls 都报错 Too many open files,如何定位和解决?
核心考点:文件描述符限制。
- 查看当前系统全局限制:
cat /proc/sys/fs/file-max - 查看当前用户的软/硬限制:
ulimit -Sn和ulimit -Hn - 查看某个进程当前打开的文件描述符数:
ls /proc/<pid>/fd | wc -l - 临时增大限制:
ulimit -n 65535或修改/etc/security/limits.conf持久化。
22. Linux 开机启动流程大致是怎样的?
核心考点:BIOS/UEFI → bootloader → 内核 → init 系统。
- 固件阶段:BIOS/UEFI 加电自检,找到引导设备。
- Bootloader:GRUB 或 systemd-boot 加载内核和 initramfs。
- 内核初始化:初始化硬件、挂载根文件系统(可借助 initramfs),启动第一个用户态进程
init。 - init 系统:传统 SysV init 或 systemd,根据配置启动各项服务,到达目标运行级别(如 multi-user.target、graphical.target)。
23. 如何排查磁盘使用率突然飙升(如根分区满)?
核心考点:du、df、查找大文件及被删除但未释放的文件。
df -h查看各文件系统使用率。du -h --max-depth=1 /逐层查找大目录。- 查找大于 100MB 的文件:
find / -type f -size +100M - 有时
df显示满但du总和小很多,可能是进程仍持有已删除文件的句柄,使用lsof | grep deleted找到这些文件,重启对应服务或通知进程释放。
以上考点覆盖了多数 Linux 技术面试中从基础到进阶的实际问题。掌握这些题型背后的原理和工具,远比机械记忆答案更重要,因为灵活的组合和应用才是 Linux 真正的精髓。