看我如何利用Shell编写vsftpd管理软件

今天弄服务器的时候无意间用到此脚本,觉得当时写的虽然不咋样,但还是有点借鉴意义,就拿出来给大家看看。希望大家喜欢

先看看演示视频

看我如何利用Shell编写vsftpd管理软件

高清版下载:

百度云下载

OK然后我们来看看脚本的实现过程,时间有点久了当时的想法可能现在有点想不起来了,解释的不对的地方望见谅

脚本分为7个部分,这里我只做简单的解释

第一部分

脚本开始就利用awk提取日志中的用户名字段保存到tmp目录下的ftplog-userlist.txt文件中,方便后面查询

然后开始信息的展示,提供选择功能通过read函数读取用户的选择

第二部分 Show ftp Database

>通过 sed读取用户名

>通过sed读取用户总数

第三部分Ftp-log-Manager

>通过 cat读取ftplog-userlist.txt列表展示日志列表

>通过 cat读取ftplog-userlist.txt日志总数并展示,如果为0则打印Today, no one has logged an FTP server

>如果按3则通过read读取用户输入的用户名然后通过awk切割日志并展示

第四部分Add ftp Users

>通过 read读取用户输入,然后写文件,最后重启服务

第五部分Del  ftp Users

>通过 read读取用户输入,然后写文件,最后重启服务

> rm 删除用户目录和配置信息

第六部分Chanage FTP user password

>通过 read读取用户输入,然后stty $(cat /root/.stty)隐藏用户输入,然后通过sed 替换配置文件

>最后dbload重载虚拟用户数据库,重启服务
第七部分EXIT

> 删除/tmp/ftplog-userlist.txt并退出脚本

脚本代码:

#!/bin/bash
#                 Ftp-Manager
#Vsftpd-Manager Can be quickly vsftpd virtual user configuration management.
#
#----------------------------------------------------------------------------
#            Current Version = 1.2.2
#              Dated: 2013/11/12
#
#including: 1. Add / remove virtual users.
#           2. Quickly update virtual user password
#           3. See what users who have logged FTP-Server.
#           4. View log information for the specified user
#----------------------------------------------------------------------------
#Ftp-Server address:-----> ftp://ftp.cdivtc.com/
#----------------------------------------------------------------------------
clear

cat -n /var/log/xferlog | awk ‘{print $15}‘ | cut -d "@" -f1 | sort -u > /tmp/ftplog-userlist.txt

if [ $UID -ne 0 ]
then
    echo -e "\033[0;46Please run this script to root users\033[0m"
else
echo -e "\033[0;38m                  FTP-Manager\033[0m"
echo -e "\033[0;31m=====================Menu========================\033[0m"
echo -e "\033[0;33mCurrent Version 1.2.2\033[0m"
echo -e "\033[0;33mDated 2013/11/12\033[0m"
echo -e "\033[0;31m-------------------------------------------------\033[0m"
echo -e "\033[0;36m1)View ftp database\033[0m"
echo -e "\033[0;36m2)View log user list\033[0m"
echo -e "\033[0;36m3)View log information for specified user\033[0m"
echo -e "\033[0;36m4)Add user\033[0m"
echo -e "\033[0;36m5)Del user\033[0m"
echo -e "\033[0;36m6)Change password\033[0m"
echo -e "\033[0;36m0)Exit\033[0m"
echo -e "\033[0;31m=================================================\033[0m"
echo -ne "\033[0;35mEnter you chose[0-6]: \033[0m"
read Num

    if [ "${Num}" -lt 0 -o "${Num}" -gt 6 ]
    then
        echo "Input error, no such option,This is not between 0-6."
#========================================Show Ftp Database==========================================================
    else
        if [ "${Num}" == "1" ]
            then
            echo -e "\033[0;31m====Users Information====\033[0m"
            sed ‘2~2d‘ /etc/vsftpd/Virtualuser.txt
            echo -e "\033[0;31m======Users Number=======\033[0m"
            UserNumber=`sed ‘2~2d‘ /etc/vsftpd/Virtualuser.txt | wc -l`
            echo -e "\033[0;35mUsers Number: \033[0m\033[0;33m$UserNumber\033[0m"
                read -p "Press any key to return to main menu"
            $0
