2024年Linux最全Ansible自动化运维Inventory与Ad-Hoc(3),2024年最新科学技术协会面试

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

}


### 3. 简洁输出



[root@localhost ~]# ansible host1 -m ping -o
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#绿色字体


### 4. know\_hosts



[root@localhost ~]# ansible host2 -m ping -o -u root -k #指定用户交互式ssh登录
SSH password:
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#绿色字体


关闭ssh询问


方法一:修改sshd配置,StrictHostKeyChecking no



[root@localhost ~]# vim /etc/ssh/ssh_config
35 # StrictHostKeyChecking ask
36 StrictHostKeyChecking no
[root@localhost ~]# systemctl restart sshd


 方法二:修改ansible配置,启用host\_key\_checking = False



[root@localhost ~]# vim /etc/ansible/ansible.cfg
71 host_key_checking = False


### 5. ping和ssh


Ping 是一种基于 ICMP(Internet Control Message Protocol)的网络工具,通常用于测试两台计算机之间的连接和延迟。通过发送 ICMP 回显请求消息到目标主机并等待其回应,可以确定目标主机是否可达以及网络延迟情况。


SSH(Secure Shell)是一种加密的网络协议,用于安全地远程连接到另一台计算机,并在该计算机上执行命令。SSH 提供了加密的通信渠道,使得数据传输过程中更加安全,并且还允许用户进行身份验证,确保只有授权用户能够访问远程计算机。


**区别:**  
 协议类型:


* Ping 使用 ICMP 协议,用于检测主机之间的连通性。
* SSH 使用安全的加密通信协议,用于远程登录和执行命令。


功能:


* Ping 用于测试主机之间的连通性和延迟。
* SSH 用于建立安全的远程连接,允许用户登录并在远程主机上执行命令。


安全性:


* Ping 不提供加密或身份验证,仅用于测试连接。
* SSH 提供加密通信和身份验证,确保通信的安全性和用户身份的合法性


## 四、Inventory 主机清单


### 1. 简介


Inventory 主机清单是 Ansible 的一个重要概念,它用于定义 Ansible 将要管理的主机、服务器或设备。这个清单可以包含主机名、IP 地址、主机组以及其他相关的信息。


### 2. 增加主机组



[root@localhost ~]# vim /etc/ansible/hosts
[webserver] #下方主机将被分配到webserver组中
host1
host2
host3
host4

[root@localhost ~]# ansible webserver -m ping -o
host3 | UNREACHABLE!: Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
host2 | UNREACHABLE!: Failed to connect to the host via ssh: Warning: Permanently added ‘host2,192.168.190.102’ (ECDSA) to the list of known hosts.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
host4 | UNREACHABLE!: Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#由此可见webserver已经生效被调用,只有host1做了免密登录,返回结果可以忽略


### 3. 增加用户名密码



[root@localhost ~]# vim /etc/ansible/hosts
[webserver]
host[1:4] ansible_ssh_user=‘root’ ansible_ssh_pass=‘123’
[root@localhost ~]# ansible webserver -m ping -o
host3 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host4 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#此时可以看到返回结果全部成功,且字体均为绿色;即使host1配置过免密,不冲突


### 4. 增加端口


① 修改host4 ssh协议端口号



[root@localhost ~]# vim /etc/ssh/sshd_config
17 #Port 22
18 Port 9527
[root@localhost ~]# systemctl restart sshd


② 测试ansible通信



[root@localhost ~]# ansible webserver -m ping -o
host4 | UNREACHABLE!: Failed to connect to the host via ssh: ssh: connect to host host4 port 22: Connection refused
host3 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#此时host4无法通信,提示端口故障


 ③ 修改服务器Inventory主机清单配置,再次访问



[root@localhost ~]# vim /etc/ansible/hosts
[webserver]
host[1:3] ansible_ssh_user=‘root’ ansible_ssh_pass=‘123’
host4 ansible_ssh_user=‘root’ ansible_ssh_pass=‘123’ ansible_ssh_port=‘9527’

