如有違版權,通知後立即刪除
在Linux下,通常可透過scp/tar+ssh/rsync處理異機備份的動作。
本文對tar+ssh實作說明簡明,故留存之.
ssh tar 命令把遠端檔拉回來或推過去
*************************************************************
登錄22後tar 壓縮/var/log目錄輸出到標準輸入通過管道傳到本地22_log.tar.gz文件
ssh 192.168.0.22 "cd /var ;tar -zcvf -
log"|cat >22_log.tar.gz
在提取存檔檔時,會在相對位置重新創建檔。
可以使用這種方法説明同步目錄。
因為 tar 創建目錄結構的位元組流,可以通過結合使用 tar 和管道把檔從一個位置複製到另一個位置:
$ tar cf - ./etc |( cd /backup; tar xf - )。
$ tar cf - ./etc |( cd /backup; tar xf - )。
“-” 指定 tar 應該使用標準輸出(在寫時)或標準輸入(在讀時)。
圓括號讓語句在一個子 shell 中執行。
看一下管道符前面的代碼,它創建檔的位元組流並發送到標準輸出。
在管道符後面,切換到另一個目錄,然後從標準輸入提取位元組流。
要想保留檔的所有者和許可權,可以使用 p 選項保留每個檔和目錄的中繼資料:
$ tar cfp - ./etc |( cd /backup; tar xfp - )。
$ tar cfp - ./etc |( cd /backup; tar xfp - )。
掌握這種基本結構之後,就可以執行更複雜的操作。例如,可以只複製在特定時間之後修改過的檔:
$ tar cf - --newer 20090101 ./etc |(cd /backup; tar xf - )。
$ tar cf - --newer 20090101 ./etc |(cd /backup; tar xf - )。
這個命令創建在 2009 年 1 月 1 日之後修改過的檔的拷貝。
通過與 rsh 或 ssh 結合使用,還可以把檔同步到遠端主機:
$ tar cfp - ./etc |(ssh user@host -- tar xfp -)。
按照這種方式使用 ssh 和 tar 是在遠端主機上創建本地檔案備份的好方法。
但是,還有更高效的資訊同步方法。
1、在A機壓縮後,複製到B機器並解壓縮
tar -cf - /opt/dir1 | ssh 192.168.0.116
"cd /opt; tar -xf -"
2、在A機壓縮,並將壓縮檔複製到B機
tar -cf - /opt/dir1 | ssh 192.168.0.116
"cd /opt; cat - > dir1.tar"
3、將A機的壓縮檔,複製到B機並解壓縮
zcat dir.tar | ssh 192.168.0.116 "cd
/opt; tar -xf -"
傳輸到遠端:tar czf - file| ssh server "tar
zxf -"
壓縮到遠程:tar czf - file| ssh server "cat
> file.tar.gz"
解壓到遠程:ssh server "tar zxf -"
< file.tar.gz
解壓到本地:ssh server "cat
file.tar.gz" | tar zxf -
-----------------------------------------------------------------
$target 表示目的機器,指遠端機器
$backup_server 表示備份機器,同樣也是指遠端機器
$save 則是指備份目錄
要求遠端備份並拉回 local
ssh $target tar -cf - / --exclude /mnt |
bzip2 -9 | cat > $target.tar.bz2
解開本地備份並回存到遠端去
bunzip2 -dc $target.tar.bz2 | ssh $target
"cd /;tar -pxkf -"
備份 local 資料,丟到遠端去壓縮並存檔
tar cf - / --exclude xxx | ssh
$backup_server "bzip2 -9 > $save/test.tar.bz2"
把遠端資料拉回 local,作解壓縮動作
ssh $backup_server "cat
$save/test.tar.bz2" | bunzip2 | tar -xpkf -
在本地腳本放在遠端執行
cat myscript.sh | ssh kramer /bin/sh
hostname
date
w
ifconfig
ps -ef | grep http | awk '{print $NF}'
在遠端較長的管道命令(這個同樣可以用上面的腳本方式執行)
#! /bin/sh
ssh 172.16.1.2 <
sa=`/usr/sbin/alternatives --config java 2>&1`
echo "Result:"
echo "$sa"
echo
echo "Will I find anything when I look in that result for
jdk1.6.0_05 ???"
echo "$sa" | grep "jdk1.6.0_05"
echo "Nope. I thought not! But the reason should be clear
now!"
EOF
ssh技巧
遠端比較文件
ssh remote-hosts cat memos/memo.draft |
diff memos.new -
cat memos.new | ssh speedy diff -
memos/memo.draft#diff <(ssh -n george cat /etc/passwd) <(ssh -n kramer cat
/etc/passwd)
打包檔並直接傳遞到遠端目錄解開(不在本地生成檔)
tar cf - some_directory | ssh kramer
"( cd /path/to/destination; tar xf - )"
ssh 192.168.100.166 tar -cf -
/var/www/html/centos/5/repodata |cat > tt.tar
ssh 192.168.10.145 tar -czf -
'--exclude=*.gz' '--exclude=*.tgz' '--exclude=*.tar'
/a8root/phpweb/website/images
直接獲取遠端檔tar並在本地保留
ssh 192.168.100.166 "find
/var/www/html/centos/5/repodata -depth -print | cpio -oaV" | cat >
tt.cpio
沒有留言:
張貼留言