Linux下安装vsftp的大概步骤:
1、apt-get install vsftpd安装
2、修改/etc/vsftpd.conf,将write_enable=YES前面的#删除(上传文件要放开这个项目,不允许上传可就要屏蔽这个项目)
3、groupadd test
4、mkdir /ftptest(可以设置其他的目录)
5、useradd -G test -d /ftptest -M usr1
6、passwd usr1,然后输入你想设置的密码
7、chown usr1.test /ftptest
8、chmod 777 /ftptest
9、service vsftpd restart (修改配置后要重启服务)
手动测试:
1、ftp 服务ip 端口
2、输入用户名
3、输入密码
4、put 文件(上传文件)
5、get 文件(下载文件)
备注:ftp默认端口是21,在录播系统上设置ftp服务器之前先手动测试服务是否正常
有时连接总提示失败,要将/etc/pam.d/vsftpd改名或删除
windows下的cmd也可以测试连接ftp服务
1、ftp 服务器ip
然后输入用户名和密码,会显示连接成功
2、ftp回车,再用open 服务器ip 端口,再输入用户名和密码
其他与linux中相同使用
-------------------------------------------------------------------------------------
项目中要使用ftp上传文件,在linux下运行,思路是由加一个模块,定时读取上传任务,然后调用脚本上传文件
将工作中遇到的问题备忘一下。
1、linux下安装ftp服务
网上有很多方法,我用的是unbantu,用
全新安装:apt-get install vsftpd,重新安装:apt-get --reinstall install vsftp,卸载并清除配置文件:apt-get -purge remove vsftp
我在安装的过程中,服务器能访问外网ip,但访问不了域名,这是没配置域名服务器,在/etc/resolv.conf文件中增加
nameserver 8.8.8.8(也可用8.8.4.4,这些是谷歌的域名解析服务器)
安装后要配置用户和组
首先创建用户组 test和FTP的主目录
groupadd test
mkdir /tmp/test
然后创建用户
useradd -G test -d /tmp/test -M usr1
useradd -G test -d /tmp/test -M usr2
设置用户密码
passwd usr1
然后会提示输入新密码,再确认一次就设置好密码了
接着改变文件夹的属主和权限
chown usr1.test /tmp/test ----这表示把/tmp/test的属主定为usr1
chmod 750 /tmp/test ----7表示wrx 5表示rx 0表示什么权限都没有
ftp默认端口是21,如果要修改端口,在vsftpd.conf 文件中增加listen_port=2121(这是你想要设置的端口号)
要实现上传除了目录有权限,还得在配置文件中write_enable=YES要打开
详细可参考:
http://www.linuxidc.com/Linux/2007-10/8062p3.htm
服务的启动、重启和停止
service vsftpd start,service vsftpd restart,service vsftpd stop
解决vsftpd的530 Login incorrect错误
在etc下面有个pam.d
文件夹,进去打开vsftpd
这个文件,里面对之前的用户进行了限制,将里面对应的限制注释掉,问题解决。
# Standard behaviour for ftpd(8).
#auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
#auth required pam_shells.so
2、windws下使用serv-u比较方便
在windows下的资源管理器下看不到ftp服务器上的文件,要在浏览器(不是资源管理器)的工具/internet选项/高级下,将启用FTP文件夹视图选中
3、登录ftp服务器
使用不同的服务器返回的代码是相同的,但文字有区别,比如登录成功,在linux下的server返回了230 Login successful.用win下返回了230 User logged in, proceed.
可以使用 || 进行2个条件的判断,
if [ "${RESULT_CON_WIN}" = "${SUCC_CON_WIN}" ] || [ "${RESULT_CON_LINUX}" = "${SUCC_CON_LINUX}" ]
注意 [ ]要有空格,
如果要判断一个字符串中是否有别一个字符串,可以这样
if [[ $RESULT == *$SUCC* ]]
这样可以c++调用脚本system可以得到返回值,判断是否成功
4、sqlite3数据库中有timespan类型的字段,
想用比较大小的sql放到xml中,然后根据id得到sql,但是将 < 放到xml中会破坏xml的结构,读不到的别的sql了,用转义字符也不行,别的id能读到,本id的sql读不出来。
不过原来的sql有使用转义的sql,要看一下怎么处理的。
这样只好将日期取出来,放到tm结构中,用mktime转换成time_t,然后与当前的时间比较