一、核心考点:高频必问基础题型
1.1 文件与目录操作高频题
【考题】请列举至少5个用于文件操作的Linux命令,并分别说明其功能与典型使用场景。
- ls:列出目录内容。常用选项:-l(长格式)、-a(显示隐藏文件)、-h(人类可读格式)。例:
ls -lh /var/log - cd:切换目录。支持绝对路径(/home/user)与相对路径(../data)。特殊用法:
cd ~回到家目录,cd -返回上一目录。 - cp:复制文件/目录。注意:
cp -r递归复制目录,cp -p保留时间戳与权限。 - mv:移动/重命名。注意:跨文件系统时实际执行“复制+删除”,可能导致大文件耗时较长。
- rm:删除文件。危险命令!
rm -rf /tmp/data需谨慎。生产环境建议先用ls确认路径。
1.2 文件内容查看与文本处理
【考题】如何高效查看一个10GB的大型日志文件的最后100行,并实时监控其新增内容?
# 查看最后100行
tail -n 100 /var/log/syslog
# 实时监控新增内容(Ctrl+C退出)
tail -f /var/log/syslog
【拓展】其他常用命令:
head -n 20 file:查看前20行cat -n file:带行号显示全部内容less file:交互式分页查看(支持搜索、跳转)grep -n "error" file:查找含"error"的行并显示行号
1.3 路径与环境变量
【考题】PATH环境变量的作用是什么?如何临时添加自定义脚本目录到PATH?
PATH是系统搜索可执行文件的目录列表,目录间用冒号分隔。查看命令:echo $PATH
临时添加(当前会话有效):
export PATH=$PATH:/home/user/scripts
永久生效需写入shell配置文件(如~/.bashrc或/etc/profile):
# 在 ~/.bashrc 末尾添加
echo 'export PATH=$PATH:/home/user/scripts' >> ~/.bashrc
source ~/.bashrc
2.1 文件权限解析
【考题】解释-rwxr-xr-- 1 root root 1024 Jan 10 15:30 script.sh中各部分含义。
| 字段 | 含义 | 示例值 |
|---|---|---|
| 首字符 | 文件类型 | -普通文件,d目录,l符号链接 |
| 第2-4位 | 属主权限 | rwx:可读、可写、可执行 |
| 第5-7位 | 属组权限 | r-x:可读、可执行,不可写 |
| 第8-10位 | 其他用户权限 | r--:仅可读 |
【实操】修改权限示例:
# 赋予脚本执行权限
chmod +x script.sh
# 设置属主全权限,组和其他用户只读
chmod 744 script.sh
2.2 用户与组管理
【考题】如何创建一个名为devops的用户组,并添加用户alice到该组作为其主组?
# 创建用户组
groupadd devops
# 创建用户并指定主组
useradd -g devops alice
# 验证用户组归属
id alice
# 输出:uid=1001(alice) gid=1002(devops) groups=1002(devops)
【注意】生产环境建议使用-m选项自动创建家目录:useradd -m -g devops alice
3.1 进程管理核心命令
【考题】如何查找占用8080端口的进程并强制终止?
# 查找占用端口的进程ID
lsof -i :8080 | grep LISTEN
# 或使用 netstat(需安装 net-tools)
netstat -tulnp | grep :8080
# 强制终止进程(假设PID=1234)
kill -9 1234
【拓展】进程状态说明(ps aux输出):
- R:运行中
- S:可中断睡眠(等待事件)
- D:不可中断睡眠(通常等待I/O)
- Z:僵尸进程
- T:停止或跟踪中
3.2 系统资源监控
【考题】如何实时查看系统内存、CPU和进程资源使用情况?
top是经典工具,但交互性较弱。推荐使用增强版:
# 安装 htop(Debian/Ubuntu)
sudo apt install htop
# 运行
htop
htop提供彩色界面、树状进程视图、可滚动条目,极大提升监控效率。
【轻量方案】使用vmstat快速获取系统摘要:
vmstat 2 5 # 每2秒采样,共5次
二、Shell脚本:自动化能力的试金石
2.1 脚本结构与参数处理
【典型考题】编写一个脚本,接受两个参数:文件路径和关键词,输出该文件中包含关键词的所有行及行号。
#!/bin/bash
# 文件:grep_lines.sh
# 用法:./grep_lines.sh <file> <keyword>
# 参数校验
if [ $# -ne 2 ]; then
echo "错误:需提供2个参数(文件路径和关键词)"
echo "用法:$0 <file> <keyword>"
exit 1
fi
# 文件存在性检查
if [ ! -f "$1" ]; then
echo "错误:文件 '$1' 不存在"
exit 2
fi
# 执行搜索
grep -n "$2" "$1"
【关键点】:
$#:参数个数;$0:脚本名;$1、$2:第1、2个参数- 所有变量引用需加双引号:
"$1",防止空格导致解析错误 - 使用
exit返回规范状态码(0成功,1参数错误,2文件错误)
2.2 条件判断与循环结构
【考题】编写脚本检查系统中是否存在名为nginx的用户,若不存在则创建该用户(无家目录、非登录用户)。
#!/bin/bash
# 文件:check_user.sh
USERNAME="nginx"
# 使用 id 命令检查用户是否存在(返回0表示存在)
if id "$USERNAME" >/dev/null 2>&1; then
echo "用户 '$USERNAME' 已存在"
else
# 创建系统用户(UID < 1000,无家目录,无登录shell)
sudo useradd -r -s /sbin/nologin "$USERNAME"
echo "成功创建用户 '$USERNAME'"
fi
【拓展】循环示例——批量检查服务状态:
SERVICES=("nginx" "sshd" "cron")
for svc in "${SERVICES[@]}"; do
if systemctl is-active --quiet "$svc" 2>/dev/null; then
echo "[✓] $svc 运行中"
else
echo "[✗] $svc 未运行"
fi
done
2.3 函数与模块化设计
【最佳实践】将常用逻辑封装为函数,提升可读性与复用性:
#!/bin/bash
# 日志函数:带时间戳与级别
log() {
local level="$1"
shift
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $*"
}
# 错误处理函数
die() {
log "ERROR" "$*" >&2
exit 1
}
# 主逻辑
log "INFO" "开始执行备份任务..."
# 模拟检查
if [ ! -d "/var/data" ]; then
die "备份源目录 /var/data 不存在"
fi
log "SUCCESS" "备份任务完成"
三、系统管理:生产环境实战能力
3.1 日志系统深度解析
【考题】systemd-journald与传统syslog有何区别?如何查看特定服务的最近100条日志?
核心差异:
| 特性 | syslog (rsyslog) | systemd-journald |
|---|---|---|
| 存储格式 | 纯文本 | 二进制(高效查询) |
| 日志来源 | 仅内核/应用输出 | 内核、应用、systemd服务、标准输出 |
| 时间戳精度 | 秒级 | 纳秒级 |
| 日志压缩 | 需额外配置 | 自动压缩旧日志 |
【实操】查看nginx.service最近100条日志:
journalctl -u nginx.service -n 100 --no-pager
【生产建议】长期保留日志需配置持久化:
# 编辑 /etc/systemd/journald.conf
Storage=persistent
# 确保 /var/log/journal 存在
mkdir -p /var/log/journal
3.2 服务管理与开机自启
【考题】如何禁止某个服务开机自启?如何临时停止服务但保留下次启动能力?
# 禁止开机自启(不影响当前运行状态)
sudo systemctl disable nginx
# 停止当前运行的服务
sudo systemctl stop nginx
# 临时屏蔽服务(防止被其他服务间接启动)
sudo systemctl mask nginx
# 取消屏蔽:systemctl unmask nginx
【验证方法】:
# 查看服务是否启用开机自启
systemctl is-enabled nginx
3.3 cron定时任务管理
【考题】编写cron任务:每天凌晨2:30压缩并备份/var/log/app目录,保留7天。
# 编辑当前用户的crontab
crontab -e
# 添加以下行(注意:cron不支持直接压缩目录,需用脚本)
30 2 * * * /usr/local/bin/backup_app_logs.sh
配套脚本 /usr/local/bin/backup_app_logs.sh:
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/logs"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/app_logs_$DATE.tar.gz" /var/log/app
# 删除7天前的备份
find "$BACKUP_DIR" -name "app_logs_*.tar.gz" -mtime +7 -delete
【安全提示】:
- 避免在cron中使用绝对路径(如
/bin/tar),改用command -v tar动态获取 - 将错误输出重定向到日志:
30 2 * * * /script.sh 2>&1 | logger -t backup
3.4 磁盘与文件系统管理
【考题】如何识别磁盘空间瓶颈?如何安全扩展LVM卷?
【诊断步骤】:
# 查看磁盘使用率
df -h
# 查看各目录大小(根目录)
du -sh /* 2>/dev/null | sort -h
# 检查inode使用率(常被忽略!)
df -i
【LVM扩展流程】(假设扩展/dev/mapper/vg_data-lv_data):
# 1. 扩展物理卷(如有新增磁盘)
pvcreate /dev/sdb1
vgextend vg_data /dev/sdb1
# 2. 扩展逻辑卷(增加100GB)
lvextend -L +100G /dev/mapper/vg_data-lv_data
# 3. 调整文件系统大小(ext4)
resize2fs /dev/mapper/vg_data-lv_data
# 或 XFS 文件系统:
xfs_growfs /mount/point
四、云与容器:现代架构下的Linux能力
4.1 Docker容器基础
【考题】Docker容器与虚拟机的本质区别是什么?如何优化容器镜像大小?
核心差异:
| 维度 | 虚拟机 (VM) | Docker容器 |
|---|---|---|
| 隔离级别 | 硬件级(Hypervisor) | 进程级(命名空间+Cgroups) |
| 启动速度 | 分钟级 | 秒级 |
| 资源开销 | 高(需完整OS) | 低(共享主机内核) |
| 镜像大小 | GB级 | MB级 |
【镜像优化技巧】:
- 多阶段构建:
FROM golang:1.20 AS builder WORKDIR /app COPY . . RUN go build -o myapp FROM alpine:latest RUN apk --no-cache add ca-certificates COPY --from=builder /app/myapp /usr/local/bin/ CMD ["myapp"] - 使用精简基础镜像:优先选择
alpine、distroless - 清理构建依赖:
apt-get clean && rm -rf /var/lib/apt/lists/*
4.2 Kubernetes与Linux内核参数
【考题】K8s节点为何需要调整内核参数?关键参数有哪些?
【常见需求】:
| 参数 | 作用 | 推荐值 |
|---|---|---|
net.bridge.bridge-nf-call-iptables |
确保iptables规则对桥接流量生效 | 1 |
net.ipv4.ip_forward |
允许IP转发(Pod网络必需) | 1 |
vm.swappiness |
降低交换倾向(避免性能抖动) | 1(生产环境) |
【部署时操作】:
# 临时生效(重启失效)
sysctl -w net.bridge.bridge-nf-call-iptables=1
# 永久生效(写入 /etc/sysctl.d/k8s.conf)
echo "net.bridge.bridge-nf-call-iptables = 1" > /etc/sysctl.d/k8s.conf
sysctl --system
4.3 GitOps与Linux自动化
【趋势】:企业正从传统CI/CD转向GitOps模式,Linux脚本成为声明式配置的实现基础。
【案例】:用Bash脚本生成K8s Helm values.yaml:
#!/bin/bash
# 根据环境生成values.yaml
ENV=$1
[ -z "$ENV" ] && { echo "用法:$0 [dev|staging|prod]"; exit 1; }
cat > values.yaml << EOF
replicaCount: $( [ "$ENV" = "prod" ] && echo 3 || echo 1 )
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 200m
memory: 256Mi
EOF
echo "已生成 $ENV 环境配置"
【价值】:将运维逻辑代码化,实现环境差异的可追溯与自动化。
五、高频问答:网友最关心的10个问题
根据2024年招聘数据,TOP3考点为:
- 命令行操作与文件系统(32%)
- Shell脚本编写能力(28%)
- 服务管理与日志排查(20%)
建议优先掌握命令速查与脚本调试技巧。
推荐三个低成本方案:
- 搭建个人实验环境:在云服务器(如阿里云学生机)部署LAMP+GitLab
- 开源项目贡献:为运维类项目提交脚本优化PR
- 技术博客记录:撰写《从零搭建Jenkins自动化部署流水线》
实践路径:
- Step1:用
awk处理日志(awk '{print $1}' access.log | sort | uniq -c) - Step2:写监控脚本(检查CPU/内存/磁盘阈值)
- Step3:参与开源项目(GitHub搜索"bash script"找Issue)
是的!本题库特别增加:
- Docker容器化部署实战(镜像构建、网络配置)
- Kubernetes节点故障排查(kubelet日志分析)
- GitOps工作流中的Linux自动化技巧
必备安全技能:
| 领域 | 关键点 |
|---|---|
| 用户安全 | 禁用root远程登录、SSH密钥认证、定期审计用户 |
| 系统加固 | 最小化安装、关闭非必要服务、SELinux/AppArmor配置 |
| 日志审计 | 启用auditd记录关键操作、集中收集日志 |
三重防护策略:
- 别名保护:
alias rm='rm -i' - 回收站机制:自定义
myrm函数移动到/tmp/trash - 权限最小化:运维账号仅开放必要目录的写权限
高频命令TOP5:
ps(进程查看)netstat/ss(网络状态)grep(文本搜索)awk(数据处理)find(文件查找)
建议掌握各命令5种以上常用参数组合。
学习路径:
- 基础:理解进程调度、内存管理、I/O模型
- 工具:使用
perf、bpftrace分析性能瓶颈 - 实践:针对Web服务器优化TCP参数(
net.core.somaxconn)
推荐书籍:《Linux内核设计与实现》《性能之巅》
除基础能力外,重点考察:
- 集群架构设计:负载均衡、高可用方案(Keepalived+LVS)
- 故障定位体系:从日志→监控→告警的全链路排查
- 自动化运维:Ansible配置管理、Terraform资源编排
高效训练法:
- 准备虚拟机环境(VirtualBox/VMware)
- 每日1题:从题库随机抽取问题现场操作
- 录制操作视频:回看优化操作流程
- 模拟压力场景:故意制造故障训练应急能力