shell案例-30(1)

案例1:如何部署own cloud私有云仓库?(需要源码包私联)

问题:

  1. 搭建私有云仓库需要那些服务?
  2. 为什么需要5.6以上版本的PHP?

分析:

  1. owncloud 、php-5.6以上版本、mariadb
  2. 5.6版本的PHP
    1. :在性能上有很大的提升采用了更高效的内存管理机制,例如对 PHP 脚本执行过程中的内存分配和释放进行了优化。在 OwnCloud 中,当有大量用户同时访问和操作文件时,比如在企业环境中多个员工同时上传或下载文件,良好的内存管理可以减少内存泄漏的风险,提高服务器的响应速度和稳定性。

PHP 5.6 及以上版本修复了大量的安全漏洞。例如,在旧版本的 PHP 中可能存在一些安全隐患,如 SQL 注入漏洞(由于旧版本对输入数据验证和处理的不完善)和跨站脚本攻击(XSS)漏洞。而在 PHP 5.6 中,对数据过滤和验证机制进行了增强,如引入了新的输入过滤函数来更好地处理用户输入数据,防止恶意脚本注入。这对于 OwnCloud 来说非常重要,因为它需要处理用户的各种文件操作请求和元数据输入,这些数据如果不经过安全的处理,很容易被攻击者利用,从而危及用户文件的安全。

实现

实现解析:

  1. install_firewalld:关闭防火墙和selinux
  2. install_config:将/etc/selinux/config里的enforcing改为disadled
  3. Install_server:安装软件(搭建OwnCloud需要LAMP的架构支持)以及启动服务(httpd、mariadb)
  4. Install_owncloud:解压own cloud到当前目录,并将将owncloud下面的所有文件复制到/var/www/html中最后再修改权限
  5. Install_mariadb:在Mariadb数据库中创建OwnCloud的数据库
  6. Install_yum:升级yum数据库
  7. Install_php:重新安装PHP(5.6版本)

结果验证

案例2:提示用户输入用户名,脚本自动创建相应的帐户和密码

  1. 问题

    1. 如何输入用户名会怎么样
    2. 如何不输入密码会怎么样

  1. 分析

    1. 当用户不输入账户名时,,则会提示必须输入帐户名并退出脚本;
    2. 当用户不输入密码时,则统一使用默认密码12345
  2. 实现:

    1. #!/bin/bash

      # 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户

      # 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默

      # 认的 123456 作为默认密码。

      read -p "请输入用户名: " user

      #使用?z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2

      #没有输入用户名脚本退出后,使用$?查看的返回码为 2

      if [ -z $user ];then

           echo "您不需输入账户名"

         exit 2

      fi

      #使用 stty ?echo 关闭 shell 的回显功能

      #使用 stty  echo 打开 shell 的回显功能

      stty -echo

      read -p "请输入密码: " pass

      stty echo

      pass=${pass:?123456}

      useradd "$user"

      echo "$pass" | passwd ??stdin "$user"

  3. 解析

      1. #使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2
      2. #没有输入用户名脚本退出后,使用$?查看的返回码为 2
      3. #使用 stty ‐echo 关闭 shell 的回显功能
      4. #使用 stty  echo 打开 shell 的回显功能
  4. 验证:

案例3:使用脚本自动创建逻辑卷

流程图:

        

实现

#!/bin/bash

# 使用脚本自动创建逻辑卷

# 清屏,显示警告信息,创建将磁盘转换为逻辑卷会删除数据

clear

echo -e "\033[32m           !!!!!!警告(Warning)!!!!!!\033[0m"

echo

echo "+++++++++++++++++++++++++++++++++++++++++++++++++"

echo "脚本会将整个磁盘转换为 PV,并删除磁盘上所有数据!!!"

echo "This Script will destroy all data on the Disk"

echo "+++++++++++++++++++++++++++++++++++++++++++++++++"

echo

read -p "请问是否继续 y/n?:" sure

# 测试用户输入的是否为 y,如果不是则退出脚本

[ $sure != y ] && exit

# 提示用户输入相关参数(磁盘、卷组名称等数据),并测试用户是否输入了这些值,如果没有输入,则脚本退出

read -p "请输入磁盘名称,如/dev/vdb:" disk

[ -z $disk ] && echo "没有输入磁盘名称" && exit

read -p "请输入卷组名称:" vg_name

[ -z $vg_name ] && echo "没有输入卷组名称" && exit

read -p "请输入逻辑卷名称:" lv_name

[ -z $lv_name ] && echo "没有输入逻辑卷名称" && exit

read -p "请输入逻辑卷大小:" lv_size

[ -z $lv_size ] && echo "没有输入逻辑卷大小" && exit

# 使用命令创建逻辑卷

pvcreate $disk

vgcreate $vg_name $disk

lvcreate -L ${lv_size}M -n ${lv_name}  ${vg_name}

实现解析

    1. # 清屏,显示警告信息,创建将磁盘转换为逻辑卷会删除数据
    2. # 测试用户输入的是否为 y,如果不是则退出脚本
    3. # 提示用户输入相关参数(磁盘、卷组名称等数据),并测试用户是否输入了这些值,如果没有输入,则脚本退出
    4. # 使用命令创建逻辑卷

6、结果验证

        

