日常運維工作中,不可避免的需要在主機之間進行文件的複製和傳輸。筆者爲了使用方便簡單的總結了一下linux下常用的文件複製和獲取的命令。
1.主機內文件複製命令cp
cp ( copy files and directories )
cp [OPTION] SOURCE DEST
-a | 以存檔的模式保存原有文件的所有屬性信息 |
-p | 保存原有文件的權限及時間 |
-r | 遞歸的複製目錄內中的所有文件 |
mv ( move or rename files )
總結:
1.目標文件不存在:複製並重命名
2.存在爲文件,則覆蓋(有提醒)
3.存在爲目錄,則將文件複製到指定的目錄中
擴展:
which mv | 查詢命令的絕對路徑 |
rpm -qf /bin/mv | 查詢命令的安裝包 |
rpm -qi coreutils | 查詢軟件包的詳細信息 |
2.主機間文件複製命令scp
主機間常用的文件複製命令爲scp,其主機間認證的原理是基於ssh協議完成的。
scp ( secure copy -- remote file copy program )
scp [OPTION] [user]@host:file DEST
-F ssh_config | 指定登錄讀取的配置文件 |
-l limit | 設置速度限制,單位是Kbit/s |
-P port | 指定ssh端口 |
-p | 保留相關屬性 |
-r | 遞歸複製目錄 |
示例如下:
$ scp -l 1000 -P 36000 [email protected]:/jetty/webapps/test.war /home/redhat test.war 100% 2231KB 131.2KB/s 00:17
3.遠程數據獲取命令wget
1.簡單介紹:
1.支持斷點續傳、適用於網絡不太穩定的環境
2.支持FTP/HTTP/HTTPS等協議方式下載
3.支持代理服務器下載
4.設置方便,基於命令行,完全免費
5.通過網絡備份,不支持增量備份。每次都需要將數據重新在網絡上進行傳輸。
2.基本語法:
wget [OPTIONS] URL
-x | 強制在本地建立與服務器上一樣的目錄 |
-r | 按照遞歸的方法下載服務器上所有的目錄與文件 |
-m | 製作鏡像站點 |
-c | 使文件下載時支持斷點續傳 -t 0 設置重試次數 -w 30 設置重試時間,單位s |
-i | 下載多個文件,後面跟上文件名,文件中按行列出ur |
-m | --reject=gif 表示忽略gif文件 --accept=LIST 表示接受該文件 |
--http-user=USER --http-passwd=PAS | |
-N | 不要下載已經存在的文件 |
3.簡單示例:
# wget -c -t 2 -w 30 ftp://username:[email protected]/aa.txt # wget -N http://xxx.com/data/aa.txt -o cc.txt -a dd.log &
4.文件同步命令rsync
rsync( a fast , versatile , remote (and local) file-copying tool )
1.特點
1.可以鏡像完整的目錄樹和文件系統。可以鏡像到本地,可以在網絡中進行數據備份。
2.中斷之後可以恢復傳輸,並且易保持文件原有權限。
3.使用"rsync演算法"只傳送源文件和目標文件之間不一致的部分。
4.可執行完整備份和增量備份
5.加密數據傳輸
6.可以基於SSH,rcp等方式也可以直接通過socket連接傳輸文件。
2.簡單安裝
# tar xf rsync-3.0.4.tar.gz
# cd rsync-3.0.4
# .configure
# make && make install
3.工作模式
1.本地shell模式(shell應用模式)
# rsync -av /etc/pam.d /tmp/pam/
# rsync -av /etc/pam.d/ /tmp/pam/
2.遠程shell模式,其利用SSH執行底層連接和傳輸加密;
# rsync -av /etc/pam.d/ 192.168.21.2:test
3.列表模式,其工作方式與ls相似,即列出源的內容;-nv
# rsync -a 192.168.21.2:test
# rsync -a /etc/pam.d/
4.服務器模式
rsync以守護進程方式運行,接收文件傳輸請求。在使用時,可以使用rsync命令把文件發送給守護進程,也可以向它請求文件。服務器模式非常適合創建中心備份服務器或項目存儲庫。
注意:
1.遠程shell模式和服務器模式的差異在於,後者在源和目標名中使用兩個冒號 (:)
rsync -rl /www/htdocs HOST:/www
rsync -rl /www/htdocs HOST::htdocs
2.rsync命令使用中,如果源參數的末尾有斜槓,就會複製指定目錄的內容,而不復制目錄本身。目標參數末尾的斜槓沒有作用。
如下面的命令會把/mydata/data目錄中的所有文件複製到/backups目錄中:
rsync /mydata/data/ /backups/
4.常用選項
-a | 以歸檔模式傳輸 |
-v | 顯示詳細信息 |
-z | 傳輸過程對數據進行壓縮 |
-n | 試運行,會預覽每個文件操作 |
--progress | 顯示進度條 |
--bwlimit | 設置傳輸速率 |
5.企業案例:利用RSYNC搭建遠程容災備份系統
5.1.server
1.添加如下配置文件
# vim /etc/rsyncd.conf # Section 1: Global settings uid = nobody gid = nobody use chroot = no max connections = 5 #限制模塊最大併發連接數,默認值爲0即無限制 strict modes = yes #設置是否檢查口令文件的權限,yes則要求密碼文件權限爲root權限 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log # Section 2:Directory to be synced [web] #定義一個模塊的開始(模塊名稱) path = /www/web ignore errors = yes read only = no #客戶端可以上傳文件 write only = no #客戶端可以下載文件 hosts allow = 172.16.0.0/16 hosts deny = * list = false #是否列出客戶請求時的模塊列表。默認爲ture (這裏設置隱藏模塊) uid = root gid = root auth users = xkun #設置用於連接的用戶名,多個之間通過空格和逗號隔開 secrets file = /etc/server.pass
2.添加密碼配置文件
# vim /etc/server.pass xkun:redhat # chmod 600 /etc/server.pass
3.查看相關幫助信息
# man rsyncd.conf
4.啓動守護進程
# /usr/local/bin/rsync --daemon # ps -ef | grep rsync
5.2.client
備份機上不用做任何設置,只需同步即可。
# vim /etc/client.pass redhat # chmod 600 /etc/client.pass # /usr/local/bin/rsync -avz --progress --delete [email protected]::web /web.net \ --password-file=/etc/client.pass
以上就是筆者最近工作中經常使用的文件複製和同步命令。錯誤地方,歡迎大家吐槽~~