ftp

image.png

介绍

FTP:File transfer protocol 文件传输协议
端口
TCP21:命令
TCP20:数据

原理

默认采用被动模式
被动模式FTP
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被
动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)
FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)
NFS,基于主机认证,只是局域网之间文件传输
FTP,可以实现用户之间的认证
Real:本地用户 ,服务端用户
匿名用户
虚拟(游客)用户
(只需要一台服务机)

FTP状态码

1xx – 肯定的初步答复

这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。
●110 重新启动标记答复。
●120 服务已就绪,在 nnn 分钟后开始。
●125 数据连接已打开,正在开始传输。
●150 文件状态正常,准备打开数据连接。

2xx – 肯定的完成答复

一项操作已经成功完成。客户端可以执行新命令。
● 200 命令确定。
● 202 未执行命令,站点上的命令过多。
● 211 系统状态,或系统帮助答复。
● 212 目录状态。
● 213 文件状态。
● 214 帮助消息。
● 215 NAME 系统类型,其中,NAME 是 Assigned Numbers 文档中所列的正式系统名称。
● 220 服务就绪,可以执行新用户的请求。
● 221 服务关闭控制连接。如果适当,请注销。
● 225 数据连接打开,没有进行中的传输。
● 226 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。
● 227 进入被动模式 (h1,h2,h3,h4,p1,p2)。
● 230 用户已登录,继续进行。
● 250 请求的文件操作正确,已完成。
● 257 已创建“PATHNAME”。

3xx – 肯定的中间答复

该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。
● 331 用户名正确,需要密码。
● 332 需要登录帐户。
● 350 请求的文件操作正在等待进一步的信息。

4xx – 瞬态否定的完成答复

该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。
● 421 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。
● 425 无法打开数据连接。
● 426 Connection closed; transfer aborted.
● 450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。
● 451 请求的操作异常终止:正在处理本地错误。
● 452 未执行请求的操作。系统存储空间不够。

5xx – 永久性否定的完成答复

该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。
● 500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。
● 501 在参数中有语法错误。
● 502 未执行命令。
● 503 错误的命令序列。
● 504 未执行该参数的命令。
● 530 未登录。
● 532 存储文件需要帐户。
● 550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。
● 551 请求的操作异常终止:未知的页面类型。
● 552 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。
● 553 未执行请求的操作。不允许的文件名。

常见的FTP 状态代码及其原因

● 150 – FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。
● 226 – 命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。
● 230 – 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。
● 331 – 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。
● 426 – 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。
● 530 – 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。
● 550 – 命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。

配置文件

1.3 配置文件
主配置文件:
vim /etc/vsftpd/vsftpd.conf
从配置文件
vim /var/ftp/pub
主配置文件详解
anonymous_enable=YES 是否启用匿名用户
local_enable=YES
write_enable=YES 允许写入(无论是匿名用户还是本地用户要实现上传就需要快开启它)
local_umask=022 默认本地用户上传文件权限755
dirmessage_enable=YES 显示每个目录下的文件信息
xferlog_enable=YES 日志启用
connect_from_port_20=YES 主动请求的数据端口
chown_uploads=YES 所有匿名用户上传的文件所属用户将会被改成chown_username
chown_username=whoever 匿名上传的所属用户名是whoever
xferlog_file=/var/log/xferlog 启用的日志文件
xferlog_std_format=YES
idle_session_timeout=600 空闲连接超时
data_connection_timeout=120 数据连接超时
nopriv_user=ftpsecure 当服务器运行于最底层时使用的用户名
chroot_list_enable=YES chroot_local_user=YES 所有文件列出用户, 可以切换到其他目录
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO 服务将自己监听处理listen_ipv6=YES
pam_service_name=vsftpd 设置PAM认证模块使用名称预设为vsftpd
userlist_enable=YES
tcp_wrappers=YES 服务端和客户端访问控制策略(服务器级别的一种防火墙)、

2.1匿名用户
默认访问/ftp/pub
2.1.1 准备工作
1)安装vsftpd
[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# yum install vsftpd –y

2)关闭起vsftpd服务,关闭防火墙和SE linux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart vsftpd

虚拟用户配置

创建账号数据

