近幾日在協(xié)調(diào)一個類似商品微店的項目淋淀,客戶需求還沒來得及了解,項目的前端與后端分別是兩個開發(fā)組并行推進(jìn)覆醇,現(xiàn)在前后端工作進(jìn)入尾期需要合并測試朵纷,而我在其中扮演中間人的角色。
這篇筆記算是在 Mac 環(huán)境里基于 FTP 協(xié)議操作本地永脓、服務(wù)器文件系統(tǒng)的一套完整解決方案袍辞,整理下來以備日后再用。
FTP 是File Transfer Protocol(文件傳輸協(xié)議)的英文簡稱常摧,而中文簡稱為“文傳協(xié)議”搅吁。
TCP/IP 協(xié)議中,F(xiàn)TP 標(biāo)準(zhǔn)命令 TCP端口號為 21落午,Port方式數(shù)據(jù)端口為 20谎懦。
FTP的任務(wù)是從一臺計算機(jī)將文件傳送到另一臺計算機(jī),不受操作系統(tǒng)的限制溃斋。
初階: Finder 查看/下載
Mac 環(huán)境中的文件系統(tǒng)原生支持連接 FTP 服務(wù)器查看文件目錄界拦,但功能十分有限,僅支持查看梗劫、下載 FTP 服務(wù)器中的文件[夾]寞奸,不支持上傳、編輯在跳、刪除文件[夾]枪萄,滿足了查閱目錄結(jié)構(gòu)、文件配置等最基本的需求猫妙。
要把前端同事的網(wǎng)頁批量上傳至 FTP 服務(wù)器割坠,這時就可以使用 FTP 命令行勞心了齐帚。
進(jìn)階:FTP 命令
1. 登錄
命令行中最簡單的兩種登錄方式,首次登錄使用方式一
比較簡單彼哼,連接超時可以再使用方式二
重新登錄对妄,兩種登錄方式算是配合或組合關(guān)系。
# 方式一
$ ftp server-ip
# 方式二
$ ftp
ftp> open server-ip
實例登錄場景效果:
$ ftp 139.196.161.141
Connected to 139.196.161.141.
220-FileZilla Server 0.9.53 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
Name (139.196.161.141:lijunjie): username
331 Password required for username
Password:
230 Logged on
Remote system type is UNIX.
ftp>
// wait a long time
ftp> ls
421 Connection timed out.
ftp> open 139.196.161.141
Connected to 139.196.161.141.
220-FileZilla Server 0.9.53 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
Name (139.196.161.141:lijunjie): username
331 Password required for username
Password:
230 Logged on
Remote system type is UNIX.
ftp>
登錄成功后敢朱,就會進(jìn)入 FTP 命令行環(huán)境剪菱,此時如何分辨本地與服務(wù)器的目錄呢摩瞎?此時的視角猶如四游記中一直在天空中隱身保護(hù)唐僧的五方揭諦四值功曹,上觀天堂神仙歡樂事孝常、下覽人間凡體苦難狀旗们;此時不能說查看目錄,而應(yīng)該說查看本地目錄或服務(wù)器目錄构灸,與文件系統(tǒng)相關(guān)的命令操作都分本地與服務(wù)器兩套上渴。
服務(wù)器操作 | 本地目錄操作 |
---|---|
cd 目錄名(進(jìn)入服務(wù)器目錄) | lcd 目錄名(進(jìn)入本機(jī)目錄) |
cd \(退到服務(wù)器根目錄) | lcd \(退到本機(jī)根目錄) |
cd ..(退回到上一級目錄) | lcd ..(退回到上一級目錄) |
pwd | !pwd |
ls | !ls |
**2. 上傳文件[夾] **
上傳本地文件至服務(wù)器指定目錄中,必須顯式指定上傳至服務(wù)器后文件名稱喜颁。
# server-filename 必須顯式指明稠氮,否則報錯:文件名無效
ftp> put /local/path/filename /remote/path/server-filename
ftp> cd /views
250 CWD successful. "/views" is current directory.
ftp> put /local/path/report_161226.cshtml report2.cshtml
local: /local/path/report_161226.cshtml remote: report2.cshtml
229 Entering Extended Passive Mode (|||56835|)
150 Opening data channel for file upload to server of “/views/report2.cshtml"
100% |*| 10865 2.87 MiB/s --:-- ETA
226 Successfully transferred “/views/report2.cshtml"
10865 bytes sent in 00:00 (85.37 KiB/s)
使用通匹符批量上傳文件至服務(wù)器,需要注意的一點半开,mput
不支持懶操作即使用絕對路徑括袒,應(yīng)該先進(jìn)入要上傳的本地文件夾及遠(yuǎn)程文件夾才可以操作,確實這樣顯得上傳操作異常簡潔稿茉。
ftp> cd /remote/path
ftp> lcd /local/path
ftp> mput goods*
local: goods.cshtml remote: goods.cshtml
229 Entering Extended Passive Mode (|||62331|)
150 Opening data channel for file upload to server of "/local/path/goods.cshtml"
100% |*| 519 1.80 MiB/s --:-- ETA
226 Successfully transferred "/local/path/goods.cshtml"
519 bytes sent in 00:00 (9.54 KiB/s)
關(guān)于上傳文件夾锹锰, FTP 命令不支持文件夾上傳操作。
3. 下載文件[夾]
下載服務(wù)器中的文件至本地目錄中漓库,可選指定下載至本地目錄后的文件名稱恃慧,依然要求提前進(jìn)入待下載文件的目錄中。
# 方式一
ftp> get remote-filename
# 方式二
ftp> get remote-filename local-filename
ftp> get Web.config
local: Web.config remote: Web.config
229 Entering Extended Passive Mode (|||58735|)
150 Opening data channel for file download from server of "/Web.config"
100% |*| 1300 2.28 MiB/s 00:00 ETA
226 Successfully transferred "/Web.config"
1300 bytes received in 00:00 (142.33 KiB/s)
ftp> get Web.config hello.config
local: hello.config remote: Web.config
229 Entering Extended Passive Mode (|||53446|)
150 Opening data channel for file download from server of "/Web.config"
100% |*| 1300 2.55 MiB/s 00:00 ETA
226 Successfully transferred "/Web.config"
1300 bytes received in 00:00 (143.20 KiB/s)
使用通匹符批量下載服務(wù)器中的文件至本地目錄渺蒿。
ftp> cd /remote/path
ftp> mget filename*
關(guān)于下載文件夾痢士, FTP 命令不支持文件夾下載操作。
4. 刪除文件[夾]
在服務(wù)器中刪除文件茂装,可以指定絕對路徑怠蹂,相對其他命令顯得比較靈活。
ftp> delete /remote/path/category.cshtml
250 File deleted successfully
ftp> mdelete *_order*
mdelete goods_order.cshtml [anpqy?]? a
Prompting off for duration of mdelete.
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
250 File deleted successfully
關(guān)于刪除文件夾少态, FTP 命令不支持文件夾刪除操作城侧。
5. 移動文件
FTP 命令不支持移動文件,只能通過刪除再上傳文件變相的實現(xiàn)移動文件彼妻。
6. 增刪改查
操作 | 單文件 | 批量操作(multi) |
---|---|---|
增 | put | mput |
刪 | delete | mdelete |
改 | 不支持 | 不支持 |
查 | get | mget |
7. FileZilla 工具
涉及到服務(wù)器端文件夾的修改嫌佑、刪除等操作時,就需要安裝一下 FileZilla 工具侨歉;使用 FTP 命令登錄后的提示內(nèi)容中可以看到 FileZilla 字樣屋摇。
FileZilla 工具界面很簡單,全程使用鼠標(biāo)拖拖拉拉即可完成操作幽邓。
高階:腳本操作
其實沒有很復(fù)雜的場景炮温,把前端的靜態(tài)資源使用 FileZilla 工具一次性上傳至服務(wù)器,按照后端同事的要求把不同功能需求的網(wǎng)頁上傳至服務(wù)器不同目錄下牵舵,這種批量重復(fù)性的無聊操作最佳解決方案就是寫入腳本柒啤,省時倦挂、準(zhǔn)確、周全白修,后續(xù)前端同事調(diào)整網(wǎng)頁內(nèi)容時妒峦,調(diào)用一下腳本即可重斑。
$ cat commands.txt
open remote-server-ip
user user-name user-password
binary /*以二進(jìn)制傳送*/
hash /*當(dāng)有數(shù)據(jù)傳送時兵睛,顯示#號*/
cd /remote/path1
lcd /local/path2
mput file1.*
cd /remote/path2
!cd /local/path2
mput file2.*
bye /*退出*/
$ cat commands.txt | ftp -n
不喜歡 bash 腳本中的 EOF 用法,感覺代碼思路不夠清晰窥浪,但需要使用變量時祖很,就不得不使用這種寫法了。
$ commands.sh
#!/usr/bin/env bash
timestamp=$(date "+%Y%m%d")
# mkdir -p ${timestamp} && touch ${timestamp}/hello.txt
cat <<EOF | ftp -n
open 139.196.161.141
user junjie junjie
binary
hash
!ls ${timestamp}/
bye
EOF
sed 批量修改文件
后端同事部署的測試環(huán)境中漾脂,前端同事的頁面對靜態(tài)資源的引用需要調(diào)整一下假颇,有章可循,也就是一條 sed
命令回車間可以解決的骨稿。
# 方式一:無備份
$ sed -i '' 's/wait-replace/to-replace/g' filename
# 方式二:備份
$ sed -i '.bak' 's/wait-replace/to-replace/g' filename
$ cat filename // 確認(rèn)修改無誤
$ rm *.bak // 刪除備份
# ./resource 替換為 /mobile/resource
$ sed -i '.bak' 's/\.\/resource/\/mobile\/resource/g' project/*.html
$ rm project/*.html.bak