FTP服务器管理【Linux运维之道之脚本案例】
今天看到51CTO正在搞Linux Shell 脚本大赛,特地将自己的处女作发出来,希望能够得到分享。
这里说一下这个脚本的功能,这个脚本主要用来实现VSFTPD服务器的基础管理,主要用于方便运维管理。代码不是很美,还请各位多多指教。
这个代码主要基于本地用户管理、有需求基于LDAP认证管理的朋友,可以联系我,LDAP认证的功能上将更强大了些。
管理界面:
代码部份:
read -p "请选择您要做的操作:" caozuo
case $caozuo in
0) read -p "请输入您要修改密码的用户名: " selectuser
while [ ! "$selectuser" ] || [ ! `more /etc/vsftpd/chroot_list | grep -w $selectuser` ]
do
read -p "对不起,您输入的用户名$selectuser不存在,请重新输入要查询的用户名,退出请按q键: " selectuser
if [ "$selectuser" ] && [ "$selectuser" == "q" ];then
exit
fi
done
passwd $selectuser
echo "记录: 管理员$adminroot于$timedate1修改用户$selectuser密码" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "您已经成功修改用户$selectuser的密码,按回车键继续操作" var
;;
1) read -p "请输入您要查询的用户名: " selectuser
while [ ! "$selectuser" ] || [ ! `more /etc/vsftpd/chroot_list | grep -w $selectuser` ]
do
echo "记录: 管理员$adminroot于$timedate1查询用户$selectuser" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "对不起,查询的用户名$selectuser不存在,请重新输入要查询的用户名,退出请按q键: " selectuser
if [ "$selectuser" ] && [ "$selectuser" == "q" ];then
exit
fi
done
echo "记录: 管理员$adminroot于$timedate1查询用户$selectuser" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "您查询的用户$selectuser为FTP用户,按回车键继续" var
;;
2) read -p "请输入您需要添加的用户名: " adduser
while [ ! "$adduser" ] || ( [ "$adduser" ] && [ `more /etc/vsftpd/chroot_list | grep -w $adduser` ] )
do
read -p "对不起,您的操作有误,用户名不能为空,或您添加的用户已经存在,请重新输入要查询的用户名,退出请按q键: " adduser
if [ "$adduser" ] && [ "$adduser" == "q" ];then
exit
fi
done
useradd $adduser -d /opt/vsftp/$adduser -s /sbin/nologin
chmod -R 777 /opt/vsftp/$adduser
echo $adduser@123 | passwd --stdin $adduser
echo "$adduser" >> /etc/vsftpd/chroot_list
setquota -u $adduser 512000 614400 0 0 /opt
cp /etc/vsftpd/vconf/moban /etc/vsftpd/vconf/$adduser
echo "记录: 管理员$adminroot于$timedate1添加用户$adduser" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "您添加用户$adduser成功,按回车键继续" var
;;
3) read -p "请输入您需要删除的用户名: " deluser
while [ ! "$deluser" ] || [ ! `more /etc/vsftpd/chroot_list | grep -w $deluser` ]
do
read -p "对不起,您输入的用户名$deluser不存在,请重新输入要删除的用户名,退出请按q键: " deluser
if [ "$deluser" ] && [ "$deluser" == "q" ];then
exit
fi
done
userdel $deluser
rm -rf /opt/vsftp/$deluser/.gnome2
rm -rf /opt/vsftp/$deluser/.bashrc
rm -rf /opt/vsftp/$deluser/.bash_profile
rm -rf /opt/vsftp/$deluser/.bash_logout
rm -rf /etc/vsftpd/vconf/$deluser
umount /opt/vsftp/$deluser
mv /opt/vsftp/$deluser /opt/vsftp/bak$deluser
rm -rf /opt/vsftp/$deluser
sed -i "/$deluser/d" /etc/vsftpd/chroot_list
sed -i "/$deluser/d" /etc/vsftpd/mountuser.sh
echo "记录: 管理员$adminroot于$timedate1删除用户$deluser" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "您已经成功删除用户$deluser,按回车键继续" var
;;
4) more /etc/vsftpd/chroot_list
read -p "以上为所有FTP用户,按回车键继续" var
;;
5) read -p "请输入您要查询限额的用户名: " selectquota
while [ ! "$selectquota" ] || [ ! `more /etc/vsftpd/chroot_list | grep -w $selectquota` ]
do
read -p "对不起,您输入的用户名$selectquota不存在,请重新输入要查询限额的用户名,退出请按q键: " selectquota
if [ "$selectquota" ] && [ $selectquota == q ];then
exit
fi
done
quota $selectquota | sed -n '3p' | echo "当前用户的软限制为: `awk '{print $3}'`KB"
quota $selectquota | sed -n '3p' | echo "当前用户的硬限制为: `awk '{print $4}'`KB"
echo "记录: 管理员$adminroot于$timedate1查询用户$selectquota磁盘限额信息" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "当前用户的磁盘限额如上,按回车键继续" var
;;
6) read -p "请输入您要修改限额的用户名: " revisequota
while [ ! "$revisequota" ] || [ ! `more /etc/vsftpd/chroot_list | grep -w $revisequota` ]
do
read -p "对不起,您输入的用户名$revisequota不存在,请重新输入要查询限额的用户名,退出请按q键: " revisequota
if [ "$revisequota" ] && [ $revisequota == q ];then
exit
fi
done
quota $revisequota | sed -n '3p' | echo "修改前用户的软限制为: `awk '{print $3}'`KB"
quota $revisequota | sed -n '3p' | echo "修改前用户的硬限制为: `awk '{print $4}'`KB"
read -p "请修改您要修改的用户软限制值,默认单位为KB: " quota1
while [ ! $quota1 ];
do
read -p "对不起,修改用户的软限制值不能为空,请重新输入软限制值,退出请按q键: " quota1
if [ $quota1 ];then
if [ $quota1 == q ];then
exit
fi
fi
done
read -p "请修改您要修改的用户硬限制值,默认单位为KB: " quota2
while [ ! $quota2 ] || [ $quota2 -lt $quota1 ];
do
read -p "对不起,修改用户的硬限制值不能为空,且硬限制的值不能小于软限制的值,请重新输入硬限制值,退出请按q键: " quota2
if [ "$quota2" ] && [ "$quota2" == "q" ];then
exit
fi
done
setquota -u $revisequota $quota1 $quota2 0 0 /opt
echo "记录: 管理员$adminroot于$timedate1修改用户$revisequota软限制为: $quota1 硬限制为: $quota2" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
quota $revisequota | sed -n '3p' | echo "修改后用户的软限制为: `awk '{print $3}'`KB"
quota $revisequota | sed -n '3p' | echo "修改后用户的硬限制为: `awk '{print $4}'`KB"
read -p "当前用户修改后磁盘限额如上,按回车键继续" var
;;
7) read -p "请输入您要查询的用户名: " selectuser
while [ ! $selectuser ] || [ ! `more /etc/vsftpd/chroot_list | grep -w $selectuser` ]
do
read -p "对不起,您查询的用户名$selectuser不存在,请重新输入,退出请按q键: " selectuser
if [ "$selectuser" ] && [ "$selectuser" == "q" ];then
exit
fi
done
read -p "请输入您要查询的日期(格式:2013-07-11 08:32:21): " datetime3
while [ ! $datetime3 ]
do
read -p "对不起您的输入有误,日期时间不能空,请重新输入: " datetime3
done
read -p "请输入您要查询的操作动作(DELETE、MKDIR、UPLOAD、RMDIR、DOWNLOAD、LOGIN): " opreate
while [ ! $opreate ]
do
read -p "对不起,操作动作不能为空,请重新输入: " opreate
done
while ( [ $opreate != 'MKDIR' ] && [ $opreate != 'UPLOAD' ] && [ $opreate != 'DELETE' ] && [ $opreate != 'LOGIN' ] && [ $opreate != 'RMDIR' ] && [ $o
preate != 'DOWNLOAD' ] )
do
read -p "对不起您输入的操作动作有误,请重新输入: " opreate
done
echo " 操作日期|操作时间|操作人|是否成功|操作动作|IP地址|操作内容" > /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
more /var/log/messages | grep $selectuser] | grep $opreate | grep $datetime3 | awk '{print $1"|"$2"|"$5"|"$6"|"$7"|"$9"|"$10 }' >> /opt/vsftp/ftplog/
"$timedate1""$selectuser""$opreate".xls
sed -i 's/://3' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/"//g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/\[//' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/]//' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/,//g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/UPLOAD/上传资料/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/DELETE/删除文件/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/LOGIN/用户登录/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/RMDIR/删除目录/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/MKDIR/新建目录/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/DOWNLOAD/下载资料/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/OK/成功/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
sed -i 's/FAIL/失败/g' /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
echo "记录: 管理员$adminroot于$timedate1查询用户$selectuser的操作动作$opreate日志" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "直接查看请按a键,下载到Win查看请按b键: " abjian
if [ "$abjian" == "a" ];then
more /opt/vsftp/ftplog/"$timedate1""$selectuser""$opreate".xls
read -p "以上为指定用户的操作日志,按回车键继续操作" var
elif [ "$abjian" == "b" ];then
cd /opt/vsftp/ftplog
sz "$timedate1""$selectuser""$opreate".xls
read -p "指定用户的操作日志已经成功导出到Win,按回车键继续操作" var
fi
;;
8) read -p "请输入您要查询的日期(格式:2012-09-12): " riqi
while [ ! $riqi ]
do
read -p "对不起日期不能为空,请重新输入(格式:2012-09-12): " riqi
done
while [ `echo $riqi | grep -q '^[1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$' && echo ! aa || echo aa` ]
do
read -p "您输入的日期格式错误,请重新输入(格式:2012-09-12): " riqi
done
read -p "请输入您要查询的时间,(格式:23:12): " shijian
if [ ! $shijian ];then
echo " 操作日期|操作时间|操作人|是否成功|操作动作|IP地址|操作内容" > /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
more /var/log/messages | grep $riqi | grep vsftpd | awk '{print $1"|"$2"|"$5"|"$6"|"$7"|"$9"|"$10 }' >> /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/://3' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/"//g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/\[//' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/]//' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/,//g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/UPLOAD/上传资料/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/DELETE/删除文件/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/LOGIN/用户登录/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/RMDIR/删除目录/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/MKDIR/新建目录/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/DOWNLOAD/下载资料/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/OK/成功/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
sed -i 's/FAIL/失败/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
echo "记录: 管理员$adminroot于$timedate1查询日期为:$riqi的所有用户操作记录" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "直接查看请按a键,下载到Win查看请按b键: " abjian
if [ "$abjian" == "a" ];then
more /opt/vsftp/ftplog/"$timedate1"查询"$riqi".xls
read -p "以上为指定用户的操作日志,按回车键继续操作" var
elif [ "$abjian" == "b" ];then
cd /opt/vsftp/ftplog
sz "$timedate1"查询"$riqi".xls
read -p "指定用户的操作日志已经成功导出到Win,按回车键继续操作" var
fi
else
while [ `echo $shijian | grep -q '^[0-9][0-9]:[0-9][0-9]$' && echo ! aa || echo aa` ]
do
read -p "您输入的时间格式不正确,请重新输入(格式:23:12): " shijian
done
shi=`echo ${shijian:0:2}`
jian=`echo ${shijian:${#shijian}-2:${#shijian}}`
echo "操作日期|操作时间|操作人|是否成功|操作动作|IP地址|操作内容" > /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
more /var/log/messages | grep $riqi | grep $shijian | grep vsftpd | awk '{print $1"|"$2"|"$5"|"$6"|"$7"|"$9"|" $10 }' >> /opt/vsftp/ftplog/"$timedate
1"查询"$riqi"-"$shi"."$jian"
sed -i 's/://3' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/"//g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/\[//' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/]//' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/,//g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/UPLOAD/上传资料/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/DELETE/删除文件/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/LOGIN/用户登录/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/RMDIR/删除目录/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/MKDIR/新建目录/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/DOWNLOAD/下载资料/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/OK/成功/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
sed -i 's/FAIL/失败/g' /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian"
echo "记录: 管理员$adminroot于$timedate1查询日期为:$riqi时间为:$shijian的所有用户操作记录" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "直接查看请按a键,下载到Win查看请按b键: " abjian
if [ "$abjian" == "a" ];then
more /opt/vsftp/ftplog/"$timedate1"查询"$riqi"-"$shi"."$jian".xls
read -p "以上为指定用户的操作日志,按回车键继续操作" var
elif [ "$abjian" == "b" ];then
cd /opt/vsftp/ftplog
sz "$timedate1"查询"$riqi"-"$shi"."$jian".xls
read -p "指定用户的操作日志已经成功导出到Win,按回车键继续操作" var
fi
fi
;;
9) read -p "请输入您要查询的用户名: " selectuser
while [ ! $selectuser ]
do
read -p "对不起,查询的用户名不能为空,请重新输入要查询的用户名: " selectuser
done
while [ ! `more /etc/vsftpd/chroot_list | grep -o $selectuser` ]
do
read -p "对不起,您查询的用户名不存在,请重新输入要查询的用户名: " selectuser
done
echo "操作日期|操作时间|操作人|是否成功|操作动作|IP地址|操作内容" > /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
more /var/log/messages | grep $selectuser | grep vsftpd | awk '{print $1 "|" $2 "|" $5 "|" $6 "|"$7 "|" $9 "|" $10 }' >> /opt/vsftp/ftplog/"$timedate
1"查询"$selectuser".xls
sed -i 's/://3' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/"//g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/\[//' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/]//' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/,//g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/UPLOAD/上传资料/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/DELETE/删除文件/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/LOGIN/用户登录/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/RMDIR/删除目录/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/MKDIR/新建目录/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/DOWNLOAD/下载资料/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/OK/成功/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
sed -i 's/FAIL/失败/g' /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
echo "记录: 管理员$adminroot于$timedate1查询日期为:$selectuser的所有用户操作记录" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "直接查看请按a键,下载到Win查看请按b键: " abjian
if [ "$abjian" == "a" ];then
more /opt/vsftp/ftplog/"$timedate1"查询"$selectuser".xls
read -p "以上为指定用户的操作日志,按回车键继续操作" var
elif [ "$abjian" == "b" ];then
cd /opt/vsftp/ftplog
sz "$timedate1"查询"$selectuser".xls
read -p "指定用户的操作日志已经成功导出到Win,按回车键继续操作" var
fi
;;
10) ls /opt/vsftp/ftplog/ | more
echo "记录: 管理员$adminroot于$timedate1查看了所有导出的用户操作日志文件名" >> /opt/vsftp/adminlog/"$adminroot""$timedate2"
read -p "以上为所有已导出用户操作日志文件名,按回车键继续" var
;;
说明:
由于代码篇幅太大,这里贴出前10项功能代码,希望能够给有需求的朋友能起到一个抛砖引玉的作用。
FTP服务器管理【Linux运维之道之脚本案例】相关推荐
- Linux运维之道-基础命令
基础命令 参照 linux运维之道(丁明一) 文章目录 基础命令 一.目录以及文件的基本操作 1. pwd 2.cd 3.ls 4.touch 5.mkdir 6.cp 7.rm 8.mv 9.fin ...
- linux nas目录老是掉,Linux运维:NAS存储故障案例
原标题:Linux运维:NAS存储故障案例 1.故障现象描述 NAS 操作系统 内核为 Linux ,自带的存储有16块硬盘,总共分两组,每组都做了RAID5, Linux无法正常启动,在服务启动到c ...
- Linux 运维自动化之Cobbler实战案例
大纲 一.前言 二.Cobbler 工作原理详解 三.Cobbler 常用命令汇总 四.Cobbler 各种目录说明 五.自定义Kickstart文件详解 六.Cobbler 实战案例安装CentOS ...
- 有道云笔记linux运维,有道云协作-互联网行业解决方案
互联网开发团队,由奇思妙想的设计狮.无所不能的产品汪."精通码艺"的程序猿和精准高效的软件测试组成.在项目开发过程中,部门同事需要通力协作.高效配合,一切工作核心围绕产品需求展开. ...
- linux运维企业shell,shell脚本-企业日常巡检脚本
运维开发网 https://www.qedev.com 2021-04-15 15:14 出处:51CTO作者:互联网老辛 #!/bin/bash function system(){ echo &q ...
- linux下数据库的基本管理,数据库的管理_linux 运维之道 基础篇的技术博客_51CTO博客...
{**数据库**} 1.安装: yum install mariadb-server.x86_64 -y安装服务 systemctl start mariadb 开启服务 systemctl s ...
- linux运维之道基础命令,Linux运维之道(7)——Linux管理类命令
@(Linux)[系统管理] 1. 目录管理类命令 1.1 cd命令 格式:cd [-L|[-P [-e]] [-@]] [dir] 被你忽略的小知识: 在这里科普一个小小的知识点,就是关于cd -为 ...
- Linux运维之道之ENGINEER1.1(配置邮件服务器,数据库管理基础,表数据管理)
ENGINNEER1.1 基础邮件服务 快速部署postfix邮件服务器: --装包,配置,起服务 安装postfix :默认已安装 配置postfix,修改配置文件 #ls /etc/postfi ...
- Linux运维之道之网络基础学习1.0
网络基础1.0 计算机网络: 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统,应用软件,应用程序通过通信线路互连,实现资源共享,信息传递. 计算机网络的功能: 数据通信,资源共享,增 ...
最新文章
- 汇编语言(王爽 第三版) ret retf总结 以及检测点10.1
- Unity3D开发——LeRunning的人物角色信息的显示
- 程序员保值的五个关键点
- 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
- window.location.href不打开新窗口_嘿,这条微博值得一看:不登录如何访问页面
- 童年真的回来了么?《摩尔庄园》手游深度分析
- zabbix的rc控制脚本
- floquet端口必须沿z轴设置_Ansys Workbench 振动给料机偏心轴的模态分析
- git本地分支删除,代码没了!怎么恢复!亲测有效(吓死人了)
- 写一个Windows上的守护进程(7)捕获异常并生成dump
- SpringBoot集成gRPC微服务工程搭建实践
- 成功要素:富兰克林的13条必要美德! 与 狗熊掰棒子
- 贫困的苏州(转自新浪)
- 计算机某浏览器设置主页地址,如何查看电脑中的浏览器主页是被什么软件修改的...
- python如何让程序暂停_王者荣耀集祝福linkedin雄攻略
- 俄罗斯军事帝国的衰落
- 使用Calendar 计算两个日期相差天数,
- HCIP第十四天笔记
- 量化金融分析AQF(5):金融数据获取、清洗、整理和存储(Yahoo、Tushare)
- 稳定可靠的国产PCIe4.0固态,主机升级新选择,大华C970上手
热门文章
- 数组反向遍历ios_LeetCode106.从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inor...)...
- Dijkstra的算法
- 【 MATLAB 】impz函数介绍(数字滤波器的脉冲响应)
- 【 English 】程序员必备单词
- 《基于PLL分频计数的LED灯闪烁实例》实验记录
- 《VMware vCAT权威指南:成功构建云环境的核心技术和方法》一3.6 vCloud计量
- 平安技术开放日质量保证技术专场第一期 [附部分 ppt]
- POJ 3734 Blocks
- webdriver中处理alert
- 经管资源库项目的总结笔记