案例4:提示用户输入年份后判断该年是否是闰年

  1. 问题

    1. 如何该用户输入的数字不能被4整除如何?
    2. 如果该用户输入的不是数字如何?

  1. 分析

  2. 流程图

  1. 实现

#!/bin/bash

# 提示用户输入年份后判断该年是否为闰年

# 能被4整除并且并不能被100整除的年份是闰年

# 能被400整除的年份也是闰年

read -p "请输入一个年份:" year

if [ "$year" = "" ];then

    echo "没有输入年份"

    exit

fi

#使用正则测试变量 year 中是否包含大小写字母

if [[ "$year" =~ [a?Z] ]];then

    echo "你输入的不是数字"

    exit

fi

# 判断是否为闰年

if [ $[year % 4] -eq 0 ] && [ $[year % 100] -ne 0 ];then

    echo "$year年是闰年"  

elif [ $[year % 400] -eq 0 ];then

    echo "$year年是闰年"

else

    echo "$year年不是闰年"

fi

解析

        

    1. 用户输入为空白时,提示没有输入年份
    2. 用户输入为字母时,提示输入不是数字
    3. 用户输入是数字时,与四进行计算

结果验证

案例5:检查特定软件包否安装

  1. 问题

  2. 分析

    1. 软件包名称:需要检查的软件包名称,例如nginx。
    2. 检查方法:使用which命令来检查软件包的可执行文件是否存在。
    3. 输出结果:根据检查结果输出相应的提示信息
  3. 流程图

  4. 实现
    1. #!/bin/bash

      package_name="nginx"

      rpm -qa | grep -qw $package_name

      if [ $? -eq 0 ]; then

          echo "$package_name is installed."

      else

          echo "$package_name is not installed."

      fi

  5. 实现解析

    1. ​​​​​​​

      1. Rpm -qa 命令会列出系统中所有已经安装过的软件包
      2. #rpm -qa | grep -qw $package_name在rpm -qa 的输出中进行搜索
      3. 后续的if语句根据grep命令的退出状态来判断软件是否安装,并输出相应的信息
  6. 结果验证

案例6:用shell脚本实现统计Linux系统中与进程相关的常见数量信息

  1. 问题

    1. 如何查看Linux进程
    2. 如何将正在进行的进程总数、不同用户拥有的进程总数量、处于睡眠状态的进程数量、僵尸进程的数量等列举出来
  2. 分析

    1. 将进程进行循环,依次查看进程状态
    2. 进程状态进行一个叠加,显示进程总数
  3. 流程图

  4. 实现

    1. #!/bin/bash

      # 统计正在运行的进程总数

      running_processes=$(ps -ef | grep -v grep | grep -c " S ")

      echo "正在运行的进程总数: $running_processes"

      # 统计不同用户拥有的进程数量

      user_process_count=$(ps -ef | awk '{print $1}' | sort | uniq -c | awk '{print $2 " " $1}')

      echo "不同用户拥有的进程数量如下:"

      echo "$user_process_count"

      # 统计处于睡眠状态的进程数量

      sleeping_processes=$(ps -ef | grep -v grep | grep -c " Ss ")

      echo "处于睡眠状态的进程数量: $sleeping_processes"

      # 统计僵尸进程数量

      zombie_processes=$(ps -ef | grep -v grep | grep -c " Z ")

      echo "僵尸进程数量: $zombie_processes"

  5. 实现解析

    1. ​​​​​​​

      1. 统计正在运行的进程总数
        • 首先使用 ps -ef 命令列出系统中所有的进程信息。ps -ef 会显示每个进程的详细信息,包括用户、PID(进程 ID)、PPID(父进程 ID)、CPU 使用率、内存使用率等等。
        • 然后通过 grep -v grep 过滤掉包含 grep 本身的行,因为 grep 命令在查找进程时也会作为一个进程出现,如果不过滤掉会干扰统计结果
        • 接着使用 grep -c " S " 统计包含状态标识为 S(代表正在运行或可运行状态)的进程行数,也就是正在运行的进程总数
    2. 统计不同用户拥有的进程数量
      • 同样先使用 ps -ef 列出所有进程信息
      • 接着通过 awk '{print $1}' 提取每行进程信息中的第一个字段,也就是进程所属的用户
      • 然后使用 sort 对提取出的用户进行排序,以便后续进行去重统计
      • 再通过 uniq -c 对排序后的用户进行去重,并统计每个用户出现的次数。这里 uniq -c 会在每行前面添加一个数字,表示该行内容出现的次数
      • 最后通过 awk '{print $2 " " $1}' 重新调整输出格式,先输出用户名称,再输出该用户拥有的进程数量,并将结果存储在变量 user_process_count 中,然后输出相关信息
    3. 统计处于睡眠状态的进程数量
      • 使用 ps -ef 列出所有进程信息
      • 通过 grep -v grep 过滤掉 grep 本身的进程
      • 使用 grep -c " Ss " 统计包含状态标识为 Ss(代表睡眠状态)的进程行数,也就是处于睡眠状态的进程数量grep -v grep 过滤掉 grep 本身的进程
    4.  统计僵尸进程数量
      • 利用 ps -ef 列出所有进程信息
      • 通过 grep -v grep 过滤掉 grep 本身的进程
      • 使用 grep -c " Z " 统计包含状态标识为 Z(代表僵尸状态)的进程行数,也就是僵尸进程数量,并将结果存储在变量 zombie_processes 中,最后输出该数量
  6. 结果验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值