vsftpd服务使用Berkeley DB格式的数据库文件来存放虚拟用户账号。建立这种数据库文件需要用到db_load工具,db_load工具由db4-utils软件包提供,默认已安装。
① 创建文本格式的用户名、密码列表。
奇数行:账号名,偶数行:密码(即上一行中账号的密码)
② 转化为Berkeley DB 格式的数据文件
需要db_load 转换工具,默认已安装。
l “-f”用于指定数据源文件
l “-T”表示允许非Berkeley DB的应用程序使用从文本格式转换的DB数据文件
l “-t hash”用于指定读取数据文件的基本方法
③ 为了提高虚拟用户账号文件的安全性,应将文件权限设置为600,以免数据外泄。
如下:

  1. [root@ftp ~]# vi /etc/vsftpd/users.conf
  2. zhangsan
  3. 1234
  4. zhaogao
  5. 5678
  6. [root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db
  7. [root@ftp ~]# chmod 600 /etc/vsftpd/users.*
  8. [root@ftp ~]# ls -lh /etc/vsftpd/users.*
  9. -rw-------. 1 root root 27 3 7 22:53 /etc/vsftpd/users.conf
  10. -rw-------. 1 root root 12K 3 7 22:59 /etc/vsftpd/users.db

④ 创建FTP 根目录及虚拟用户映射的系统用户(此账号无需设置密码及登录shell)。如下:

  1. [root@ftp ~]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin
  2. [root@ftp ~]# mkdir -p /home/vsftpd/xmcsxy
  3. [root@ftp ~]# chmod -R 755 /home/vsftpd

⑤ 建立支持虚拟用户的PAM认证文件
创建好虚拟用户的账号数据文件后,还需要对vsftpd服务的配置做相应的调整,以便识别并读取新的用户信息。在vsftpd服务器中,用户认证是通过PAM(Pluggable Authentication Module,可插拔认证模块)机制来实现的,该机制包含灵活的选择认证方式。Vsftpd服务默认的PAM认证文件位于/etc/pam.d/vsftpd,该文件适用于以Linux主机的系统用户账号进行认证。若要读取虚拟用户的账号数据文件,则需要创建新的PAM认证配置。
如下:

  1. [root@ftp ~]# vi /etc/pam.d/vsftpd
  2. auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
  3. account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users

2.添加虚拟用户支持

① 在vsftpd.conf 文件中添加虚拟用户支持配置。如下:

  1. [root@ftp ~]# vi /etc/vsftpd/vsftpd.conf
  2. anonymous_enable=NO #禁止匿名用户登录
  3. 增加下面配置参数:
  4. chroot_local_user=YES #禁止用户访问除主目录以外的目录
  5. guest_enable=YES #启用虚拟用户
  6. allow_writeable_chroot=YES # 允许写入用户主目录


② 为不同的虚拟用户建立独立的配置文件
通过前面的几个步骤,实际上已经可以重新加载vsftpd并提供服务了,使用任一个虚拟用户账号都可以登录FTP服务器并下载文件。但因为所有的虚拟用户都映射到同一个系统用户账号,因此FTP访问权限也是相同的,要么只能下载,要么只能上传。
若要为不同的虚拟用户账号设置不同的访问权限,可以通过为每个虚拟用户建立单独的配置文件来实现。为FTP用户启用独立配置文件,需要修改vsftpd.conf配置文件,添加“user_config_dir”配置项。如下:

  1. [root@ftp ~]# vi /etc/vsftpd/vsftpd.conf
  2. user_config_dir=/etc/vsftpd/vsftpd_user_conf #虚拟用户使用的配置文件目录

③ 有了上述配置以后,就可以在/etc/vsftpd/vsftpd_user_conf 目录中为每个虚拟用户分别建立配置文件了。如下:

  1. [root@ftp ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf
  2. [root@ftp ~]# cd /etc/vsftpd/vsftpd_user_conf/
  3. [root@ftp vsftpd_user_conf]# vi zhangsan
  4. local_root=/home/vsftpd/xmcsxy # 当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
  5. anon_upload_enable=YES # 是否允许登陆用户有上传权限。
  6. write_enable=YES # 是否允许登陆用户有写权限。

在vsftpd.conf文件中启用了“user_config_dir”配置项以后,应该为每一个虚拟用户都建立一个单独的配置文件(可以是空文件),否则该用户可能无法登录。在每个用户的独立配置文件中,可以添加新的配置项来限制访问权限、下载速率等。

重启服务并测试

重启服务生效配置文件:

  1. [root@ftp ~]# systemctl restart vsftpd
  2. [root@ftp ~]# systemctl enable vsftpd
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to
  4. /usr/lib/systemd/system/vsftpd.service.

使用虚拟FTP 账户访问测试:
zhangsan用户可以登录,并可以浏览、下载,也可以上传。
测试之前:关闭防火墙以及安全规则;

  1. [root@ftp vsftpd_user_conf]# systemctl stop firewalld
  2. [root@ftp vsftpd_user_conf]# systemctl disable firewalld
  3. Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
  4. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
  5. [root@ftp vsftpd_user_conf]# setenforce 0

先往家目录写入一个文件:

  1. [root@ftp ~]# cd /home/vsftpd/xmcsxy/
  2. [root@ftp xmcsxy]# touch a.txt

运用windows图形化FTP工具(Filezilla):

登录
image.png
上传
image.png
下载
image.png
可以通过日志查看登录是否报错:
[root@ftp ~]# tail -f /var/log/secure
访问限制黑白名单
设置ftp黑白名单:(系统账号FTP登录限制文件)
ftpusers和user_list两个文件用途和区别:
ftpusers它不受任何配置项影响,总是有效,是黑名单!
创建2个测试账号:test1和test2
[root@localhost vsftpd]# useradd test1
[root@localhost vsftpd]# useradd test2
[root@localhost vsftpd]# passwd test1
Changing password for user test1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost vsftpd]# passwd test2
Changing password for user test2.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
测试将test1加入黑名单:
[root@localhost vsftpd]# vi ftpusers

nfs

NFS服务端及客户端的部署

检查环境:

  1. [root@localhost vsftpd]# uname -a
  2. Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1
  3. SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

安装所需依赖包:

  1. [root@l ~]# yum -y install nfs-utils rpcbind

安装完后查看nfsnobody用户在不在:

  1. [root@l ~]# id nfsnobody
  2. uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

启动NFS相关服务:

启动rpc服务:

  1. [root@l ~]# systemctl start rpcbind
  2. [root@l ~]# systemctl enable rpcbind

查看rpc端口:

  1. [root@l ~]# netstat -tnulp|grep rpc
  2. tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 919rpcbind
  3. tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1176/rpc.mountd
  4. tcp 0 0 0.0.0.0:49660 0.0.0.0:* LISTEN 1159/rpc.statd
  5. tcp6 0 0 :::111 :::* LISTEN 919rpcbind

查看端口映射情况:

  1. [root@l ~]# rpcinfo -p localhost #这里nfs服务没启动,看不到nfs端口的映射情况
  2. program vers proto port service
  3. 100000 4 tcp 111 portmapper
  4. 100000 3 tcp 111 portmapper
  5. 100000 2 tcp 111 portmapper
  6. 100000 4 udp 111 portmapper
  7. 100000 3 udp 111 portmapper
  8. 100000 2 udp 111 portmapper

启动nfs服务:

  1. [rootl ~]# systemctl start nfs
  2. [root@l ~]# systemctl enable nfs

关闭防火墙及安全规则:

  1. [root@l~]# systemctl stop firewalld
  2. [root@l ~]# systemctl disable firewalld
  3. [root@l ~]# setenforce 0

过程

  1. # 基本环境准备
  2. [root@localhost ~]# hostnamectl set-hostname nfs
  3. [root@localhost ~]# bash
  4. [root@nfs ~]# systemctl stop firewalld
  5. [root@nfs ~]# systemctl disable firewalld
  6. Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
  7. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
  8. [root@nfs ~]# setenforce 0
  1. # NFS配置
  2. [root@nfs ~]# yum install -y vim net-tools
  3. [root@nfs ~]# yum install -y nfs-utils rpcbind
  4. # 确认是否有这个用户
  5. [root@nfs ~]# id nfsnobody
  6. uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
  7. # 启动服务、开机自启
  8. [root@nfs ~]# systemctl start rpcbind
  9. [root@nfs ~]# systemctl enable rpcbind
  10. [root@nfs ~]# systemctl enable nfs
  11. Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
  12. [root@nfs ~]# systemctl start nfs
  13. [root@nfs ~]# netstat -ntlp |grep rpc
  14. tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1622/rpc.mountd
  15. tcp 0 0 0.0.0.0:37267 0.0.0.0:* LISTEN 1602/rpc.statd
  16. tcp6 0 0 :::36077 :::* LISTEN 1602/rpc.statd
  17. tcp6 0 0 :::20048 :::* LISTEN 1622/rpc.mountd
  18. # 创建存放数据目录
  19. [root@nfs ~]# mkdir /data
  20. [root@nfs ~]# chown -R nfsnobody:nfsnobody /data/
  21. [root@nfs ~]# chmod 755 -R /data
  1. # 添加磁盘 分区挂载
  2. [root@nfs ~]# lsblk
  3. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  4. sda 8:0 0 40G 0 disk
  5. ├─sda1 8:1 0 1G 0 part /boot
  6. └─sda2 8:2 0 39G 0 part
  7. ├─centos-root 253:0 0 37G 0 lvm /
  8. └─centos-swap 253:1 0 2G 0 lvm [SWAP]
  9. sdb 8:16 0 20G 0 disk
  10. sr0 11:0 1 4.4G 0 rom
  11. [root@nfs ~]# fdisk /dev/sdb
  12. Welcome to fdisk (util-linux 2.23.2).
  13. Changes will remain in memory only, until you decide to write them.
  14. Be careful before using the write command.
  15. Device does not contain a recognized partition table
  16. Building a new DOS disklabel with disk identifier 0xb1ae8ff6.
  17. Command (m for help): n
  18. Partition type:
  19. p primary (0 primary, 0 extended, 4 free)
  20. e extended
  21. Select (default p):
  22. Using default response p
  23. Partition number (1-4, default 1):
  24. First sector (2048-41943039, default 2048):
  25. Using default value 2048
  26. Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
  27. Using default value 41943039
  28. Partition 1 of type Linux and of size 20 GiB is set
  29. Command (m for help): p
  30. Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
  31. Units = sectors of 1 * 512 = 512 bytes
  32. Sector size (logical/physical): 512 bytes / 512 bytes
  33. I/O size (minimum/optimal): 512 bytes / 512 bytes
  34. Disk label type: dos
  35. Disk identifier: 0xb1ae8ff6
  36. Device Boot Start End Blocks Id System
  37. /dev/sdb1 2048 41943039 20970496 83 Linux
  38. Command (m for help): w
  39. The partition table has been altered!
  40. Calling ioctl() to re-read partition table.
  41. Syncing disks.
  42. [root@nfs ~]# mkfs.ext4 /dev/sdb1
  43. mke2fs 1.42.9 (28-Dec-2013)
  44. Filesystem label=
  45. OS type: Linux
  46. Block size=4096 (log=2)
  47. Fragment size=4096 (log=2)
  48. Stride=0 blocks, Stripe width=0 blocks
  49. 1310720 inodes, 5242624 blocks
  50. 262131 blocks (5.00%) reserved for the super user
  51. First data block=0
  52. Maximum filesystem blocks=2153775104
  53. 160 block groups
  54. 32768 blocks per group, 32768 fragments per group
  55. 8192 inodes per group
  56. Superblock backups stored on blocks:
  57. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
  58. 4096000
  59. Allocating group tables: done
  60. Writing inode tables: done
  61. Creating journal (32768 blocks): done
  62. Writing superblocks and filesystem accounting information: done
  63. # 写入配置文件自动挂载
  64. [root@nfs ~]# vim /etc/fstab
  65. /dev/sdb1 /data ext4 defaults 0 0
  66. [root@nfs ~]# mount -a
  67. [root@nfs ~]# df -h
  68. Filesystem Size Used Avail Use% Mounted on
  69. /dev/mapper/centos-root 37G 1.1G 36G 3% /
  70. devtmpfs 899M 0 899M 0% /dev
  71. tmpfs 911M 0 911M 0% /dev/shm
  72. tmpfs 911M 9.5M 902M 2% /run
  73. tmpfs 911M 0 911M 0% /sys/fs/cgroup
  74. /dev/sda1 1014M 142M 873M 14% /boot
  75. tmpfs 183M 0 183M 0% /run/user/0
  76. /dev/sdb1 20G 45M 19G 1% /data
  77. # 配置nfs共享目录
  78. [root@nfs ~]# vim /etc/exports
  79. /data 192.168.200.0/24(rw,no_root_squash,async) //分配权限
  80. [root@nfs ~]# exportfs -rv
  81. exporting 192.168.200.0/24:/data
  82. #检测 nfs 共享目录创建成果
  83. [root@nfs ~]# showmount -e 192.168.200.12
  84. Export list for 192.168.200.12:
  85. /data 192.168.200.0/24
  1. # ftp节点配置
  2. [root@ftp vsftpd_conf]# yum install -y nfs-utils rpcbind
  3. #将/data 目录挂载到/home/vsftpd/xmcsxy/目录上
  4. [root@ftp vsftpd_conf]# mount -t nfs 192.168.200.12:/data /home/vsftpd/xmcsxy/
  5. [root@ftp vsftpd_conf]# cd /home/vsftpd/xmcsxy/
  6. [root@ftp xmcsxy]# mkdir yunyunwei dashujv xiaocheng
  7. [root@ftp xmcsxy]# ls
  8. dashujv lost+found xiaocheng yunyunwei
  9. # nfs编写脚本
  10. [root@nfs ~]# vim /usr/local/sbin/backup.sh
  11. a=`date '+%Y%m%d'` #定义时间
  12. b=/backup/weekbackup #定义备份目录路径
  13. c=/var/log/backup.log #定义输出日志路径
  14. pname=$(rpm -qa | grep rsync) #定义rsync安装包检查
  15. #判断rsync是否存在
  16. if [ $? -eq 0 ]
  17. then
  18. echo "软件包rsync已经安装。"
  19. else
  20. echo "软件包rsync没有安装"
  21. yum -y install rsync >> /dev/null
  22. if [ $? -eq 0 ];then
  23. echo "安装rsync完成。"
  24. else
  25. echo "安装rsync失败。"
  26. fi
  27. fi
  28. #判断备份目录是否存在,并增量备份。
  29. if [ ! -d "$b" ];then
  30. mkdir -p $b
  31. echo "$a Backup File missing!" >> /var/log/backup.log
  32. rsync -rvz /data $b/$a
  33. else
  34. rsync -rvz /data $b/$a
  35. if [ -d $b/$a ];then
  36. echo "$a Backup success." >> /var/log/backup.log
  37. find $b -mtime +14 | xargs rm -rf
  38. else
  39. echo "$a Backup failed." >> /var/log/backup.log
  40. fi
  41. fi
  42. # 执行脚本
  43. [root@nfs ~]# sh -x /usr/local/sbin/backup.sh
  44. ++ date +%Y%m%d
  45. + a=20210923
  46. + b=/backup/weekbackup
  47. + c=/var/log/backup.log
  48. ++ rpm -qa
  49. ++ grep rsync
  50. + pname=
  51. + '[' 1 -eq 0 ']'
  52. + echo 软件包rsync没有安装
  53. 软件包rsync没有安装
  54. + yum -y install rsync
  55. + '[' 0 -eq 0 ']'
  56. + echo 安装rsync完成。
  57. 安装rsync完成。
  58. + '[' '!' -d /backup/weekbackup ']'
  59. + rsync -rvz /data /backup/weekbackup/20210923
  60. sending incremental file list
  61. created directory /backup/weekbackup/20210923
  62. data/
  63. data/dashujv/
  64. data/dashujv/1.txt
  65. data/lost+found/
  66. data/xiaocheng/
  67. data/yunyunwei/
  68. sent 270 bytes received 109 bytes 758.00 bytes/sec
  69. total size is 6 speedup is 0.02
  70. + '[' -d /backup/weekbackup/20210923 ']'
  71. + echo '20210923 Backup success.'
  72. + find /backup/weekbackup -mtime +14
  73. + xargs rm -rf
  74. # 定时任务
  75. [root@nfs ~]# crontab -e
  76. * 21 */7 * * sh /usr/local/sbin/backup.sh #每7天晚上21点执行一次脚本