运维简答题 2

✅ 题目18:

显示 /etc/crontab 中以 # 开头,且后面跟了一个或多个空白字符,而后又跟了任意非空白字符的行

答案:

grep -P '^#\s+\S' /etc/crontab

✅题目19:

有文件 file1

  1. 查找 file1 里所有空行的所在行号
  2. 查找 file1 中以 abc 结尾的行
  3. 打印出 file1 文件第 1 到第 3 行

答案:

  1. 查找所有空行的行号:
  2. grep -n '^\$' file1 | cut -d: -f1
    
    或者:
    
    awk '/^\$/ {print NR}' file1
    
  3. 查找以 abc 结尾的行:

grep 'abc

  1. 打印第 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

✅ 题目描述:

编写一个 函数(或脚本),功能如下:

  1. 接受两个参数:

    • 第一个参数为 URL(即待下载的文件)
    • 第二个参数为目录(即下载后保存的路径)
  2. 如果用户给的目录 不存在:

    • 则提示用户是否创建
    • 如果选择创建,则继续执行
    • 否则,脚本返回 退出码 51
  3. 如果给的目录 存在,则尝试下载文件。

    • 下载命令执行结果后检测文件是否下载成功与否:

      • 如果成功,返回 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)

详细说明:

  1. BIOS 加载硬件和自检
  2. 加载引导程序(如 GRUB)
  3. 加载内核(vmlinuz)
  4. 启动 init 或 systemd 管理系统服务
  5. 启动登录界面或命令行 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 没有缓存)

答案:

  1. 浏览器检查缓存:浏览器查看是否有对应的 DNS 缓存项

  2. 操作系统缓存:如果浏览器无缓存,查询本地操作系统 DNS 缓存

  3. 本地域名服务器:操作系统向本地配置的 DNS 服务器发起查询请求

  4. 递归查询开始:

    • 如果本地域名服务器无记录,会向 根域名服务器 发送请求
    • 根服务器返回对应的 顶级域名(如 .com)服务器地址
    • 再去询问顶级域名服务器,返回权威 DNS 地址
    • 最后向权威 DNS 查询并获得 IP 地址
  5. 返回给操作系统 → 浏览器,完成 DNS 解析

  6. 浏览器使用该 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 的生命周期有哪些状态?简单描述下每个状态

答案:

  1. Pending:已创建 Pod 对象,但容器未创建完成
  2. Running:Pod 已调度到节点并且至少有一个容器正在运行
  3. Succeeded:Pod 中的所有容器正常退出(Exit Code 0)
  4. Failed:Pod 中的某个容器非正常退出(Exit Code 非0)
  5. 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: 日志最后一列,一般为响应时间(如果日志格式包含)