删除主机文件的模块? (B)
A.  delete
B.  file
C.  remove
D.  rm

tasks 作用: (B)
A.  指定目标主机
B.  定义执行任务
C.  设置变量
D.  引入角色

docker_container 模块端口映射正确写法? (B)
A.  port: 80:8080
B.  ports: ["80:8080"]
C.  ports: "80:8080"
D.  expose: 80:8080

ls *.txt 作用: (B)
A.  查看所有文件
B.  查看当前目录下所有 .txt 文件
C.  删除所有 .txt 文件
D.  复制所有 .txt 文件

检查脚本 [auto.sh](auto.sh) 语法(不执行)? (A)
A.  sh -n [auto.sh](auto.sh)
B.  sh -v [auto.sh](auto.sh)
C.  sh -x [auto.sh](auto.sh)
D.  sh --check [auto.sh](auto.sh)

until循环count等于5才退出: (A)
A.  count=1; until [  $count -eq 5 ]; do echo $ count; count=$((count+1)); done
B.  count=1; until ((count == 5)); do echo  $count; count=$ ((count+1)); done
C.  count=1; until [  $count == 5 ]; do echo $ count; count=$((count+1)); done
D.  以上三项均正确

判断进程是否运行,正确写法是? (B)
A.  pid=$(ps -ef | grep nginx)
B.  pid=$(pgrep nginx)
C.  pid=$(systemctl status nginx)
D.  pid=$(which nginx)

awk 输出 3–10 行的正确写法? (B)
A.  awk '3,10' file
B.  awk 'NR>=3 && NR<=10' file
C.  awk 'NR==3-10' file
D.  awk '3<=NR<=10' file

grep "error" log.txt: (A)
A.  查找包含error的行
B.  删除包含error的行
C.  替换error
D.  统计error次数

ansible.cfg作用: (B)
A.  存储主机列表
B.  配置默认参数
C.  定义任务
D.  管理角色

Shell 中 until 语句的含义是? (B)
A.  当条件为真执行
B.  当条件为假执行
C.  无限循环
D.  执行一次

playbook 中 serial 参数作用是? (C)
A.  设置重试次数
B.  设置任务超时
C.  控制并发主机数量
D.  控制任务重启次数

要设置环境变量 MYVAR 为 hello world,正确的方式是? (C)
A.  MYVAR="hello world"
B.  set MYVAR="hello world"
C.  export MYVAR="hello world"
D.  setenv MYVAR="hello world"

awk 设置输出分隔符为“|”用法是? (C)
A.  -F '|'
B.  -S '|'
C.  -v OFS='|'
D.  -v FS='|'

Ansible 中执行 playbook 的命令是? (B)
A.  ansible-run
B.  ansible-playbook
C.  playbook-run
D.  run-ansible

模板中条件判断语法? (A)
A.  {% if 条件 %} 内容 {% endif %}
B.  if (条件) then 内容
C.  $if 条件 then 内容
D.  when: 条件

创建符号链接模块是? (B)
A.  link
B.  file
C.  symlink
D.  ln

Jinja2 输出变量 username: (B)
A.  {% username %}
B.  {{ username }}
C.  {username}
D.  $username

以下关于 awk 的说法正确的是? (C)
A.  awk 的 -n 参数表示“不打印自动输出”
B.  awk 的 -n 参数表示“打印行号”
C.  awk 不存在 -n 参数,-n 是 sed 的选项
D.  awk -n 用于静默模式

删除角色 nginx 命令: (A)
A.  ansible-galaxy remove nginx
B.  ansible-galaxy delete nginx
C.  ansible-galaxy uninstall nginx
D.  ansible-galaxy rm nginx

在 inventory 文件中定义组使用? (A)
A.  [web]
B.  {web}
C.  (web)
D.  <web>

删除文件夹及其内容正确方式? (C)
A.  rm folder
B.  rm -f folder
C.  rm -r folder
D.  rmdir folder

在 Jinja2 模板中,表示条件语句的标记是? (A)
A.  {% ... %}
B.  {{ ... }}
C.  ##
D.  $$

sed 命令中 s/old/new/g 表示? (B)
A.  删除 old
B.  替换所有 old 为 new
C.  替换首个 old 为 new
D.  替换最后一个 old 为 new

以下 awk 语句中,哪一个可以正确打印文件每行的第一个字段和第三个字段? (B)
A.  awk '{print  $1 $ 3}' file
B.  awk '{print  $1, $ 3}' file
C.  awk '{sum= $1+$ 3}' file
D.  awk 'print  $1 $ 3' file

定义 var="linux": (B)
A.  var = "linux"
B.  var="linux"
C.  set var="linux"
D.  export var="linux"

删除文件第5行命令是? (A)
A.  sed '5d' file
B.  sed 'd5' file
C.  sed 'del 5' file
D.  sed -d 5 file

查看内存占用率最合适的命令? (B)
A.  mem
B.  top
C.  free -m
D.  df -h

为任务添加标签的关键字? (A)
A.  tags
B.  label
C.  mark
D.  name

Ansible Playbook 使用什么格式定义自动化任务? (B)
A.  XML
B.  YAML
C.  JSON
D.  INI

表示系统发行版的 Ansible 变量是? (B)
A.  ansible_os_family
B.  ansible_distribution
C.  ansible_system
D.  ansible_platform

copy文件: (A)
A.  cp file
1.txt file2.txt
B.  mv file
1.txt file2.txt
C.  copy file
1.txt file2.txt
D.  du file
1.txt file2.txt

Jinja2 中为变量设置默认值用? (A)
A.  default()
B.  fallback()
C.  setdefault()
D.  value()

web组且CentOS执行任务的when条件: (A)
A.  when: "'web' in group_names and ansible_distribution == 'CentOS'"
B.  when: group == 'web' and os == 'CentOS'
C.  when: group_names is 'web' and ansible_os == 'CentOS'
D.  when: inventory_group == 'web' and ansible_distribution = 'CentOS'

捕获命令输出正确写法? (B)
A.  res=ls -l
B.  res=$(ls -l)
C.  res=$ls -l
D.  res="ls -l"

管理SELinux策略模块: (C)
A.  selinux
B.  setsebool
C.  semanage
D.  selinux_policy

查看当前所在目录路径? (B)
A.  dir
B.  pwd
C.  cd
D.  ls

变量可以在 Ansible 的哪些位置定义? (C)
A.  仅在 Playbook 中
B.  仅在命令行参数中
C.  主机组和主机的 group_vars 和 host_vars 目录中
D.  仅在 play 中

将数组 arr=(a b c d) 用逗号拼接输出? (A)
A.  echo ${arr[*]} | tr ' ' ','
B.  echo ${arr[@]} | sed 's/ /,/g'
C.  IFS=,; echo ${arr[*]}
D.  join ',' ${arr[@]}

指定任务在 db 组执行: (A)
A.  hosts: db
B.  group: db
C.  target: db
D.  server: db

删除含前导空格的#注释行: (B)
A.  sed '/^#/d' text.txt
B.  sed '/^\s*#/d' text.txt
C.  sed 's/^#.*//' text.txt
D.  sed '/#.*/d' text.txt

sed 将每行行首添加#的命令? (A)
A.  sed 's/^/#/'
B.  sed 's/$/#/'
C.  sed '/#/g'
D.  sed 's/*/#/'

管理服务状态的模块: (A)
A.  service
B.  system
C.  daemon
D.  start

把错误输出重定向到 error.log? (A)
A.  command 2> error.log
B.  command > error.log 2>&1
C.  command error.log 2>
D.  command >&2 error.log

下列哪个变量表示当前 Shell 的路径? (B)
A.  BASH
B.  SHELL
C.  KSH
D.  C

Shell 脚本中 i=$((i+1)) 的作用是? (A)
A.  i 自增 1
B.  i 减 1
C.  i 乘 1
D.  i 除 1

在 Shell 中,下列哪个条件表达式可以判断变量 str 是否为空? (C)
A.  if [ str == "" ]
B.  if [[ str = "" ]]
C.  if [ -z "$str" ]
D.  if [ -n $str ]

安装 RPM 用: (B)
A.  apt
B.  yum
C.  install
D.  package

在 Ansible Playbook 中,指定目标主机的属性是? (B)
A.  在命令行参数中指定
B.  hosts
C.  tasks
D.  groups

任务依赖 install_pkg: (C)
A.  depends_on: install_pkg
B.  after: install_pkg
C.  when: install_pkg is succeeded
D.  tags: ["after_install"]

sudo执行ls /root: (A)
A.  ansible all -m command -a "ls /root" -b
B.  ansible all -m shell -a "sudo ls /root"
C.  ansible all -m command -a "sudo ls /root"
D.  ansible all -m command -a "ls /root" --sudo

查找WARNING且行号在100-200之间的行,正确命令是? (B)
A.  grep "WARNING" app.log | sed -n '100,200p'
B.  grep -n "WARNING" app.log | awk -F ":" ' $1>=100 && $ 1<=200'
C.  grep "WARNING" app.log -A100 -B100
D.  sed -n '100,200p' app.log | grep "WARNING"

echo "Hello" 会? (A)
A.  输出“Hello”并自动换行
B.  仅输出“Hello”不换行
C.  提示语法错误
D.  清空屏幕

以下哪个命令可以准确删除第 20-100 行? (B)
A.  sed -n '1,19p;101,$p' file
B.  sed '20,100d' file
C.  awk 'NR<20 || NR>100' file
D.  grep -v "^20|^21|..." file

“事实变量”作用: (B)
A.  存储自定义配置
B.  自动获取受管主机信息
C.  定义任务顺序
D.  控制任务是否执行

