先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
正文
用read输入一个目录,使用脚本判断目录里每个文件的权限(是否可读,是否可写,是否可执行)
#!/bin/bash
read -p “输入一个目录:” dir
[ -d $dir ] && echo “是一个目录,继续执行” || echo “不是一个目录,请重新运行脚本”
for i in find $dir -type f
do
[ -r $i ] && r=yes || r=no
[ -w $i ] && w=yes || w=no
[ -x $i ] && x=yes || x=no
echo “当前用户对$i的权限为:”
echo $r
echo $w
echo $x
done
用read输入一个用户,再用read输入一个目录,使用脚本判断目录里每个文件的权限(read输入的用户对其是否可读,是否可写,是否可执行)
–提示:如何去用root用户去变成一个普通用户身份去执行脚本? man su 查看-c参数
–第一个脚本
[root@dns shell02]# cat example10.sh
#!/bin/bash
read -p “输入你要判断的用户名:” name
id $name > /dev/null 2>&1
if [ $? -eq 0 ];then
echo “用户名存在,继续执行”
else
echo “用户名不存在,请重新运行脚本,输入正确的用户名”
exit 1
fi
su - $name -c “sh /tmp/example102.sh”
第二个脚本: --此脚本最后放到/tmp下,让所有用户可以执行
[root@dns shell02]# cat example102.sh
#!/bin/bash
user=id | cut -d"(" -f2 |cut -d ")" -f1
--查找自己的用户名,可以用whoami替代
read -p “输入一个目录:” dir
if [ -d $dir ];then
echo “是一个目录,继续执行”
else
echo “不是一个目录或目录不存在,请重新运行脚本”
exit 1
fi
for i in find $dir -type f
do
[ -r $i ] && r=yes || r=no
[ -w $i ] && w=yes || w=no
[ -x $i ] && x=yes || x=no
echo “
u
s
e
r
对
user对
user对i的权限为:”
echo “read=
r
"
e
c
h
o
"
w
r
i
t
e
=
r" echo "write=
r"echo"write=w”
echo “execute=$x”
done
=================================
until 循环 --直到满足条件就退出循环
例十二:用until实现打印1到5
a=1
until [ $a -gt 5 ] for ((a=1;a>5;a++))
do
echo $a
let a++
done
练习:
使用unitl去改写上面的批量加用户的脚本
groupadd class
i=1
until [ $i -gt 10 ]
do
useradd -G class “student
i
"
p
a
s
s
w
d
"
s
t
u
d
e
n
t
i" passwd "student
i"passwd"studenti” < /dev/null 2>&1
student
i
s
t
u
d
e
n
t
i student
istudenti
EOF
let i++
done
=====================================================
while 用于不定次数的循环,或死循环
while [条件]
do
command
done
死循环两种:
while true
do
command
done
while :
do
command
done
写一个30秒就时间同步2.2.2.35一次的脚本
while true
do
rdate -s 2.2.2.35
sleep 30
done
–不定次数循环,当满足一定条件,就退出循环
while true
do
rdate -s 2.2.2.35 > /dev/null 2>&1
[ $? -ne 0 ] && echo “rdate failed” | mail root && exit 100
sleep 30
done
写一个小闹钟的程序 (每秒都显示时间,当到了时间,就循环打印5个*,间隔一秒)
while true
do
now=date +%H:%M:%S
echo $now
sleep 1
clear
if [ “
1
"
=
=
"
1" == "
1"=="now” ];then
for (( i=0;i<10;i++))
do
echo -n “*”
sleep 1
done
break --在这里是表示打完*后,跳出循环,继续执行循环体后面的代码;如果换成exit则表示直接退出脚本
fi
done
echo
echo ‘it is time’
#!/bin/bash
read -p “输入你定时的时间(格式为时:分:秒):” ntime
while true
do
now=date +%H:%M:%S
echo
n
o
w
s
l
e
e
p
1
c
l
e
a
r
i
f
[
"
now sleep 1 clear if [ "
now sleep1 clear if["ntime" == “$now” ];then
for (( i=0;i<10;i++))
do
echo -n “*”
sleep 1
done
break
fi
done
echo
echo “时间到了”
break continue exit
–continue表示循环体内下面的代码不执行,重新开始循环
–break表示跳出循环体,执行循环体外的下面的代码
–exit表示直接跳出程序
写一个简单的猜数字的脚本
#!/bin/bash
num=74
while true
do
read -p “guess your number:” guess
[ $guess -gt $num ] && echo “大了” && continue
[ $guess -lt $num ] && echo “小了” && continue
[ $guess -eq $num ] && echo “对了” && break
done
echo “砸蛋”
找出/etc/的所有以conf结尾的文件,拷到/tmp/conf目录下,然后全部把conf结尾换成以html结尾
[ -d /tmp/conf ] && rm /tmp/conf -rf && mkdir /tmp/conf
find /etc/ -name “*.conf” -exec cp {} /tmp/conf ;
cd /tmp/conf
rename .conf .html *
#!/bin/bash
if [ -d /tmp/conf ];then
rm -rf /tmp/conf
mkdir /tmp/conf
else
mkdir /tmp/conf
fi
find /etc/ -name “*.conf” -exec cp {} /tmp/conf ;
cd /tmp/conf
for i in ./*
do
head=echo $i |awk -F".conf" '{print $1}'
mv $i $head.html
done
找出/usr/share/doc目录下所有文件名为index.html的文件,把他们拷到/tmp/index目录下,文件名按找到的先后更改,第一个找到的为index.html.1,第二个找到的为index.html.2。。。。类推
[ -e /tmp/index -a -d /tmp/index ] && rm -rf /tmp/index && mkdir /tmp/index
i=1
find /usr/share/doc/ -name index.html | while read a
do
cp
a
/
t
m
p
/
i
n
d
e
x
/
i
n
d
e
x
.
h
t
m
l
.
a /tmp/index/index.html.
a/tmp/index/index.html.i
let i++
done
==============================================================
===========================
循环嵌套
打印出
1
12
123
1234
12345
*
**
***
****
*****
******
*
**
* *
* *
* *
******
第一种写法:
a=1
while [
a
−
l
t
6
]
d
o
f
o
r
(
(
b
=
1
;
b
<
=
a -lt 6 ] do for (( b=1;b<=
a−lt6]do for((b=1;b<=a;b++ ))
do
echo -n $b
done
let a++
echo
done
第二种写法:
a=1
while [ $a -lt 6 ]
do
b=1
while [ $b -le $a ]
do
echo -n $b
let b++
done
let a++
echo
done
===================================================================
随机数:
bash默认有一个$RANDOM的变量 使用set |grep RANDOM 查看上一次产生的随机数
echo $RANDOM
#产生0到1的随机数
ran1=expr $RANDOM % 2
echo $ran1
#产生100到200的随机数
ran2=expr $RANDOM % 101 + 100
echo $ran2
#产生50到100的随机数
ran3=
(
(
R
A
N
D
O
M
w
h
i
l
e
[
"
((RANDOM % 101)) while [ "
((RANDOMwhile["ran3" -lt 50 ]
do
ran3=$((RANDOM % 101))
done
echo $ran3
产生100内的随机数
echo
[
[
[RANDOM%101]
产生0-1之间的随机数
echo
[
[
[RANDOM%2]
产生1-2之内的随机数
echo
[
[
[RANDOM%2+1]
产生50-100之内的随机数
echo
[
[
[RANDOM%51+50]
产生三位数的随机数
echo
[
[
[RANDOM%900+100]
=========================================================
题目:
随机产生一个三位数,按位数一个一个的猜,每位只有五次猜的机会,直到猜成功
echo [ [ [RANDOM%900+100]
cut
#!/bin/bash
num=echo $RANDOM
while true
do
one=echo $num | cut -c 1
for i in 1 2 3 4 5
do
read -p “请猜第一个数第$i次:” guess
if [ $guess -eq $one ];then
echo “你猜对了第一个数字,请猜第二个数字”
break
fi
[ $i -eq 5 ] && echo “五次机会用完” && exit 1
done
two=echo $num | cut -c 2
for i in 1 2 3 4 5
do
read -p “请猜第二个数第$i次:” guess
if [ $guess -eq $two ];then
echo “你猜对了第二个数字,请猜第三个数字”
break
fi
[ $i -eq 5 ] && echo “五次机会用完” && exit 1
done
three=echo $num | cut -c 3
for i in 1 2 3 4 5
do
read -p “请猜第三个数猜第$i次:” guess
if [ $guess -eq $three ];then
echo “你猜对了第三个数字”
break
fi
[ KaTeX parse error: Expected 'EOF', got '&' at position 11: i -eq 5 ] &̲& echo "五次机会用完"…num"
将/etc/passwd里的用户名分类,分为管理员用户,系统用户,普通用户
#!/bin/bash
for i in cat /etc/passwd |cut -d: -f1,3
do
uid=echo "$i" |cut -d: -f2
name=echo "$i" |cut -d: -f1
[ KaTeX parse error: Expected 'EOF', got '&' at position 13: uid -eq 0 ] &̲& echo "name" >> /tmp/adminuser
[ $uid -lt 500 -a KaTeX parse error: Expected 'EOF', got '&' at position 13: uid -gt 0 ] &̲& echo "name" >> /tmp/systemuser
[ KaTeX parse error: Expected 'EOF', got '&' at position 17: …id -eq 65534 ] &̲& echo "name" >> /tmp/systemuser
[ $uid -gt 500 -a KaTeX parse error: Expected 'EOF', got '&' at position 17: …id -ne 65534 ] &̲& echo "name" >> /tmp/nomaluser
done
写一个脚本把一个目录内的所有空文件都删除,最后输出删除的文件的个数
read -p “输入一个你要删除空文件的目录:” dir
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
p/nomaluser
done
写一个脚本把一个目录内的所有空文件都删除,最后输出删除的文件的个数
read -p “输入一个你要删除空文件的目录:” dir
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
[外链图片转存中…(img-66wce6jI-1713402950237)]
给大家整理的电子书资料:
[外链图片转存中…(img-whT4fPnu-1713402950238)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-ZppwXYtA-1713402950238)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!