【shell编程小项目】

目录

  • 一、项目拓扑
  • 二、要求
  • 三、shell编程

一、项目拓扑

在这里插入图片描述

二、要求

环境准备:
准备两个虚拟机,按照环境配置好对应的 IP 地址和对应的主机名和 SSH 密钥登录在 workstation.exam.com 节点实现如下需求:
1、编写 Shell 脚本,要求代码逻辑符合需求,前后代码风格统一,执行时显示信息简明扼要,符合代码意图。
2、该脚本应当实现 node.exam.com 节点上的需求,同时包含对应服务的测试结果
在 node.exam.com 节点上应当完成的需求,并应当对每个步骤的结果进行判断:
1、实现本地软件仓库配置,仓库路径为 /cdrom
2、实现安装 httpd 和 bind 软件包,用来提供 Web 和 DNS 服务
3、实现 Web 服务器 www.exam.com 和 www.test.com
4、要求访问 www.exam.com 时,页面内容为 Welcome to exam
5、要求访问 www.test.com 时,页面内容为 Welcome to test
6、该 Web 服务器监听地址为 172.16.10.10,端口为 80
7、要求实现 DNS 服务,监听地址为 172.16.10.11,要求提供该环境中所有的主机名解析。
8、要求实现防火墙放行 Web 和 DNS 服务,永久并立即生效
9、要求实现 Web 和 DNS 服务开机自动启动

三、shell编程

1、首先node.exam.com这个节点需要两个ip地址,可以通过nmcli命令添加IP地址。
2、由于每个人的虚拟vm分配的IP地址不一定是172.16.10/24这个网段,所以ip地址不必跟实验一致,只要能实现需求就行。
实验环境:欧拉系统
完整的代码:

#!/bin/bash
# 检查是否为 root 用户
if [ "$(id -u)" -ne "0" ]; thenecho "此脚本必须以 root 身份运行"exit 1
elseecho "----正在以root身份运行----"
fi
# 配置本地软件仓库
local_repo(){ls /cdrom &> /dev/nullif [ $? -ne 0 ];then`mkdir -p /cdrom``mount /dev/cdrom /cdrom &>/dev/null`elsemount /dev/cdrom /cdrom &>/dev/nullficat <<EOF > /etc/yum.repos.d/local.repo
[local]
name=Local Repository
baseurl=file:///cdrom
enabled=1
gpgcheck=0
EOFecho "----配置本地软件仓库已经完成-----"}
#安装 httpd 和 bind 软件包
install_soft(){#查看这两个软件包是否安装httpd_status=$(rpm -qa httpd | wc -l)bind_status=$(rpm -qa bind | wc -l)if [ $httpd_status -eq 0 ];thenyum install httpd -y &>/dev/nullsystemctl enable httpd --nowfiif [ $bind_status -eq 0 ];thenyum install bind -y &>/dev/nullsystemctl enable named.service --nowfiecho "----https和bind软件包安装完成并实现开机自启----"
}
#实现 Web 服务器 www.exam.com 和 www.test.com
web_server2(){#创建页面的存放位置路径---www.exam.comls /testweb1 &>/dev/nullif [ $? -ne 0 ];thenmkdir /testweb1echo "Welcome to exam" > /testweb1/index.htmlfi#www.test.comls /testweb2 &>/dev/nullif [ $? -ne 0 ];thenmkdir /testweb2echo "Welcome to test" > /testweb2/index.htmlfi#取出本机的ip地址,用于监听本机ip=$(ip add | grep -E "inet.*global" | head -1 | awk '{print $2}'|cut -d/ -f1)cat <<EOF > /etc/httpd/conf.d/vhost.conf
<directory /testweb1>allowoverride nonerequire all granted
</directory>
<virtualhost $ip:80>documentroot /testweb1servername www.exam.com
</virtualhost>
<directory /testweb2>allowoverride nonerequire all granted
</directory>
<virtualhost $ip:80>documentroot /testweb2servername www.test.com
</virtualhost>
EOF#重启服务器systemctl restart httpd.serviceecho "----web服务器配置完成,通过www.exam.com/www.test.com可在本机访问----"
}
#实现防火墙放行 Web 和 DNS 服务,永久并立即生效
firewall_pass(){firewall_status=$(systemctl is-active firewalld.service)if [ "$firewall_status" = "active" ];then       firewall-cmd --add-service=httpd --permanent &>/dev/nullfirewall-cmd --reload &>/dev/nullfirewall-cmd --add-port=53/udp --permanent &>/dev/nullfirewall-cmd --reload &>/dev/nullelsesystemctl enable firewalld.service --now &>/dev/nullfirewall-cmd --add-service=httpd --permanent &>/dev/nullfirewall-cmd --reload &>/dev/nullfirewall-cmd --add-port=53/udp --permanent &>/dev/nullfirewall-cmd --reload &>/dev/nullfiecho "----防火墙放行 Web 和 DNS 服务已经完成----"
}
#实现 DNS 服务,提供该环境中所有的主机名解析
dns_service(){#做一个dns的主配置文件的备份ls /etc/named.conf.bak &>/dev/nullif [ $? -ne 0 ];thencp /etc/named.conf /etc/named.conf.bak &>/dev/nullfi#修改主配置文件,先查询该配置文件是否做过修改,没修改在该num=$(grep '#allow-query' /etc/named.conf|wc -l)#获取dns的ip地址ip_dns=$(hostname -I | awk '{print $2}')#获取web服务器的ip地址ip_web=$(hostname -I | awk '{print $1}')if [ $num -eq 0 ];thensed -i 's/allow-query/#allow-query/' /etc/named.confsed -i 's/dnssec-validation/#dnssec-validation/' /etc/named.confsed -i 's/listen-on port 53 { 127.0.0.1; };/listen-on port 53 { any; };/' /etc/named.confcat <<EOF >> /etc/named.conf
zone "test.com" IN{type master;file "named.test.com";     
};
zone "exam.com" IN{type master;file "named.exam.com";     
};
EOF#编写区域配置文件cat <<'EOF' > /var/named/named.test.com
$TTL 1D
@       IN SOA  @ admin.test.com. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      ns1
EOFcat <<EOF>> /var/named/named.test.com
ns1     A       $ip_dns
www     A       $ip_web
EOFcat <<'EOF' > /var/named/named.exam.com
$TTL 1D
@       IN SOA  @ admin.exam.com. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimum
EOFcat <<EOF >> /var/named/named.exam.comNS      ns1
ns1     A       $ip_dns
www     A       $ip_web
EOFfi#重启dns服务systemctl restart namedecho "----DNS服务配置完成,重启完成----"echo "****dns_ip:$ip_dns;web_ip:$ip_web****"
}
#修改本地/etc/resolv.conf
change_file(){ip_dns=$(hostname -I | awk '{print $2}')echo "nameserver $ip_dns" > /etc/resolv.confecho "---/etc/resolv.conf的dns地址修改完成---"echo "通过curl www.exam.com 或者 curl www.test.com测试"
}
local_repo
install_soft
web_server2
dns_service
firewall_pass
change_file

