首页
关于
推荐
CSDN
Search
1
文件上传下载-io-流的理解-笔记
156 阅读
2
vue循环指令el-table-column展示图片src路径拼接
149 阅读
3
正则表达式,将字符串分割两部分
141 阅读
4
MySQL数据库练习【一】
132 阅读
5
MySQL数据库练习【三】
121 阅读
默认分类
Mysql
Java基础
一天一练
Mongodb
Nginx
Docker
FastDFS
面试题
云计算基础
linux基础
shell脚本
实验
工具
基础命令
redis
zookeeper
部署
案例
登录
Search
标签搜索
vue
Mysql
IO
面试题
良辰美景好时光
累计撰写
72
篇文章
累计收到
0
条评论
首页
栏目
默认分类
Mysql
Java基础
一天一练
Mongodb
Nginx
Docker
FastDFS
面试题
云计算基础
linux基础
shell脚本
实验
工具
基础命令
redis
zookeeper
部署
案例
页面
关于
推荐
CSDN
搜索到
8
篇与
的结果
2025-04-30
shell脚本一天一练----监控系统负载信息
shell脚本一天一练----监控系统负载信息#!/bin/bash # ************************************* # * 功能: Shell脚本模板 # * 作者: 刘丹玉 # * 联系: v649352141@163.com # * 版本: 2025-04-30 # ************************************* # 需求: # 写一个监控脚本,监控系统负载,如果系统负载超过10,需要记录系统状态信息 # 提示: # 1) 系统负载命令使用uptime看,过去1分钟的平均负载 # 2) 系统状态使用如下工具标记: top、vmstat、ss # 3) 要求每隔20s监控一次 # 4) 系统状态信息需要保存到/opt/logs下面,保留一个月,文件名建议带有`date +%s`后缀或者前缀 # 首先看/opt/logs目录在不在,不在就创建 [ -d /opt/logs ] || mkdir -p /opt/logs # while死循环 while : do # 获取系统1分钟的负载,并且只取小数点前面的数字 load=$(uptime | awk -F 'average:' '{print $2}' | cut -d ',' -f1 | sed 's/ //g' | cut -d. -f1) if [ $load -gt 10 ] then # 分别记录top、vmstat和ss命令的执行结果 top -bn1 | head -n 100 > /opt/logs/top.$(date +%s) vmstat 1 10 > /opt/logs/vmstat.$(date +%s) ss -an > /opt/logs/ss.$(date +%s) fi # 休眠20秒 sleep 20 # 找到30天以前的日志文件删除掉 find /opt/logs \( -name "top*" -o -name "vmstat*" -o -name "ss*" \) -mtime +30 | xargs rm -f done <<'COMMENT' 关键知识点总结: 1) || 用在两条命令中间,可以起到这样的效果:当前面命令不成功就会执行后面命令 2) 死循环可以使用while : + sleep 组合 3) 编写脚本边在命令行里调试 4) find里可以使用小括号将多个条件组合起来当成一个整体来处理 COMMENTendl
2025年04月30日
26 阅读
0 评论
0 点赞
2025-04-30
shell脚本一天一练----目录文件移动
shell脚本一天一练----目录文件移动#!/bin/bash # ************************************* # * 功能: Shell脚本模板 # * 作者: 刘丹玉 # * 联系: v649352141@163.com # * 版本: 2025-04-30 # ************************************* # 需求: # 有一个目录/data/att/,该目录下有数百个子目录 # 比如/data/att/dange, /data/att/linux # 然后再深入一层为以日期命名的目录,例如 /data/att/dange/20241009 # 每天会生成一个日期新目录,由于/data 所在的磁盘快满了 # # 所以需要将老文件(一年以前的)挪到另外一个目录/data1/att下 # 示例: mv /data/att/dange/20230504 /data1/att/dange/20230504 # # 挪完之后,还需要做软链接 # 示例: ln -s /data1/att/dange/20230504 /data/att/dange/20230504 # # 写一个脚本,要求/data/att/下所有子目录都要按此操作 # 脚本会每天01:00 执行一次,任务计划无需考虑,只需要写脚本即可 # 提醒: 要确保老文件成功挪到/data1/att下之后才能做软链接,需要有日志 # 先定义一个main函数,目的是为了后面调用函数,方便记录日志 main(){ cd /data/att # 遍历第一层目录 for dir in $(ls) do # 遍历第二层目录,用find只找当前目录下一年以前的子目录 for dir2 in $(find $dir -maxdepth 1 -type d -mtime +365) do # 将目标目录下的文件同步到/data1/att/目录下,注意这里的-R可以自动创建目录结构 rsync -aR $dir2/ /data1/att/ if [ $? -eq 0 ] then # 如果同步成功,会将/data/att下的目录删除 rm -rf $dir2 echo "/data/att/$dir2 移动成功" # 做软链接 ln -s /data1/att/$dir2 /data/att/$dir2 && \ echo "/data/att/$dir2 成功创建软链接" echo else echo "/data/att/$dir 未移动成功" fi done done } # 调用main函数,并将输出写入日志里,日志每天一个 main &> /tmp/move_old_data_$(date +%F).log <<'COMMENT' 关键知识点总结: 1) 可以通过main函数的形式来方便定义脚本日志 2) find 使用 -maxdepth 定义查找目录层级 3) 脚本某行很长的话,可以使用"\ + 回车"来换行,但本质上还是一行内容 4) rsync的-R选项可以自动级联创建目录层级 COMMENT [root@Rocky9-12 ~]# mkdir -p /data/att [root@Rocky9-12 ~]# mkdir -p /data1/att [root@Rocky9-12 ~]# cp -rp /etc/* /data/att/endl
2025年04月30日
10 阅读
0 评论
0 点赞
2025-04-30
shell脚本一天一练----修改文件和目录权限
shell脚本一天一练----修改文件和目录权限[root@Rocky9-12 ~]# cat 0430-03.sh #!/bin/bash # ************************************* # * 功能: Shell脚本模板 # * 作者: 刘丹玉 # * 联系: v649352141@163.com # * 版本: 2025-04-30 # ************************************* # 需求: # 检查/data/wwwroot/app目录下所有文件和目录,看是否满足下面条件 # 1) 所有文件权限为644 # 2) 所有目录权限为755 # 3) 文件和目录所有者为www,所属组为root # 如果不满足,改成符合要求 # 注意,不要直接改权限,一定要有判断的过程 rm -rf /data/* mkdir -p /data/wwwroot/app cd /data/wwwroot/app mkdir -p a/b/c/d/e/f/g/h touch a/a.{1..5}.txt touch a/b/b.{1..5}.txt touch a/b/c/c.{1..5}.txt touch a/b/c/d/d.{1..5}.txt touch a/b/c/d/e/e.{1..5}.txt touch a/b/c/d/e/f/f.{1..5}.txt touch a/b/c/d/e/f/g/g.{1..5}.txt touch a/b/c/d/e/f/g/h/h.{1..5}.txt # 遍历所有目录和文件,用"find ."即可 for f in $(find .) do # 查看文件权限 f_p=$(stat -c %a $f) # 查看文件所有者 f_u=$(stat -c %U $f) # 查看文件所属组 f_g=$(stat -c %G $f) # 判断是否为目录 if [ -d $f ] then [ $f_p != '755' ] && chmod 755 $f else [ $f_p != '644' ] && chmod 644 $f fi ## &&用在两条命令中间,可以起到if判断的作用 ## 当第一条命令成功,才会执行后面的命令 [ $f_u != 'www' ] && chown www $f [ $f_g != 'root' ] && chown :root $f done <<'COMMENT' 另外也可以用find来实现 find /data/wwwroot/app/ -type d ! -prem 755 -exec chmod 755 {} \; find /data/wwwroot/app/ ! -type d ! -prem 644 -exec chmod 644 {} \; find /data/wwwroot/app/ ! -user www -exec chown www {} \; find /data/wwwroot/app/ ! -group root -exec chgrp root {} \; 两个脚本相比,第一个只需要find一次,而第二个需要find四次 如果文件量很大,执行效率很差 ### 关键知识点总结: 1) 查看文件权限: stat -c %a 1.txt 2) 查看文件所属组: stat -c %G 1.txt 3) 查看文件所有者: stat -c %U 1.txt 4) && 可以实现: 当前面命令执行成功再执行后面命令 5) || 可以实现: 当前面命令执行不成功再执行后面命令 COMMENTendl
2025年04月30日
15 阅读
0 评论
0 点赞
2025-04-30
shell脚本一天一练----检测磁盘读写正常与否
shell脚本一天一练----检测磁盘读写正常与否#!/bin/bash # ************************************* # * 功能: 检测磁盘读写正常与否 # * 作者: 刘丹玉 # * 联系: v649352141@163.com # * 版本: 2025-04-30 # ************************************* # 需求 # 写一个检测脚本,用来检测本机所有磁盘分区读写是否都正常 # 提示:可以遍历所有挂载点,然后新建一个测试文件 # 然后再删除测试文件,如果可以正常新建和删除,那说明该分区没问题 for mount_p in $(df | sed '1d' | grep -v 'tmpfs' | awk '{print $NF}') do # 创建测试文件,并删除,从而确定该磁盘分区是否有问题 dd if=/dev/zero of=$mount_p/testfile bs=1 count=10 >/dev/null 2>&1 && rm -f $mount_p/testfile if [ $? -ne 0 ] then echo "$mount_p 读写有问题" else echo "$mount_p 读写正常" fi done ### 关键知识点总结: # 1) &&连接符表示当前面的命令执行成功才会执行后面的命令 # 在本例中,只有两条命令都执行成功了返回值才是0 # 否则任何一条命令执行出错,返回值都为非0 # 2) 写脚本的过程中,可以一边在命令行中运行命令 调试 一般写脚本 # 3) shell脚本里的sed、grep、awk 无处不在,所以用户这三个工具也是关键 [root@Rocky9-12 ~]# bash 0430-02.sh / 读写正常 /boot 读写正常 /home 读写正常 endl
2025年04月30日
19 阅读
0 评论
0 点赞
2025-04-30
shell脚本一天一练----创建用户
shell脚本一天一练----创建用户#!/bin/bash # ************************************* # * 功能: Shell脚本模板 # * 作者: 刘丹玉 # * 联系: v649352141@163.com # * 版本: 2025-04-30 # ************************************* # 练习题 # 需求 # 创建10个用户,并给他们设置随机密码,密码记录到一个文件里,文件名为userinfo.txt # 用户从user_00 到 user_09 # 密码要求:包含大小写字母以及数字,密码长度为15位 # 先查看/tmp/userinfo.txt文件是否存在,存在的话先删除,以免影响到本次脚本执行结果 if [ -f /tmp/userinfo.txt ] then rm -f /tmp/userinfo.txt fi # 借助seq生成从00到09、10个数的队列 for i in $(seq -w 0 09) do p=$(openssl rand -base64 15 | tr -dc 'a-zA-Z0-9' | head -c 15) # 添加用户,并给该用户设置密码 useradd user_${i} && echo "${p}" | passwd --stdin user_${i} echo "user_${i} ${p}" >> /tmp/userinfo.txt done ### 关键知识点总结: ### 1) openssl rand -base64 15:生成 15 字节的随机数据,并以 Base64 编码输出。 ### tr -dc 'a-zA-Z0-9':过滤输出,只保留大小写字母和数字。 ### head -c 15:截取前 15 个字符。 ### 2) seq可以生成序列,用法: seq 1 5; seq 5; seq 1 2 10; seq 10 -2 1;seq -w 1 10; ### ### 3) passwd --stdin username[root@Rocky9-12 ~]#bash 0430-01.sh Changing password for user user_00. passwd: all authentication tokens updated successfully. Changing password for user user_01. passwd: all authentication tokens updated successfully. Changing password for user user_02. passwd: all authentication tokens updated successfully. Changing password for user user_03. passwd: all authentication tokens updated successfully. Changing password for user user_04. passwd: all authentication tokens updated successfully. Changing password for user user_05. passwd: all authentication tokens updated successfully. Changing password for user user_06. passwd: all authentication tokens updated successfully. Changing password for user user_07. passwd: all authentication tokens updated successfully. Changing password for user user_08. passwd: all authentication tokens updated successfully. Changing password for user user_09. passwd: all authentication tokens updated successfully.endl
2025年04月30日
26 阅读
0 评论
0 点赞
1
2