执行 Playbook: (B)
A.  ansible-run site.yml
B.  ansible-playbook site.yml
C.  playbook-exec site.yml
D.  run-playbook site.yml

查看脚本执行过程显示每行命令? (C)
A.  sh -v [script.sh](script.sh)
B.  sh -n [script.sh](script.sh)
C.  sh -x [script.sh](script.sh)
D.  sh -e [script.sh](script.sh)

sed只替换第10行port=80为port=8080: (A)
A.  sed '10s/port=80/port=8080/' config.ini
B.  sed 's/port=80/port=8080/10' config.ini
C.  sed '10,/port=80/s//port=8080/' config.ini
D.  sed '/port=80/10s//port=8080/' config.ini

测试 web 组连通性: (A)
A.  ansible web -m ping
B.  ansible web -m test
C.  ansible ping web
D.  ansible test web

Playbook语法检查: (B)
A.  ansible-playbook --check site.yml
B.  ansible-playbook --syntax-check site.yml
C.  ansible-playbook -n site.yml
D.  ansible-playbook --test site.yml

awk筛选第四列>5000: (D)
A.  awk '$4>5000' user.txt
B.  awk '{if( $4>5000) print $ 0}' user.txt
C.  awk -F ' ' '$4>5000 {print}' user.txt
D.  以上三项均正确

Shell 中用于赋值的算术运算符是? (D)
A.  +
B.  -
C.  ==
D.  =

判断一个文件是否存在且为普通文件的选项是? (C)
A.  -d
B.  -e
C.  -f
D.  -r

实现条件控制结束的关键字是? (D)
A.  endif
B.  end
C.  done
D.  fi

在 Ansible 中用于控制服务启动/停止的标准模块是? (A)
A.  service
B.  systemd
C.  init
D.  start

遍历字典 users 的写法? (A)
A.  loop: {{ users | dict2items }}
B.  with_dict: {{ users }}
C.  loop: {{ users.keys() }}
D.  with_items: {{ users.values() }}

复制文件模块: (B)
A.  move
B.  copy
C.  transfer
D.  send

模板文件的后缀是? (B)
A.  .yaml
B.  .j2
C.  .tpl
D.  .jinja

显示匹配行及其上下3行? (B)
A.  -A3 -B3
B.  -C3
C.  -N3
D.  -L3

查找不包含 error 的行? (B)
A.  grep "!error" log.txt
B.  grep -v "error" log.txt
C.  grep "not error" log.txt
D.  grep --exclude "error" log.txt

Ansible 中用于任务顺序触发的正确方式是? (B)
A.  depends_on
B.  handlers + notify
C.  priority 字段
D.  before 指令

Ansible 默认使用什么协议与受管主机通信? (C)
A.  FTP
B.  HTTP
C.  SSH
D.  Telnet

触发 handler 的关键字是? (A)
A.  notify
B.  call
C.  handler
D.  trigger

若要将新的环境变量 VAR 加入当前 Shell,正确的命令是? (B)
A.  set VAR=value
B.  export VAR=value
C.  VAR=value
D.  echo VAR=value

Jinja2 中判断变量为 True 的语法是? (A)
A.  var == True
B.  if var = true
C.  if var is true
D.  var eq true

if 语句的基本语法是? (A)
A.  if [ condition ]
B.  if ( condition )
C.  if { condition }
D.  if < condition >

在 Shell 脚本中,$2 表示? (B)
A.  参数个数
B.  第二个参数
C.  第二行输入
D.  第二个进程

fetch拉取日志: (D)
A.  正确
B.  错误
C.  copy模块错误
D.  按主机创建子目录

计算 2+3: (B)
A.  echo 2+3
B.  echo $((2+3))
C.  echo 2+3 | bc
D.  calc 2+3

输出带换行符“Hello\nWorld”正确写法? (B)
A.  echo "Hello\nWorld"
B.  echo -e "Hello\nWorld"
C.  echo Hello\nWorld
D.  echo -n "Hello\nWorld"

判断是否为目录? (A)
A.  [ -d "$file" ]
B.  [ -f "$file" ]
C.  [ -e "$file" ]
D.  [ -r "$file" ]

Shell 中的逻辑与运算符是? (B)
A.  +
B.  &&
C.  *
D.  -

ansible 命令显示最详细日志用? (D)
A.  -v
B.  -vv
C.  -vvv
D.  -vvvv

可在输出中控制输出格式的命令是? (B)
A.  echo
B.  printf
C.  read
D.  cat

测试主机连通性命令? (A)
A.  ansible all -m ping
B.  ansible all -m test
C.  ansible -m ping *
D.  ansible ping all

函数中声明局部变量的关键字是? (A)
A.  local
B.  declare
C.  export
D.  static

在 playbook 中循环任务使用? (A)
A.  loop
B.  iterate
C.  repeat
D.  for

for 语句遍历数组元素的正确写法是? (D)
A.  for i in {
1..5}; do echo i; done
B.  for i in (1 2 3 4 5); do echo i; done
C.  for i in [1 2 3 4 5]; do echo i; done
D.  for i in 1 2 3 4 5; do echo i; done

查看 copy 模块文档: (B)
A.  ansible-help copy
B.  ansible-doc copy
C.  ansible-man copy
D.  ansible-info copy

sed 替换所有 abc 为 xyz 的正确写法? (C)
A.  sed 's/abc/xyz'
B.  sed 's/abc/xyz/'
C.  sed 's/abc/xyz/g'
D.  sed 'replace abc xyz'

awk 中  $2>100 {print $ 0} 表示? (A)
A.  打印第二列大于100的行
B.  打印第二列等于100的行
C.  打印第二列小于100的行
D.  打印全部行

Jinja2 中 for 循环的正确写法是? (A)
A.  {% for i in list %}{% endfor %}
B.  for i in list:
C.  [for i in list]
D.  loop(i)

直接修改原文件的 sed 选项? (B)
A.  -n
B.  -i
C.  -e
D.  -f

Ansible 默认的配置文件是? (A)
A.  ansible.cfg
B.  ansible.conf
C.  ansible.yml
D.  ansible.ini

使用 sudo 权限: (B)
A.  sudo: yes
B.  become: yes
C.  root: yes
D.  admin: yes

在模板中引用变量的语法是? (B)
A.  $var
B.  {{ var }}
C.  [% var %]
D.  << var >>

Ansible 默认通信协议: (B)
A.  HTTP
B.  SSH
C.  FTP
D.  Telnet

哪种输出重定向写法会将输出追加到文件末尾? (B)
A.  command > filename
B.  command >> filename
C.  command < filename
D.  command << filename

禁止 root 登录 SSH 正确修改字段? (B)
A.  DenyRootLogin no
B.  PermitRootLogin no
C.  RootLogin off
D.  RootDeny true

管理 apt 源的模块是? (A)
A.  apt_repository
B.  apt_key
C.  apt_config
D.  apt_source

以下哪个命令可以统计当前目录及子目录中所有 .log 文件的数量? (B)
A.  ls *.log | wc -l
B.  find . -name "*.log" -type f | wc -l
C.  grep ".log" -r . | wc -l
D.  du -a | grep ".log" | wc -l

删除 testdir 目录及其文件: (C)
A.  rm testdir
B.  rm -f testdir
C.  rm -r testdir
D.  rmdir testdir