截图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1474852.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【web APIs】快速上手Day04(Dom节点)

目录 Web APIs - 第4天日期对象实例化方法案例-页面显示时间时间的另外一个写法 时间戳三种方式获取时间戳案例-毕业倒计时效果 节点操作DOM节点查找节点父节点查找案例-关闭广告子节点查找兄弟关系查找 增加节点创建节点追加节点案例-学成在线案例渲染克隆节点 删除节点 M端事…

ESP32 步进电机精准控制:打造高精度 DIY 写字机器人,实现流畅书写体验

摘要: 想让你的 ESP32 不再仅仅是控制灯光的工具吗&#xff1f; 本文将带你使用 ESP32 开发板、步进电机和简单的机械结构打造一个能够自动写字的机器人。我们将深入浅出地讲解硬件连接、软件代码以及控制逻辑&#xff0c;并提供完整的项目代码和电路图&#xff0c;即使是 Ardu…

在mac下 Vue2和Vue3并存 全局Vue2环境创建Vue3新项目(Vue cli2和Vue cli4)

全局安装vue2 npm install vue-cli -g自行在任意位置创建一个文件夹vue3&#xff0c;局部安装vue3,注意不要带-g npm install vue/cli安装完成后&#xff0c;进入目录&#xff0c;修改vue为vue3 找到vue3/node-moudles/.bin/vue&#xff0c;把vue改成vue3。 对环境变量进行配置…

码垛机:物流自动化的关键设备

在数字化浪潮席卷全球的今天&#xff0c;物流行业正迎来前所未有的变革。其中&#xff0c;码垛机作为物流自动化的关键设备&#xff0c;正在逐步改变着传统仓库的运营模式&#xff0c;引领着物流自动化的新篇章。 一、码垛机&#xff1a;物流自动化的得力助手 码垛机是一种能够…

【手写数据库内核组件】0201 哈希表hashtable的实战演练,多种非加密算法,hash桶的冲突处理,查找插入删除操作的代码实现

hash表原理与实战 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 hash表…

从资金管理的角度 谈谈伦敦金投资技巧

刚进入伦敦金市场的时候&#xff0c;笔者认为技术分析是很重要的&#xff0c;所以将学习伦敦金投资技巧的精力全部投入到技术分析的学习中。经过一系列交易的亏损&#xff0c;笔者才发现&#xff0c;其实交易管理才是最重要的。如果管理得好&#xff0c;30%的胜率&#xff0c;投…

Python28-7.5 降维算法之t-分布邻域嵌入t-SNE

t-分布邻域嵌入&#xff08;t-distributed Stochastic Neighbor Embedding&#xff0c;t-SNE&#xff09;是一种用于数据降维和可视化的机器学习算法&#xff0c;尤其适用于高维数据的降维。t-SNE通过将高维数据嵌入到低维空间&#xff08;通常是二维或三维&#xff09;中&…

