主题
面试题蒸馏卡:Linux与Shell
问题:Linux 基础概念有哪些?怎么排查 CPU/负载问题?Shell 脚本怎么考?引号/变量/重定向这些细节谁说得清?
高频问题与标准答
1. Linux 与 Unix 的区别?
| 维度 | Linux | Unix |
|---|---|---|
| 开源 | ✅ 免费开源 | ❌ 商业授权付费 |
| 跨平台 | 强,多种硬件 | 弱,多与硬件绑定 |
| 界面 | 命令行 + 图形界面 | 主要是命令行 |
| 硬件要求 | 低,易安装 | 苛刻 |
| 用户群体 | 个人 + 企业 | 银行/电信等大型企业 |
2. Linux 开机启动过程?
加电自检(BIOS) → 读 MBR 引导文件(GRUB/LILO) → 引导内核 → 运行第一个进程 init(PID=1) → 进入运行级别 → 登录终端。
3. 硬链接和软链接的区别?
| 维度 | 硬链接 | 软链接 |
|---|---|---|
| 本质 | 指向同一 inode 的目录项 | 独立 inode 存原文件路径 |
| 跨分区 | ❌ | ✅ |
| 链目录 | ❌(仅 root) | ✅ |
| 删除原文件 | 链接仍可访问 | 链接失效 |
| 实际使用 | 少 | 主流 |
4. 进程有哪些状态?D 状态是什么?
R(运行/就绪) · S(可中断睡眠) · D(不可中断睡眠,多因 IO) · T(暂停/跟踪) · Z(僵尸)。D 状态进程无法 kill,只能等资源恢复或重启;Z 僵尸是父进程没 wait4() 回收。
5. CPU 利用率和负载的区别?
利用率 = 时间片占用比例(实时);负载 = 使用中 + 等待中的任务平均数。单核负载 >1 即排队,判断要除以核数。利用率高可能负载低(计算密集单任务),利用率低可能负载高(IO 等待堆积)。
6. CPU 100% 怎么排查?
top 找进程 → top -Hp pid 找线程 → printf "0x%x\n" 线程ID 转 16 进制 → jstack Java进程PID | grep '0x...' -C5 定位代码。
7. Shell 里单引号和双引号的区别?
''(hard quote):所有 meta 字符都被关闭,原样输出。""(soft quote):大部分 meta 关闭,但$保留(变量替换仍生效)。\(escape):仅关闭紧接其后的单个 meta。
8. $?、$@、$*、$# 是什么?
$? = 上一条命令退出码(0 成功,非 0 失败)· $@/$* = 所有参数($@ 逐个独立,$* 按空格连成一串)· $# = 参数个数 · $0/$1/$2 = 脚本名/第 1/2 个参数。
9. 重定向怎么写?2>&1 是什么?
> 输出重定向 · < 输入重定向 · 2>&1 把标准错误合并到标准输出(等价 &>)· | 管道。例:ls /usr/share/doc > out.txt 2>&1。
10. exec 和 source 的区别?
source(.):当前 shell 进程内执行脚本,变量共享,常用于加载配置(如 .bashrc);exec:用新进程替换当前 shell,不返回原 shell。
11. && 与 || 的区别?
&& 前命令成功(exit 0)才执行后命令;|| 前命令失败才执行后命令;; 则无条件顺序执行。
12. $(())、$()、${} 是什么?
$(()) = 算术运算($((1+2)))· $() = 命令替换($(date) 执行命令取输出)· ${} = 变量引用/界定(${var},可用于字符串操作如 ${var%后缀})。
13. Shell 脚本基础考点?
- shebang:
#!/bin/bash指定解释器。 - 调试:
sh -x script.sh(跟踪执行)/sh -nv(语法检查)。 - 变量:系统变量(
set查看,大写)+ 用户变量(echo $var);unset取消。 - 算术:
expr 5 + 2/$[16+4]/let c=a+b。 - 条件:
test/[ ];数字比较-gt -lt -eq;字符串比较;文件测试-f -d -e -r -w -x -s。 - 循环:
for/while/until/case;break跳出循环,continue跳过本次迭代。 - 函数:
函数名() { 命令; }。 - 特殊变量:
$?退出码、$#参数个数、$@全部参数。
14. 通配符与正则的区别?
- 通配符(wildcard,shell 层面):
?*[charset],用于文件名匹配。 - 正则(RE,文本处理工具层面,如 grep/awk/sed):
^$.*[]等,用于内容匹配。两者[^](取反)写法不同场景含义不同——通配符里[!]取反,正则里[^]取反。
追问链
du和df有什么不同? df 查文件系统(含元数据 inode/超级块),du 是用户级统计目录文件大小——df 才是真实占用。- 如何让命令后台运行?
命令 &;jobs -l查看;fg/bg切换前后台;nohup防挂断。 kill -9一定能杀进程吗? D 状态(不可中断睡眠)杀不掉,只能等 IO 恢复或重启;Z 僵尸杀不掉,等父进程回收。- 怎么看系统日志?
/var/log/messages是许多进程日志的汇总,入侵企图/成功入侵都会留痕;ELK 也会收集。 - Linux 有哪些 IPC 方式? 管道/信号/消息队列/共享内存(最快)/信号量/Socket。
- 交换空间是什么? RAM 不足时临时保存并发程序的内存空间。
常见误解
- ❌ "单引号双引号没区别" —— 单引号连
$都关闭,双引号保留变量替换。 - ❌ "负载 1 就正常" —— 要除核数:4 核负载 4 才饱和。
- ❌ "kill -9 万能" —— D 状态进程和僵尸进程都杀不掉。
- ❌ "软链接删除会删原文件" —— 删软链接文件本身不会删原文件;删原文件才让软链接失效。
关联
- 概念:Linux技术栈总览
- 命令排障:概念卡片:Linux运维命令与排障
- Shell 原理深挖:面试题-经典的Shell十三问
- 应用排障:面试题蒸馏卡:应用服务内存与CPU爆满排查