#========================================FTP-Log-Manager==================================================
                elif [ "${Num}" == "2" ]
                        then
                echo -e "\033[0;31m====Users Information====\033[0m"
                                cat /tmp/ftplog-userlist.txt
                echo -e "\033[0;31m====Users Number=========\033[0m"
                userlognumber=`cat /tmp/ftplog-userlist.txt | wc -l`
                if [ -s "${userlognumber}" ]
                    then
                        echo -e "\033[0;35mToday, no one has logged an FTP server\033[0m"
                    else
                        echo -e "\033[0;35mUsers Number: \033[0m\033[0;33m$userlognumber\033[0m"
                                        read -p "Press any key to return to main menu"
                                        $0
                fi
                elif [ "${Num}" == "3" ]
                        then
                                echo -ne "\033[0;33mPlease enter the user name you want to view: \033[0m"
                                read user
                                grep "${user}" /tmp/ftplog-userlist.txt
                                if [ $? -ne 0 ]
                                        then
                                                echo -ne "\033[0;31mWithout this user,The user is not logged in the FTP server. Verify that the user input the correct.\033[0m"
                        echo ""
                                                read -p "Press any key to return to main menu."
                                                $0
                                        else
                                        cat /var/log/xferlog | awk ‘{print $1 " | " $2 "  |  " $4 "  |" $7 "\t|" $12 "\t|" $14 "\t|"$9}‘ | grep $user | more
                                        read -p "Press any key to return to main menu."
                                        $0
                                fi
#========================================Add Ftp Users==========================================================
        elif [ "${Num}" == "4" ]
            then
            echo -ne "\033[0;33mPlease enter your username: \033[0m"
            read username
            echo -ne "\033[0;33mPlease enter your password: \033[0m`stty -echo`"
            read password
            echo ""
            echo -ne "\033[0;33mPlease input again: \033[0m`stty -echo`"
            read password
            stty $(cat /root/.stty)
            echo $username >>/etc/vsftpd/Virtualuser.txt
            echo $password >>/etc/vsftpd/Virtualuser.txt
            db_load -T -t hash -f /etc/vsftpd/Virtualuser.txt /etc/vsftpd/Virtualuser.db
            echo "write_enable=yes" > /etc/vsftpd/Virtualuserdir/$username
            echo "anon_mkdir_write_enable=yes" >> /etc/vsftpd/Virtualuserdir/$username
            echo "anon_other_write_enable=yes" >> /etc/vsftpd/Virtualuserdir/$username
            echo "anon_upload_enable=yes" >> /etc/vsftpd/Virtualuserdir/$username
            echo "local_root=/var/ftp/Users/$username" >> /etc/vsftpd/Virtualuserdir/$username
            mkdir /var/ftp/Users/$username -pv | 2> /dev/null
            chown root.ftp /var/ftp/Users/$username
            chmod g+s /var/ftp/Users/$username
            chmod 774 /var/ftp/Users/$username
            echo ""
            service vsftpd restart
            echo -e "\033[0;32mCreate user success.\033[0m"
                read -p "Press any key to return to main menu" 
            $0
#========================================Del FTP users==========================================================
        elif [ "${Num}" == "5" ]
            then
            echo -ne "\033[0;33mPlease input you want to delete user: \033[0m"
                        read delusername
                        usernumber=`grep -n $delusername /etc/vsftpd/Virtualuser.txt | cut -d ":" -f1`
                        sed -i ‘‘$usernumber‘d‘ /etc/vsftpd/Virtualuser.txt
            sed -i ‘‘$usernumber‘d‘ /etc/vsftpd/Virtualuser.txt
            rm -rf /etc/vsftpd/Virtualuserdir/$delusername
            rm -rf /var/ftp/Users/$delusername
            rm -rf /etc/vsftpd/Virtualuser.db
            service vsftpd restart
                        db_load -T -t hash -f /etc/vsftpd/Virtualuser.txt /etc/vsftpd/Virtualuser.db
                        service vsftpd restart
            echo -e "\033[0;32mDelete user success.\033[0m"
                read -p "Press any key to return to main menu"
            $0
#========================================Chanage FTP user password==========================================================
        elif [ "${Num}" == "6" ]
            then
            echo -ne "\033[0;33mPlease input you want to modify the user password: \033[0m"
            read updateuser
            passwdrows=$(( `grep -n $updateuser /etc/vsftpd/Virtualuser.txt | cut -d ":" -f1` + 1 ))
            echo -ne "\033[0;33mPlease enter a new password:\033[0m `stty -echo`"
            read updatepasswd
            echo ""
                        echo -ne "\033[0;33mPlease input again:\033[0m `stty -echo`"
            read updatepasswd
            stty $(cat /root/.stty)
            sed -i ‘‘$passwdrows‘ ‘s/.*./‘‘$updatepasswd‘‘/‘‘ /etc/vsftpd/Virtualuser.txt
            rm -rf /etc/vsftpd/Virtualuser.db
            db_load -T -t hash -f /etc/vsftpd/Virtualuser.txt /etc/vsftpd/Virtualuser.db
            echo ""
            service vsftpd restart
            echo -e "\033[0;32mPassword updated successfully.\033[0m"
                read -p "Press any key to return to main menu"
            $0            
