task1 shell后面理解

image
基于一台最小化安装的Cent0s7.9,完成如下任务,基础的

任务6:获取CPU、内存、磁盘信息

脚本 /root/6.sh

#!/bin/bash  
# CPU核心数(物理核心,nproc更准确)  
cpu=$(nproc)  
# 内存容量(MB,free -m 取第二行总内存)  
mem=$(free -m | awk 'NR==2 {print $2}')  
# 磁盘容量(根分区,GB,df -h 处理单位)  
disk=$(df -h / | awk 'NR==2 {gsub("G", "", $2); print $2}')  

echo "本机CPU核心数是 ${cpu} ,本机内存容量是 ${mem} MB,本机磁盘容量是 ${disk} GB。"  

执行chmod +x /root/6.sh && /root/6.sh

任务7:获取内网/出口IP

脚本 /root/7.sh(需先安装 curlyum install -y curl):

#!/bin/bash  
# 内网IP(过滤非回环的IPv4地址)  
inner_ip=$(ip addr | grep -w inet | grep -v '127.0.0.1' | awk '{print $2}' | cut -d '/' -f 1)  
# 出口IP(通过公网API获取)  
outer_ip=$(curl -s https://icanhazip.com)  

echo "本机内网IP地址是: ${inner_ip},本机访问互联网的出口IP地址是: ${outer_ip}。"  

执行chmod +x /root/7.sh && /root/7.sh

任务8:安装Docker并运行Nginx

  1. 安装Docker依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2  
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo  
    yum install -y docker-ce  
    
  2. 启动Docker
    systemctl start docker && systemctl enable docker  
    
  3. 运行Nginx容器(映射8080端口):
    docker run -d --name nginx-8080 -p 8080:80 nginx  
    
  4. 修改Nginx首页内容
    docker exec nginx-8080 sed -i 's#Welcome to nginx!#Do difficult but meaningful things and keep doing them !!!#g' /usr/share/nginx/html/index.html  
    
  5. 测试curl http://127.0.0.1:8080

任务9:探测偶数IP

脚本 /root/9.sh

#!/bin/bash  
# 遍历203.107.6.0/24的偶数IP(最后一位0-254,步长2)  
for i in {0..254..2}  
do  
    ip="203.107.6.${i}"  
    # Ping测试(1个包,超时1秒)  
    ping -c 1 -W 1 ${ip} &> /dev/null  
    if [ $? -eq 0 ]; then  
        echo "${ip} OK"  
    fi  
done  

执行chmod +x /root/9.sh && /root/9.sh

任务10:开机创建时间文件

  1. 编辑开机脚本
    echo 'echo "创建时间:$(date)" > /root/boottime.txt' >> /etc/rc.d/rc.local  
    
  2. 赋予执行权限(CentOS7默认禁用 rc.local):
    chmod +x /etc/rc.d/rc.local  
    

任务11:切换防火墙为iptables并开放8080

  1. 关闭firewalld
    systemctl stop firewalld && systemctl disable firewalld  
    
  2. 安装iptables
    yum install -y iptables-services  
    
  3. 启动并设为开机自启
    systemctl start iptables && systemctl enable iptables  
    
  4. 添加8080端口规则
    iptables -A INPUT -p tcp --dport 8080 -j ACCEPT  
    
  5. 保存规则(永久生效):
    service iptables save  
    

任务12:分析日志(示例:SSH登录记录)

假设 /root/secure.zip 包含 secure 日志,提取时间、用户、IP并对齐:
脚本 /root/12.sh

#!/bin/bash  
# 解压日志到临时目录  
unzip -q /root/secure.zip -d /tmp/secure_log  

# 处理日志(提取SSH成功登录记录)  
cat /tmp/secure_log/secure | grep 'Accepted password for' | awk '{  
    time=$1" "$2" "$3;   # 时间(第1-3列)  
    user=$9;             # 用户(第9列)  
    ip=$(echo $11 | sed -e "s/from //" -e "s/port.*//");  # IP(清理字段)  
    printf "%-20s %-10s %-15s\n", time, user, ip         # 格式化对齐  
}'  

执行chmod +x /root/12.sh && /root/12.sh

注意事项

  • 任务7需确保 curl 已安装(yum install -y curl)。
  • 任务12需根据实际日志格式调整 grepawk 规则。
  • 所有脚本执行前需赋予可执行权限(chmod +x)。
    运行脚本在root 下可以直接sh
    image
    在 root 用户下,直接使用 sh 脚本名.sh 是可以运行脚本的,这是一种常见的执行方式。

具体来说:

  • 如果脚本已经有可执行权限(chmod +x 脚本.sh),可以直接通过 ./脚本.sh/路径/脚本.sh 执行
  • 即使没有可执行权限,也可以用解释器直接调用,如 sh 脚本.shbash 脚本.sh(CentOS 7 中 sh 通常是 bash 的软链接)

两种方式在 root 权限下都能正常工作,效果一致。例如对于之前的任务脚本,可以直接执行:

sh /root/6.sh
sh /root/7.sh

这种方式的好处是不需要提前设置可执行权限,适合临时运行脚本的场景。
image
image
image

posted on 2025-07-25 17:14  爱尔奎特‘殷’  阅读(5)  评论(0)    收藏  举报