#!/bin/bash
#author: cqy
#version:v1
#data:2023-09-19
## 定义后缀变量,注意下面这个``(反引号)的含义
suffix=`date+%Y%m%d`
##找到/data/目录下的txt文件,用for循环遍历
for f in `find /data/ -type f -name "*.txt"`
do
echo "备份文件$f"
cp ${f} ${f}_${suffix}
done
知识点总结:
1、date命令的用法,可以根据日期、时间获取到想要的字符
2、for循环如何遍历文件
#!/bin/bash
#author:cqy
#version:v1
#date:2023-09-20
##先查看/tmp/userinfo.txt文件是否存在,存在的话先删除,以免影响到本次脚本执行结果。(密码文件,如果存在,在里面写东西,可能会造成冲突)
if [ -f /tmp/userinfo.txt]
then
rm -f /tmp/userinfo.txt
fi
##判断mkpasswd命令在不在,我们用该命令生成随即字符串,也就是用户的密码。(判断随即命令在不再)
if ! which mkpasswd
then
##ub
apt install -y expect
fi
##借助seq生成从00到09,10个数的队列
for i in `seq -w 0 09`
do
##每次生成一个随即字符串,将该字符串赋值给p变量,这个就是用户的密码
##mkpasswd命令默认生成的字符串会包含大小写字母和数字和特殊符号
##如果不要求特殊符号,可以加-s 0来限定不使用特殊符号
p=`mkpaswd -l 15 -s 0`
##添加用户,并给该用户设置密码
useradd user_${i} && echo "${p}" | passwd --stdin user_${i}
echo "user_${i} ${p}" >> /tmp/userinfo.txt
done
关键知识点总结:
1、mkpasswd可以生成随即字符串,-l指定长度,-s指定特殊字符串个数,-c指定小写字母个数 -C指定大写字母个数,-d指定数字个数
2、seq可以生成序列,用法: seq 1 5; seq 5; seq 1 2 10;seq 10 -2 1; seq -w 1 10;
3、passwd – stdin username
提示:可以遍历所有挂载点,然后新建一个测试文件;然后在删除测试文件,如果可以正常新建和删除,则说明该分区没有问题
#!/bin/bash
#author:cqy
#version:v1
for mount_p in `df | sed '1d' | grep -v 'tmpfs' | awk '{print $NF}'`
do
## 创建测试文件,并删除,从而确定该磁盘分区是否有问题
touch $mount_p/testfile && 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无处不在,所以用号这三个工具也是关键。
磁盘分区正常或者不正常有什么影响?
1、所有文件的权限为644
2、所有的目录权限为755
3、文件和目录所有者为www. 所属组root
如果不满足,改成符合要求
注意:不要直接改权限,一定要有判断的过程
##!/bin/bash
## author:cqy
## version:v1
cd /data/wwroot/app
##遍历所有目录和文件,用"find ."即可
for f in `find .`
do
##查看文件权限
f_p=`stat -c %a $f`
##查看文件所有者
f_u=`stat -c %U $f`
##查看文件所属组
f_p=`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
关键知识点总结:
1、查看文件权限:stat -c %a 1.txt
2、查看文件所属组: stat -c %G 1.txt
3、查看文件所有者: stat -c %U 1.txt
&& 可以实现:当前命令执行成功再执行后面命令
|| 可以实现,当前命令不成功再执行后面命令