命令行下 FTP 使用技巧

簡單介紹

網上有很多圖形化界面的 FTP 工具,但我的工作環境中使用了很多自動化工具必須在命令行下操作,Windows 和 Linux 下都有基于命令行的 FTP 工具,而它們的使用方式也都大同小異,這里介紹的方法都是通用的。

使用 .netrc 配置文件進行自動化操作

.netrc 文件可以看做 FTP 工具的默認命令列表,當你不使用任何參數調用 FTP 命令時它會自動讀取這個文件中的內容執行命令,下面的就是一個簡單的例子:

在自己的home目錄下建立一個權限600(權限必須是600,少了不行,多了也不行),名為 .netrc 的文件,內容如下:

machine 192.168.0.1 login <ftpuser> password <ftpuser_password>

這樣以后你每次 ftp 192.168.0.1 的時候系統都會幫你以用戶名ftpuser登錄到該服務器,利用這個特征可以實現自動ftp。

如果想要每天5:00到192.168.0.1機器上面獲得 /test 目錄下的文件 test.txt ,可以建立一個文件 ftp_cmd,內容為:

cd test
get test.txt
bye

然后在 Linux 系統中使用 crontab -e 設置定時任務:

0 5 * * * ftp 192.168.0.1 < ftp_cmd

附:.netrc 的用法

netrc 中應包含的基本命令:

FTP中有幾十個命令,在.netrc中應該設置的大致有如下幾條:

  1. default login password
    在互聯網中存在大量匿名ftp帳戶,用戶在不同的主機間頻繁登錄anonymous帳戶,輸入自己的電子郵件地址作為口令,這種輸入極其繁瑣,完全有必要利用.netrc文件在進入ftp時自動完成該過程。

  2. binary
    許多用戶在下載大量文件之后才意識到下載的文件是二進制文件,而自己卻是使用ascii方式傳輸使下載文件無法使用,做了許多無用功。在.netrc文件中提前將傳輸方式設置為binary 完全可避免出現上述情況。

  3. runique
    在浩如煙海的文件中有大量同名文件,如readme、index等,如果將同名文件下載到同一目錄則新傳的文件會覆蓋原同名文件。為了使具有潛在重要性的文件不至于被意外覆蓋,也需要在.netrc文件中設置runique參數防止上述錯誤。

  4. prompt off
    使用ftp時,經常會用到mget或其它需要確認的ftp命令,將此確認過程取消可大大方便使用者。

  5. hash on
    ftp中的hash命令使得在進行文件傳輸時每傳輸1千字節就在屏幕上顯示一個"#"號,通過觀看屏幕上的"#"號可以很直觀地看到傳輸速度的快慢,以及文件的傳輸完成情況。

  6. idle 7200
    目前國內的Internet專線速率普遍偏低,用戶數卻在急劇膨脹,所以用ftp傳輸銷大一些的文件時經常會因為線路擁塞而斷線,為了減少因斷線而反復登錄的次數,需將idle命令的參數設置為最大(一般為7200秒)。

  7. macdef
    macdef定義一個宏,macro_name為宏定義的名稱。在macdef行下,可輸入任何有效的ftp命令,并以空行結束宏定義,執行時只需在宏名前加"$"號即可。如果宏名定義為init,則該宏命令在啟動ftp后自動加以執行,無需用戶輸入$macro_name。

在命令行下指定用戶名和密碼:

ftp://dev:abcd1234@10.208.66.10://pub/readme.txt

常用 FTP 命令列表

FTP的命令行格式為:ftp -v -d -i -n -g [主機名],各個參數含義如下:

  • -v 顯示遠程服務器的所有響應信息
  • -n 限制ftp的自動登錄,不使用 .netrc 文件
  • -d 使用調試方式
  • -g 取消全局文件名

