共计 3046 个字符,预计需要花费 8 分钟才能阅读完成。
这篇文章主要讲解了“Linux 运维技巧实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“Linux 运维技巧实例分析”吧!
一、生成随机字符串
# 去掉 /\ 两个字符,取第 5 到 14 位。openssl rand -base64 40 | sed s/[/\]//g | cut -c 5-14
# 或者生成 16 位随机字符,1 个,要包含数字 - n 和特殊字符 -y。
二、文件名批量修改
法一
#!/bin/bash
Filename=_faster.html
Dirname= /test
cd $Dirname||exit 1
for n in `ls`
name=$(echo ${n}|awk -F _ {print $1} )
mv $n ${name}${Filename}
done
法二
#!/bin/bash
Path= /test
cd $Path \
ls | awk -F _ {print mv $0 $1 _faster.html} | bash
法三
rename
三、并发 ping
#!/bin/bash
CMD= ping -W 2 -c 2
IP= 192.168.74.
for n in $(seq 254);do
{
$CMD $IP$n /dev/null 2 1
if [ $? -eq 0 ];then
echo $IP$n
fi
}
wait # 主 shell 进程需要等待各并发子进程的结束返回
echo
四、解决 DOS 攻击
file=$1
while true; do
awk {print $1} $1 | grep -v ^$ | sort | uniq -c /tmp/tmp.log
exec
/tmp/tmp.log
while read line; do
ip=`echo $line | awk {print $2} `
count=`echo $line | awk {print $1}`
if [ $count -gt 500 ] [ `iptables -nL | grep $ip | wc -l` -lt 1 ]; then
iptables -I INPUT -s $ip -j DROP
echo $line /tmp/droplist_$(date +%F).log
fi
done
sleep 3600
done
五、MySQL 备份
不登录数据库如何执行 sql 命令
#!/bin/sh
MYUSER=root
MYPASS=123456
MYCMD= mysql -u$MYUSER -p$MYPASS
for db in db1 db2 db3; do
$MYCMD use $db;show tables;
done
分库备份
#!/bin/sh
MYUSER=root
MYPASS=123456
DBPATH=/root/test/db_bak
MYCMD= mysql -u$MYUSER -p$MYPASS
MYDMP= mysqldump -u$MYUSER -p$MYPASS
[ ! -d $DBPATH ] mkdir $DBPATH
for db in `$MYCMD show databases; | sed 1d |egrep -v mysql|schema|sys do
if [ -z `echo $db|grep test ` ];then # 不包含 test 字符串
$MYDMP $db | gzip $DBPATH/${db}_$(date +%F).sql.gz
fi
done
注意文中包含字符串的判断可有多种方式 Shell 判断字符串包含关系的几种方法 其中“$A =~ $B”是判断 A 包含 B 最简单的方式。
六、入侵检测与报警
建立初始的文件指纹库
find /var/html/www -type f | xargs md5sum
利用指纹库检查文件是否被篡改
md5sum -c --quiet /opt/checksum.bak
监测文件数量及文件名的变化
find /var/html/www -type f /opt/filename.bak
find /var/html/www -type f /opt/filename.now
diff
cron
* /3 * * * * /bin/sh /path/to/monitor.sh /dev/null 2 1
七、产生随机数
# 0~32767
echo $RANDOM
echo bulabula$RANDOM | md5sum | cut -c 8-15
openssl rand -base64 8
date +%s%N
head /dev/urandom|cksum
cat /proc/sys/kernel/random/uuid
apt install expect
expect_mkpasswd -l 8 -d 2 -c 3 -C 2 -s 1
yum install expect
mkpasswd -l 8 -d 2 -c 3 -C 2 -s 1
# 参数说明
八、子脚本的调用方式
fork 方式(分身,复制——产生新的 PID)
执行方式
/path/script.sh
/bin/sh /path/script.sh
系统启动一个子 shell 执行调用的脚本(生成新的 PID——子 shell)。子 shell 执行的时候父 shell 处于 Sleep 状态(S)。子 shell 执行完毕后返回到父 shell。子 shell 可以继承父 shell 的环境变量,但反之不然。
exec
方式(变身——沿用原来的 PID)
执行方式
exec
被调用的脚本与父脚本在同一个 shell 内运行(不产生新的 PID),但使用 exec
调用一个新脚本后,父脚本中 exec
之后的内容就不会再执行了——变身。
source 方式(类似 exec
方式,沿用原来的 PID)
执行方式
source /path/script.sh
.
source 方式开启的脚本和父脚本在同一个 shell 中运行(不产生新的 PID)。source 调用一个新脚本,执行完成后,父脚本 source 之后的内容还会再执行。
九、shell 逐行读取文件
法一
exec
file
while read line; do
echo $line
done
法二
cat file | while read line; do
echo $line
done
法三
while read line; do
echo $line
done file
法四
for line in `cat test.txt`; do
echo $line
done
十、测试表达式区别
测试表达式符号
[]
test
[[]]
(())
边界是否需要空格
Y
Y
Y
N
支持的逻辑运算符
!,-a,-o
!,-a,-o
!,,┃┃
!,,┃┃
支持的算数运算符
-eq,-gt,-lt,-ge,-le
-eq,-gt,-lt,-ge,-le
-eq,-gt,-lt,-ge,-le 和 =,,,=,=
-eq,-gt,-lt,-ge,-le 和 =,,,=,=
字符串比较
=,==,!=
=,==,!=
=,==,!=
=,==,!=
是否支持通配 *
N
N
Y
N
感谢各位的阅读,以上就是“Linux 运维技巧实例分析”的内容了,经过本文的学习后,相信大家对 Linux 运维技巧实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!