当前位置:网站首页 > 网络安全培训 > 正文

shell编程15例(三)

freebuffreebuf 2022-03-25 485 0

本文来源:

1、统计当前 Linux 系统中可以登录计算机的账户有多少个

#!/bin/bash  # 统计当前 Linux 系统中可以登录计算机的账户有多少个 #方法 1: grep "bash$" /etc/passwd | wc -l #方法 2: awk -f: '/bash$/{x++}end{print x}'  /etc/passwd 

2、统计/var/log 有多少个文件,并显示这些文件名

#!/bin/bash  # 统计/var/log 有多少个文件,并显示这些文件名  # 使用 ls 递归显示所有,再判断是否为文件,如果是文件则计数器加 1 cd  /var/log sum=0 for i in `ls -r *` do    if [ -f $i ];then        let sum++          echo "文件名:$i"      fi done echo "总文件数量为:$sum" 

3、自动为其他脚本添加解释器信息

#!/bin/bash  # 自动为其他脚本添加解释器信息#!/bin/bash,如脚本名为 test.sh 则效果如下:  # ./test.sh  abc.sh  自动为 abc.sh 添加解释器信息 # ./test.sh  user.sh  自动为 user.sh 添加解释器信息   # 先使用 grep 判断对象脚本是否已经有解释器信息,如果没有则使用 sed 添加解释器以及描述信息 if  !  grep  -q  "^#!"  $1; then sed  '1i #!/bin/bash'  $1 sed  '2i #Description: ' fi # 因为每个脚本的功能不同,作用不同,所以在给对象脚本添加完解释器信息,以及 Description 后还希望 # 继续编辑具体的脚本功能的描述信息,这里直接使用 vim 把对象脚本打开,并且光标跳转到该文件的第 2 行 vim +2 $1 

4、自动化部署 varnish 源码包软件

#!/bin/bash  # 自动化部署 varnish 源码包软件  # 本脚本需要提前下载 varnish‐3.0.6.tar.gz 这样一个源码包软件,该脚本即可用自动源码安装部署软件   yum -y install gcc readline‐devel pcre‐devel useradd -s /sbin/nologin varnish tar -xf varnish‐3.0.6.tar.gz cd varnish‐3.0.6   # 使用 configure,make,make install 源码安装软件包 ./configure ‐‐prefix=/usr/local/varnish make && make install   # 在源码包目录下,将相应的配置文件拷贝到 Linux 系统文件系统中 # 默认安装完成后,不会自动拷贝或安装配置文件到 Linux 系统,所以需要手动 cp 复制配置文件 # 并使用 uuidgen 生成一个随机密钥的配置文件   cp redhat/varnish.initrc /etc/init.d/varnish cp redhat/varnish.sysconfig /etc/sysconfig/varnish cp redhat/varnish_reload_vcl /usr/bin/ ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/ ln -s /usr/local/varnish/bin/* /usr/bin mkdir /etc/varnish cp /usr/local/varnish/etc/varnish/default.vcl /etc/varnish/ uuidgen > /etc/varnish/secret 

5、编写 nginx 启动脚本

#!/bin/bash  # 编写 nginx 启动脚本  # 本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本 # 如果本脚本名为/etc/init.d/nginx,则 service nginx start 就可以启动该服务 # service nginx stop 就可以关闭服务 # service nginx restart 可以重启服务 # service nginx status 可以查看服务状态   program=/usr/local/nginx/sbin/nginx pid=/usr/local/nginx/logs/nginx.pid start(){ if [ -f $pid ];then   echo  "nginx 服务已经处于开启状态" else   $program fi stop(){ if [ -! -f $pid ];then   echo "nginx 服务已经关闭" else   $program -s stop   echo "关闭服务 ok" fi } status(){ if [ -f $pid ];then   echo "服务正在运行..." else   echo "服务已经关闭" fi }   case $1 in start)   start;; stop)   stop;; restart)   stop   sleep 1   start;; status)   status;; *)   echo  "你输入的语法格式错误" esac 

6、自动对磁盘分区、格式化、挂载

  #!/bin/bash   # 自动对磁盘分区、格式化、挂载 # 对虚拟机的 vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序 fdisk # n(新建分区),p(创建主分区),1(分区编号为 1),两个空白行(两个回车,相当于将整个磁盘分一个区) # 注意:1 后面的两个回车(空白行)是必须的! fdisk /dev/vdb << EOF n p 1     wq EOF   #格式化刚刚创建好的分区 mkfs.xfs   /dev/vdb1   #创建挂载点目录 if [ -e /data ]; then exit fi mkdir /data   #自动挂载刚刚创建的分区,并设置开机自动挂载该分区 echo '/dev/vdb1     /data    xfs    defaults        1 2'  >> /etc/fstab mount -a  