[root@localhost ~]# ansible webserver -m ping -o
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host3 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host4 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#可见全部成功


### 5. 组:变量


当一个组中需要大量定义变量,可以统一定义。定义完成后,改组的所有成员都将收到、适应这个变量。



[root@localhost ~]# vim /etc/ansible/hosts
[webserver]
host[1:3]
host4 ansible_ssh_port=‘9527’

[webserver:vars]
ansible_ssh_user=‘root’
ansible_ssh_pass=‘123’

[root@localhost ~]# ansible webserver -m ping -o
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host3 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host4 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#全部返回成功


常用变量:




|  |  |  |
| --- | --- | --- |
| 参数 | 用途 | 示例 |
| ansible\_ssh\_host | 定义 hosts ssh 地址 | ansible\_ssh\_host=192.168.190.100 |
| ansible\_ssh\_port | 定义 hosts ssh 端口 | ansible\_ssh\_port=9527 |
| ansible\_ssh\_user | 定义 hosts ssh 认证用户 | ansible\_ssh\_user=root |
| ansible\_ssh\_pass | 定义 hosts ssh 认证密码 | ansible\_ssh\_pass=123 |
| ansible\_sudo | 定义 hosts sudo 用户 | ansible\_sudo=zhangsan |
| ansible\_sudo\_pass | 定义 hosts sudo 密码 | ansible\_sudo pass=123 |
| ansible\_sudo\_exe | 定义 hosts sudo 路径 | ansible\_sudo\_exe=/usr/bin/sudo |
| ansible\_connection | 定义 hosts 连接方式 | ansible\_connection=local |
| ansible\_ssh\_private\_ key\_file | 定义 hosts 私钥 | ansible\_ssh\_private\_key\_file=/root/key |
| ansible\_ssh\_shell\_ type | 定义 hosts shell 类型 | ansible\_ssh\_shell\_type=bash |
| ansible\_python\_interpreter | 定义 hosts 任务执行python路径 | ansible\_python\_ interpreter=/usr/bin/python2.6 |
| ansible\_\*\_interpreter | 定义 hosts 其它语言解析路径 | ansible\_\*\_interpreter=/usr/bin/ruby |


### 6. 子分组


将不同的分组进行组合



[root@localhost ~]# vim /etc/ansible/hosts
[apache]
host[1:2]

[nginx]
host3
host4 ansible_ssh_port=‘9527’

[webserver:children]
apache
nginx

[webserver:vars]
ansible_ssh_user=‘root’
ansible_ssh_pass=‘123’

[root@localhost ~]# ansible webserver -m ping -o
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host3 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host4 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#可见webserver这个总组调用了apache和nginx这两个从组


### 7. 自定义主机列表


打包主机清单,多处使用


将host4 ssh协议端口号改为默认22。


① 创建主机清单文件



[root@localhost ~]# vim /data/hostlist
[apache]
host[1:2]

[nginx]
host3
host4

[webserver:children]
apache
nginx

[webserver:vars]
ansible_ssh_user=‘root’
ansible_ssh_pass=‘123’


② 指定 Inventory 主机清单的位置,访问管理节点



[root@localhost ~]# ansible -i /data/hostlist webserver -m ping -o
host3 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host4 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “ping”: “pong”}
#访问成功,字体均为绿色


## 五、Ad-Hoc 点对点模式


### 1. 简介


指的是在不使用Playbook的情况下,直接使用ansible命令行工具执行临时命令。这些命令通常是一次性的、针对特定任务的,而不需要编写长期维护的Playbook。通过AD-Hoc命令,可以快速地在远程主机上执行特定的任务,比如文件操作、软件安装、服务管理等。


### 2. 模块


#### 2.1 command 模块


command 模块允许用户在目标主机上执行特定的命令,主要功能是在远程主机执行命令,此为默认模块,可忽略 -m 选项;此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现 ;注意此模块不具有幂等性 。以下是 command 模块的一般用法:



