Linux 服务面试题
1. 创建用户并指定主目录
useradd -m -d /home/newuser newuser
2. 设置密码
passwd newuser
3. 参数说明
-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 系统上的服务立即生效?
【参考答案】
4. 重新加载配置(不重启服务)
systemctl reload servicename
5. 重启服务(完全停止再启动)
systemctl restart servicename
6. 重新加载或重启(优先 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 中查看正在运行的进程?
【参考答案】
7. 静态查看
ps aux # 所有进程(BSD 格式)
ps -ef # 所有进程(标准格式)
ps aux —sort=-%mem # 按内存使用排序
8. 动态监控
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)** 是一种**加密的网络传输协议**,用于在不安全的网络中安全地执行远程命令。
9. 基本连接
ssh username@hostname
10. 指定端口(默认 22)
ssh -p 2222 username@hostname
11. 密钥认证(推荐)
ssh-keygen -t ed25519 # 生成密钥对
ssh-copy-id username@hostname # 复制公钥到服务器
12. 配置文件 ~/.ssh/config
Host myserver
HostName 192.168.1.100
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
13. 之后可以直接 ssh myserver
【延伸追问】
- SSH 密码认证和密钥认证的工作流程有什么区别?
- SSH 端口转发(本地转发、远程转发、动态转发)如何使用?
【易错坑点】
- **生产环境建议禁用密码认证**,仅使用密钥认证
- 私钥文件权限必须为 600(`chmod 600 ~/.ssh/id_ed25519`),否则 SSH 拒绝使用
---
> [!info] 关联文档
> - [[Linux]]:Linux 学习主页
> - [[iostat 命令详解]]:性能工具
