基于杨寅冬《Linux自动化运维Shell与Ansible》· 共95题 · 单选 + 多选 + 填空 + 简答
#!/bin/bash,其作用是?易
$? 表示什么?易
$0、$1、$# 分别代表什么?中
a=3+5 的结果8?中
[ -f /etc/passwd ] 的 -f 测试条件含义是?中
while read line; do echo $line; done < file.txt 的作用是?中
local 关键字的作用是?中
hosts: all 表示?易
notify 和 handlers 的关系是?中
when 条件语句用于?易
tasks/main.yml 的作用是?中
ansible-vault encrypt secret.yml 命令的作用是?中
register 关键字的作用是?中
2>&1 的含义是?难
gather_facts: false 的作用是?中
source script.sh 与 ./script.sh 的区别是?难
set -e 的作用是?中
access.log 中出现次数最多的IP地址?难
$(( 10 % 3 )) 的结果是?易
ansible all -m setup -a "filter=ansible_memory_mb" 的作用是?中
sed 命令中,能删除文件中所有空白行的是?中
vars_prompt 的使用场景最适合?中
grep -E "^[0-9]{1,3}\.[0-9]{1,3}" file 的作用是?难
serial: 1 配合滚动更新,其含义是?难
crontab 定时任务格式 0 2 * * 1 /scripts/backup.sh 描述正确的是?中
loop(循环),以下正确的是?(多选)中
ansible-playbook 命令常用参数,正确的是?(多选)中
trap 命令可以捕获哪些信号?(多选)难
template 模块与 copy 模块的区别,正确的是?(多选)中
read 命令读取用户输入并存入变量 name,完整命令是:read _____ name易
ls -l 的输出追加到文件 list.txt(不覆盖),应使用重定向符:ls -l _____ list.txt易
case 语句的结束关键字是 _____易
_____ 模块管理系统服务(如启动/停止/重启 nginx)易
echo "Hello World" | tr _____ _____中
-m 参数指定 _____,-a 参数指定 _____易
_____ 命令可以在脚本中调试,逐行显示执行过程中
become: true 的作用是 _____易
$0 代表 _____,$1 代表 _____中
_____ 模块来安装软件包(适用于RedHat系列)易
$(command) 与反引号 `command` 的功能相同,都是 _____,推荐使用前者的原因是 _____中
ansible-galaxy init _____易
&& 和 || 分别表示:前者是 _____,后者是 _____中
ignore_errors: true 的作用是 _____中
sed 's/old/new/g' file 中的 g 标志的含义是 _____中
delegate_to 关键字的作用是 _____难
IFS 变量的全称是 _____,默认值是 _____难
_____ 关键字可以在任务中包含另一个任务文件中
${arr[@]} 和 ${arr[*]} 的区别是 _____难
ansible-playbook _____ playbook.yml易
_____,查看实时进程动态的命令是 _____易
arr=(a b c),获取数组所有元素用 _____,获取数组长度用 _____中
_____ 部分定义该操作,通过 _____ 关键字触发中
awk 打印 /etc/passwd 中 UID 大于 1000 的用户名(第1列),命令为:awk -F: '$_____ > _____ {print $1}' /etc/passwd难
ansible-vault rekey secret.yml 的作用是 _____中
while true; do ... done 是 _____ 循环,退出该循环需要在循环体内使用 _____ 语句易
lineinfile 模块的作用是 _____,与 blockinfile 模块的区别是 _____难
nohup ./script.sh & 中 nohup 的作用是 _____,& 的作用是 _____中
break、continue、exit 三者的区别。中
#!/bin/bash
add() {
local a=$1
local b=$2
echo $((a + b))
}
result=$(add 3 5)
echo "3 + 5 = $result"
注意:Shell函数不能用return返回数值(return只返回0-255的状态码),需通过echo输出并用$()捕获。
---
- name: 示例Play名称
hosts: webservers
become: true
vars:
http_port: 80
tasks:
- name: 安装nginx
yum:
name: nginx
state: present
- name: 启动nginx服务
service:
name: nginx
state: started
enabled: yes
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
/etc/passwd 文件中的用户数量。易
cat /etc/passwd | wc -lwc -l < /etc/passwdroles 目录结构有哪些标准子目录?各自存放什么内容?中
#!/bin/bash
PROCESS="nginx"
if pgrep -x "$PROCESS" > /dev/null 2>&1; then
echo "$PROCESS 正在运行"
else
echo "$PROCESS 未运行,正在启动..."
systemctl start "$PROCESS"
if [ $? -eq 0 ]; then
echo "$PROCESS 启动成功"
else
echo "$PROCESS 启动失败" >&2
exit 1
fi
fi
ansible.cfg 中以下配置项的含义:remote_user、private_key_file、host_key_checking。中
''、双引号 ""、反引号 `` 三者的区别。中
forks 参数的作用。中
[defaults] forks = 20ansible-playbook -f 20 playbook.ymlawk 命令统计 /etc/passwd 中每行第一个字段(用户名),并打印用户总数的命令。难
awk -F: '{print $1}' /etc/passwd | wc -l
或使用awk的END块:
awk -F: 'END{print "用户总数: "NR}' /etc/passwd
-F: 指定字段分隔符为冒号;NR为总行数;$1为第一字段。
vars_files、vars_prompt、set_fact 三种定义变量方式的区别和使用场景。难
heredoc(here document) 的用法,并给出一个用它生成配置文件的示例。难
<<EOF ... EOF:
cat > /etc/nginx/conf.d/mysite.conf << EOF
server {
listen 80;
server_name ${DOMAIN};
root /var/www/html;
}
EOF
• 结束标记EOF可以是任意词,但首尾必须一致block、rescue、always 三个关键字如何实现错误处理?类比什么编程语言特性?难
- block:
- name: 执行可能失败的任务
command: /some/risky/command
rescue:
- name: 处理错误
debug: msg="任务失败,正在恢复"
always:
- name: 清理临时文件
file: path=/tmp/tmp_file state=absent
#!/bin/bash
count=0
while [ $count -lt 10 ]; do
if ! pgrep -x "nginx" > /dev/null 2>&1; then
echo "[$(date)] nginx未运行,正在重启..."
systemctl start nginx
else
echo "[$(date)] nginx运行正常"
fi
count=$((count + 1))
sleep 5
done
echo "检测完毕,共检测10次"
考察知识点:while循环、pgrep、$()命令替换、sleep、计数器、date格式化。
---
- name: 批量创建用户
hosts: webservers
become: true
vars:
users:
- user1
- user2
- user3
tasks:
- name: 创建用户并建立家目录
user:
name: "{{ item }}"
state: present
create_home: yes
loop: "{{ users }}"
ln 源文件 链接名ln -s 源文件 链接名ln -s /app/v2.0 /app/current 实现版本切换。
姓名 成绩 的文本文件,计算平均分并输出不及格(低于60分)的同学姓名。难
#!/bin/bash
# scores.txt 格式:张三 85
file="scores.txt"
total=0
count=0
echo "=== 不及格名单 ==="
while read name score; do
total=$((total + score))
count=$((count + 1))
if [ $score -lt 60 ]; then
echo " $name: $score 分"
fi
done < "$file"
if [ $count -gt 0 ]; then
avg=$((total / count))
echo "=== 班级平均分: ${avg} 分 ==="
fi
import_playbook、import_tasks、include_tasks 三者的区别和各自适用场景。难
/var/www/html 目录到备份服务器,请设计一个完整方案(包含Shell脚本思路 + Ansible部署思路),不需要写完整代码,描述关键步骤即可。难
tar -czf backup_$(date +%Y%m%d).tar.gz /var/www/htmlfind /backup -mtime +7 -delete0 3 * * * /scripts/backup.sh