先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
ping ‐c2 ‐i0.3 ‐W1 192.168.4.$i &>/dev/null
if [ $? –eq 0 ];then
echo “192.168.4.$i is up”
else
echo “192.168.4.$i is down”
fi
let i++
done
- 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
状态(多进程版)
#!/bin/bash
#Author:丁丁历险(Jacob)
#定义一个函数,ping 某一台主机,并检测主机的存活状态
myping(){
ping ‐c2 ‐i0.3 ‐W1 $1 &>/dev/null
if [ $? ‐eq 0 ];then
echo “$1 is up”
else
echo “$1 is down”
fi
}
for i in {1…254}
do
myping 192.168.4.$i &
done
#使用&符号,将执行的函数放入后台执行
#这样做的好处是不需要等待 ping 第一台主机的回应,就可以继续并发 ping 第二台主机,依次类推。
- 编写脚本,显示进度条
#!/bin/bash
jindu(){
while :
do
echo ‐n ‘#’
sleep 0.2
done
}
jindu &
cp ‐a $1 $2
killall $!
echo "拷贝完成’’
- 进度条,动态时针版本
#!/bin/bash
#定义一个显示进度的函数,屏幕快速显示| / ‐ \
rotate_line(){
INTERVAL=0.1 #设置间隔时间
COUNT=“0” #设置 4 个形状的编号,默认编号为 0(不代表任何图像)
while :
do
COUNT=expr $COUNT + 1
#执行循环,COUNT 每次循环加 1,(分别代表 4 中不同的形状)
case $COUNT in #判断 COUNT 的值,值不一样显示的形状就不一样
“1”) #值为 1 显示‐
echo ‐e ‘‐’“\b\c”
sleep $INTERVAL
;;
“2”) #值为 2 显示\,第一个\是转义
echo ‐e ‘\’“\b\c”
sleep $INTERVAL
;;
“3”) #值为 3 显示|
echo ‐e “|\b\c”
sleep $INTERVAL
;;
“4”) #值为 4 显示/
echo ‐e “/\b\c”
sleep $INTERVAL
;;
*) #值为其他时,将 COUNT 重置为 0
COUNT=“0”;;
esac
done
}
rotate_line
- 9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表)
#!/bin/bash
7 / 38
交流 QQ:86198501 http://bj.linux.tedu.cn/
交流 QQ:86198501 达内Linux 云计算学院
for i in seq 9
do
for j in seq $i
do
echo ‐n "KaTeX parse error: Undefined control sequence: \* at position 2: i\̲*̲j=$[i*j] "
done
echo
done
- 使用死循环实时显示 eth0 网卡发送的数据包流量
#!/bin/bash
#Author:丁丁历险(Jacob)
while :
do
echo '本地网卡 eth0 流量信息如下: ’
ifconfig eth0 | grep “RX pack” | awk ‘{print $5}’
ifconfig eth0 | grep “TX pack” | awk ‘{print $5}’
sleep 1
done
- 使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码
#!/bin/bash
#本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
for i in cat user.txt
do
useradd $i
echo “123456” | passwd ‐‐stdin $i
done
- 编写批量修改扩展名脚本,如批量将 txt 文件修改为 doc 文件
#!/bin/bash
#执行脚本时,需要给脚本添加位置参数
#脚本名 txt doc(可以将 txt 的扩展名修改为 doc)
#脚本名 doc jpg(可以将 doc 的扩展名修改为 jpg)
for i in “ls *.$1”
do
mv $i ${i%.*}.$2
done
- 使用 expect 工具自动交互密码远程其他主机安装 httpd 软件
#!/bin/bash
#Author:丁丁历险(Jacob)
#删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机
rm ‐rf ~/.ssh/known_hosts
expect <<EOF
spawn ssh 192.168.4.254
expect “yes/no” {send “yes\r”}
#根据自己的实际情况将密码修改为真实的密码字串
expect “password” {send “密码\r”}
expect “#” {send “yum ‐y install httpd\r”}
expect “#” {send “exit\r”}
EOF
- 一键部署 LNMP(源码安装版本)
#!/bin/bash
#Author:丁丁历险(Jacob)
menu(){
clear
echo " ##############‐‐‐‐Menu‐‐‐‐##############"
echo “# 1. Install Nginx”
echo “# 2. Install MySQL”
echo “# 3. Install PHP”
echo “# 4. Exit Program”
echo " ########################################"
}
choice(){
read ‐p “Please choice a menu[1‐9]:” select
}
install_nginx(){
id nginx &>/dev/null
if [ $? ‐ne 0 ];then
useradd ‐s /sbin/nologin nginx
fi
if [ ‐f nginx‐1.8.0.tar.gz ];then
tar ‐xf nginx‐1.8.0.tar.gz
cd nginx‐1.8.0
yum ‐y install gcc pcre‐devel openssl‐devel zlib‐devel make
./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_module
make
make install
ln ‐s /usr/local/nginx/sbin/nginx /usr/sbin/
cd …
else
echo “没有 Nginx 源码包”
fi
}
install_mysql(){
yum ‐y install gcc gcc‐c++ cmake ncurses‐devel perl
id mysql &>/dev/null
if [ $? ‐ne 0 ];then
useradd ‐s /sbin/nologin mysql
fi
if [ ‐f mysql‐5.6.25.tar.gz ];then
tar ‐xf mysql‐5.6.25.tar.gz
cd mysql‐5.6.25
cmake .
make
make install
/usr/local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/local/mysql/data/
‐‐basedir=/usr/local/mysql/
chown ‐R root.mysql /usr/local/mysql
chown ‐R mysql /usr/local/mysql/data
/bin/cp ‐f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/bin/cp ‐f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnf
echo “/usr/local/mysql/lib/” >> /etc/ld.so.conf
ldconfig
echo ‘PATH=$PATH:/usr/local/mysql/bin/’ >> /etc/profile
export PATH
else
echo “没有 mysql 源码包”
exit
fi
}
install_php(){
#安装 php 时没有指定启动哪些模块功能,如果的用户可以根据实际情况自行添加额外功能如‐‐with‐gd 等
yum ‐y install gcc libxml2‐devel
if [ ‐f mhash‐0.9.9.9.tar.gz ];then
tar ‐xf mhash‐0.9.9.9.tar.gz
cd mhash‐0.9.9.9
./configure
make
make install
cd …
if [ ! ‐f /usr/lib/libmhash.so ];then
ln ‐s /usr/local/lib/libmhash.so /usr/lib/
fi
ldconfig
else
echo “没有 mhash 源码包文件”
exit
fi
if [ ‐f libmcrypt‐2.5.8.tar.gz ];then
tar ‐xf libmcrypt‐2.5.8.tar.gz
cd libmcrypt‐2.5.8
./configure
make
make install
cd …
if [ ! ‐f /usr/lib/libmcrypt.so ];then
ln ‐s /usr/local/lib/libmcrypt.so /usr/lib/
fi
ldconfig
else
echo “没有 libmcrypt 源码包文件”
exit
fi
if [ ‐f php‐5.4.24.tar.gz ];then
tar ‐xf php‐5.4.24.tar.gz
cd php‐5.4.24
./configure ‐‐prefix=/usr/local/php5 ‐‐with‐mysql=/usr/local/mysql ‐‐enable‐fpm ‐‐
enable‐mbstring ‐‐with‐mcrypt ‐‐with‐mhash ‐‐with‐config‐file‐path=/usr/local/php5/etc ‐‐with‐
mysqli=/usr/local/mysql/bin/mysql_config
make && make install
/bin/cp ‐f php.ini‐production /usr/local/php5/etc/php.ini
/bin/cp ‐f /usr/local/php5/etc/php‐fpm.conf.default /usr/local/php5/etc/php‐fpm.conf
cd …
else
echo “没有 php 源码包文件”
exit
fi
}
while :
do
menu
choice
case $select in
install_nginx
;;
install_mysql
;;
install_php
;;
exit
;;
*)
echo Sorry!
esac
done
- 编写脚本快速克隆 KVM 虚拟机
#!/bin/bash
#Author:丁丁历险(Jacob)
#本脚本针对 RHEL7.2 或 Centos7.2
#本脚本需要提前准备一个 qcow2 格式的虚拟机模板,名称为/var/lib/libvirt/images /.rh7_template 的虚
拟机模板
#该脚本使用 qemu‐img 命令快速创建快照虚拟机
#脚本使用 sed 修改模板虚拟机的配置文件,将虚拟机名称、UUID、磁盘文件名、MAC 地址
exit code:
# 65 ‐> user input nothing
# 66 ‐> user input is not a number
# 67 ‐> user input out of range
# 68 ‐> vm disk image exists
IMG_DIR=/var/lib/libvirt/images
BASEVM=rh7_template
read ‐p "Enter VM number: " VMNUM
if [ $VMNUM ‐le 9 ];then
VMNUM=0$VMNUM
fi
if [ ‐z “${VMNUM}” ]; then
echo “You must input a number.”
exit 65
elif [[ ${VMNUM} =~ [a‐z] ]; then
echo “You must input a number.”
exit 66
elif [ ${VMNUM} ‐lt 1 ‐o ${VMNUM} ‐gt 99 ]; then
echo “Input out of range”
exit 67
fi
NEWVM=rh7_node${VMNUM}
if [ ‐e I M G _ D I R / IMG\_DIR/ IMG_D