linux檔案互傳scp/rsync/xsync分發指令碼
阿新 • • 發佈:2021-01-27
技術標籤:linux與伺服器
一般性的檔案使用MobaXterm軟體直接拖拽即可,而伺服器沒有介面等問題可以採用命令的方式傳輸
本文的內容是在叢集中比較常用,由其是叢集同步
文章目錄
\1. scp(secure copy)安全拷貝
scp,linux命令,可以實現伺服器與伺服器之間的資料拷貝。(from server1 to server2)
語法:把本伺服器的檔案傳到其他伺服器中
scp -r 原始檔 目標檔案
scp -r $pdir/$fname [email protected]$host:$pdir/$fname
scp -r /opt/module [email protected]:/opt/module
- r:代表遞迴
- 原始檔/目標檔案:格式如下
使用者@主機名:目錄/檔案
- user要用對應目錄的寫許可權
使用:
#(a)在hadoop101上,將hadoop101中/opt/module目錄下的軟體拷貝到hadoop102上。
[[email protected] /]$ scp -r /opt/module [email protected]:/opt/module
#(b)在hadoop103上,將hadoop101伺服器上的/opt/module目錄下的軟體拷貝到hadoop103上。
[ [email protected] opt]$sudo scp -r [email protected]:/opt/module [email protected]:/opt/module
#(c)在hadoop103上操作將hadoop101中/opt/module目錄下的軟體拷貝到hadoop104上。
[[email protected] opt]$ scp -r [email protected]:/opt/module [email protected]:/opt/module
注意:拷貝過來的/opt/module目錄,別忘了在hadoop102、hadoop103、hadoop104上修改所有檔案的,所有者和所有者組。sudo chown atguigu:atguigu -R /opt/module
#(d)將hadoop101中/etc/profile檔案拷貝到hadoop102的/etc/profile上。
[ [email protected] ~]$ sudo scp /etc/profile [email protected]:/etc/profile
#(e)將hadoop101中/etc/profile檔案拷貝到hadoop103的/etc/profile上。
[[email protected] ~]$ sudo scp /etc/profile [email protected]:/etc/profile
#(f)將hadoop101中/etc/profile檔案拷貝到hadoop104的/etc/profile上。
[[email protected] ~]$ sudo scp /etc/profile [email protected]:/etc/profile
注意:拷貝過來的配置檔案別忘了source一下/etc/profile,。
\2. rsync 遠端同步工具
rsync主要用於備份和映象。具有速度快、避免複製相同內容和支援符號連結的優點。
rsync和scp區別:用rsync做檔案的複製要比scp的速度快,rsync只對差異檔案做更新。scp是把所有檔案都複製過去。
語法:
rsync -rvl $pdir/$fname [email protected]$host:$pdir/$fname
說明:
rsync -選項 源 目的
#把hadoop101機器上的/opt/software目錄同步到hadoop102伺服器的root使用者下的/opt/目錄
[[email protected] opt]$ rsync -rvl /opt/software/ [email protected]:/opt/software
- 選項:r:遞迴。v:顯示覆制過程。l:拷貝符號連結
- 路徑格式與scp相同:目的使用者@主機:目的路徑/名稱
\3. xsync叢集分發指令碼
(1)需求:迴圈複製檔案到所有節點的相同目錄下。
說明:在/home/atguigu/bin這個目錄下
(3)指令碼實現
#(a)在/home/atguigu目錄下建立bin目錄,這個目錄下存放的指令碼,atguigu使用者可以在系統任何地方直接執行。並在bin目錄下xsync建立檔案,檔案內容如下:
[[email protected] ~]$ mkdir bin
[[email protected] ~]$ cd bin/
[[email protected] bin]$ touch xsync
[[email protected] bin]$ vi xsync
#!/bin/bash
# \`代表執行命令;$#代表取引數個數 $1代表取第一個引數 $p代表取變數內容
echo ======args==================
#1 獲取輸入引數個數,如果沒有引數,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 獲取檔名稱
p1=$1
fname=`basename $p1`
echo filename=$fname
#3 獲取上級目錄的絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 獲取當前使用者名稱稱
user=`whoami`
echo ------start------------------------------
#5 迴圈
for((host=1; host<4; host++)); do
echo --------------== hadoop$host ==------------------
rsync -rvl $pdir/$fname [email protected]$host:$pdir
# 複製輸入的檔名稱 到 目標主機的同級目錄下
done
echo ------over...----------------------------
#檔案修改結束
#(b)修改指令碼 xsync 具有執行許可權
[[email protected] bin]$ chmod 777 xsync
#(c)呼叫指令碼形式:xsync 檔名稱
[[email protected] bin]$ xsync /home/atguigu/bin
# 作用:將/home/atguigu/bin
注意:如果將xsync放到/home/atguigu/bin目錄下仍然不能實現全域性使用,可以將xsync移動到/usr/local/bin目錄下。