CC工具箱使用指南:【相交占比分析】

一、简介 需求场景如下&#xff0c;有【待分析地块】和【面积占比参考】2个图层。2个图层之间存在空间上的重叠。工具的目的是为了分析出【待分析地块】的每1个图斑中&#xff0c;和【面积占比参考】相交的面积&#xff0c;以及和总面积的占比。 举一个应用场景为例&#xff0…

STM32点灯闪烁

stm32c8t6引脚图 开发板引脚图 GPIO端口的每个位可以由软件分别配置成 多种模式。 ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 配置GPIO端口步骤&#xff1a;开启时钟->使用结构体设置输出模式…

WAIC热点聚焦|新质生产力与低空经济

WAIC热点聚焦|新质生产力与低空经济 概览 # WAIC热点聚焦 | 新质生产力与低空经济## 1. 新质生产力定义与特点 - 新质生产力是在新的经济社会发展阶段中形成的&#xff0c;具有变革性和高增长潜力的生产能力。## 2. 低空经济概念与构成 ### 2.1 低空经济定义 - 低空经济是依托…

代码随想录第45天|动态规划

300.最长递增子序列 参考 dp[i] 表示以 i 为结尾的最长递增子序列长度递推公式: 使用 i 和 j 判断 dp[i] max(dp[j] 1, dp[i])每次 j 都需要从头遍历 初始化: dp[i] 1 class Solution { public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums…

苹果清理软件:让你的设备焕然一新

随着时间的推移&#xff0c;无论是Mac电脑还是iOS设备&#xff0c;都可能会因为积累的垃圾文件、缓存、未使用的应用和其他冗余数据而开始表现出性能下降。这不仅会占用宝贵的存储空间&#xff0c;还可能影响设备的响应速度和电池寿命。幸运的是&#xff0c;有多种苹果清理软件…

13 学习总结:指针 · 其一

目录 一、内存和地址 &#xff08;一&#xff09;内存 &#xff08;二&#xff09;内存单元 &#xff08;三&#xff09;地址 &#xff08;四&#xff09;拓展&#xff1a;CPU与内存的联系 二、指针变量和地址 &#xff08;一&#xff09;创建变量的本质 &#xff08;二…

SAP已下发EWM的交货单修改下发状态

此种情况针对EWM未接收到ERP交货单时&#xff0c;可以使用此程序将ERP交货单调整为未分配状态&#xff0c;在进行调整数据后&#xff0c;然后使用VL06I&#xff08;启用自动下发EWM配置&#xff0c;则在交货单修改保存后会立即下发EWM&#xff09;重新下发EWM系统。 操作步骤如…

Kaggle网站免费算力使用,深度学习模型训练

声明&#xff1a; 本文主要内容为&#xff1a;kaggle网站数据集上传&#xff0c;训练模型下载、模型部署、提交后台运行等教程。 1、账号注册 此步骤本文略过&#xff0c;如有需要可以参考其他文章。 2、上传资源 不论是上传训练好的模型进行预测&#xff0c;还是训练用的…

泛微开发修炼之旅--33基于ecology实现附件上传接口,提供给外部应用使用

文章链接&#xff1a;33基于ecology实现附件上传接口&#xff0c;提供给外部应用使用

从FasterTransformer源码解读开始了解大模型(2.1)代码通读03

从FasterTransformer源码解读开始了解大模型&#xff08;2.2&#xff09;代码解读03-forward函数 写在前面的话 本篇的内容继续解读forward函数&#xff0c;从650行开始进行解读 零、输出Context_embeddings和context_cum_log_probs的参数和逻辑 从653行开始&#xff0c;会…

Edge浏览器油猴插件的安装与使用

油猴 (又称篡改猴或Tampermonkey) 是最流行的浏览器扩展之一。它允许用户自定义并增强网页的功能。用户脚本是小型 JavaScript 程序&#xff0c;可用于向网页添加新功能或修改现有功能。使用油猴&#xff0c;您可以轻松在任何网站上创建、管理和运行这些用户脚本。 1.插件的安…

spRAG框架学习小结

spRAG是什么 spRAG是一个针对非结构化数据的检索引擎。它特别擅长处理对密集文本的复杂查询&#xff0c;比如财务报告、法律文件和学术论文。有两种关键方法用于提高性能&#xff0c;超越了普通的RAG系统&#xff1a; 自动上下文&#xff08;AutoContext&#xff09;&#xff…

SQLServer Manager Studio扩展开发从入门到弃坑

Visualstudio的已经开发好了&#xff0c;可这个就是不行&#xff0c;直接运行点这些按钮加载失败&#xff0c;而我直接不调试模式&#xff0c;则直接什么都没有&#xff0c;调试 发现是根本没触发逻辑的。 文档资料太少&#xff0c; 我换了几个ssms.exe都不行&#xff0c;18-20…