Skip to content

面试题蒸馏卡:Linux与Shell

问题:Linux 基础概念有哪些?怎么排查 CPU/负载问题?Shell 脚本怎么考?引号/变量/重定向这些细节谁说得清?

高频问题与标准答

1. Linux 与 Unix 的区别?

维度LinuxUnix
开源✅ 免费开源❌ 商业授权付费
跨平台强,多种硬件弱,多与硬件绑定
界面命令行 + 图形界面主要是命令行
硬件要求低,易安装苛刻
用户群体个人 + 企业银行/电信等大型企业

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. execsource 的区别?

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 / casebreak 跳出循环,continue 跳过本次迭代。
  • 函数:函数名() { 命令; }
  • 特殊变量:$? 退出码、$# 参数个数、$@ 全部参数。

14. 通配符与正则的区别?

  • 通配符(wildcard,shell 层面):? * [charset],用于文件名匹配。
  • 正则(RE,文本处理工具层面,如 grep/awk/sed):^ $ . * [] 等,用于内容匹配。两者 [^](取反)写法不同场景含义不同——通配符里 [!] 取反,正则里 [^] 取反。

追问链

  1. dudf 有什么不同? df 查文件系统(含元数据 inode/超级块),du 是用户级统计目录文件大小——df 才是真实占用。
  2. 如何让命令后台运行? 命令 &jobs -l 查看;fg/bg 切换前后台;nohup 防挂断。
  3. kill -9 一定能杀进程吗? D 状态(不可中断睡眠)杀不掉,只能等 IO 恢复或重启;Z 僵尸杀不掉,等父进程回收。
  4. 怎么看系统日志? /var/log/messages 是许多进程日志的汇总,入侵企图/成功入侵都会留痕;ELK 也会收集。
  5. Linux 有哪些 IPC 方式? 管道/信号/消息队列/共享内存(最快)/信号量/Socket。
  6. 交换空间是什么? RAM 不足时临时保存并发程序的内存空间。

常见误解

  • ❌ "单引号双引号没区别" —— 单引号连 $ 都关闭,双引号保留变量替换。
  • ❌ "负载 1 就正常" —— 要除核数:4 核负载 4 才饱和。
  • ❌ "kill -9 万能" —— D 状态进程和僵尸进程都杀不掉。
  • ❌ "软链接删除会删原文件" —— 删软链接文件本身不会删原文件;删原文件才让软链接失效。

关联

最近更新