运维简答题 2
✅ 题目18:
显示 /etc/crontab 中以 # 开头,且后面跟了一个或多个空白字符,而后又跟了任意非空白字符的行
答案:
grep -P '^#\s+\S' /etc/crontab
✅题目19:
有文件 file1
- 查找 file1 里所有空行的所在行号
- 查找 file1 中以 abc 结尾的行
- 打印出 file1 文件第 1 到第 3 行
答案:
- 查找所有空行的行号:
-
grep -n '^\$' file1 | cut -d: -f1 或者: awk '/^\$/ {print NR}' file1
- 查找以 abc 结尾的行:
grep 'abc
- 打印第 1 到第 3 行:
sed -n '1,3p' file1
或者:
head -n 3 file1
✅题目20:
写一个脚本,实现批量添加 20 个用户,用户名为 user1–20,密码为 user 后面跟 5 个随机字符
答案:
#!/bin/bash
for i in {1..20}
do
** **username="user\$i"
** **password="user\$(tr -dc A-Za-z0-9 </dev/urandom | head -c 5)"
---
** **useradd "\$username"
** **echo "\$username:\$password" | chpasswd
** **echo "Created \$username with password \$password"
done
✅ 题目描述:
编写一个 函数(或脚本),功能如下:
-
接受两个参数:
- 第一个参数为 URL(即待下载的文件)
- 第二个参数为目录(即下载后保存的路径)
-
如果用户给的目录 不存在:
- 则提示用户是否创建
- 如果选择创建,则继续执行
- 否则,脚本返回 退出码 51
-
如果给的目录 存在,则尝试下载文件。
-
下载命令执行结果后检测文件是否下载成功与否:
- 如果成功,返回 0 结束脚本
- 否则,返回 52 结束脚本
-
✅ 答案(Shell 脚本实现):
#!/bin/bash
download_file() {
** **url="$1"
** **target_dir="$2"
** **# 检查是否给了两个参数
** **if [ $# -ne 2 ]; then
** **echo "用法: $0
** **return 99
** **fi
** **# 如果目录不存在
** **if [ ! -d "$target_dir" ]; then
** **read -p "目录 $target_dir 不存在,是否创建?(y/n): " choice
** **if [ "$choice" = "y" ] || [ "$choice" = "Y" ]; then
** **mkdir -p "$target_dir"
** **else
** **echo "未创建目录,退出。"
** **return 51
** **fi
** **fi
** **# 下载文件
** **filename=$(basename "$url")
** **output_path="$target_dir/$filename"
** **curl -fsSL "$url" -o "$output_path"
** **if [ $? -eq 0 ] && [ -f "$output_path" ]; then
** **echo "下载成功:$output_path"
** **return 0
** **else
** **echo "下载失败"
** **return 52
** **fi
}
✅ 补充说明:
-
curl -fsSL 参数:
- -f:请求失败时不输出 HTML 错误内容
- -s:静默模式
- -S:显示错误(配合 -s 使用)
- -L:跟随重定向
-
使用 basename 从 URL 中提取文件名。
-
退出码:
- 0:成功
- 51:目录不存在且用户选择不创建
- 52:下载失败
- 99:参数不合法
✅ 第13题
查找 /kingdee 目录下大于 10K 的文件并将其移动到 /tmp 目录中
答案:
find /kingdee -type f -size +10k -exec mv {} /tmp/ \;
✅ 第14题
Linux 系统的开机启动顺序
答案:
一般的启动流程如下:
BIOS → MBR → GRUB(引导加载器) → 内核加载(Kernel) → init(或 systemd) → 启动服务 → 登录界面(或 shell)
详细说明:
- BIOS 加载硬件和自检
- 加载引导程序(如 GRUB)
- 加载内核(vmlinuz)
- 启动 init 或 systemd 管理系统服务
- 启动登录界面或命令行 shell
✅ 第15题
如何在文本里进行复制、粘贴、删除行、删除全部、执行查找和替换等命令(vi/vim 操作)
答案:
- 复制当前行: yy
- 粘贴: p(在光标后)或 P(在光标前)
- 删除当前行: dd
- 删除全部内容: ggdG
- 查找字符串: /字符串
- 替换字符串: :%s/旧/新/g(全局替换)
✅ 第16题
(1) 使用 ansible 的 copy 模块将 /opt/aa.txt 复制到 /kingdee/lz 中
(2) 使用 file 模块定义 /home/jack/aa.txt 的权限为 777,且属于用户 jack,组为 jack
答案:
(1) copy 模块:
- name: copy file to /kingdee/lz
** **hosts: all
** **tasks:
** **- name: Copy aa.txt to /kingdee/lz
** **copy:
** **src: /opt/aa.txt
** **dest: /kingdee/lz/aa.txt
(2) file 模块:
- name: set permissions and ownership
** **hosts: all
** **tasks:
** **- name: Set permissions and owner for /home/jack/aa.txt
** **file:
** **path: /home/jack/aa.txt
** **mode: '0777'
** **owner: jack
** **group: jack
** **state: file
✅ 第17题
当用户在浏览器中输入一个网址,说说计算机对 DNS 解析的过程是怎样的?(注意:本地 DNS 没有缓存)
答案:
-
浏览器检查缓存:浏览器查看是否有对应的 DNS 缓存项
-
操作系统缓存:如果浏览器无缓存,查询本地操作系统 DNS 缓存
-
本地域名服务器:操作系统向本地配置的 DNS 服务器发起查询请求
-
递归查询开始:
- 如果本地域名服务器无记录,会向 根域名服务器 发送请求
- 根服务器返回对应的 顶级域名(如 .com)服务器地址
- 再去询问顶级域名服务器,返回权威 DNS 地址
- 最后向权威 DNS 查询并获得 IP 地址
-
返回给操作系统 → 浏览器,完成 DNS 解析
-
浏览器使用该 IP 地址建立连接
✅ 1. Linux 查看当前监听端口的命令是?
答案:
netstat -tulnp
或者更推荐使用:
ss -tulnp
✅ 2. HTTP、SMTP、POPS、SSH、MySQL 等默认端口号是多少?
答案:
协议 | 默认端口 |
---|---|
HTTP | 80 |
HTTPS | 443 |
SMTP | 25 |
POP3S | 995 |
SSH | 22 |
MySQL | 3306 |
✅ 3. 在 11 月份,每天的上午 6 点到 12 点中,每隔 2 小时执行一次/usr/bin/httpd.sh
答案:
(Crontab 语法)
0 6-12/2 * 11 * /bin/bash /usr/bin/httpd.sh
✅ 4. 利用 sed 命令将test.txt文件中的所有回车替换为空格
答案:
sed ':a;N;$!ba;s/\n/ /g' atxt
✅ 5. Pod 的生命周期有哪些状态?简单描述下每个状态
答案:
- Pending:已创建 Pod 对象,但容器未创建完成
- Running:Pod 已调度到节点并且至少有一个容器正在运行
- Succeeded:Pod 中的所有容器正常退出(Exit Code 0)
- Failed:Pod 中的某个容器非正常退出(Exit Code 非0)
- Unknown:Pod 状态无法获取,可能是由于通信异常
✅ 6. 最大打开文件数如何调整?
答案:
临时修改(仅当前会话):
ulimit -n 65535
永久修改:
编辑 /etc/security/limits.conf 添加:
* soft nofile 65535
* hard nofile 65535
同时编辑 /etc/pam.d/common-session 和 /etc/pam.d/common-session-noninteractive 添加:
session required pam_limits.so
✅ 7. 查看本机 20080 端口建立连接状态为 ESTABLISHED 的所有 IP
答案:
ss -talup | grep ESTAB | grep 20080
✅ 8. 统计 nginx 的 access.log 中访问量最多的 5 个 URL 地址、IP、返回状态码、返回时间
答案(假设 access.log 格式标准):
awk '{print $1, $7, $9, $NF}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 5
说明:
- $1: IP 地址
- $7: URL 路径
- $9: HTTP 状态码
- $NF: 日志最后一列,一般为响应时间(如果日志格式包含)