获取数组长度的正确方法是? (C)
A.  ${array[@]}
B.  ${array[*]}
C.  ${#array[@]}
D.  ${array[#]}

Shell 脚本中,判断两个整数是否相等的选项是? (A)
A.  -eq
B.  -lt
C.  -ne
D.  -gt

创建目录使用哪个模块? (C)
A.  mkdir
B.  make
C.  file
D.  directory

read -p "请输入:" var: (A)
A.  提示并获取输入存入var
B.  仅输出提示
C.  清空var
D.  显示var

从文件逐行读取内容正确的是? (A)
A.  while read line; do ...; done < file
B.  for line in file; do ...; done
C.  cat file | while line; do ...; done
D.  read file | while read line; do ...; done

设置冒号为字段分隔符? (A)
A.  awk -F ':' '{print $1}' data.txt
B.  awk 'FS=":" {print $1}'
C.  awk '{FS=":"; print $1}'
D.  awk -d ':' '{print $1}'

awk 中 -F ',' 的含义是? (A)
A.  指定逗号为分隔符
B.  忽略逗号
C.  删除逗号
D.  替换逗号

循环遍历列表: (A)
A.  loop
B.  for
C.  cycle
D.  repeat

创建角色的命令是? (A)
A.  ansible-galaxy init
B.  ansible-galaxy new
C.  ansible-role create
D.  ansible init role

以下哪种方式能够正确输出 2 到 10 之间的所有偶数? (D)
A.  for i in {
1..10}; do if ((i%2==0)); then echo $i; fi; done
B.  for i in seq 2 2 10; do echo i; done
C.  for i in  $(seq 1 2 10); do echo $ i; done
D.  for i in {2..10..2}; do echo $i; done

禁用主机事实收集的配置项是? (A)
A.  gather_facts: false
B.  collect_facts: no
C.  gather_info: false
D.  facts: off

Ansible 中查看模块用法的命令是? (B)
A.  ansible-help
B.  ansible-doc
C.  ansible-module
D.  ansible-info

统计第二列等于 admin 的行数? (A)
A.  awk '$2=="admin" {count++} END{print count}' data.txt
B.  awk '$2=admin {count++} END{print count}' data.txt
C.  awk 'if($2=="admin") count++ END{print count}' data.txt
D.  awk '$2=="admin" count++ END{print count}' data.txt

复制文件到远程主机使用模块? (A)
A.  copy
B.  fetch
C.  file
D.  template

handler 任务执行条件是? (B)
A.  每次任务都执行
B.  仅在任务发生变化时执行
C.  每次失败时执行
D.  在循环中执行

printf 命令中用于输出字符串的格式化符号是? (A)
A.  %s
B.  %d
C.  %f
D.  %x

Playbook 文件格式: (C)
A.  XML
B.  JSON
C.  YAML
D.  INI

删除数组中某个元素的命令是? (B)
A.  remove array[1]
B.  unset array[1]
C.  del array[1]
D.  erase array[1]

环境变量 PATH 中,冒号分隔的各个目录的意义是? (C)
A.  用户的主目录
B.  系统的配置文件目录
C.  可执行文件的搜索路径
D.  常用工具的安装目录

Bash 中,以下写法能正确比较整数的是? (B)
A.  if [ a > b ]
B.  if ((a > b))
C.  if [  $a > $ b ]
D.  if a > b

判断 file_size 大于 1024? (C)
A.  when: file_size > 1024
B.  when: {{ file_size }} > 1024
C.  when: file_size | int > 1024
D.  when: file_size is greater than 1024

使用 ansible-galaxy 搜索角色用? (B)
A.  ansible-galaxy list
B.  ansible-galaxy search
C.  ansible-galaxy find
D.  ansible-galaxy query

正确统计当前用户登录次数的是? (C)
A.  who | wc
B.  whoami | wc
C.  who | grep "$(whoami)" | wc -l
D.  loginctl count

下列哪个是 Ansible 中执行带管道命令的正确模块? (B)
A.  command
B.  shell
C.  exec
D.  run

管理容器镜像的模块? (A)
A.  docker_image
B.  docker_container
C.  podman_image
D.  container

role判断admin: (A)
A.  {% if role == 'admin' %}管理员{% else %}普通用户{% endif %}
B.  {{ role == 'admin' ? '管理员' : '普通用户' }}
C.  {% if role is 'admin' %}管理员{% else %}普通用户{% endif %}
D.  {{ if role == 'admin' then '管理员' else '普通用户' }}

grep 命令中忽略大小写的参数是? (A)
A.  -i
B.  -v
C.  -n
D.  -l

在第3行后插入“new line”? (A)
A.  sed '3a new line' file.txt
B.  sed '3i new line' file.txt
C.  sed '3c new line' file.txt
D.  sed '3s/^/new line/' file.txt

判断字符串 str 是否等于 "linux"? (A)
A.  if [ "$str" = "linux" ]; then
B.  if [ "$str" == "linux" ]; then
C.  if ((str == "linux")); then
D.  if [ $str -eq "linux" ]; then

判断变量是否为数字正确写法? (B)
A.  if [ $x -eq number ]
B.  if [[  $x =~ ^[0-9]+$  ]]
C.  if number $x
D.  test number $x

register 关键字的作用是? (B)
A.  定义主机清单文件
B.  保存任务执行结果
C.  定义变量
D.  设置条件语句

awk 中 NR 表示? (A)
A.  当前行号
B.  当前列号
C.  文件总数
D.  文件名

ansible-galaxy 作用: (B)
A.  执行Playbook
B.  管理角色
C.  测试连通性
D.  查看帮助

Ansible 中收集主机信息的模块是? (A)
A.  setup
B.  gather
C.  facts
D.  info

Ansible 中用于创建 Docker 容器的模块是? (A)
A.  docker_container
B.  container
C.  docker
D.  create_container

遍历一个目录中所有文件的 for 语句写法是? (C)
A.  for file in (ls /path/to/directory); do echo file; done
B.  for file in ls /path/to/directory; do echo file; done
C.  for file in /path/to/directory/*; do echo file; done
D.  for file in /path/to/directory; do echo file; done

关于 Ansible 的 Ad Hoc 命令,描述正确的是? (D)
A.  只能在特定时间运行
B.  在单个主机上并行执行
C.  用于创建和管理主机清单文件
D.  用于手动执行特定任务

Playbook 指定远程执行用户为 admin? (A)
A.  remote_user: admin
B.  user: admin
C.  ssh_user: admin
D.  execute_user: admin

将 date 写入 time.txt(覆盖): (B)
A.  date >> time.txt
B.  date > time.txt
C.  date < time.txt
D.  date | time.txt

用于显示 Ansible Playbook 中某个任务输出结果的模块是? (A)
A.  debug
B.  output
C.  print
D.  show

awk 过滤第 5 行之后的内容,正确写法是? (B)
A.  awk 'NR < 4' file
B.  awk 'NR > 4' file
C.  awk 'NR >= 4' file
D.  awk '{if(NR>=4) print}' file

用于加载配置文件的命令是? (C)
A.  exec
B.  load
C.  source
D.  Include

给 [test.sh](test.sh) 加可执行权限: (C)
A.  chmod +r [test.sh](test.sh)
B.  chmod +w [test.sh](test.sh)
C.  chmod +x [test.sh](test.sh)
D.  chmod +a [test.sh](test.sh)

多个条件的逻辑或关系运算符是? (A)
A.  ||
B.  &&
C.  or
D.  and

判断a.txt是否为普通文件: (B)
A.  判断是否目录
B.  判断是否普通文件
C.  判断是否可读
D.  判断是否可写

忽略任务错误继续执行使用? (A)
A.  ignore_errors: yes
B.  skip_error: yes
C.  continue_on_fail: true
D.  error_ignore: on

在 playbook 中引入外部变量文件使用? (B)
A.  include_vars
B.  vars_files
C.  vars_include
D.  import_vars

定义数组正确的是? (A)
A.  array=(1 2 3 4 5)
B.  array=[1,2,3,4,5]
C.  array={1 2 3 4 5}
D.  array=(1,2,3,4,5)

以下哪个写法是 Bash 中最规范的区间判断逻辑? 判断 num 是否在 10 到 20 之间。 (D)
A.  [  $num -gt 10 -a $ num -lt 20 ]
B.  test  $num -gt 10 -a $ num -lt 20
C.  [[  $num -gt 10 && $ num -lt 20 ]]
D.  (($num > 10 && num < 20))

查找当前目录所有 .sh 文件并输出完整路径: (B)
A.  ls *.sh
B.  find ./ -name "*.sh" -type f
C.  grep ".sh" .
D.  sh find . *.sh

Jinja2 保留 2 位小数: (C)
A.  {{ price | round(2) }}
B.  {{ price | format("%.2f") }}
C.  {{ "%.2f" | format(price) }}
D.  {{ price | decimal(2) }}

使用 sudo 权限? (B)
A.  sudo: yes
B.  become: yes
C.  sudo_user: root
D.  become_user: root

取消定义变量 var? (A)
A.  unset var
B.  delete var
C.  remove var
D.  clear var

只执行带某标签的任务命令? (C)
A.  ansible-playbook site.yml --tags "config"
B.  ansible-playbook site.yml --run config
C.  ansible-playbook site.yml -t config
D.  ansible-playbook site.yml -l config

Ansible中执行命令的模块? (A)
A.  command
B.  exec
C.  run
D.  shell

select opt in "yes" "no"; do echo $opt; done 表示? (D)
A.  if 判断
B.  case 选择
C.  for 循环
D.  交互菜单选择

在 RHEL 系统上安装软件包应使用? (B)
A.  apt
B.  yum
C.  dnf
D.  zypper

Shell 中统计目录中文件数量最安全的写法是? (B)
A.  ls | wc -l
B.  find . -type f | wc -l
C.  du -a | wc -l
D.  echo $(ls) | wc -w

统计 file.txt 行数: (A)
A.  wc -l file.txt
B.  wc -w file.txt
C.  wc -c file.txt
D.  wc -m file.txt

读取文件第一行正确方式是? (D)
A.  head file
B.  head -1 file
C.  head file -n1
D.  head -n1 file

将 date 输出追加到 log.txt? (A)
A.  date >> log.txt
B.  date > log.txt
C.  date 2>> log.txt
D.  date | tee -a log.txt

查看前5行: (A)
A.  head -5 file.txt
B.  tail -5 file.txt
C.  cat -5 file.txt
D.  more -5 file.txt

在 GNU sed 中删除以 # 开头(包含前置空格)的行,规范写法是? (B)
A.  sed '/^\s*#/d' file
B.  sed '/^[[:space:]]*#/d' file
C.  sed 's/#.*//' file
D.  sed '/^#/d' file

grep '^test' file.txt 命令表示? (B)
A.  匹配包含 test 的行
B.  匹配以 test 开头的行
C.  匹配以 test 结尾的行
D.  匹配不含 test 的行

printf 输出整数123和字符串 test? (A)
A.  printf "数字:%d,名称:%s" 123 "test"
B.  printf "数字:123,名称:test"
C.  printf "数字:%s,名称:%d" 123 "test"
D.  printf "数字:%d,名称:%s\n" "test" 123

用于实现多条件选择语句的是? (C)
A.  if
B.  else
C.  case
D.  for

执行 for i in 1 2 3… 输出? (C)
A.  1
B.  1 2
C.  1 2 3
D.  3 2 1

Playbook中hosts: all表示在清单所有主机上执行任务。(A)
A对
B错

awk '{print $2}' 输出第二个字段。(A)
A对
B错

template 模块会自动渲染 Jinja2 模板并复制到受管主机。(A)
A对
B错

loop与with_items功能相同。(A)
A对
B错

for 循环中 do 和 done 是必须出现的保留字。(A)
A对
B错

file模块只能创建文件,不能创建目录或删除文件。(B)
A对
B错

source命令和.(点号)命令功能相同,均可用于加载配置文件并使配置在当前Shell生效。(A)
A对
B错

authorized_key 添加公钥实现免密登录。(A)
A对
B错

rm testdir 会删除整个 testdir 目录及其中所有文件。(B)
A对
B错

Jinja2中default过滤器用于设置变量默认值。(A)
A对
B错

数组 arr=("A" "B" "C") 中,${arr[3]} 会返回 "C"。(B)
A对
B错

Shell脚本中,read -p "提示信息" var命令可以在获取用户输入时显示自定义提示文本。(A)
A对
B错

touch 文件 已存在时更新访问时间,不会更新修改时间。(B)
A对
B错

register 关键字可以用来保存任务执行结果供后续任务使用。(A)
A对
B错

ls *.sh 会列出当前目录以及子目录中的所有 .sh 文件。(B)
A对
B错

--diff 显示配置文件前后差异。(A)
A对
B错

now() 函数可直接获取当前系统时间。(B)
A对
B错

ansible-playbook demo.yml 会按照 Playbook 的顺序执行所有任务。(A)
A对
B错

mv old new 会移动旧文件到新路径,也能重命名文件。(A)
A对
B错

tail -2 file.txt 会显示最后2行。(A)
A对
B错

grep -r keyword /var 可以递归搜索 /var 下所有文件。(A)
A对
B错

在Shell中,echo $USER 会显示当前登录用户。(A)
A对
B错

for i in 1 2 3; do echo $i; done 会依次输出 1 2 3。(A)
A对
B错

apt 模块也可以用于 CentOS。(B)
A对
B错

给脚本添加执行权限应使用 chmod 777 script.sh,这是最安全的方式。(B)
A对
B错

环境变量 PATH 用来记录当前工作目录的路径。(B)
A对
B错

facts变量是用户自定义的变量。(B)
A对
B错

ansible-galaxy search 可以搜索 Galaxy 上的角色。(A)
A对
B错

firewalld 模块可以设置端口规则,但不能立即生效。(B)
A对
B错

rm file 默认会提示确认是否删除。(B)
A对
B错

awk '{print $NF}' 会打印每一行的最后一个字段。(A)
A对
B错

使用export VAR=value命令设置的环境变量,仅在当前Shell会话及子Shell中生效,无法永久保存。(A)
A对
B错

yum 模块也可以在 Ubuntu 系统中正常使用。(B)
A对
B错

cat file.txt 适合查看大文件内容。(B)
A对
B错

grep "error" log.txt 只能匹配整行完全等于 error 的内容。(B)
A对
B错

Jinja2 中 upper 过滤器可将字符串转换为全大写。(A)
A对
B错

awk '{print NR, $0}' file.txt 会打印行号和整行内容。(A)
A对
B错

file 模块 state: absent 会删除文件。(A)
A对
B错

chmod 777 file.txt 是一种安全的权限设置方式,适合所有场景。(B)
A对
B错

printf命令输出字符串时,默认会自动添加换行符,无需手动指定\n。(B)
A对
B错

docker_image 模块不能删除镜像。(B)
A对
B错

"HELLO" | lower 输出 hello。(A)
A对
B错

vars: 部分定义的变量只能在当前任务中使用,无法被其他任务读取。(B)
A对
B错

diff file1 file2 能比较两个文件是否相同。(A)
A对
B错

Playbook 中 handlers 必须立即执行,不需要 notify。(B)
A对
B错

ansible-galaxy list 显示本地安装角色。(A)
A对
B错

ls -l 只显示文件权限,不显示时间戳。(B)
A对
B错

sed 's/foo/bar/g' file.txt 会替换所有 foo,并且直接修改文件内容。(B)
A对
B错

head -3 file.txt 显示前3行内容。(A)
A对
B错

Ansible 控制节点必须能够 ping 通受管主机才能执行任务。(B)
A对
B错

join 过滤器可以把列表拼接成字符串。(A)
A对
B错

register用于捕获任务执行结果并存为字典类型变量。(A)
A对
B错

Playbook 若任务失败默认跳过继续执行。(B)
A对
B错

grep -v "pattern" file命令用于查找file中包含pattern的行,并输出这些行。(B)
A对
B错

ansible-doc docker_container命令可以查看模块文档。(A)
A对
B错

awk脚本中,NR表示当前处理的行号,NF表示当前行的字段总数。(A)
A对
B错

grep "hello" 会匹配包含 hello 的所有行。(A)
A对
B错

awk -F ',' '{print $1, $3}' data.csv命令以逗号为分隔符,输出data.csv的第1和第3列。(A)
A对
B错

事实变量(facts)会自动收集系统信息,不需要用户定义。(A)
A对
B错

Ansible 控制节点必须是 Linux 或类 Unix 系统,但不能是 Windows。(B)
A对
B错

become: yes 表示使用 sudo 权限执行任务。(A)
A对
B错

Jinja2 中使用变量需写成 ${var}。(B)
A对
B错

ansible-playbook -v 只显示错误,不显示命令细节。(B)
A对
B错

ansible-galaxy init 会创建一个角色的基本目录结构。(A)
A对
B错

become_user: root 不需要 become: yes 就能生效。(B)
A对
B错

Ansible 控制节点必须能 ping 通受管主机,否则无法使用。(B)
A对
B错

copy 模块可以复制本地文件并自动创建目标目录。(A)
A对
B错

while 循环需要使用 incre++ 的语法更新变量。(B)
A对
B错

docker_container 模块可以启动容器,但不能停止容器。(B)
A对
B错

在Shell数组中,${arr[*]}和${arr[@]}的作用完全一致,均会将数组元素以空格分隔拼接成字符串。(B)
A对
B错

在 Playbook 中 tasks 字段可以省略不写。(B)
A对
B错

handler 会立即执行,不受更改触发影响。(B)
A对
B错

使用 source 命令加载配置文件时,不会影响当前 Shell 的环境变量。(B)
A对
B错

在Shell脚本中,缺少开头的 #!/bin/bash 会导致脚本永远无法执行。(B)
A对
B错

ansible.cfg 的 remote_user 设置默认登录用户。(A)
A对
B错

sed '3d' file.txt命令会删除file.txt的第3行,并直接修改原文件内容。(B)
A对
B错

使用 VAR=abc 定义的变量,不需要使用 $VAR 就能直接输出 abc。(B)
A对
B错

loop.index可用于获取循环索引,从1开始。(A)
A对
B错

ansible web -m apt -a "name=nginx state=present" 可以在 CentOS 主机上安装 nginx。(B)
A对
B错

ansible-doc -s service 显示 service 模块参数格式。(A)
A对
B错

docker_container 模块只能启动 Docker 服务,不能删除容器。(B)
A对
B错

Jinja2 中 {{ value | upper }} 会将字符串转为大写。(A)
A对
B错

ansible-playbook -k site.yml 会要求用户输入SSH密码。(A)
A对
B错

输出重定向command > file会覆盖文件file的原有内容,若文件不存在则创建该文件。(A)
A对
B错

环境变量PATH中,目录之间使用分号;分隔,用于指定系统搜索可执行文件的路径。(B)
A对
B错

Ansible Ad Hoc命令无法批量执行,必须通过Playbook实现批量操作。(B)
A对
B错

ansible-galaxy install nginx命令可安装nginx角色。(A)
A对
B错

Shell中的逻辑或运算符是&&,逻辑与运算符是||。(B)
A对
B错

register 变量可以用于下一步条件判断。(A)
A对
B错

cp file1 file2 会覆盖 file2,不会提示确认。(A)
A对
B错

ansible db -m command -a "uptime" 会在 db 主机组执行命令。(A)
A对
B错

在Shell脚本中,$?变量用于表示上一条命令的执行结果,0表示执行成功,非0表示执行失败。(A)
A对
B错

read var 会等待用户输入并存入 var。(A)
A对
B错

echo 命令默认输出内容后会换行,但 echo -n 会取消换行。(A)
A对
B错

ansible-playbook --tags install 只执行带 install 标签的任务。(A)
A对
B错

在Shell中,ls -a 会显示所有文件,包括隐藏文件。(A)
A对
B错

tasks 中的任务按顺序执行。(A)
A对
B错

Shell 函数必须使用 function 关键字,否则不能执行。(B)
A对
B错

awk 默认以空格和制表符作为分隔符。(A)
A对
B错

setup 模块通过 filter 仅获取特定 facts。(A)
A对
B错

service 模块只能启动服务,不能停止服务。(B)
A对
B错

sed 's/abc/123/g' 会替换整行所有 abc。(A)
A对
B错

Playbook 中的 name 字段只是注释,不显示在输出日志中。(B)
A对
B错

awk 'END{print NR}' 打印行数,但若文件为空则输出 0。(A)
A对
B错

cat file1 file2 > output.txt 会将两个文件内容覆盖写入 output.txt。(A)
A对
B错

vars_files: vars.yml 从文件加载变量。(A)
A对
B错

become: yes用于切换到root执行任务,无需become_user。(B)
A对
B错

ansible.cfg 修改后无需重启服务即可立即生效。(A)
A对
B错

sort file.txt 默认按数字排序。(B)
A对
B错

Ansible配置文件优先级:当前目录 > 用户目录 > 系统目录。(A)
A对
B错

handlers会立即执行。(B)
A对
B错

使用 Ansible 管理受管主机时,必须配置密钥认证,不能使用密码。(B)
A对
B错

service 模块可启动、停止、重启服务。(A)
A对
B错

在 inventory 文件中写主机 IP 就可以让 Ansible 识别该主机。(A)
A对
B错

echo $(pwd) 会打印当前目录路径与 echo `pwd` 的效果完全相同。(A)
A对
B错

ansible-doc 命令可以查看模块的详细用法及示例。(A)
A对
B错

authorized_key 模块用于在目标主机上配置 SSH 公钥。(A)
A对
B错

default(值) 过滤器可以为未定义变量提供默认值。(A)
A对
B错

Jinja2 if 判断语法必须用 endif 结束。(A)
A对
B错

expr 2 + 3 能正确计算出 5,并且加号两端不能有空格。(B)
A对
B错

pwd 显示当前目录的绝对路径。(A)
A对
B错

Playbook 必须使用 .yml 后缀,不能用 .yaml。(B)
A对
B错

hosts: "*" 表示任务会在全部主机上执行。(A)
A对
B错

if [ 3 -lt 2 ] 输出 yes。(B)
A对
B错

sed -i '3d' file.txt 会删除文件第三行并修改文件。(A)
A对
B错

--skip-tags 跳过指定标签任务。(A)
A对
B错

file 模块可以创建目录、文件以及符号链接。(A)
A对
B错

test -d dirname 用于判断某路径是否为普通文件。(B)
A对
B错

Jinja2 中 for 循环语法必须以 endfor 结束。(A)
A对
B错

# 开头的行都是注释,包括 #!/bin/bash。(B)
A对
B错

facts 会自动收集操作系统版本、IP、内存等。(A)
A对
B错

Ansible 受管主机必须安装 ansible 才能被管理。(B)
A对
B错

ansible-playbook --check site.yml为模拟执行,不修改受管主机。(A)
A对
B错

ansible web -m command -a "ls" 会在 web 组机器上执行 ls 命令。(A)
A对
B错

grep -i "Linux" file.txt命令会忽略大小写,查找包含各种大小写形式Linux的行。(A)
A对
B错

cd testdir 进入不存在的目录时 Shell 会自动创建该目录。(B)
A对
B错

ansible-playbook --check 会显示将要执行的变更但不修改系统。(A)
A对
B错

使用 > 会清空文件内容,而使用 >> 会在文件末尾追加内容。(A)
A对
B错

template 模块可以渲染 Jinja2 模板。(A)
A对
B错

firewalld port: 443/tcp 可开放端口。(A)
A对
B错

vars 字段可用于在 Playbook 中定义变量。(A)
A对
B错

handlers 是立即执行的任务,不需要被触发。(B)
A对
B错

grep test /home 会递归搜索所有文件并输出结果。(B)
A对
B错

Ansible默认通过SSH协议与受管主机通信,无需在受管主机上安装代理程序。(A)
A对
B错

Shell函数中,return命令用于返回函数执行结果,exit命令用于退出整个脚本而非仅退出函数。(A)
A对
B错

sed '1,3d' file.txt 会删除 file.txt 的第1到第3行并修改原文件。(B)
A对
B错

grep -i 会忽略大小写;grep -v 会输出不匹配的行。(A)
A对
B错

ansible all -m ping 可以验证 SSH 连接是否正常。(A)
A对
B错

ansible-galaxy 用于管理 inventory 文件。(B)
A对
B错

ansible-doc copy 可以查看 copy 模块的用法和示例。(A)
A对
B错

awk 获取列值使用语法 :  ${数字}

创建目录使用命令 :  mkdir

让函数返回值使用关键字 :  return

Playbook 定义变量使用关键字 :  vars

后台运行任务查看列表使用命令 :  jobs

将标准输出追加到文件使用 :  >>

Shell 中获取当前 Shell 进程 PID 的变量是 :  $$

修改文件权限使用命令 :  chmod

查看系统负载使用命令 :  uptime

Jinja2 for 循环开始标签是 :  {% for 变量 in 列表 %}

awk 打印所有行使用 :  {print $0}

清屏命令为 :  clear

同时重定向标准输出与错误使用 :  &>

在 Shell 中暂停 5 秒使用命令 :  sleep 5

获取上一条命令返回状态码应使用 :  $?

sed 删除某行使用命令格式 :  sed 'Nd' file.txt

Ansible 默认主机清单文件路径为 :  /etc/ansible/hosts

执行带管道命令应使用模块 :  shell

判断文件是否存在使用测试表达式 :  -f 文件名

查找文本匹配使用命令 :  grep

强制删除文件使用参数 :  rm -f

查看所有进程使用命令 :  ps -ef

判断两个数字不等使用 :  -ne

执行 df -h 应使用模块 :  command

判断文件是否可执行使用表达式 :  -x 文件名

忽略任务错误继续执行使用 :  ignore_errors: yes

查找命令所在路径使用命令 :  which

获取主机名的事实变量为 :  ansible_hostname

仅退出 vim 不保存使用命令 :  :q!

匹配以某字符串开头的 grep 选项为 :  ^

给变量设置默认值使用过滤器 :  default

查看当前登录用户使用命令 :  who

判断字符串是否为空使用 :  [ -z "$str" ]

查看当前用户所属用户组使用命令 :  groups

复制文件使用命令 :  cp

查看内存使用情况使用 :  free

修改文件所有者使用命令 :  chown

切换到 root 用户使用命令 :  su -

命令输出赋值给变量的语法为 :  变量=$(command)

匹配以某字符串结尾使用正则 :  $

递归查找文本使用 grep 选项 :  -r

查看路径中执行命令搜索顺序使用命令 :  echo $PATH

显示行号使用 grep 参数 :  -n

将标准输出重定向到文件使用 :  >

将后台任务恢复前台使用命令 :  fg

遇到错误立即退出脚本使用 :  set -e

退出当前 Shell 使用命令 :  exit

显示当前工作目录使用命令 :  pwd

解压 zip 文件使用命令 :  unzip

退出 vim 的保存退出命令是 :  :wq

sed 替换文本使用命令格式 :  sed 's/旧字符串/新字符串/选项' file.txt

创建用户使用模块 :  user

获取 Jinja2 中变量长度使用过滤器 :  length

显示当前时间(时:分:秒)使用命令 :  date +"%H:%M:%S"

查看网络接口信息使用命令 :  ip addr

统计匹配行数的命令为 :  grep -c "pattern" file.txt

递归删除目录使用命令参数 :  rm -r

查看当前环境变量使用 :  env

将任务挂起到后台使用命令 :  Ctrl+Z 挂起后 bg

显示所有开放端口使用命令 :  ss -tuln

压缩目录为 zip 文件使用命令 :  zip -r dir.zip 目录名

Ansible 通用安装软件的模块为 :  package

复制模板文件使用模块 :  template

判断字符串是否非空使用 :  [ -n "$str" ]

移动文件或重命名文件使用命令 :  mv

打印调试信息使用模块 :  debug

跳过本轮循环使用关键字 :  continue

终止进程使用命令 :  kill

创建空文件使用命令 :  touch

编辑文本文件最常用编辑器是 :  vim

在 Ansible 中创建目录应使用模块 :  file

Shell 中获取当前脚本文件名的变量是 :  $0

Jinja2 模板引用变量的格式为 :  {{ 变量名 }}

查看进程树使用命令 :  pstree

判断整数小于等于某值使用 :  -le

终止循环使用关键字 :  break

awk 获取当前行号使用变量 :  NR

for 循环基本语法为 :  for 变量 in 列表; do 命令; done

查看当前用户使用命令 :  whoami

判断是否为普通文件使用测试表达式 :  -f 文件名

在 bash 中执行算术表达式结构为 :  $((表达式))

强制终止进程使用参数 :  kill -9

显示系统当前日期使用命令 :  date

查找文件路径使用命令 :  find

查看历史命令使用命令 :  history

将标准错误输出重定向使用 :  2>

让程序后台运行并忽略挂断信号使用 :  nohup 命令 &

解压 tar.gz 文件使用 tar 参数 :  tar -zxf

查看监听端口使用命令(传统命令) :  netstat -tulnp

控制服务状态使用模块 :  service

删除文件使用命令 :  rm

判断整数大于等于某值使用 :  -ge

查看系统版本信息使用命令 :  cat /etc/os-release

awk 设置字段分隔符参数为 :  -F

判断是否为目录使用测试表达式 :  -d 目录名

查看命令手册使用命令 :  man

查看磁盘使用情况使用 :  df

打包并压缩文件使用 tar 参数 :  tar -zcf

显示文件最后 20 行内容使用 :  tail -20 file.txt

声明一个函数使用关键字 :  function

Ansible 开放 80 端口并启动 firewalld

- hosts: all
  become: yes
  tasks:
    - yum:
        name: firewalld
        state: present

    - service:
        name: firewalld
        state: started
        enabled: yes

    - firewalld:
        port: 80/tcp
        permanent: yes
        state: enabled
        immediate: yes

给文件每行加行号与时间戳

awk '{print NR, strftime("%F %T"), $0}' file.txt

备份指定目录到另一个目录并压缩为 timestamp.tar.gz

tar -czf /backup/dir/$(date +%F_%H%M%S).tar.gz /source/dir

判断目录是否存在并统计文件数量

read -p "请输入目录: " dir
if [ -d "$dir" ]; then
  echo "完整路径: $(realpath $dir)"
  echo ".sh 文件数量: $(find $dir -name '*.sh' | wc -l)"
  echo "普通文件数量: $(find $dir -type f | wc -l)"
else
  echo "目录不存在"
fi

检查 iowait 并输出警告

iowait=$(iostat -c 1 1 | awk 'NR==4{print $4}')
[ "${iowait%.*}" -gt 20 ] && echo " IOWAIT 过高: $iowait%"

检查用户是否存在并输出 home 目录

id testuser &>/dev/null && eval echo "~testuser" || echo "用户不存在"

使用 Ansible 创建 /data/app 目录并指定权限

- hosts: all
  become: yes
  tasks:
    - file:
        path: /data/app
        state: directory
        owner: root
        group: root
        mode: '0755'

Ansible 输出系统信息

- hosts: all
  tasks:
    - debug:
        msg:
          - "系统: {{ ansible_distribution }}"
          - "IP 地址: {{ ansible_default_ipv4.address }}"
          - "CPU 核心数: {{ ansible_processor_vcpus }}"
          - "内存大小: {{ ansible_memtotal_mb }} MB"

Ansible 禁止 root 登录 SSH

- hosts: all
  become: yes
  tasks:
    - lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^PermitRootLogin'
        line: 'PermitRootLogin no'

    - service:
        name: sshd
        state: restarted

批量重命名 txt 文件为 *____backup.txt

for f in *.txt; do
  mv "$f" "${f%.txt}____backup.txt"
done

随机生成 10 位密码并保存

tr -dc A-Za-z0-9 </dev/urandom | head -c10 > password.txt

Ansible 批量安装软件包

- hosts: all
  become: yes
  tasks:
    - yum:
        name:
          - vim
          - wget
          - curl
        state: present

判断当前用户是否 root

[ "$EUID" -eq 0 ] && echo "当前用户是 root" || echo "当前用户不是 root"

循环菜单程序

while true; do
  echo "1) 查询时间 2) 查询位置 3) 登录人数 q) 退出"
  read -p "请选择: " c
  case $c in
    1) date ;;
    2) pwd ;;
    3) who | wc -l ;;
    q) exit ;;
  esac
