Linux

·9 分钟阅读·3599 字
📋 目录

Linux 服务面试题


Linux 启动流程

【题目】 请描述 Linux 系统的启动流程,从 BIOS 启动到用户登录界面的过程。

【参考答案】 Linux 启动流程共 7 步:

BIOS 自检 → 引导加载程序(GRUB)→ 内核加载 → init 进程(PID 1)→ 系统服务启动 → 多用户模式 → 用户登录

详细步骤

  1. BIOS/UEFI 自检:硬件自检,从预设启动设备加载引导扇区
  2. GRUB 引导加载:展示启动菜单,加载所选内核及 initramfs 到内存
  3. 内核初始化:检测硬件 → 加载驱动 → 设置虚拟内存 → 挂载根文件系统(只读)
  4. init 进程启动:内核启动第一个用户空间进程(PID 1),现代 Linux 使用 systemd
  5. 系统服务启动:systemd 根据 target 配置启动服务(网络、日志、守护进程)
  6. 多用户模式:启动登录服务(agetty),显示登录提示
  7. 用户登录:验证身份,创建会话,启动 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 数据库
特性findlocate
速度较慢(实时遍历)极快(查数据库)
实时性实时❌ 依赖数据库更新
功能丰富(时间、大小、权限过滤)简单(仅按文件名)

【延伸追问】

  • find 配合 -exec 如何批量处理搜索结果?
  • whichwhereislocate 三者有什么区别?

【易错坑点】

  • 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 文件存放在哪些目录?

【易错坑点】

  • 修改了配置文件后不执行 reloadrestart 不会生效
  • systemctl reload 要求服务支持 SIGHUP 信号

查看正在运行的进程

【题目】 如何在 Linux 中查看正在运行的进程?

【参考答案】

# 静态查看
ps aux                    # 所有进程(BSD 格式)
ps -ef                    # 所有进程(标准格式)
ps aux --sort=-%mem       # 按内存使用排序

# 动态监控
top                       # 实时进程监控
htop                      # top 增强版(交互式)

ps aux 字段含义

字段含义
USER进程所有者
PID进程 ID
%CPUCPU 使用率
%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 命令详解 — 性能工具