日常运维工作中,不可避免的需要在主机之间进行文件的复制和传输。笔者为了使用方便简单的总结了一下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 root@10.210.170.199:/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:password@22.11.33.195/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 xkun@172.16.21.1::web /web.net \
    --password-file=/etc/client.pass

以上就是笔者最近工作中经常使用的文件复制和同步命令。错误地方,欢迎大家吐槽~~