红联Linux门户
Linux帮助

原来FTP还可以这样用

发布时间:2009-06-13 22:07:43来源:红联作者:jagub
[i=s] 本帖最后由 jagub 于 2009-6-13 22:15 编辑 [/i]

在工作中碰到这样一个问题:
我在测试一个服务器上的程序,
测试的时候每次操作都会产生一个LOG文件,
能够知道文件名和存放的目录(测试画面有显示)。

如果发现LOG文件上输出错误的话就需要查找原因,
如果没有错误的话,就要把LOG文件保留下来作为测试的证据。

问题是服务器上存放的LOG文件太多了(服务器不是我能够控制的),
用FTP工具在显示文件一览的时候就死了,过滤文件名也不行。
在终端上手动FTP的话,1分钟内不向服务器发个命令就被踢出来。

所以一直用ssh查看LOG,看到正确了在用ftp命令下载。
这样太麻烦了,所以自己查资料,发觉FTP还可以这样使用。
打开一个文件输入:[code]
#!/bin/bash
if [ $# -eq 0 ]
then
echo "请输入文件名"
exit 1
fi
LOGFILE=`mktemp -t ftplog.XXXXXXXXX` || exit 1
ftp -inv <> $LOGFILE
open server
user username password
get /var/log/test/$1 ./$1
bye
END
CNT=`grep -c '226 File send OK.' $LOGFILE`
if [ $CNT -eq 0 ]
then
echo "文件传送失败"
else
cat ./$1
fi
rm -f $LOGFILE
[/code]上述的例子里:
server 服务器
username 用户名
password 密码
/var/log/test/ LOG的目录

把文件保存为get.sh,然后付上执行权限。

使用方法:
把文件拷贝你想要存放文件的那个目录(当然可以放到/usr/bin/里面去)
然后在终端里进入那个目录,输入
./get.sh LOG文件名

这样就可以把LOG文件保存到本地目录,
如果文件不存在就显示[文件传送失败]
下载成功的话就显示文件内容。
文章评论

共有 26 条评论

  1. h657609324 于 2013-08-28 17:08:59发表:

    有点晕,不过还是明白了

  2. jinlong1996 于 2013-07-24 10:02:15发表:

    ding!

  3. farseerlee 于 2013-07-16 14:01:54发表:

    挺好,利用shell省去了不少敲命令的步骤

  4. wst021 于 2010-06-09 21:03:39发表:

    非常好啊,值得学习参考。

  5. shenhao0129 于 2010-06-09 20:20:04发表:

    好像我没有接触Linux之前,也写了一个类似的bat批处理来做类似的事情,但是功能远没有LZ的这么强大,呵呵!佩服

  6. 求知路漫漫 于 2010-06-02 13:11:30发表:

    :0wl;l1

  7. shen.yhx 于 2010-04-27 11:57:31发表:

    学习中

  8. balini 于 2009-07-23 19:26:40发表:

    (e:e2s

  9. wula9707 于 2009-07-08 17:36:01发表:

    不懂 学习。。。

  10. yzm890425 于 2009-07-06 00:31:27发表:

    这个是做什么用的 好复杂哦

  11. 刘冲 于 2009-07-04 18:20:48发表:

    原来FTP还可以这样用!

  12. csl0371 于 2009-07-04 13:21:09发表:

    可是我完全看不懂。。。

  13. yangshan 于 2009-07-02 23:47:58发表:

    高人!:ha3nd

  14. ffsedan 于 2009-06-25 12:44:39发表:

    牛啊

  15. bbsytc 于 2009-06-25 10:01:36发表:

    学习了 很不错的FTP

  16. jianwugy 于 2009-06-22 00:43:44发表:

    谢谢 哈哈{:3_111:}

  17. 刘冲 于 2009-06-18 22:29:39发表:

    不粗,支持!

  18. cwqing1973 于 2009-06-17 16:48:22发表:

    支持一下,知识是学无止境的!知识也是灵性的。

  19. henryhj 于 2009-06-14 23:25:35发表:

    锟斤拷锟斤拷:
    写shell没费多少时间,DOS版的可是花了好几天才搞定的:0w223dc
    jagub 发表于 2009-6-14 21:45

    今天我想做一件简单的事情,差不多也就是read进一个字串,然后后面做一些操作,想用cmd试下,半天没辙,觉得cmd命令不怎么简单功能倒是相当简单,)3):o 还是bash好用(6)m:b

  20. super123 于 2009-06-14 21:55:27发表:

    好!学习了.........

  21. jagub 于 2009-06-14 21:45:47发表:

    写shell没费多少时间,DOS版的可是花了好几天才搞定的:0w223dc

  22. zenwall 于 2009-06-14 21:25:22发表:

    学习了 谢谢 哈哈

  23. 小普林斯 于 2009-06-14 16:53:57发表:

    (e:e2s

  24. icejoywoo 于 2009-06-14 16:33:19发表:

    好多啊

  25. xlsogb 于 2009-06-14 00:03:13发表:

    噢,好复杂

  26. jagub 于 2009-06-13 22:11:23发表:

    [i=s] 本帖最后由 jagub 于 2009-6-13 22:16 编辑 [/i]

    周围的兄弟们向我要这个程序,但是他们的机器是windowsXP
    所以我又写了个DOS版的
    别小看了DOS,现在的DOS也很牛的(当然比起Shell,那是小儿科了)

    打开一个文件输入[code]
    @echo off
    setlocal

    if .%1==. (
    echo 请输入文件名
    goto end
    )

    set file=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%
    set cmdfile=%temp%\%file%.ftp
    set logfile=%temp%\%file%.log

    echo open server>%cmdfile%
    echo user username password>>%cmdfile%
    echo asci>>%cmdfile%
    echo mget /var/log/test/%1>>%cmdfile%
    echo bye>>%cmdfile%

    ftp -i -n -s:%cmdfile%>%logfile%

    set /a scnt=0
    for /F "usebackq" %%A in (`findstr /C:"226 File send OK." %logfile%`) do set /a scnt+=1

    del %cmdfile%
    del %logfile%

    if %scnt% EQU 0 (
    echo 文件传送失败
    ) else (
    type %1
    )

    :end
    endlocal
    [/code]同样上述的例子里:
    server 服务器
    username 用户名
    password 密码
    /var/log/test/ LOG的目录

    把文件名保存为get.bat,

    使用方法:
    把文件拷贝到存放文件的那个目录,在CMD窗口里进入那个目录,输入
    get 文件名

    DOS版的和Linux上的有些不同
    1,FTP的 -v 参数,Linux的FTP是显示服务器传送的消息,DOS的FTP是不显示服务器传送的消息
    2,FTP的get命令,Linux的FTP,如果服务器上文件不存在的话,是不会在本地建立文件的。DOS的FTP会建一个0字节的文件。所以DOS版的改成mget了
    3,DOS版的回车是CRLF,Linux的是LF,所以DOS版用的是ASCII模式下载的