今天有一个需求是需要把一台linux服务器的东西拷贝到另一台服务器中去。要求原封不动的拷贝。
首先解决这个问题有两个方法一个是用RSYNC来做,使用方法如下:
http://blog.csdn.net/ak_2005/article/details/3768552
但是我刚刚接触linux不想用这么复杂的方法,而且现实的需求也不需要完全原封不动的拷贝,并且要拷贝的内容也不多。
所以尝试写了一个脚本来解决问题,这个脚本如下
#!/bin/bash
DIR="/root/"
TARGET_IP="......"
FILELIST=`ls ${DIR}`
cd ${DIR}
echo "start"
for filename in $FILELIST
do
echo "$filename root@${TARGET_IP}:${DIR}${filename}"
scp $filename root@${TARGET_IP}:${DIR}${filename}
echo "${filename} done"
done
在这个过程当中走了不少弯路,现在记录一下,
1脚本的第一行是指执行这个脚本的一个执行器,在/bin/下面有一个可执行的bash文件。
2变量声明,变量声明一般用大写和下划线,而且等号两边不能有空格,否则会被解释为命令。
3如果要执行一个命令并且接受结果可以用``这个符号,注意不是单引号。
4 for in do...done
5 脚本的cd命令会执行,但是在执行完脚本后会切换回去。这个可能是因为cd是在子进程中执行的。
6 这个脚本不支持文件夹拷贝,而且需要每次输入密码,这里有2个密码的解决方案
一个是expect的:http://linux.chinaitlab.com/SHELL/870042.html
一个是用公钥建立信任的:http://wenku.baidu.com/view/c83d3234eefdc8d376ee321c.html
脚本写好后没有执行权限,权限分为三种r read, w write, x execute可用ls -l看到
其中第一个字母表示文件类型,后面的3组权限分别是针对use(拥有者), group, other的。
可以用chmod u+x [filename]为拥有者增加执行权限,chmod 777 [filename]则为增加全部权限,因为777的二进制是111 111 111,代表所有权限为true。