作為乙個運維工程師,面對的伺服器的數量可能非常多,在學會使用ansible、saltstack的同時,環境和資料的同步也是必不可少的技能。
說到"同步",就不得不說到rsync。rsync不但可以在本機進行檔案同步,還可以作為遠端同步的工具。
下面是梳理的一些常用的rsync命令
-a, --archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等價於 -rlptgod (注意不包括 -h)
-v, --verbose 詳細輸出模式
-r, --recursive 對子目錄以遞迴模式處理
-l, --links 保持軟鏈結檔案,加上這個引數,同步過來的檔案會保持之前的軟鏈結屬性不變
-h, --hard-links 保持硬鏈結檔案
-p, --perms 保持檔案許可權
-t, --times 保持檔案時間資訊
-g, --group 保持檔案屬組資訊
-o, --owner 保持檔案屬主資訊 (super-user only)
-d 保持裝置檔案和特殊檔案 (super-user only)
-e, --rsh=command 指定替代 rsh 的 shell 程式
-z, --compress 在傳輸檔案時進行壓縮處理
--stats 給出某些檔案的傳輸狀態
--progress 在傳輸時顯示傳輸過程
--timeout=time 同步過程中,ip超時時間,單位為秒
--exclude=pattern 指定同步時需要過濾掉的檔案或子目錄(即不需要同步過去的),後面直接跟不需要同步的單個檔名或子目錄(不需要跟路徑) ,過濾多個檔案或子目錄,就使用多個--exclude
--exclude-from=file 指定同步時需要過濾掉的檔案或子目錄,後面跟檔案(比如/root/exclue.txt),然後將不需要同步的檔案和子目錄放到/root/exclue.txt下
--include=pattern 指定需要傳輸的檔案匹配模式
--include-from=file 從 file 中讀取包含規則
--copy-unsafe-links 拷貝指向src路徑目錄樹以外的鏈結檔案
--safe-links 忽略指向src路徑目錄樹以外的鏈結檔案(預設)
--existing 僅僅更新那些已經存在於接收端的檔案,而不備份那些新建立的檔案
--ignore-existing 忽略那些已經存在於接收端的檔案,僅備份那些新建立的檔案
-b, --backup 當有變化時,對目標目錄中的舊版檔案進行備份
--backup-dir=dir 與 -b 結合使用,將備份的檔案存到 dir 目錄中
--link-dest=dir 當檔案未改變時基於 dir 建立硬鏈結檔案
--delete 刪除那些目標目錄中有而源目錄中沒有的多餘檔案。這個是rsync做增量方式的全備份的最佳選擇方案!!!!!
--delete-before 接受者在輸出之前進行刪除操作。即先將目標目錄中檔案全部刪除,再將源目錄檔案拷貝過去。這是rsync保持目標目錄跟源目錄一致的方案!!!
--delete-after 在同步操作之後做比較,刪除那些目標目錄中有而源目錄中沒有的多餘檔案
--delete-excluded 刪除目標目錄中那些被該選項指定排除的檔案
--ignore-errors 即使出現 i/o 錯誤也進行刪除
--partial 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸
-p 等價於 --partial --progress
--delay-updates 將正在更新的檔案先儲存到乙個臨時目錄(預設為 「.~tmp~」),待傳輸完畢再更新目標檔案
-q, --quiet 精簡輸出模式
-h, --human-readable 輸出檔案大小使用易讀的單位(如,k,m等)
-n, --dry-run 顯示哪些檔案將被傳輸
--list-only 僅僅列出檔案而不進行複製
--rsyncpath=program 指定遠端伺服器上的 rsync 命令所在路徑
--password-file=file 從 file 中讀取口令,以避免在終端上輸入口令,通常在 cron 中連線 rsync 伺服器時使用
--version 列印版本資訊
--port=port 指定其他的rsync服務埠
--log-format=format 指定日誌檔案格式
--password-file=file 從file中得到密碼
--bwlimit=kbps 限制i/o頻寬,kbytes per second
--help 顯示幫助資訊
-4, --ipv4 使用 ipv4
-6, --ipv6 使用 ipv6
rsync -vlzrtogp /test /backups
rsync -vlzrtogp /test/ /backups
注意:在指定複製源時,路徑是否有最後的 「/」 有不同的含義,例如:
/test表示將整個/test目錄複製到目標目錄
/test/表示將test目錄中的所以內容複製到目標目錄
1.rsync在遠端同步的時候,要求目標目錄要和源目錄保持同步,目標目錄中多餘的檔案都要刪除,這就需要用到了引數–delete
先做好ssh的免密登入,以方便rsync的同步
/usr/bin/rsync -vlzrtogp --progress --delete /test/ [email protected]:/backups
2.rsync遠端拷貝的時候,過濾某些某個檔案或多個檔案就用「–exclude 檔名」,要是過濾多個檔案或子目錄,就把過濾的檔案或目錄名的關鍵字放在乙個檔案裡,如下的exclude.txt檔案,然後使用–exclude-from exclude.txt檔案進行過濾
1)排除單獨的資料夾和檔案
比如要排除static資料夾,我們可以新增 '--exclude' 選項:
--exclude 'static'
命令是這樣的:
[dev@rsync-1 ~]# rsync -e 'ssh -p 22' -vlzrtogp --delete --stats --progress --exclude 'static' /home/dev/test/ [email protected]:/home/dev/backups
比如要排除 "datacenter" 資料夾下的 "data.txt" 檔案:
--exclude 'datacenter/data.txt'
命令是這樣的:
[dev@rsync-1 ~]# rsync -e 'ssh -p 22' -vlzrtogp --delete --stats --progress --exclude 'static' --exclude 'datacenter/data.txt' /home/dev/test/ [email protected]:/home/dev/backups
比如排除掉同步目錄中的類似*-prod.properties檔案(比如global-prod.properties等)
命令是這樣的:
2)使用 『–exclude-from』 排除多個資料夾和檔案
建立檔案:
[dev@rsync-1 ~]# touch /home/dev/exclude.txt
在裡面定義要排除的資料夾和檔案
[dev@rsync-1 ~]# vim /home/dev/exclude.txt
static
datacenter/data.txt
downloads/test/*
使用指令:
--exclude-from '/home/dev/exclude.txt'
最後的命令如下:
[dev@rsync-1 ~]# rsync -e 'ssh -p 22' -vlzrtogp --delete --stats --progress --exclude-from '/home/dev/exclude.txt' /home/dev/test/ [email protected]:/home/dev/backups
3)rsync同步時候的限流操作
rsync -vlzrtogp --progress --delete --bwlimit=1000 遠端檔案 本地檔案 //限制為1000kbytes/s
rsync -vlzrtogp --progress --delete --bwlimit=2048 本地檔案 遠端檔案 //限制為2m/s
參考文章: git常用命令梳理 md
git 四種狀態 從已經有的倉庫轉殖 git clone 檢查當前檔案狀態 git status 這是個多功能命令,根據目標檔案的狀態不同,此命令的效果也不同 可以用它開始跟蹤新檔案,或者把已跟蹤的檔案放到暫存區,還能用於合併時把有衝突的檔案標記為已解決狀態等 git add 忽略某些檔案 可以建立...
git的常用命令梳理
配置自己的資訊 git config global user.name chenxu git config global user.email 603994366 qq.com 設定git的工作空間 mkdir code cd code git init 新增到快取區 git add index.t...
docker常用命令 Docker 常用命令筆錄
格式docker run 選項 映象 命令 引數.示例docker run it rm ubuntu 16.04 bash 示例解釋 it 這是兩個引數,乙個是 i,表示互動式操作,乙個是 t表示終端 rm 這個引數是說容器退出後隨之將其刪除 ubuntu 16.04 這是指用ubuntu 16.0...