done

Shell 脚本检测 ping 是否成功

ping -c2 8.8.8.8 &>/dev/null && echo "Ping 成功" || echo "Ping 失败"

Ansible 执行 df -h 并输出行列表

- hosts: all
  tasks:
    - command: df -h
      register: df_out

    - debug:
        var: df_out.stdout_lines

输出 CPU、内存使用率和 15 分钟负载

echo "CPU 使用率: $(top -bn1 | awk '/Cpu/{print 100-$8"%"}')"
echo "内存使用率: $(free | awk '/Mem/{printf "%.2f%%\n",$3/$2*100}')"
echo "15 分钟负载: $(uptime | awk -F'load average:' '{print $2}' | cut -d, -f3)"

检测进程是否运行并输出 PID 与数量

pids=$(pgrep sshd)
echo "PID 列表: $pids"
echo "进程数量: $(echo "$pids" | wc -w)"

使用 Ansible 安装并启动 httpd 服务

- hosts: all
  become: yes
  tasks:
    - yum:
        name: httpd
        state: present

    - service:
        name: httpd
        state: started
        enabled: yes

Ansible 批量创建 dev 用户

- hosts: all
  become: yes
  vars:
    users:
      - dev1
      - dev2
      - dev3
  tasks:
    - user:
        name: "{{ item }}"
        state: present
      loop: "{{ users }}"

