介紹如何在 Linux 系統的命令列中使用 NcFTP 指令 FTP 工具,上傳或下載檔案。

NcFTP 是一個指令介面的 FTP client 工具,可以讓 Linux 使用者在命令列或指令稿的環境下,輕鬆透過 FTP 等檔案傳輸協定上傳或下載檔案。

FTP 傳輸檔案

若要登入匿名的 FTP 伺服器,只要執行 ncftp 再加上 FTP 伺服器位址即可:

# 登入 FTP 匿名伺服器
ncftp ftp://ftp.gnu.org/

若要直接在登入之後進入指定目錄,可將路徑直接加在伺服器位址上:

# 登入 FTP 伺服器,並進入指定目錄
ncftp ftp://ftp.gnu.org/gnu/

若 FTP 伺服器需要帳號與密碼,則可使用 -u-p 來分別指定帳號與密碼:

# 指定帳號與密碼
ncftp -u USERNAME -p PASSWORD ftp://your.site/path/

在進入 NcFTP 的互動式 shell,並成功登入伺服器之後,會顯示類似這樣的提示訊息:

Login successful.
Logged in to ftp.gnu.org.
Current remote directory is /.
ncftp / >

接著就可以使用 NcFTP 的指令進行檔案的上傳、下載等各種操作了,以下是一些常用的 NcFTP 指令。

指令說明範例
ls列出檔案清單ls
get下載檔案get FILE.txtget *.txt
get -R下載目錄get -R FOLDER
put上傳檔案put FILE.txt
put -R上傳目錄put -R FOLDER
cat顯示檔案內容cat FILE.txt
cd進入目錄cd FOLDER
chmod更改檔案權限chmod 644 FILE.txt
rename更改檔案名稱rename FILE.txt NEW.txt
rm移除檔案rm FILE.txt
mkdir建立目錄mkdir FOLDER
rmdir移除目錄rmdir FOLDER
pwd顯示目前路徑pwd
edit編輯檔案edit FILE.txt
page查閱檔案內容page FILE.txt
pls分頁列出檔案清單pls

以下是對本地端操作的指令。

指令說明範例
lls列出本地端檔案清單lls
lcd進入本地端目錄lcd FOLDER
lchmod更改本地端檔案權限lchmod 644 FILE.txt
lrename更改本地端檔案名稱lrename FILE.txt NEW.txt
lrm移除本地端檔案lrm FILE.txt
lmkdir建立本地端目錄lmkdir FOLDER
lmkdir移除本地端目錄lrmdir FOLDER
lpwd顯示目前本地端路徑lpwd
lpage查閱本地端檔案內容lpage FILE.txt

NcFTP 也有背景工作的功能,放入背景的工作會由另外一個 NcFTP 的 daemon 負責處理,以下是背景工作相關的指令。

指令說明範例
bgget背景下載檔案bgget FILE.txt
bgput背景上傳檔案bgput FILE.txt
bgstart開始背景工作bgstart
jobs顯示背景工作jobs

如果在下載目錄時出現這樣的錯誤訊息:

tar: This does not look like a tar archive
tar: Error exit delayed from previous errors

可以加上 -T 參數,關閉 tar 壓縮下載功能:

# 不使用 tar 壓縮下載目錄
get -TR FOLDER

快速列出 FTP 伺服器檔案

ncftpls 指令可用來快速列出 FTP 伺服器上指定路徑下的檔案,作用與用法都類似 Linux 的 ls 指令:

# 列出 FTP 伺服器上的檔案
ncftpls ftp://ftp.gnu.org/gnu/
3dldf/
8sync/
=README
=README-about-.diff-files
=README-about-.gz-files

若要顯示檔案的詳細資訊,則可加上 -l 參數:

# 列出 FTP 伺服器上的檔案詳細資訊
ncftpls -l ftp://ftp.gnu.org/gnu/
drwxr-xr-x    2 3003     3003         4096 Dec 13  2013 3dldf
drwxr-xr-x    2 3003     3003         4096 Mar 18  2017 8sync
-rw-r--r--    1 3003     65534        1492 Jan 25  2001 =README
-rw-r--r--    1 3003     65534         745 Mar 20  1997 =README-about-.diff-files
-rw-r--r--    1 3003     65534        1042 Jan 08  2000 =README-about-.gz-files

加上 -a 參數可以一併列出句點開頭的隱藏檔:

# 列出隱藏檔
ncftpls -a ftp://ftp.gnu.org/gnu/

若 FTP 伺服器需要帳號與密碼,則可使用 -u-p 來分別指定帳號與密碼:

# 指定帳號與密碼
ncftpls -u USERNAME -p PASSWORD ftp://your.site/path/

快速下載檔案

若要在 shell 之下或是指令稿之中快速下載 FTP 伺服器上的檔案,可以使用 ncftpget 指令,其作用就跟一般的 wget 非常類似:

# 下載 FTP 伺服器上的檔案
ncftpget ftp://ftp.gnu.org/gnu/w3.README

若要下載整個目錄,則加上 -R 參數:

# 下載 FTP 伺服器上的整個目錄
ncftpget -R ftp://ftp.gnu.org/gnu/which/

帳號與密碼的指定方式也都一樣:

# 指定帳號與密碼
ncftpget -u USERNAME -p PASSWORD ftp://your.site/path/file.txt

快速上傳檔案

若需要在 shell 之下或是指令稿之中快速上傳檔案至 FTP 伺服器,則可使用 ncftpput 指令:

# 上傳檔案至 FTP 伺服器
ncftpput ftp.site.com /remote/upload/ local.txt

若要上傳整個目錄,則可加上 -R 參數:

# 上傳目錄至 FTP 伺服器
ncftpput -R ftp.site.com /remote/upload/ local.txt

帳號與密碼的指定方式也都一樣:

# 指定帳號與密碼
ncftpput -u USERNAME -p PASSWORD ftp.site.com /remote/upload/ local.txt

ncftpput-c 參數可以讓它從標準輸入讀取資料上傳至 FTP 伺服器,跟其他的 Linux 指令搭配之後,可應用在很多地方,例如直接將資料壓縮備份後,上傳至 FTP 伺服器:

# 備份資料至 FTP 伺服器
tar zcf - /my/data | ncftpput -c ftp.site.com /upload/backup.tar.gz