Linux 服务面试题
Linux 启动流程
【题目】 请描述 Linux 系统的启动流程,从 BIOS 启动到用户登录界面的过程。
【参考答案】 Linux 启动流程共 7 步:
BIOS 自检 → 引导加载程序(GRUB)→ 内核加载 → init 进程(PID 1)→ 系统服务启动 → 多用户模式 → 用户登录
详细步骤:
- BIOS/UEFI 自检:硬件自检,从预设启动设备加载引导扇区
- GRUB 引导加载:展示启动菜单,加载所选内核及 initramfs 到内存
- 内核初始化:检测硬件 → 加载驱动 → 设置虚拟内存 → 挂载根文件系统(只读)
- init 进程启动:内核启动第一个用户空间进程(PID 1),现代 Linux 使用 systemd
- 系统服务启动:systemd 根据 target 配置启动服务(网络、日志、守护进程)
- 多用户模式:启动登录服务(agetty),显示登录提示
- 用户登录:验证身份,创建会话,启动 Shell 或桌面环境
【延伸追问】
- GRUB 引导失败如何修复?
- systemd 相比 SysVinit 的优势是什么?(并行启动、依赖管理、按需启动)
【易错坑点】
- init 进程(PID 1)不能被 kill,kill PID 1 会导致内核 panic
- 根文件系统先以只读挂载,检查完后再重新挂载为读写
Linux 文件查找
【题目】 在 Linux 中,如何查找一个文件?
【参考答案】 两种主要方式:
1. find 命令(实时搜索,功能强大)
find / -name "filename" # 按文件名查找
find / -name "*.log" -type f # 查找所有 .log 文件
find / -size +100M # 查找大于 100M 的文件
2. locate 命令(快速搜索,依赖数据库)
locate filename # 基于预建数据库,速度极快
updatedb # 更新 locate 数据库
| 特性 | find | locate |
|---|---|---|
| 速度 | 较慢(实时遍历) | 极快(查数据库) |
| 实时性 | ✅ 实时 | ❌ 依赖数据库更新 |
| 功能 | 丰富(时间、大小、权限过滤) | 简单(仅按文件名) |
【延伸追问】
find配合-exec如何批量处理搜索结果?which、whereis、locate三者有什么区别?
【易错坑点】
find如果没有指定路径,默认从当前目录开始搜索locate数据库通常每天更新一次,新建的文件查不到
Linux 权限管理
【题目】 解释一下什么是 Linux 中的权限,并举例说明。
【参考答案】 Linux 权限是控制特定用户/用户组对文件或目录可执行的操作的机制。
三种权限:
| 权限 | 文件 | 目录 |
|---|---|---|
| r(4) | 读取文件内容 | 列出目录内容 |
| w(2) | 修改文件内容 | 创建/删除目录内文件 |
| x(1) | 执行文件 | 进入目录 |
三种用户:u(拥有者)、g(所属组)、o(其他用户)
示例:
chmod 755 filename # rwxr-xr-x:拥有者全部权限,组和其他只读+执行
chmod u+x filename # 给拥有者添加执行权限
chown user:group filename # 修改文件拥有者和组
【延伸追问】
- SUID、SGID、Sticky Bit 分别有什么作用?
- 目录的
r权限但没有x权限,能否访问目录下的文件?
【易错坑点】
- 目录的 x 权限是进入目录的前提,只有 r 权限无法
cd进入 chmod 777是最不安全的方式,生产环境严禁使用
创建用户与设置主目录
【题目】 如何在 Linux 中创建一个新用户,并设置其主目录?
【参考答案】
# 创建用户并指定主目录
useradd -m -d /home/newuser newuser
# 设置密码
passwd newuser
# 参数说明
-m # 如果主目录不存在则创建
-d # 指定主目录路径
-s # 指定登录 Shell(默认 /bin/bash)
-G # 指定附加组
相关命令:
usermod -aG wheel newuser # 将用户加入 wheel 组(sudo 权限)
userdel -r newuser # 删除用户及其主目录
【延伸追问】
/etc/passwd、/etc/shadow、/etc/group三个文件的作用?- 如何批量创建用户?
【易错坑点】
- 不指定
-m时主目录不会自动创建 - 删除用户时记得加
-r参数清理主目录,否则会残留垃圾文件
systemctl 管理服务
【题目】 如何在不重新启动服务的情况下,使 Linux 系统上的服务立即生效?
【参考答案】
# 重新加载配置(不重启服务)
systemctl reload servicename
# 重启服务(完全停止再启动)
systemctl restart servicename
# 重新加载或重启(优先 reload,不支持则 restart)
systemctl reload-or-restart servicename
reload vs restart:
| 操作 | 行为 | 中断服务? |
|---|---|---|
| reload | 发送 SIGHUP 信号,重新读取配置 | ❌ 不中断 |
| restart | 停止 → 重新启动 | ✅ 中断 |
其他常用命令:
systemctl status servicename # 查看服务状态
systemctl enable servicename # 开机自启
systemctl disable servicename # 关闭开机自启
journalctl -u servicename -f # 查看服务日志
【延伸追问】
- 哪些服务不支持
reload?(如 Nginx 支持,MySQL 部分配置需要 restart) - systemd 的 unit 文件存放在哪些目录?
【易错坑点】
- 修改了配置文件后不执行
reload或restart不会生效 systemctl reload要求服务支持 SIGHUP 信号
查看正在运行的进程
【题目】 如何在 Linux 中查看正在运行的进程?
【参考答案】
# 静态查看
ps aux # 所有进程(BSD 格式)
ps -ef # 所有进程(标准格式)
ps aux --sort=-%mem # 按内存使用排序
# 动态监控
top # 实时进程监控
htop # top 增强版(交互式)
ps aux 字段含义:
| 字段 | 含义 |
|---|---|
| USER | 进程所有者 |
| PID | 进程 ID |
| %CPU | CPU 使用率 |
| %MEM | 内存使用率 |
| VSZ | 虚拟内存大小 |
| RSS | 常驻内存大小 |
| STAT | 进程状态(R=运行,S=休眠,Z=僵尸) |
| COMMAND | 命令名 |
【延伸追问】
- 僵尸进程是如何产生的?如何清理?
top输出的 %CPU 可以超过 100% 吗?(多核情况下可以)
【易错坑点】
ps aux显示的是命令执行瞬间的快照,不是实时数据- 进程状态 Z(僵尸)表示进程已结束但父进程未回收,少量正常,大量需排查
SSH 远程连接
【题目】 解释一下什么是 SSH,如何使用它?
【参考答案】 SSH(Secure Shell) 是一种加密的网络传输协议,用于在不安全的网络中安全地执行远程命令。
# 基本连接
ssh username@hostname
# 指定端口(默认 22)
ssh -p 2222 username@hostname
# 密钥认证(推荐)
ssh-keygen -t ed25519 # 生成密钥对
ssh-copy-id username@hostname # 复制公钥到服务器
# 配置文件 ~/.ssh/config
Host myserver
HostName 192.168.1.100
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
# 之后可以直接 ssh myserver
【延伸追问】
- SSH 密码认证和密钥认证的工作流程有什么区别?
- SSH 端口转发(本地转发、远程转发、动态转发)如何使用?
【易错坑点】
- 生产环境建议禁用密码认证,仅使用密钥认证
- 私钥文件权限必须为 600(
chmod 600 ~/.ssh/id_ed25519),否则 SSH 拒绝使用
关联文档
- ../system/Linux — Linux 学习主页
- ../storage/iostat 命令详解 — 性能工具