Linux服务器ftp服务管理脚本

具体代码如下:

#!/bin/bash
# 自动配置 ftp
# 交互式上传文件


ftp_conf(){
    
    
        echo "正在配置相关文件,请稍等..."
        sleep 1
        cp -a /etc/vsftpd/vsftpd.conf ./
        cat /etc/vsftpd/vsftpd.conf | sed "{s/^anonymous_enable=NO/anonymous_enable=YES/;s/^local_enable=NO/local_enable=YES/;s/^write_enable=NO/write_enable=YES/;s/^anon_upload_enable=NO/anon_upload_enable=YES/;s/^anon_mkdir_write_enable=NO/anon_mkdir_write_enable=YES/}" > ./vsftpd.conf
        read -p "是否允许匿名用户上传文件?(y/n)" anon
        if [ "$anon" == "y" ] || [ "$anon" == "Y" ] || [ "$anon" == "yes" ] || [ "$anon" == "YES" ]
        then
                resu=`cat /etc/vsftpd/vsftpd.conf | grep "anon_umask=022" | wc -l`
                if [ $resu -eq 0 ]
                then
                        # 允许匿名用户进行上传
                        echo "anon_umask=022" >> ./vsftpd.conf
                elif [ $resu -gt 1 ]
                then
                            # 保证 anon_umask=022 只有一行存在
                            cat /etc/vsftpd/vsftpd.conf | sed "s/anon_umask=022//" > ./vsftpd.conf
                            echo "anon_umask=022" >> ./vsftpd.conf
                fi
        elif [ "$anon" == "n" ] || [ "$anon" == "N" ] || [ "$anon" == "no" ] || [ "$anon" == "NO" ]
        then
                cat /etc/vsftpd/vsftpd.conf | sed "{s/^anonymous_enable=YES/anonymous_enable=NO/;s/^local_enable=NO/local_enable=YES/;s/^write_enable=NO/write_enable=YES/;s/^anon_upload_enable=NO/anon_upload_enable=YES/;s/^anon_mkdir_write_enable=NO/anon_mkdir_write_enable=YES/;s/^anon_umask=022//}" > ./vsftpd.conf
        fi
        mv -f ./vsftpd.conf /etc/vsftpd/vsftpd.conf
        rm -rf ./vsftpd.conf
        systemctl restart vsftpd
        echo "配置已经完成!"
}

mkftpdir(){
    
    
        echo "正在创建共享目录..."
        sleep 1
        mkdir /var/ftp/$1
        chmod o+w /var/ftp/$1
        echo "创建目录 $1 完成"
}

check_dir(){
    
    

        while true
        do
            read -p "该共享目录不存在,是否创建该目录?(y/n)" cre
            if [ "$cre" == "y" ] || [ "$cre" == "Y" ] || [ "$cre" == "yes" ] || [ "$cre" == "YES" ]
            then
                    mkftpdir $1
                    break
            elif [ "$cre" == "n" ] || [ "$cre" == "N" ] || [ "$cre" == "no" ] || [ "$cre" == "NO" ]
            then
                    break
            else
                    echo "请输入 y 或者 n"
            fi
        done
}


while true
do

rpm -q vsftpd &> /dev/null

# 检查vsftpd 服务是否安装
if [ $? -ne 0 ]
then
        # 没有安装 vsftpd 服务,则进行安装
        echo "vsftpd 服务未安装,正在安装,请稍等..."
        yum=`yum -y install vsftpd &> /dev/null`
        if [ $? -ne 0 ]
        then
                echo "请检查网络是否已经连接或者本地光盘镜像是否挂载!"
        else
                echo "vsftpd 已经安装成功"
                ftp_conf              
        fi