#========================================option 0==========================================================
#                     Exit shell script
                elif [ "${Num}" == "0" ]
                        then
                                rm -rf /tmp/ftplog-userlist.txt
                                exit
                else
                        $0

fi
fi
fi

大家喜欢就点个赞嘛,谢谢

时间: 02-11

看我如何利用Shell编写vsftpd管理软件的相关文章

Python - 利用python编写的memcached启动脚本

memcached作为缓存文件服务,默认是操作系统里面是可以直接yum -y install memcached进行安装的. /etc/init.d/memcached 是属于系统shell编写的管理脚本,下面这个脚本是python脚本编写出来的memcached管理脚本,和shell编写的脚本实现的效果一样. #!/usr/bin/python import sys import os from subprocess import Popen,PIPE class Process(object

关于充电管理软件,手机充电速度提升2/3

充电管理软件Qnovo,新一代产品 智能手机充电管理软件Qnovo:可让充电时间缩短2/3,电池寿命延长1倍 智能手机人人都用,可是电池却是个大问题.用得快.充电久.容易老化.过去,业界的方向普遍是改进电池技术,比方说纳米技术的采用.自愈电极的研究等,但是这些离商用化都还有一段距离.现在一家名为 Qnovo 的初创企业却另辟蹊径,利用软件来改进充电.据 MIT报道,利用 Qnovo 的充电管理软件,智能手机的充电速度可以缩短至原来的 1/3,而且电池的寿命还可以延长一倍.这种技术预计明年将在部分

Shell编写字符菜单管理-8

第8章 Shell编写字符菜单管理 一.shell函数定义function menu(){ echo 'this is a func!!';} 二.shell函数使用menu 三.cat命令的heredoc使用方法cat << eof aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaeof 四.字符界面下字体的颜色控制echo -e "\033[30;47m tes

利用Shell生成Zabbix监控的数字报表

我们都知道Zabbix是一个非常强大的监控工具,我们公司呢也在用Zabbix监控所有网站的状态. 最近有一个需求,就是我们需要生成一份报告,报告里要包含前一天一整天的时间节点和对应的响应时间,这样的报告用来统计网站的可用性达到了什么水准. ? Zabbix本身自带报告功能,可是都是图像的,并没有数据格式的.虽然没有提供数据格式的报表,但是Zabbix提供了一套API,可以根据需求获取对应的数据(JSON格式),于是我就写了个脚本,用来把每个监控的网址的监控数据输出到一个CSV文件中.(后续可以用

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

利用shell脚本实现计划任务功能 V1.2

2013.05.10  mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1.0 版后(利用shell脚本实现计划任务功能),一直在想着如何解决那个最后的遗留问题"每个任务脚本中声明的函数名必须唯一不能重复,否则会导致任务函数覆盖.",无意间自问了一句为什么不能像crontab那样直接调用脚本和命令呢?这一问才让自己回忆起来,之所以用function封装任务是因为早

利用quota对Vsftpd做磁盘配额

利用quota对Vsftpd做磁盘配额 1 增加一块2G的硬盘 打开VMware点击VM---settings-add-Hard Disk----Create a new virtual disk-SCSI-disk size(GB)2.0----重启虚拟机系统 2 验证硬盘: [[email protected] ~]# fdisk -l #已增加了2G的/dev/sdb Disk /dev/sdb: 2147 MB, 2147483648 bytes  -----------à说明已经生效了

第9章:Shell脚本进程管理

第9章:Shell脚本进程管理 9.1.进程概念 理解进程概念需要先简单了解指令和程序这两个概念,进程跟指令和程序是相关联的. 什么叫指令? 指令是指示计算机执行某种操作的命令,它由一串二进制数码组成. 什么叫程序? 程序(Program)是实现计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的集合. 什么叫进程? 进程是正在运行的程序的实例,进程也是执行程序的具体实现过程. 指令.程序和进程三者之间的关系? 计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存

通过跳板机建立信任,对多个tomcat服务统一安装部署(shell编写)

=========================================================== conf : 录入服务器IP.安装路径后,脚本自动获取需要修改配置.每个服务提供一个配置文件,方便管理与扩展. bin : 提供总执行与单一执行脚本,脚本通过自动化获取配置,便于维护与扩展. bak : 保留获取原配置文件,便于问题分析. temp : 临时文件将及时删除无任何冗积. tools: 常用配置与通用文件处理写入统一函数,具体服务只需调用. new : 服务器交互文