清理 /tmp 下 7 天前文件并记录日志

find /tmp -type f -mtime +7 -exec rm -v {} \; >> /var/log/tmp_clean.log

Ansible 复制文件并备份旧版本

- hosts: all
  become: yes
  tasks:
    - copy:
        src: test.conf
        dest: /etc/test.conf
        backup: yes

Ansible 安装并启动 firewalld 并输出状态

- hosts: all
  become: yes
  tasks:
    - yum:
        name: firewalld
        state: present

    - service:
        name: firewalld
        state: started
        enabled: yes

    - command: firewall-cmd --state
      register: fw_state

    - debug:
        msg: "firewalld 状态: {{ fw_state.stdout }}"

不断输入数字并累加,输入 q 退出

sum=0
while read -p "输入数字(q 退出): " n; do
  [ "$n" = "q" ] && break
  sum=$((sum+n))
  echo "当前累计值: $sum"
done

Ansible 创建多个目录结构

- hosts: all
  become: yes
  tasks:
    - file:
        path: "{{ item }}"
        state: directory
      loop:
        - /data/app/logs
        - /data/app/bin
        - /data/app/conf

统计文件每行字符数(不包含回车)

awk '{print length($0)}' file.txt

Ansible 创建用户 devuser 并指定加密密码

- hosts: all
  become: yes
  tasks:
    - user:
        name: devuser
        password: "{{ '123456' | password_hash('sha512') }}"