FTP使用的內部命令如下(中括號表示可選項):

  • ![cmd[args]]
    在本地執行交互shell,exit回到ftp環境,如:!ls*.zip

  • $macro-name [args]
    執行宏定義的命令列表

  • account [password]
    提供登錄遠程系統成功后訪問系統資源所需的補充口令

  • append local-file [remote-file]
    將本地文件追加到遠程系統主機,若未指定遠程系統文件名,則使用本地文件名

  • ascii
    使用 ascii 模式傳輸

  • bell
    每個命令執行完畢后計算機響鈴一次

  • bin
    使用二進制文件傳輸方式

  • bye
    退出ftp會話過程

  • case
    使用 mget 時將遠程主機文件名中的大寫轉為小寫字母

  • cd remote-dir
    進入遠程主機目錄

  • cdup
    進入遠程主機目錄的父目錄

  • chmod mode file-name
    將遠程主機文件file-name的存取方式設置為mode,如:chmod 777 a.out

  • close
    中斷與遠程服務器的ftp會話(與open對應)

  • cr
    使用asscii方式傳輸文件時,將 \r\n 轉換為 \n

  • delete remote-file
    刪除遠程主機文件

  • debug[debug-value]
    設置調試方式,顯示發送至遠程主機的每條命令,如:debug 3,若設為 0 表示取消debug

  • dir remote-dir local-file
    顯示遠程主機目錄,并將結果存入本地文件

  • disconnection
    同close

  • form format
    將文件傳輸方式設置為format,缺省為file方式

  • get remote-file [local-file]
    將遠程主機的文件 remote-file 傳至本地硬盤的 local-file

  • hash
    每傳輸1024字節顯示一個hash符號(#)

  • help [cmd]
    顯示ftp內部命令cmd的幫助信息,如:help get

  • idle [seconds]
    將遠程服務器的休眠計時器設為[seconds]秒

  • image
    設置二進制傳輸方式(同binary)

  • lcd[dir]
    將本地工作目錄切換至dir

  • ls [remote-dir] [local-file]
    顯示遠程目錄remote-dir, 并存入本地文件local-file

  • macdef macro-name
    定義一個宏,遇到macdef下的空行時,宏定義結束

  • mdelete [remote-file]
    批量刪除遠程主機文件

  • mdir remote-files local-file
    與dir類似但可指定多個遠程文件,如 :mdir .o..zipoutfile

  • mget remote-files
    批量傳輸多個遠程文件

  • mkdir dir-name
    在遠程主機中建一目錄

  • mls remote-file local-file
    同nlist,但可指定多個文件名

  • mode [modename]
    將文件傳輸方式設置為modename,缺省為stream方式

  • modtime file-name
    顯示遠程主機文件的最后修改時間

  • mput local-file
    將多個文件傳輸至遠程主機

  • newer file-name
    如果遠程機中 file-name 的修改時間比本地硬盤同名文件的時間更近,則重傳該文件

  • nmap [inpattern outpattern]
    設置文件名映射機制, 使得文件傳輸時某些字符相互轉換, 如:nmap $1.$2.$3[$1,$2].[$2,$3],則傳輸文件a1.a2.a3時,文件名變為a1,a2。該命令特別適用于遠程主機為非UNIX機的情況

  • ntrans [inchars] [outchars]]
    設置文件名字符的翻譯機制,如ntrans1R,則文件名LLL將變為RRR。

  • open host[port]
    建立指定ftp服務器連接,可指定連接端口

  • passive
    進入被動傳輸模式

  • prompt
    設置多個文件傳輸時的交互提示

  • put local-file [remote-file]
    將本地文件local-file傳送至遠程主機

  • pwd
    顯示遠程主機的當前工作目錄

  • quit
    同bye,退出ftp會話

  • quote arg1,arg2...
    將參數逐字發至遠程ftp服務器,如:quote syst ...

  • recv remote-file [local-file]
    同get

  • reget remote-file[local-file]
    類似于get,但若local-file存在,則從上次傳輸中斷處續傳

  • rhelp [cmd-name]
    請求獲得遠程主機的幫助

  • rstatus[file-name]
    若未指定文件名,則顯示遠程主機的狀態,否則顯示文件狀態

  • rename[from][to]
    更改遠程主機文件名

  • reset
    清除回答隊列

  • restart marker
    從指定的標志marker處重新開始get或put,如:restart 130

  • rmdir dir-name
    刪除遠程主機目錄

  • runique
    設置文件名唯一性規則,若文件存在,則在原文件后加后綴.1, .2等

  • send local-file [remote-file]
    同put

  • sendport
    設置PORT命令的使用

  • site arg1,arg2 ...
    將參數作為SITE命令逐字發送至遠程ftp主機

  • size file-name
    顯示遠程主機文件大小,如:site idle 7200

  • status
    顯示當前ftp狀態

  • struct [struct-name]
    將文件傳輸結構設置為struct-name,缺省時使用stream結構

  • system
    顯示遠程主機的操作系統類型,一般會被遠程主機忽略掉這個命令

  • tenex
    將文件傳輸類型設置為TENEX機的所需的類型

  • tick
    設置傳輸時的字節計數器

  • trace
    設置包跟蹤

  • type [type-name]
    設置文件傳輸類型為type-name,缺省為ascii,type binary 設置二進制傳輸方式。

  • umas k[newmask]
    將遠程服務器的缺省umask設置為newmask,如:umask 3

  • user user-name [password] [account]
    向遠程主機表明自己的身份,需要口令時,必須輸入口令,如:user anonymous my@email。

  • verbose
    同命令行的-v參數,即設置詳盡報告方式,ftp 服務器的所有響 應都將顯示給用戶,缺省為on.

  • ?[cmd]
    同help.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • win7 cmd管理員權限設置 net localgroup administrators 用戶名 /add 把“...
    f675b1a02698閱讀 5,285評論 0 11
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 部分內容轉載自搜狗百科 cmd是command的縮寫.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上閱讀 2,412評論 0 24
  • FTP服務概述 簡單FTP構建及訪問 VSFTP服務基礎 用戶禁錮、黑白名單 FTP并發及帶寬限制 一、FTP服務...
    紫_軒閱讀 7,672評論 3 25
  • Linux 后臺運行 命令后加 & 注意 如果希望關閉ssh后依然可以在后臺運行需要
    樂楽樂閱讀 262評論 0 0