下班前領導忽然要求我將客戶的日誌伺服器上一些日誌拷貝到測試伺服器中,不過領導只提供給我FTP的連接方式,很明顯就是要我用FTP方式去做啦 一般來說FTP批量下載也就上網隨便找個腳本的事,但是卻成了我瘋狂踩坑的開始 1、mget命令完全不能用 首先,為了保證命令是可以正常執行的,我們先連接FTP伺服器 ...
下班前領導忽然要求我將客戶的日誌伺服器上一些日誌拷貝到測試伺服器中,不過領導只提供給我FTP的連接方式,很明顯就是要我用FTP方式去做啦
一般來說FTP批量下載也就上網隨便找個腳本的事,但是卻成了我瘋狂踩坑的開始
1、mget命令完全不能用
首先,為了保證命令是可以正常執行的,我們先連接FTP伺服器,並跳轉到某個文件夾下,執行以下命令:
mget *
一般來說,這時候彈出下載提示只需要回車即可下載,然而我這次卻深深的感覺到了這個命令的惡意
1 mget -rwxr-xr-x 1 user group 154519 Jan 02 07:30 20190101180001.txt? 2 227 Entering Passive Mode(192,168,24,158,7,170). 3 550 "/log/2019/01/-rwxr-xr-x 1 user group 154519 Jan 02 07:30 20190101180001.txt": Directory not found.
excuse me?
為什麼你的文件路徑會在文件名前出現文件屬性???
我就不信邪了,既然都是txt格式保存的日誌那我就只取.txt的,我就不信還有問題
ftp> mget *.txt "/log/2019/01/*.txt": Directory not found.
卧槽,別這麼打臉好吧!難道是FTP伺服器掛了?於是用get命令試了一下,然而...
ftp> get 20190131160001.txt
local: 20190131160001.txt remote: 20190131160001.txt
227 Entering Passive Mode(192,168,24,158,18,227).
150 Opening BINARY mode data connection for file transfer.
226 Transfer complete.
1540 bytes received in 2.39 secs (0.65 Kbytes/sec)
很明顯,FTP伺服器沒有任何問題,get命令可以執行,mget出錯是什麼鬼
行行行,你贏了,mget不行我換個方式可以了吧。
2.wget下載失敗
既然mget有問題,那我們就換一個方法,但是curl不支持遞歸下載,那我們就選擇常見的wget來吧
[root@localhost ~]# wget ftp://user:[email protected]/log/2019/02/20190201180001.txt --2019-02-27 15:37:42-- ftp://user:*password*@192.168.24.158/log/2019/02/20190201180001.txt Connecting to 192.168.1.1:8080... connected. Proxy request sent, awaiting response...
看起來好像沒問題了,響應可能需要一點時間吧,等等就好了(於是等到了地老天荒)
還等啥啊!區域網響應哪有這麼久的!
3.虛擬機執行以上命令,找到原因
以上兩個常用方法都失敗了,那會不會是網路問題呢?於是我到我自己的虛擬機上執行這這幾條命令,結果mget得到的結果是一樣的,但wget卻可以成功下載。
那麼問題就很明顯了,mget獲取文件名的時候,十有八九是FTP伺服器將文件屬性和文件名合併成一個字元串發送到客戶端,所以會出現前面的問題,要是有哪個大佬知道這個問題的原因或者解決方法的話麻煩留個言。
那麼wegt失敗的原因是什麼呢?
仔細觀察響應信息之後,我才忽然註意到怎麼wget的時候把192.168.1.1作為代理伺服器了,讓我一度以為是被網關給攔截了,於是加上了參數--no-proxy
wget -r -nH --proxy=none ftp://user:[email protected]/log/2019/02/*
哇,終於下載成功了,是哪個混蛋設置了預設代理,還代理到網關去了!