生成 5 条日志,每条间隔 3 秒

for i in {1..5}; do
  echo "$(date) log $i" >> test.log
  sleep 3
done

Ansible 获取 lsblk 输出

- hosts: all
  tasks:
    - command: lsblk
      register: lsblk_out

    - debug:
        var: lsblk_out.stdout_lines

检查 / 分区使用率,超过 80% 输出警告

use=$(df / | awk 'NR==2{print $5}' | tr -d '%')
[ "$use" -gt 80 ] && echo "分区使用率过高: $use%"

磁盘空间使用率检测

#!/bin/bash
# 检查磁盘空间使用率
threshold=80

df -h | grep -v Filesystem | while read -r line; do
    mount_point=$(echo "$line" | awk '{print $6}')
    usage=$(echo "$line" | awk '{print $5}' | sed 's/%//')

    if [ $usage -gt $threshold ]; then
        echo "警告:$mount_point 分区使用率过高:${usage}%"
    else
        echo "$mount_point 分区使用率正常:${usage}%"
    fi
done

第1空:threshold
第2空:usage

统计日志错误和警告

#!/bin/bash
# 统计日志文件中的错误数量
read -p "请输入日志文件路径:" log_file

if [ -f "$log_file" ]; then
    error_count=$(grep -c "ERROR" "$log_file")
    warn_count=$(grep -c "WARN" "$log_file")

    echo "日志文件 $log_file 统计:"
    echo "ERROR 数量:$error_count"
    echo "WARN 数量:$warn_count"
else
    echo "日志文件不存在"
fi

第1空:WARN
第2空:warn_count

监控 CPU 使用率

#!/bin/bash
# 监控CPU使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_int=$(echo "$cpu_usage" | cut --f1)

if [ $cpu_int -gt 80 ]; then
    echo "$(date) CPU使用率过高:${cpu_usage}%" >> /var/log/cpu_alert.log
    echo "警告:CPU使用率过高!"
else
    echo "CPU使用率正常:${cpu_usage}%"
fi

第1空:80
第2空:cpu_usage

自动清理旧日志

#!/bin/bash
# 自动清理旧日志
log_dir="/var/log/myapp"
days=30

if [ -d "$log_dir" ]; then
    echo "清理 $log_dir 中超过 $days 天的日志文件..."
    find "$log_dir" -name "*.log" -type f -mtime +$days -delete
    echo "清理完成,剩余日志文件:"
    find "$log_dir" -name "*.log" -type f | wc -l
else
    echo "日志目录不存在"
fi

第1空:days
第2空:wc -l

Ansible 配置 Java 环境

- name: 配置Java环境
  hosts: app_servers
  become: true
  vars:
    java_version: "11"
  tasks:
    - name: 安装OpenJDK
      yum:
        name: "java-{{ java_version }}-openjdk-devel"
        state: present

    - name: 设置JAVA_HOME环境变量
      lineinfile:
        path: /etc/profile
        line: 'export JAVA_HOME=/usr/lib/jvm/java-{{ java_version }}-openjdk'
        state: present

第1空:present
第2空:present

Ansible 部署 Web 服务

- name: 部署Web服务
  hosts: web_servers
  become: yes
  tasks:
    - name: 安装Apache
      yum:
        name: httpd
        state: present

    - name: 复制首页文件
      copy:
        src: ./index.html
        dest: /var/www/html/
        mode: 0644
      notify: 重启Apache

  handlers:
    - name: 重启Apache
      service:
        name: httpd
        state: restarted

第1空:present
第2空:重启Apache

Ansible 配置 Zabbix 客户端

- name: 配置Zabbix客户端
  hosts: all
  become: true
  vars:
    zabbix_server: "192.168.1.50"
  tasks:
    - name: 安装Zabbix客户端
      yum:
        name: zabbix-agent
        state: present

    - name: 配置Zabbix客户端
      lineinfile:
        path: /etc/zabbix/zabbix_agentd.conf
        regexp: '^Server='
        line: "Server={{ zabbix_server }}"

    - name: 启动Zabbix客户端
      service:
        name: zabbix-agent
        state: started
        enabled: yes

第1空:present
第2空:yes

Ansible 部署 Node.js 应用

- name: 部署Node.js应用
  hosts: app_servers
  become: true
  tasks:
    - name: 安装Node.js和npm
      yum:
        name:
          - nodejs
          - npm
        state: present

    - name: 安装PM2进程管理器
      npm:
        name: pm2
        global: yes
        state: present

    - name: 启动Node.js应用
      command: pm2 start /opt/app/server.js

第1空:present
第2空:present

配置 MySQL 用户和数据库

- name: 配置MySQL用户和数据库
  hosts: db_servers
  become: true
  vars:
    db_name: "appdb"
    db_user: "appuser"
    db_pass: "password123"

  tasks:
    - name: 创建数据库
      mysql_db:
        name: "{{ db_name }}"
        state: present

    - name: 创建数据库用户并授权
      mysql_user:
        name: "{{ db_user }}"
        password: "{{ db_pass }}"
        priv: "{{ db_name }}.*:ALL"
        host: "%"
        state: present