ansible -m command -a “”
# 是要操作的目标主机或主机组。
#-m command 指定要使用的模块是 “command”。
#-a “” 传递给模块的参数,即要在目标主机上执行的命令。


示例: 复制文件至指定目录


![](https://img-blog.csdnimg.cn/direct/1167d362239a4c6089f36631c4520437.png)


如何修改默认模块?



[root@ansible ~]# vim /etc/ansible/ansible.cfg
114 #module_name = command


#### 2.2 shell 模块


和command相似,用shell执行命令支持各种符号,比如:\*,$, >,此模块不具有幂等性。


示例:创建文件hello.txt,写入内容hello


![](https://img-blog.csdnimg.cn/direct/b29bb1c1b6424e638349779016b520d5.png)


示例:提权操作


① 先在被控制端(host1)sudo授权



[root@localhost ~]# vim /etc/sudoers
93 fql ALL=(ALL) NOPASSWD:ALL


② 以fql用户身份连接,然后以特权模式切换到fql用户,并执行whoami命令,查看当前登录用户



[root@ansible ~]# ansible host1 -m shell -a ‘whoami’ -u fql -k -b --become-user=fql
SSH password:
[WARNING]: Module remote_tmp /home/fql/.ansible/tmp did not exist and was created with a mode of 0700, this may
cause issues when running as another user. To avoid this, create the remote_tmp dir with the correct permissions
manually
host1 | CHANGED | rc=0 >>
fql


#### 2.3 script 模块


在远程主机上运行ansible服务器上的脚本(无需执行权限,本身不执行),此模块不具有幂等性。


示例:执行脚本新建hello文件


![](https://img-blog.csdnimg.cn/direct/73f6db08d05842768f71cc804ef29bfd.png)


#### 2.4 copy 模块


从ansible服务器主控端复制文件到远程主机,src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件。关键字选项如下:



src       #代表源文件路径
dest      #代表文件落地路径
owner     #属主
group     #属组
mode      #代表权限
backup    #如果复制时有同名文件会先备份再复制(注意:源文件内容有变化才会备份)


准备:被管理节点新建用户fql


示例:拷贝管理节点文件至被管理节点指定目录,并指定属主及权限


![](https://img-blog.csdnimg.cn/direct/3c420fa505984aeb9511854b32223b9b.png)


注意:


* etc不加/:连etc一起复制,etc会变成子目录
* etc加/:只复制etc下的文件


#### 2.5 get\_url 模块


用于将文件从http、https或ftp下载到被管理节点上。关键字选项如下:



url: #下载文件的URL,支持HTTP,HTTPS或FTP协议
dest: #下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
owner: #指定属主
group: #指定属组
mode: #指定权限
force: #如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件
checksum:#对目标文件在下载后计算摘要,以确保其完整性(md5sum)



##可以检测文件是否有问题
[root@ansible ~]# md5sum nginx-1.18.0.tar.gz
3ca4a37931e9fa301964b8ce889da8cb nginx-1.8.0.tar.gz

[root@ansible ~]# ansible web -m get_url -a ‘url=https://nginx.org/download/nginx-1.18.0.tar.gz dest=/opt checksum=“md5:3ca4a37931e9fa301964b8ce889da8cb”’


示例:下载nginx源码包至被管理节点指定目录


![](https://img-blog.csdnimg.cn/direct/b4614793fc014a83b75f293e1cb678de.png)


#### 2.6 fetch 模块


从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录(可以将文件夹打包成压缩包传输)。


示例:拷贝被管理节点文件至服务端


![](https://img-blog.csdnimg.cn/direct/1c77c28ed1184a9c9249efbd43c91543.png)


#### 2.7 file 模块


设置文件属性,创建软链接等,关键字选项如下:



path       #指定文件路径
state      #文件状态 有:新建(touch) 删除(absent) 文件夹(directory)  连接文件(link)等
src        #源文件
mode       #权限
owner      #属主
group      #属组
recurse    #递归,修改属性时有效


示例:



[root@ansible ~]# ansible web -m file -a ‘path=/mnt/web.txt state=touch owner=fql group=fql mode=644’
#创建空文件
[root@ansible ~]# ansible web -m file -a ‘path=/mnt/web state=directory’
#新建目录
[root@ansible ~]# ansible web -m file -a ‘src=/mnt/web path=/opt/web-link state=link’
#新建软连接 path|dest|name 这三个选项都可以使用
[root@ansible ~]# ansible web -m file -a ‘path=/opt/web-link state=absent’
#删除文件
[root@ansible ~]# ansible all -m file -a “path=/data/mysql state=directory owner=mysql group=mysql”
[root@ansible ~]# ansible all -m file -a “path=/data/mysql state=directory owner=mysql group=mysql recurse=yes”
#递归修改目录及子目录的属性


#### 2.8 stat 模块


检查文件或文件系统的状态,对于Windows目标,请改用win\_stat模块。


选项: 


* path:文件/对象的完整路径(必须)


常用的返回值判断:


* exists: 判断是否存在
* isuid: 调用用户的ID与所有者ID是否匹配


示例:判断文件是否存在



[root@ansible ~]# ansible webserver -m stat -a ‘path=/opt/xxxxxx’ -o
host1 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “stat”: {“exists”: false}}
host3 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “stat”: {“exists”: false}}
host4 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “stat”: {“exists”: false}}
host2 | SUCCESS => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “stat”: {“exists”: false}}
#不存在


#### 2.9 unarchive 模块


解包解压缩。实现有两种用法:


* 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略
* 将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no


常见参数:



copy: #默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到被控制节点上,如果设置为copy=no,会在被控制节点上寻找src源文件
remote_src:#和copy功能一样且互斥,yes表示在被控制节点,不在ansible主机,no表示文件在ansible主机上
src: #源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no
dest: #被控制节点的目标路径
mode: #设置解压缩后的文件权限


示例:将管理节点压缩包解压到被管理节点


① 管理节点创建(或指定现有)压缩包



[root@ansible data]# touch {1…3}.txt
[root@ansible data]# ls
1.txt 2.txt 3.txt
[root@ansible data]# tar -zcvf file.tar.gz 1.txt 2.txt 3.txt .
[root@ansible data]# ls
1.txt 2.txt 3.txt file.tar.gz


②  将管理节点压缩包解压到被管理节点


![](https://img-blog.csdnimg.cn/direct/8ad4457b12b240c7a65b6e91d764d83e.png)


示例:将被管理节点压缩包解压到被管理节点,即压缩包从被管理节点寻找


![](https://img-blog.csdnimg.cn/direct/d1b63176debf4b7390c5963eb1266c02.png)


#### 2.10 archive 模块


对被管理节点文件进行压缩,打包压缩保存在被管理节点。


参数:



path=/var/log/: #指定要打包的目录路径为/var/log/。
dest=/data/log.tar.bz2:#指定创建的归档文件名为log.tar.bz2,并保存在/data/目录下。
format=bz2: #指定归档文件的格式为bz2,即使用 bzip2 进行压缩。
owner=fql: #指定归档文件的所有者为fql。
mode=0600: #指定归档文件的权限模式为0600,即只有所有者具有读写权限,没有执行权限


示例:


![](https://img-blog.csdnimg.cn/direct/4df5aec5fd8749edb9e63db28a78b672.png)


#### 2.11 hostname 模块


管理主机名,一般不使用此模块,主机名会一致。


示例:修改host1主机名



[root@ansible ~]# ansible host1 -m hostname -a ‘name=node1’


#### 2.12 cron 模块


用于管理 cron 作业(定时任务),支持时间:minute,hour,day,month,weekday。


功能、参数:



功能:
添加/删除 cron 作业: #可以使用 Ansible 的 cron 模块添加新的 cron 作业或删除现有的作业。
修改 cron 作业: #可以更新现有的 cron 作业的时间表、命令等信息。
列出 cron 作业: #可以列出系统中所有的 cron 作业,以便进行查看和管理。

参数:
name: #cron 作业的名称。
minute/hour/day/month/weekday: #cron 作业执行的时间表设定。
user: #作业执行的用户。
job: #要执行的命令或脚本。
state: #指定作业的状态,可以是 present(存在)、absent(不存在)等。


示例:创建备份计划任务


![](https://img-blog.csdnimg.cn/direct/2e4c1e8a52b84465b2705f6d18c4e8ac.png)


示例:关闭计划任务


![](https://img-blog.csdnimg.cn/direct/3c3e25171a504f81bb33add1562262f8.png)


示例:删除计划任务


![](https://img-blog.csdnimg.cn/direct/d46abea5394d4adf9f96106b7e81ec1c.png)


管理节点另外写法:ansible websrvs -m cron -a 'state=absent name=Synctime' 


#### 2.13 yum 和 apt 模块


yum管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本


apt类似yum模块的功能,主要管理Debian相关版本的软件包


参数:



Yum 模块参数:
name: #要安装、升级或删除的软件包名称。
state: #指定软件包的状态,可以是 present(存在)、latest(最新)、absent(不存在)等。
update_cache: #指定是否更新 Yum 软件包缓存。
disablerepo: #禁用特定的 Yum 软件源。
enablerepo: #启用特定的 Yum 软件源。
disable_gpg_check:#禁用 GPG 检查。
installroot: #指定要安装软件包的根目录。
update_only: #仅更新软件包而不安装新软件包。
conf_file: #指定要使用的 Yum 配置文件。

apt 模块参数:
name: #要安装、升级或删除的软件包名称。
state: #指定软件包的状态,可以是 present(存在)、latest(最新)、absent(不存在)等。
update_cache: #指定是否更新 apt 软件包缓存。
cache_valid_time: #指定软件包缓存的有效时间。
force: #强制执行操作,即使可能有依赖关系问题。
allow_unauthenticated: #允许安装未经身份验证的软件包。
autoremove: #自动删除不再需要的软件包。
purge: #卸载软件包并删除其配置文件。
upgrade: #执行软件包升级操作。


示例:批量安装httpd


![](https://img-blog.csdnimg.cn/direct/e847f7c8535c42f7a299c97f2397f3ac.png)


其他示例:



ansible websrvs -m yum -a ‘name=nginx state=present enablerepo=epel’  #启用epel源进行安装
ansible websrvs -m yum -a ‘name=* state=lastest exclude=kernel*,foo*’ #升级除kernel和foo开头以外的所有包
ansible websrvs -m yum -a ‘name=httpd state=absent’   #删除


#### 2.14 yum\_repository 模块


用于管理 YUM 软件包管理器中的软件仓库配置的模块。它允许用户添加、删除和更新系统上的 YUM 软件仓库。


参数关键字:



name参数: #必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
baseurl参数: #此参数用于设置 yum 仓库的 baseurl。
description参数: #此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
file参数: #此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作 为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。
enabled参数: #此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
gpgcheck参数: #此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。
gpgcakey参数: #当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
state参数: #默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。


示例:批量新建yum仓库epel源


![](https://img-blog.csdnimg.cn/direct/67f99fe67a0b444ba7c69dbe3dc22c8d.png)


#### 2.15 service 模块


管理系统服务状态的模块。它可以启动、停止、重新启动和重新加载系统服务。


参数关键字:



name参数: #此参数用于指定需要操作的服务名称,比如 nginx。
state参数: #此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded。
enabled参数: #此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。


示例:启动httpd服务并开机自启


![](https://img-blog.csdnimg.cn/direct/0216986eab244903b259bc3348ba3a6c.png)


#### 2.16 mount 挂载和卸载


管理文件系统挂载和卸载的模块。它允许用户在远程主机上挂载和卸载文件系统,以及设置文件系统的相关属性。


主要参数:



path (必需): #要挂载或卸载的目标路径。
src: #要挂载的设备、分区或者远程位置。
fstype: #文件系统类型,例如 ext4、xfs 等。
state: #可以是 mounted(已挂载)、unmounted(已卸载)或者 present(存在)。
opts: #挂载选项,如 “rw”(读写)、“ro”(只读)等。
dump: #控制备份程序是否应该备份文件系统。
passno: #控制启动时文件系统检查的顺序。


示例:



#临时挂载
mount websrvs -m mount -a ‘src=“UUID=b3e48f45-f933-4c8e-a700-22a159ec9077” path=/home fstype=xfs opts=noatime state=present’
#临时取消挂载
mount websrvs -m mount -a ‘path=/home fstype=xfs opts=noatime state=unmounted’
#永久挂载
ansible websrvs -m mount -a ‘src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads opts=“_netdev” state=mounted’
#永久卸载
ansible websrvs -m mount -a ‘src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads state=absent’
#UUID为设备序列号,可以通过lsblk获得
[root@ansible ~]# ansible webserver -a “blkid”


#### 2.17 user 模块


管理系统用户的模块。它允许用户创建、删除和修改系统用户以及相关属性。


主要参数:



comment   #用户的描述信息
createhome   #是否创建家目录
force   #在使用state=absent时, 行为与userdel –force一致.
group   #指定基本组(需要已存在的组)
groups   #指定附加组,如果指定为(groups=)表示删除所有组
home   #指定用户家目录
move_home   #如果设置为home=时, 试图将用户主目录移动到指定的目录
name   #指定用户名(必需)
non_unique   #该选项允许改变非唯一的用户ID值
password   #指定用户密码,使用 SHA512 hash
remove   #在使用state=absent时, 行为是与userdel –remove一致
shell   #指定默认shell
state   #设置帐号状态,不指定为创建,指定值为absent表示删除
system   #当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid   #指定用户的uid
update_password #用于控制何时更新用户的密码。该参数有三个可能的取值:
always: #始终更新用户密码。
on_create: #仅在创建用户时更新密码。
never: #永远不更新密码。


示例:添加用户


![](https://img-blog.csdnimg.cn/direct/b647ed574b3d46b8845a2c2aa8076016.png)


示例:删除用户 


![](https://img-blog.csdnimg.cn/direct/0e1c240a01fa4040865df7ce5d59f5b9.png)


#### 2.18 group 模块


管理系统用户组的模块。它允许用户创建、删除和修改系统用户组以及相关属性。


主要参数:



name (必需): #要操作的用户组名称。
state: #可以是 present(存在)、absent(不存在)。
gid: #用户组的 GID。
system: #如果为 true,则创建一个系统用户组。
append: #如果为 true,则将用户添加到指定的用户组中;如果为 false,则只会将用户包含在指定的用户组中


示例:创建组


![](https://img-blog.csdnimg.cn/direct/e150bf8f61ab421da3654f08b6716656.png)


示例:删除组 




为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**

![](https://img-blog.csdnimg.cn/img_convert/d69de2cbd1b0b7e5e6afc87c9efce810.png)

本份面试集锦涵盖了

*   **174 道运维工程师面试题**
*   **128道k8s面试题**
*   **108道shell脚本面试题**
*   **200道Linux面试题**
*   **51道docker面试题**
*   **35道Jenkis面试题**
*   **78道MongoDB面试题**
*   **17道ansible面试题**
*   **60道dubbo面试题**
*   **53道kafka面试**
*   **18道mysql面试题**
*   **40道nginx面试题**
*   **77道redis面试题**
*   **28道zookeeper**

**总计 1000+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

> 17、如何重置mysql root密码?

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

sible面试题**
*   **60道dubbo面试题**
*   **53道kafka面试**
*   **18道mysql面试题**
*   **40道nginx面试题**
*   **77道redis面试题**
*   **28道zookeeper**

**总计 1000+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

> 17、如何重置mysql root密码?

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值