else

        # 如果已经安装了
        echo "+-------------------------------------+"
        echo "|      1. 上传文件到ftp指定目录       |"
        echo "|      2. 上传目录到ftp指定目录       |"
        echo "|      3. 在 ftp 中创建目录           |"
        echo "|      4. 重置 vsftpd 配置            |"
        echo "|      5. 查找文件                    |"
        echo "|      6. 查找目录                    |"
        echo "|      7. 查看 vsftpd 下的所有目录    |"
        echo "|      8. 查看 vsftpd 下的所有文件    |"
        echo "|      9. 删除 vsftpd 下的指定目录    |"
        echo "|     10. 删除 vsftpd 下的指定文件    |"
        echo "|      q. 退出                        |"
        echo "+-------------------------------------+"
        read -p "请选择进行的 ftp 相关操作:" sel

        case $sel in

                1)
                    read -p "请输入上传文件的完整绝对路径:" file
                    read -p "请输入要上传的位置(/var/ftp 下的目录名称):" dir
                    # 检查该文件是否存在
                    
                    if [ ! -f $file ]
                    then
                            echo "该文件不存在!请检查文件路径或者文件名是否输入正确后重新上传"
                    # 检查vsftpd目录是否存在
                    elif [ ! -d /var/ftp/$dir ]
                    then
                            check_dir $dir
                    fi

                    cp $file /var/ftp/$dir &> /dev/null
                    if [ $? -eq 0 ]
                    then
                        echo "上传文件成功!"
                    else
                        echo "上传文件失败!"
                    fi
                        ;;
                2)
                    read -p "请输入上传文件的完整绝对路径:" put_dir
                    read -p "请输入要上传的位置(/var/ftp 下的目录名称):" aim_dir
                    # 检查该目录是否存在
                    
                    if [ ! -d $put_dir ]
                    then
                            echo "该目录不存在!请检查目录路径或者目录名是否输入正确后重新上传"
                    # 检查vsftpd目录是否存在
                    elif [ ! -d /var/ftp/$aim_dir ]
                    then
                            check_dir $aim_dir
                    fi

                    cp -r $put_dir /var/ftp/$aim_dir &> /dev/null
                    if [ $? -eq 0 ]
                    then
                        echo "上传目录成功!"
                    else
                        echo "上传目录失败!"
                    fi
                        ;;
                3)  
                        read -p "请输入要创建的共享目录名称:" mkshadir
                        mkftpdir $mkshadir
                        ;;
                4)
                    ftp_conf
                        ;;
                5)
                    read -p "请输入要查找的文件完整名称:" find_file
                    result=`find /var/ftp/ -type f -name "$find_file"`
                    lin=`find /var/ftp/ -type f -name "$find_file" | wc -l`
                    if [ $lin -ne 0 ]
                    then
                            echo "**********************************************************************************"
                            echo "文件信息:"
                            for i in $result
                            do
                            ls -l $i
                            done
                            echo "**********************************************************************************"
                    else
                            echo "该文件不存在!"
                    fi
                        ;;
                6)
                    read -p "请输入要查找的目录完整名称:" find_dir
                    res=`find /var/ftp -type d -name "$find_dir"`
                    li=`find /var/ftp -type d -name "$find_dir" | wc -l`
                    if [ $li -ne 0 ]
                    then
                            echo "**********************************************************************************"
                            echo "路径:[$res]"
                            echo "目录详情:"
                            ls $res
                            echo "**********************************************************************************"                 
                    else
                            echo "目录 $find_dir 不存在"
                    fi
                        ;;
                7)
                    echo "**********************************************************************************"
                    echo "所有目录:"
                    find /var/ftp/ -type d 
                    echo "**********************************************************************************"
                        ;;
                8)  
                    echo "**********************************************************************************"
                    echo "所有文件:"
                    find /var/ftp/ -type f 
                    echo "**********************************************************************************"
                        ;;
                9)
                    read -p "请输入要删除的目录完整名称:" dir_name

                    resul=`find /var/ftp/ -type d -name "$dir_name"`
                    line1=`find /var/ftp/ -type d -name "$dir_name" | wc -l`
                    echo "**********************************************************************************"
                    echo "路径:[$resul]"
                    echo "目录详情:"
                    ls $resul
                    echo "**********************************************************************************"
                    label=0
                    until [ $label -eq 1 ]
                    do
                    read -p "确定要删除该目录下的所有内容吗?(y/n)" del
                    if [ "$del" == "y" ] || [ "$del" == "Y" ] || [ "$del" == "yes" ] || [ "$del" == "YES" ]
                    then

                            if [ $line1 -ne 0 ]
                            then
                                
                                rm -rf $resul
                                echo "删除目录 $dir_name 成功!"              
                                label=1
                            else
                                echo "该目录不存在!"
                                label=1
                            fi
                    elif [ "$del" == "n" ] || [ "$del" == "N" ] || [ "$del" == "no" ] || [ "$del" == "NO" ]
                    then
                            label=1
                    else
                            echo "请输入 y 或者 n"
                    fi
                    done
                        ;;
                10)
                    read -p "请输入要删除的文件完整名称:" file_name
                    result=`find /var/ftp/ -type f -name "$file_name"`
                    line=`find /var/ftp/ -type f -name "$file_name" | wc -l`
                    if [ $line -gt 1 ]
                    then
                            label2=0
                            until [ $label2 -eq 1 ]
                            do
                            echo "**********************************************************************************"
                            echo "所有同名文件详细信息:"
                            echo $result 
                            echo "**********************************************************************************"
                            read -p "[提醒]:vsftpd 有 $line 个目录同时存在该文件,确定要全部删除吗?(y:删除全部/n:删除一个指定文件)" del_all

                            if [ "$del_all" == "y" ] || [ "$del_all" == "Y" ] || [ "$del_all" == "yes" ] || [ "$del_all" == "YES" ]
                            then
                                    find /var/ftp/ -type f -name "$file_name" -exec rm -rf {
    
    } \; &> /dev/null
                                    if [ $? -eq 0 ]
                                    then
                                            echo "删除全部同名文件 $file_name 成功!"
                                            label2=1
                                    else
                                            echo "删除全部同名文件 $file_name 失败"
                                            label2=1
                                    fi
                                    
                            elif [ "$del_all" == "n" ] || [ "$del_all" == "N" ] || [ "$del_all" == "no" ] || [ "$del_all" == "NO" ]
                            then
                                    read -p "请输入指定文件 $file_name 的完整绝对路径(直接复制'所有同名文件详细信息'中的完整内容即可)" perfact_file
                                    rm -rf $perfact_file
                                    if [ $? -eq 0 ]
                                    then
                                            echo "删除该指定文件 $file_name 成功"
                                            label2=1
                                    else
                                            echo "删除失败"
                                            echo "[提示]:直接把'所有同名文件详细信息'中的内容复制粘贴即可!"                  
                                    fi 
                            else
                                    echo "请输入 y 或者 n"
                            fi
                            done
                    elif [ $line -eq 0 ]
                    then
                            echo "该文件不存在!"
                    else
                            
                            label3=0
                            until [ $label3 -eq 1 ]
                            do
                                read -p "确定要删除该文件吗?(y/n):" del_one
                                if [ "$del_one" == "y" ] || [ "$del_one" == "Y" ] || [ "$del_one" == "yes" ] || [ "$del_one" == "YES" ]
                                then
                                        rm -rf $result
                                        if [ $? -eq 0 ]
                                        then
                                                echo "删除 $file_name 成功!"
                                        else
                                                echo "删除 $file_name 失败"
                                        fi
                                        label3=1
                                elif [ "$del_one" == "n" ] || [ "$del_one" == "N" ] || [ "$del_one" == "no" ] || [ "$del_one" == "NO" ]
                                then
                                        label3=1
                                else
                                        echo "请输入 y 或者 n"
                                fi
                            done
                            
                    fi
                        ;;
                q)
                    echo "Byebye"
                    exit
                        ;;
                *)
                    echo "请输入正确的选项!"
                        ;;
        esac
fi
done

猜你喜欢

转载自blog.csdn.net/qq_43139145/article/details/104313034