task1 shell后面理解

基于一台最小化安装的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(需先安装 curl:yum 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
- 安装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 - 启动Docker:
systemctl start docker && systemctl enable docker - 运行Nginx容器(映射8080端口):
docker run -d --name nginx-8080 -p 8080:80 nginx - 修改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 - 测试:
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:开机创建时间文件
- 编辑开机脚本:
echo 'echo "创建时间:$(date)" > /root/boottime.txt' >> /etc/rc.d/rc.local - 赋予执行权限(CentOS7默认禁用
rc.local):chmod +x /etc/rc.d/rc.local
任务11:切换防火墙为iptables并开放8080
- 关闭firewalld:
systemctl stop firewalld && systemctl disable firewalld - 安装iptables:
yum install -y iptables-services - 启动并设为开机自启:
systemctl start iptables && systemctl enable iptables - 添加8080端口规则:
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT - 保存规则(永久生效):
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需根据实际日志格式调整
grep和awk规则。 - 所有脚本执行前需赋予可执行权限(
chmod +x)。
运行脚本在root 下可以直接sh
![image]()
在 root 用户下,直接使用sh 脚本名.sh是可以运行脚本的,这是一种常见的执行方式。
具体来说:
- 如果脚本已经有可执行权限(
chmod +x 脚本.sh),可以直接通过./脚本.sh或/路径/脚本.sh执行 - 即使没有可执行权限,也可以用解释器直接调用,如
sh 脚本.sh或bash 脚本.sh(CentOS 7 中 sh 通常是 bash 的软链接)
两种方式在 root 权限下都能正常工作,效果一致。例如对于之前的任务脚本,可以直接执行:
sh /root/6.sh
sh /root/7.sh
这种方式的好处是不需要提前设置可执行权限,适合临时运行脚本的场景。




浙公网安备 33010602011771号