第1空:password123
第2空:%

配置防火墙允许特定 IP 访问

- name: 配置防火墙允许特定IP访问
  hosts: db_servers
  become: true
  tasks:
    - name: 允许Web服务器IP访问3306端口
      firewalld:
        port: 3306/tcp
        source: 192.168.1.0/24
        permanent: yes
        state: enabled

    - name: 重新加载防火墙规则
      service:
        name: firewalld
        state: reloaded

第1空:192.168.1.0/24
第2空:enabled

配置 YUM 源

- name: 配置YUM源
  hosts: all
  become: true
  tasks:
    - name: 安装EPEL源
      yum:
        name: epel-release
        state: present

    - name: 清理YUM缓存
      command: yum clean all

    - name: 生成新的YUM缓存
      command: yum makecache all

第1空:present
第2空:makecache

批量压缩文件

#!/bin/bash
# 批量压缩文件
read -p "请输入要压缩的文件类型(如txt):" file_type
files=$(ls *.$file_type 2>/dev/null)

if [ -n "$files" ]; then
    tar -czf "${file_type}_files_$(date +%Y%m%d).tar.gz" *.$file_type
    echo "已压缩以下文件:"
    echo "$files"
else
    echo "没有找到 .$file_type 类型的文件"
fi

第1空:file_type
第2空:files

监控网络流量

#!/bin/bash
# 监控网络流量
interface="eth0"

echo "监控 $interface 网络流量(按Ctrl+C退出)"
echo "----------------------------------------"
echo "接收字节 发送字节 接收速率 发送速率"

while true; do
    rx1=$(cat /sys/class/net/"$interface"/statistics/rx_bytes)
    tx1=$(cat /sys/class/net/"$interface"/statistics/tx_bytes)

    sleep 1

    rx2=$(cat /sys/class/net/"$interface"/statistics/rx_bytes)
    tx2=$(cat /sys/class/net/"$interface"/statistics/tx_bytes)

    rx_rate=$(( (rx2 - rx1) / 1024 ))
    tx_rate=$(( (tx2 - tx1) / 1024 ))

    echo "$rx2 $tx2 ${rx_rate}KB/s ${tx_rate}KB/s"
done

第1空:1
第2空:1024

监控系统负载

#!/bin/bash
# 监控系统负载
load=$(uptime | awk -F 'load average:' '{print $2}' | awk '{print $1}')
load_int=$(echo "$load" | cut --f1)

if [ $load_int -gt 5 ]; then
    echo "$(date) 系统负载过高:$load" >> /var/log/load_alert.log
    echo "警告:系统负载过高!"
else
    echo "系统负载正常:$load"
fi

第1空:5
第2空:load

检查网络连通性

#!/bin/bash
# 检查网络连通性
read -p "请输入目标IP地址:" ip_addr
count=0
success=0

while [ $count -lt 5 ]; do
    ping -c 1 -W 2 "$ip_addr" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        success=$((success + 1))
    fi
    count=$((count + 1))
done

echo "共测试$count次,成功$success次,成功率:$((success * 100 / count))%"

第1空:5
第2空:1

部署 Kubernetes 节点

- name: 部署Kubernetes节点
  hosts: k8s_nodes
  become: true
  vars:
    k8s_version: "1.21.0"
  tasks:
    - name: 安装kubeadm、kubelet和kubectl
      yum:
        name:
          - kubeadm-{{ k8s_version }}
          - kubelet-{{ k8s_version }}
          - kubectl-{{ k8s_version }}
        state: present

    - name: 启动kubelet服务
      service:
        name: kubelet
        state: started
        enabled: yes

第1空:present
第2空:yes

管理 SELinux

- name: 管理SELinux
  hosts: all
  become: true
  tasks:
    - name: 查看SELinux状态
      command: getenforce
      register: selinux_status

    - name: 输出SELinux状态
      debug:
        msg: "当前SELinux状态:{{ selinux_status.stdout }}"

    - name: 禁用SELinux(临时)
      command: setenforce 0
      when: selinux_status.stdout == "Enforcing"

第1空:selinux_status
第2空:Enforcing

配置防火墙规则

- name: 配置防火墙规则
  hosts: all
  become: true
  tasks:
    - name: 开放80和443端口
      firewalld:
        port: "{{ item }}"
        permanent: yes
        state: enabled
      loop:
        - 80/tcp
        - 443/tcp

    - name: 重新加载防火墙
      service:
        name: firewalld
        state: reloaded

第1空:enabled
第2空:443/tcp

配置邮件告警

- name: 配置邮件告警
  hosts: monitor_server
  become: true
  vars:
    alert_email: "admin@example.com"
  tasks:
    - name: 安装邮件客户端
      yum:
        name: mailx
        state: present

    - name: 配置邮件发送脚本
      template:
        src: send_alert.sh.j2
        dest: /usr/local/bin/send_alert.sh
        mode: 0755

    - name: 添加定时任务检查系统状态
      cron:
        name: "系统状态检查"
        minute: "*/30"
        job: "/usr/local/bin/check_system.sh"

第1空:present
第2空:0755

分析系统启动时间

#!/bin/bash
# 分析系统启动时间
boot_time=$(systemd-analyze | grep "Startup finished" | awk '{print $3 " " $4}')
echo "系统启动时间:$boot_time"

echo "启动过程中耗时最长的5个服务:"
systemd-analyze blame | head -n 5

echo "关键路径上的服务:"
systemd-analyze critical-chain | head -n 10

第1空:head -n
第2空:head -n

检查系统版本和内核信息

#!/bin/bash
# 检查系统版本和内核信息
echo "操作系统:$(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '"')"
echo "内核版本:$(uname -r)"
echo "系统架构:$(uname -m)"
echo "主机名:$(hostname)"
echo "IP地址:$(hostname -I | awk '{print $1}')"

第1空:os-release
第2空:r

安装并配置 Elasticsearch

- name: 安装并配置Elasticsearch
  hosts: es_servers
  become: true
  vars:
    es_version: "7.14.0"
  tasks:
    - name: 下载Elasticsearch RPM包
      get_url:
        url: "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-{{ es_version }}-x86_64.rpm"
        dest: /tmp/

    - name: 安装Elasticsearch
      yum:
        name: /tmp/elasticsearch-{{ es_version }}-x86_64.rpm
        state: present

    - name: 启动Elasticsearch
      service:
        name: elasticsearch
        state: started
        enabled: yes

第1空:present
第2空:yes

统计目录占用空间

#!/bin/bash
# 统计目录占用空间
read -p "请输入目录路径:" dir_path