7、自动优化 Linux 内核参数

#!/bin/bash  # 自动优化 Linux 内核参数   #脚本针对 RHEL7 cat >> /usr/lib/sysctl.d/00‐system.conf <fs.file‐max=65535 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 5 net.ipv4.tcp_syn_retries = 5 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 #net.ipv4.tcp_keepalive_time = 120 net.ipv4.ip_local_port_range = 1024  65535 kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 5010 641280 5010 128 net.core.wmem_default=262144 net.core.wmem_max=262144 net.core.rmem_default=4194304 net.core.rmem_max=4194304 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_time = 30 net.ipv4.tcp_window_scaling = 0 net.ipv4.tcp_sack = 0 EOF   sysctl –p  

8、切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)

#mkdir  /data/scripts #vim   /data/scripts/nginx_log.sh   #!/bin/bash  # 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)  logs_path="/usr/local/nginx/logs/" mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log kill -USR1  `cat /usr/local/nginx/logs/nginx.pid`   # chmod +x  /data/scripts/nginx_log.sh # crontab  ‐e                    #脚本写完后,将脚本放入计划任务每天执行一次脚本 0  1  *  *   *   /data/scripts/nginx_log.sh 

9、检测 MySQL 数据库连接数量

#!/bin/bash  # 检测 MySQL 数据库连接数量    # 本脚本每 2 秒检测一次 MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行 # 以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常 # 本案例中的用户名和密码需要根据实际情况修改后方可使用 log_file=/var/log/mysql_count.log user=root passwd=123456 while : do     sleep 2     count=`mysqladmin  -u  "$user"  -p  "$passwd"   status |  awk '{print $4}'`     echo "`date +%Y‐%m‐%d` 并发连接数为:$count" >> $log_file done 

10、根据 md5 校验码,检测文件是否被修改

 #!/bin/bash  # 根据 md5 校验码,检测文件是否被修改  # 本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件 # 本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次 # 将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件 for i in $(ls /etc/*.conf) do   md5sum "$i" >> /var/log/conf_file.log done 

11、检测 MySQL 服务是否存活

#!/bin/bash  # 检测 MySQL 服务是否存活    # host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码 # 这些信息需要根据实际情况修改后方可使用 host=192.168.51.198 user=root passwd=123456 mysqladmin -h '$host' -u '$user' -p'$passwd' ping &>/dev/null if [ $? -eq 0 ] then         echo "MySQL is UP" else         echo "MySQL is down" fi  

12、备份 MySQL 的 shell 脚本(mysqldump版本)

#!/bin/bash  # 备份 MySQL 的 shell 脚本(mysqldump版本)    # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)   user=root passwd=123456 dbname=mysql date=$(date +%Y%m%d)   # 测试备份目录是否存在,不存在则自动创建该目录 [ ! -d /mysqlbackup ] && mkdir /mysqlbackup # 使用 mysqldump 命令备份数据库 mysqldump -u "$user" -p "$passwd" "$dbname" > /mysqlbackup/"$dbname"-${date}.sql 

13、将文件中所有的小写字母转换为大写字母

#!/bin/bash  # 将文件中所有的小写字母转换为大写字母    # $1是位置参数,是你需要转换大小写字母的文件名称 # 执行脚本,给定一个文件名作为参数,脚本就会将该文件中所有的小写字母转换为大写字母 tr "[a‐z]" "[A‐Z]" < $1  

14、非交互自动生成 SSH 密钥文件

#!/bin/bash  # 非交互自动生成 SSH 密钥文件    # ‐t 指定 SSH 密钥的算法为 RSA 算法;‐N 设置密钥的密码为空;‐f 指定生成的密钥文件>存放在哪里 rm  -rf  ~/.ssh/{known_hosts,id_rsa*} ssh‐keygen -t RSA -N '' -f ~/.ssh/id_rsa 

15、检查特定的软件包是否已经安装

#!/bin/bash  # 检查特定的软件包是否已经安装  if [ $# -eq 0 ];then   echo "你需要制定一个软件包名称作为脚本参数"   echo "用法:$0 软件包名称 ..." fi # $@提取所有的位置变量的值,相当于$* for package in "$@" do     if rpm -q ${package} &>/dev/null ;then     echo -e "${package}\033[32m 已经安装\033[0m"     else     echo -e "${package}\033[34;1m 未安装\033[0m"     fi done 

转载请注明来自网盾网络安全培训,本文标题:《shell编程15例(三)》

标签:varnishmysqllinux运维echolinux系统linux脚本shellnginxbashshell编程mysql数据库etc

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表