1. 程式人生 > 其它 >linux檔案互傳scp/rsync/xsync分發指令碼

linux檔案互傳scp/rsync/xsync分發指令碼

技術標籤: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目錄下。