if [ -d "$dir_path" ]; then
    echo "目录 $dir_path 下各子目录占用空间:"
    du -sh "$dir_path"/* | sort -hr
    total_size=$(du -sh "$dir_path" | awk '{print $1}')
    echo "总占用空间:$total_size"
else
    echo "目录不存在"
fi

第1空:hr
第2空:total_size

创建多个用户

- name: 创建多个用户
  hosts: all
  become: true
  tasks:
    - name: 循环创建用户
      user:
        name: "{{ item.name }}"
        uid: "{{ item.uid }}"
        shell: /bin/bash
        state: present
      loop:
        - { name: "devuser1", uid: 1005 }
        - { name: "devuser2", uid: 1006 }

第1空:present
第2空:1006

计算 1 到 n 的累加和

#!/bin/bash
# 计算1到n的累加和
read -p "请输入一个整数:" n
sum=0

for ((i=1; i<=n; i++)); do
    sum=$((sum + i))
done

echo "1到$n的累加和为:$sum"

第1空:n
第2空:i

批量修改文件后缀名

#!/bin/bash
# 批量修改文件后缀名
read -p "请输入原后缀名:" old_ext
read -p "请输入新后缀名:" new_ext
count=0

for file in *.$old_ext; do
    if [ -f "$file" ]; then
        new_file="${file%.$old_ext}.$new_ext"
        mv "$file" "$new_file"
        count=$((count + 1))
    fi
done

echo "共修改了$count个文件"

第1空:new_ext
第2空:1

管理 MySQL 服务

- name: 管理MySQL服务
  hosts: db_servers
  become: yes
  vars:
    mysql_root_password: "rootpass"
  tasks:
    - name: 安装MySQL
      yum:
        name: mysql-server
        state: present

    - name: 启动MySQL并设置开机自启
      service:
        name: mysqld
        state: started
        enabled: yes

第1空:rootpass
第2空:yes

部署 Redis 服务

- name: 部署Redis服务
  hosts: cache_servers
  become: true
  tasks:
    - name: 安装Redis
      yum:
        name: redis
        state: present

    - name: 修改Redis配置
      lineinfile:
        path: /etc/redis.conf
        regexp: '^bind'
        line: 'bind 0.0.0.0'

    - name: 启动Redis并设置开机自启
      service:
        name: redis
        state: started
        enabled: yes

第1空:present
第2空:started

配置 SSH 服务

- name: 配置SSH服务
  hosts: all
  become: true
  tasks:
    - name: 修改SSH端口
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^#?Port'
        line: 'Port 2222'
        state: present
      notify: restart sshd

  handlers:
    - name: restart sshd
      service:
        name: sshd
        state: restarted

第1空:2222
第2空:present

生成随机密码

#!/bin/bash
# 生成随机密码
read -p "请输入用户名:" username
password=$(openssl rand -base64 12 | cut -c1-10)

echo "用户名:$username"
echo "生成的随机密码:$password"

echo "$username:$password" >> /etc/passwd_list.txt
chmod 600 /etc/passwd_list.txt

第1空:password
第2空:passwd_list.txt

查找并替换文件内容

#!/bin/bash
# 查找并替换文件内容
read -p "请输入要处理的文件:" file
read -p "请输入要查找的字符串:" old_str
read -p "请输入要替换的字符串:" new_str

if [ -f "$file" ]; then
    cp "$file" "${file}.bak"
    sed -i "s/${old_str}/${new_str}/g" "$file"
    echo "替换完成,已创建备份文件 ${file}.bak"
    echo "替换前后对比:"
    diff "${file}.bak" "$file"
else
    echo "文件不存在"
fi

第1空:file
第2空:file

查找大文件

#!/bin/bash
# 查找大文件
read -p "请输入要查找的目录:" search_dir
read -p "请输入文件大小阈值(MB):" size

echo "查找 $search_dir 中大于 $size MB 的文件:"
find "$search_dir" -type f -size +${size}M -exec ls -lh {} \; \
| awk '{print $5, $9}' | sort -r -k1

第1空:9
第2空:r

部署 Nginx 虚拟主机

- name: 部署Nginx虚拟主机
  hosts: web_servers
  become: true
  tasks:
    - name: 创建虚拟主机配置目录
      file:
        path: /etc/nginx/conf.d
        state: directory
        mode: 0755

    - name: 复制虚拟主机配置
      template:
        src: vhost.conf.j2
        dest: /etc/nginx/conf.d/{{ item.domain }}.conf
        mode: 0644
      loop:
        - { domain: "example.com", root: "/var/www/example" }
        - { domain: "test.com", root: "/var/www/test" }
      notify: restart nginx

第1空:0755
第2空:/var/www/test

分析 Web 访问日志

#!/bin/bash
# 分析Web访问日志
log_file="/var/log/httpd/access_log"

if [ -f "$log_file" ]; then
    echo "访问量最高的10个IP:"
    awk '{print $1}' "$log_file" | sort | uniq -c | sort -nr | head 10

    echo "最常访问的10个页面:"
    awk '{print $7}' "$log_file" | sort | uniq -c | sort -nr | head 10
else
    echo "日志文件不存在"
fi

第1空:head
第2空:7

监控进程是否运行

#!/bin/bash
# 监控进程是否运行
read -p "请输入进程名:" proc_name
pid=$(pgrep "$proc_name")

if [ -n "$pid" ]; then
    echo "进程 $proc_name 正在运行,PID:$pid"
    echo "内存使用:$(ps -p $pid -o %mem,rss --no-headers)"
else
    echo "进程 $proc_name 未运行"
fi

第1空:pid
第2空:proc_name

检查文件是否存在并备份

#!/bin/bash
# 检查文件是否存在并备份
read -p "请输入文件名:" filename

if [ -f "$filename" ]; then
    backup_name="${filename}.bak"
    cp "$filename" "$backup_name"
    echo "已创建备份文件:$backup_name"
    ls -l "$filename" "$backup_name"
else
    echo "文件 $filename 不存在"
fi

第1空:backup_name
第2空:backup_name

配置时间同步

- name: 配置时间同步
  hosts: all
  become: true
  tasks:
    - name: 安装chrony
      yum:
        name: chrony
        state: present

    - name: 启动chronyd服务
      service:
        name: chronyd
        state: started
        enabled: yes

    - name: 同步时间
      command: chronyc sync

第1空:present
第2空:yes

部署 GitLab

- name: 部署GitLab
  hosts: git_servers
  become: true
  tasks:
    - name: 安装依赖包
      yum:
        name:
          - curl
          - policycoreutils
          - openssh-server
        state: present

    - name: 启动SSH服务
      service:
        name: sshd
        state: started
        enabled: yes

    - name: 下载GitLab安装脚本
      get_url:
        url: https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh
        dest: /tmp/install_gitlab.sh
        mode: 0755

    - name: 运行安装脚本
      command: bash /tmp/install_gitlab.sh

第1空:present
第2空:0755

统计目录下文件总数

#!/bin/bash
# 统计指定目录下的文件总数
read -p "请输入目录路径:" dir_path

if [ -d "$dir_path" ]; then
    file_count=$(ls -l "$dir_path" | grep -v ^d | wc -l)
    echo "目录 $dir_path 中的文件总数:$file_count"
else
    echo "错误:$dir_path 不是有效目录"
fi

第1空:file_count
第2空:dir_path

检查系统服务状态

#!/bin/bash
# 检查系统服务状态
services=("sshd" "httpd" "mysqld")

for service in "${services[@]}"; do
    status=$(systemctl is-active "$service")
    if [ "$status" = "active" ]; then
        echo "$service 服务运行正常"
    else
        echo "$service 服务状态异常:$status"
    fi
done

第1空:active
第2空:status

配置 HAProxy 负载均衡

- name: 配置HAProxy负载均衡
  hosts: lb_servers
  become: true
  tasks:
    - name: 安装HAProxy
      yum:
        name: haproxy
        state: present

    - name: 配置HAProxy
      template:
        src: haproxy.cfg.j2
        dest: /etc/haproxy/haproxy.cfg
        mode: 0644
      notify: restart haproxy

    - name: 启用并启动HAProxy
      service:
        name: haproxy
        state: started
        enabled: yes

第1空:present
第2空:yes

管理用户 sudo 权限

- name: 管理用户sudo权限
  hosts: all
  become: true
  tasks:
    - name: 允许wheel组sudo无密码
      lineinfile:
        path: /etc/sudoers
        regexp: '^%wheel'
        line: '%wheel ALL=(ALL) NOPASSWD:ALL'
        state: present
        validate: 'visudo -cf %s'

    - name: 将admin用户加入wheel组
      user:
        name: admin
        groups: wheel
        append: yes

第1空:NOPASSWD:ALL
第2空:yes

配置 Rsync 服务

- name: 配置Rsync服务
  hosts: backup_servers
  become: true
  tasks:
    - name: 安装Rsync
      yum:
        name: rsync
        state: present

    - name: 配置Rsync服务
      copy:
        src: rsyncd.conf
        dest: /etc/rsyncd.conf
        mode: 0644

    - name: 启动Rsync服务
      service:
        name: rsyncd
        state: started
        enabled: yes

第1空:present
第2空:yes

检查系统内存使用情况

#!/bin/bash
# 检查系统内存使用情况
total_mem=$(free -m | grep Mem | awk '{print $2}')
used_mem=$(free -m | grep Mem | awk '{print $3}')
mem_usage=$((used_mem * 100 / total_mem))

echo "总内存:${total_mem}MB"
echo "已用内存:${used_mem}MB"
echo "内存使用率:${mem_usage}%"

if [ $mem_usage -gt 80 ]; then
    echo "警告:内存使用率过高!"
    echo "占用内存最高的5个进程:"
    ps aux --sort=-%mem | head -n 6 | tail -n 5
fi

第1空:80
第2空:head -n

安装 Docker

- name: 安装Docker
  hosts: app_servers
  become: true
  tasks:
    - name: 安装Docker依赖
      yum:
        name:
          - yum-utils
          - device-mapper-persistent-data
          - lvm2
        state: present

    - name: 添加Docker仓库
      command: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    - name: 安装Docker CE
      yum:
        name: docker-ce
        state: present

第1空:present
第2空:present

监控系统登录失败情况

#!/bin/bash
# 监控系统登录失败情况
log_file="/var/log/secure"

if [ -f "$log_file" ]; then
    echo "最近10次登录失败记录:"
    grep "Failed password" "$log_file" | tail -10

    echo "登录失败次数最多的IP:"
    grep "Failed password" "$log_file" | awk '{print $11}' | sort | uniq -c | sort -nr | head 5

    echo "总失败次数:$(grep -c "Failed password" "$log_file")"
else
    echo "日志文件不存在"
fi

第1空:head
第2空:log_file

部署 Nginx 配置

- name: 部署Nginx配置
  hosts: web_servers
  become: yes
  tasks:
    - name: 安装Nginx
      yum:
        name: nginx
        state: present

    - name: 复制Nginx配置模板
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        mode: 0644
      notify: restart nginx

第1空:present
第2空:j2

自动备份 MySQL 数据库

#!/bin/bash
# 自动备份MySQL数据库
db_name="mydb"
backup_dir="/var/backups/mysql"
timestamp=$(date +%Y%m%d_%H%M%S)
backup_file="${backup_dir}/${db_name}_${timestamp}.sql"

mkdir -p "$backup_dir"

mysqldump -u root -p"rootpass" "$db_name" > "$backup_file"

if [ $? -eq 0 ]; then
    echo "数据库备份成功:$backup_file"
    gzip "$backup_file"
else
    echo "数据库备份失败"
fi

第1空:rootpass
第2空:0

部署 Python 应用

- name: 部署Python应用
  hosts: app_servers
  become: true
  vars:
    app_port: 8000
  tasks:
    - name: 安装Python3
      yum:
        name: python3
        state: present

    - name: 安装应用依赖
      pip:
        requirements: /opt/app/requirements.txt
        executable: pip3

    - name: 启动应用
      command: python3 /opt/app/main.py --port {{ app_port }}

第1空:present
第2空:pip3

检查并修复文件系统

#!/bin/bash
# 检查并修复文件系统
read -p "请输入要检查的分区(如/dev/sda1):" partition

if [ -b "$partition" ]; then
    echo "检查分区 $partition 的文件系统..."
    fsck -n "$partition"

    read -p "是否修复发现的错误?(y/n):" answer
    if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
        fsck -y "$partition"
    fi
else
    echo "错误:$partition 不是有效分区"
fi

第1空:partition
第2空:partition