当前位置: 首页 > news >正文

shell脚本 --案例实操

1、系统信息收集版本

编写一个脚本名为 collect_system_info.sh,实现以下功能:

  1. 收集系统的基本信息,包括但不限于操作系统版本、内核版本、主机名,并将这些信息输出到一个名为 system_info.txt 的文件中,每个信息占一行,并加上清晰的说明标签。

  2. 统计当前系统中正在运行的进程数量,并将结果追加到 system_info.txt 文件中,格式为“正在运行的进程数量:[具体数量]”。

  3. 使用合适的命令查找系统中占用 CPU 资源最多的前 5 个进程(如果系统有相关命令支持的话),并将它们的进程 ID 和进程名称输出到 system_info.txt 文件中,格式为“占用 CPU 多的进程:进程 ID - 进程名称”,每个进程占一行。如果系统无法直接找出前 5 个,可根据实际情况尽可能多地找出占用高的进程展示。

 vim collect_system_info.sh

#!/bin/bash
aaa_file="collect_system_info"
> "$aaa_file"#清空或创建文件
#收集系统基本信息
echo "系统基本信息" >> "$aaa_file"
echo "操作系统版本: $(grep -i 'pretty_name' /etc/os-release | cut -d'"' -f2)" >> "$aaa_file"
echo "系统内核: $(uname -r)" >> "$aaa_file"
echo "主机名: $(hostname)" >> "$aaa_file"
#统计正在运行的进程数量
echo "正在运行的进程数量:$(ps -e | wc -l)" >> "$aaa_file"
#查找占用内存最高的进程数
echo "前五占用cpu最高的进程:$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6)" >> "$aaa_file"
#保存
echo "系统信息已保存在 $aaa_file"

2、用户管理配置脚本

创建一个脚本名为 user_config.sh,完成以下任务:

  1. 接受一个用户名为参数,如果该用户不存在,则创建这个用户,并设置一个随机生成的 8 位包含大小写字母和数字的密码(可借助相关命令或工具实现随机密码生成)。将用户信息(用户名和密码)追加到一个名为 users.txt 的文件中,格式为“用户名:密码”。

  2. 为新创建的用户添加一个备注信息,备注信息内容为“新创建用户于[当前日期]”,使用 chfn 命令实现(如果系统支持)。如果系统没有 chfn 命令,可将备注信息以一种合适的方式记录下来,比如在 users.txt 文件中用户名对应行的末尾添加备注。

  3. 将该用户添加到一个名为 common_group 的用户组中(如果该用户组不存在,则先创建它)。

 

#!/bin/bash# 检查是否提供了用户名参数
if [ $# -eq 0 ]; thenecho "错误:请提供用户名作为参数"echo "用法:$0 <用户名>"exit 1
fiusername=$1
current_date=$(date +"%Y-%m-%d")
password_file="users.txt"
common_group="common_group"# 生成随机密码(8位,包含大小写字母和数字)
generate_password() {tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 8
}# 检查用户是否存在
if id "$username" &>/dev/null; thenecho "用户 $username 已存在"
else# 生成随机密码password=$(generate_password)# 创建用户useradd -m "$username"echo "$username:$password" | chpasswd# 将用户信息添加到文件echo "$username:$password" >> "$password_file"echo "用户 $username 已创建,密码已设置"# 添加备注信息if command -v chfn &>/dev/null; thenchfn -f "新创建用户于$current_date" "$username"# 更新文件中的备注信息sed -i "s/^$username:.*/&:新创建用户于$current_date/" "$password_file"else# 如果没有chfn命令,直接在文件中添加备注sed -i "s/^$username:.*/&:新创建用户于$current_date/" "$password_file"fi
fi# 处理用户组
if ! getent group "$common_group" &>/dev/null; thengroupadd "$common_group"echo "用户组 $common_group 已创建"
fi# 将用户添加到common_group
if ! id -nG "$username" | grep -qw "$common_group"; thenusermod -aG "$common_group" "$username"echo "用户 $username 已添加到用户组 $common_group"
elseecho "用户 $username 已在用户组 $common_group 中"
fiexit 0
[root@pc1 ~]# bash user_config.sh zhangsan
用户 zhangsan 已创建,密码已设置
正在更改 zhangsan 的 finger 信息。Finger 信息已更改。
用户组 common_group 已创建
用户 zhangsan 已添加到用户组 common_group
[root@pc1 ~]# cat users.txt 
zhangsan:faqdvTA7:新创建用户于2025-06-09

http://www.xdnf.cn/news/938575.html

相关文章:

  • cognee,有望替代 RAG, 简单了解一下
  • 服务网格技术深度解析:Istio vs Linkerd的选型对比
  • 【Self-Ask with Search Agent机制概述】利用TavilyAnswer实现搜索代理
  • 【文件传输脚本】
  • XSS攻击防御全指南:核心防护技巧
  • UVM的断言assert详谈
  • 【GESP真题解析】第 17 集 GESP 三级 2024 年 12 月编程题 2:打印数字
  • Linux 基础IO(下)
  • Linux 内核内存管理子系统全面解析与体系构建
  • 基于cornerstone3D的dicom影像浏览器 第三十章 心胸比例测量工具CTRTool
  • 深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
  • 隐函数 因变量确定标准
  • 《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (三)数据格式
  • (LeetCode 动态规划(基础版))96. 不同的二叉搜索树 (递推 || 递归)
  • 自定义连接线程池
  • 【Erdas实验教程】016:遥感图像空间增强(卷积增强)
  • 01.SQL语言概述
  • 华为OD机考- 简单的自动曝光/平均像素
  • (每日一道算法题)验证二叉搜索树
  • 随机算法一文深度全解
  • Dify 工作流全解:模块组成、设计思路与DSL实战指南
  • 【ROS2】核心概念8——参数设置(Parameters)
  • 商家平台AI智能搜索工程实践|RAG|向量检索增强
  • AT_abc409_e [ABC409E] Pair Annihilation
  • 三级流水线是什么?
  • OpenJudge | 大整数乘法
  • 5.子网划分及分片相关计算
  • python中使用LibreHardwareMonitorLib.dll获取电脑硬件信息~~【不用同步打开exe文件】
  • Docker知识五:服务编排(Docker Compose概念)
  • [M132][Part_1] chromium codelab