【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.mzph.cn/diannao/41701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0803实操-Windows Server系统管理

Windows Server系统管理 系统管理与基础配置 查看系统信息、更改计算机名称 网络配置 启用网络发现 Windows启用网络发现是指在网络设置中启用一个功能&#xff0c;该功能允许您的计算机在网络上识别和访问其他设备和计算机。具体来说&#xff0c;启用网络发现后&#xff…

Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题

问题锁定 参考网友的思路&#xff1a; Qt5.9 Modbus request timeout 0x5异常解决 网友认为是Qt的bug&#xff0c; 我也认同&#xff1b;网友认为可以更新模块&#xff0c; 我也认同&#xff0c; 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用&#xff0c;界面拖…

Mybatis原生使用

一、MyBatis初次使用 2.1 环境搭建步骤 MyBatis 的 API &#xff1a; https://mybatis.org/mybatis-3/zh/getting-started.html 1.引入依赖包 2.准备核心配置件 db.properties drivercom.mysql.cj.jdbc.Driver urljdbc:mysql://123.57.206.19:3306/demo?useUnicodetrue&am…

如何选择最佳的照片和视频恢复软件

您是否意外从硬盘或 USB 卡中删除了照片或视频&#xff1f;最好的视频和照片恢复软件可以帮到您&#xff01;如果您一直在寻找最好的照片恢复软件&#xff0c;那么您来对地方了。本文将分享一些帮助您找到最佳视频恢复软件的提示。 重要提示&#xff1a;事实&#xff1a;媒体文…

【LabVIEW学习篇 - 3】:程序结构——顺序结构、for循环、while循环

文章目录 顺序结构案例一案例二 for循环while循环 顺序结构 LabVIEW中的顺序结构是一种常用的控制结构&#xff0c;用于按顺序执行程序的不同部分。顺序结构在程序中按照从左到右的顺序依次执行各个子结构&#xff0c;类似于传统的文本编程语言中的顺序执行。 案例一 案例一…

JAVA的线性表数据结构的超详解

目录 顺序表的顺序存储结构 1.数组 2.顺序表 顺序表的声明&#xff0c;存储操作以及效率分析 1.泛型类 2.顺序表的插入操作 3. 顺序表的删除操作 4.顺序表查询操作 5.顺序表的应用 线性表的链式存储结构 单链表的基本操作 顺序表的顺序存储结构 数组是实现顺序存储…

随手记录: Ubuntu NVIDIA显卡驱动安装后 屏幕亮度无法调节 无法连接外显示器等问题

背景 一句话&#xff1a;简单记录帮身边人装系统发现 GPU和外接显示器的无法连接&#xff0c;同时亮度无法调节等新问题 设备型号&#xff1a; 联想笔记本&#xff1a;ThinkBook 16p Gen2CPU&#xff1a;AMD Ryzen 7 5800HGPU&#xff1a;RTX 3060 问题描述及流程&#xff…

类继承-多继承虚继承

#include<iostream> using namespace std; class A1 { public:int a 10;}; class A2 { public:int b 20; }; class B :public A1, public A2 { public:int c 30; }; int main(){B b;cout << b.a << b.b << b.c << endl;return 0; } 如果基类…

STM32-HAL-SDIO-(sd卡的识别,整理后的版本)

1STM32Cube操作 1-1配置时钟 1-2配置调试端口 1-3配置uart 1-4配置SDIO 选择数据传输引脚个数 需改配置&#xff08;图中改了两处&#xff0c;选中的和最后一个&#xff09; 1-5打开DMA 传输方向改为图中的&#xff08;由内转向外设&#xff09;在改图中的一次读写的大小 1-…

图像处理调试软件推荐

对于图像处理的调试&#xff0c;使用具有图形用户界面&#xff08;GUI&#xff09;且支持实时调整和预览的图像处理软件&#xff0c;可以大大提高工作效率。以下是几款常用且功能强大的图像处理调试软件推荐&#xff1a; ImageJ/FijiMATLABOpenCV with GUI LibrariesNI Vision …

Java中关于构造代码块和静态代码块的解析

构造代码块 特点&#xff1a;优先于构造方法执行,每new一次,就会执行一次 public class Person {public Person(){System.out.println("我是无参构造方法");}{System.out.println("我是构造代码块"); //构造代码块} }public class Test {public stati…

【推荐图书】深入浅出Spring Boot 3.x

推荐原因 这部SpringBoot3.x经典之作&#xff0c;时隔六年迎来重磅升级&#xff01; 适合java开发相关读者 购买链接 商品链接&#xff1a;https://item.jd.com/14600442.html 介绍 书名&#xff1a;深入浅出Spring Boot 3.x ISBN&#xff1a;978-7-115-63282-1/ 作者&…

「ETL趋势」分区支持PostgreSQL、Greenplum、Gauss200, 定时任务支持Kettle

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.9最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

【国产开源可视化引擎Meta2d.js】钢笔

钢笔 钢笔是和其他众多绘图工具&#xff08;Photoshop、Sketch、Illustrator&#xff09;中一致的钢笔工具&#xff0c;能够很方便的在线绘制各种小图标 在线体验&#xff1a; 乐吾乐2D可视化 示例&#xff1a; // 开始绘画&#xff1a;curve。除了curve&#xff0c;还有poly…

上位机图像处理和嵌入式模块部署(mcu项目1:用户手册)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 一个完整的产品&#xff0c;除了上位机软件、固件、硬件、包装之外&#xff0c;一般还需要一个用户手册。好的用户手册应该能够兼顾到大多数人的认…

力扣(3200)- 三角形的最大高度

好方法&#xff1a; 垃圾方法&#xff1a;

吉洪诺夫正则化随笔

前言 前几天在回顾压缩感知中的特征选择与LASSO回归发现了这个Tikhonov regularization&#xff0c;查了一下叫个如题的名字。先来浅说一下正则化这玩意&#xff1a;正则化&#xff08;Regularization&#xff09;是一种用来防止模型过拟合&#xff08;Overfitting&#xff09…

孙溟㠭篆刻《睡片原谅一切,醒来不问过往》

孙溟㠭篆刻《睡片原谅一切&#xff0c;醒来不问过往》 佛陀言&#xff1a;睡前原谅一切&#xff0c;醒来不问过往&#xff0c;珍惜所有不期而遇&#xff0c;看淡所有不辞而别甲辰夏溟㠭于寒舍小窗下刊。

相关向量机RVM算法介绍继承sklearn-SVM-API实现回归预测算例

一、相关向量机RVM与支持向量机SVM对比 1、相关向量机&#xff08;RVM&#xff09; ①定义与原理 相关向量机&#xff08;Relevance Vector Machine, RVM&#xff09;是一种基于概率模型的机器学习算法&#xff0c;主要用于分类和回归分析。基于稀疏贝叶斯学习框架&#xff…

Springboot助农农产品销售系统-计算机毕业设计源码16718

摘要 SpringBoot助农农产品销售系统旨在通过利用SpringBoot框架开发一个便捷高效的农产品销售平台。该系统包括用户注册登录、商品浏览、购物车管理、订单生成、支付功能等模块。通过整合支付接口、地图定位、推荐系统等技术&#xff0c;提供给用户更好的购物体验。本文介绍了…