Linux 运维实战笔记(三):双机免密登录、网络配置与时间管理

课前复习

昨天课堂内容:

  1. 配置秘钥登录
  2. Openssh 服务加固
  3. 日志(rsyslog+journal)
  4. CentOS 系统配置

课前思考:

  1. 概述配置windows通过秘钥登录Linux服务器过程
    - 生成密钥对
    - 放入到对方家目录文件
    - 验证
  2. Openssh 服务加固从哪几方面着手?
    - root 用户使用秘钥登录
    - 禁用密码认证
    - 设置允许指定用户/禁用指定用户
    - 设置允许指定用户组/禁用指定用户组
    - 修改端口号
    - 启用 SELinux
  3. sshd 服务重启失败,如何通过日志排故?
    - 查看服务状态 systemctl status sshd
    - 在状态日志中查找对应信息
    - 查看 tail -f /var/log/messages,新开窗口执行 systemctl restart sshd

今天课堂内容:

  1. 时间设置
  2. 网络管理
  3. 系统间复制文档
  4. 周期性计划作业

补充

Linux 服务器之间秘钥登录

环境准备

准备两台服务器server1和server2

10.1.8.11 server1.laoma.cloud server1
10.1.8.12 server2.laoma.cloud server2
配置 server1
# 设置主机名
[root@server1 ~ 09:23:07]# hostnamectl set-hostname server1.laoma.cloud

# 修改 IP 地址
[root@server1 ~ 09:23:07]# cd /etc/sysconfig/network-scripts/
[root@server1 network-scripts 09:24:52]# vim ifcfg-ens33 
# 修改IP地址为 10.1.8.11
IPADDR=10.1.8.11

# 重新加载配置文件
[root@server1 network-scripts 09:24:52]# nmcli connection reload
# 激活配置
[root@server1 network-scripts 09:24:52]# nmcli connection up ens33 
# 配置名称解析
[root@server2 ~ 09:42:48]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# 最后追加解析记录
10.1.8.11 server1.tz.cloud server1
10.1.8.12 server2.tz.cloud server2
配置 server2
# 设置主机名
[root@server2 ~ 09:23:07]# hostnamectl set-hostname server2.laoma.cloud

# 修改 IP 地址
[root@server2 ~ 09:23:07]# cd /etc/sysconfig/network-scripts/
[root@server2 network-scripts 09:24:52]# vim ifcfg-ens33 
# 修改IP地址为 10.1.8.12
IPADDR=10.1.8.12

# 重新加载配置文件
[root@server2 network-scripts 09:24:52]# nmcli connection reload
# 激活配置
[root@server2 network-scripts 09:24:52]# nmcli connection up ens33 
# 配置名称解析
[root@server2 ~ 09:42:48]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# 最后追加解析记录
10.1.8.11 server1.tz.cloud server1
10.1.8.12 server2.tz.cloud server2
验证

在这里插入图片描述

在这里插入图片描述

配置过程

配置server1秘钥登录server2

# 1. 生成密钥对
[root@server1 ~ 10:48:43]# ssh-keygen
Generating public/private rsa key pair.
# 私钥保存位置
Enter file in which to save the key (/root/.ssh/id_rsa): 
# 私钥密码为空
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:HkmQBD3OuN2osqgFosgNi0v1KU02a+9YGSSePFmQtoU root@server1.tz.cloud
The key's randomart image is:
+---[RSA 2048]----+
|    .==.         |
|     E=o         |
|    .=o+.        |
|    +.O. .       |
|o. . % +S        |
|*.= * B.+.       |
|++.o B o.        |
|.+. + +          |
|= .o ..o         |
+----[SHA256]-----+

[root@server1 ~ 11:09:49]# ls .ssh/id_rsa*
.ssh/id_rsa  .ssh/id_rsa.pub

# 删除之前生成的文件
[root@server1 ~ 11:10:33]# rm -fr .ssh/id_rsa*

# 也可以使用以下命令,非交互方式生成
[root@server1 ~ 11:10:57]# ssh-keygen -N '' -f .ssh/id_rsa
# -f 私钥存储位置
# -N 指定秘钥为空

# 2. 推送到目标服务器
[root@server1 ~ 11:13:28]# ssh-copy-id root@server2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@server2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@server2'"
and check to make sure that only the key(s) you wanted were added.


# 3. 验证
[root@server1 ~ 11:14:25]# ssh root@server2 id
uid=0(root) gid=0(root)=0(root)
[root@server1 ~ 11:14:48]# ssh root@server2 hostname
server2.tz.cloud

时间设置

常见管理命令

date 命令

[root@server1 ~ 11:20:43]# date
2026年 04月 08日 星期三 11:39:10 CST
[root@server1 ~ 11:39:10]# echo $LANG
zh_CN.UTF-8

# 设置时间显示格式
[root@server1 ~ 11:39:34]# LANG=en_US.UTF-8
[root@server1 ~ 11:40:30]# date
Wed Apr  8 11:40:34 CST 2026

# 设置时间
[root@server1 ~ 11:41:09]# date -s 'Tue Apr 1  10:41:27 CST 2026'
2026年 04月 01日 星期三 10:41:27 CST

tzselect 命令

查看时区对应代码。

[root@server1 ~ 10:41:57]# tzselect 
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
# 选择 5) Asia
#? 5
Please select a country.
 1) Afghanistan       18) Israel            35) Palestine
 2) Armenia       19) Japan         36) Philippines
 3) Azerbaijan        20) Jordan            37) Qatar
 4) Bahrain       21) Kazakhstan        38) Russia
 5) Bangladesh        22) Korea (North)     39) Saudi Arabia
 6) Bhutan        23) Korea (South)     40) Singapore
 7) Brunei        24) Kuwait            41) Sri Lanka
 8) Cambodia          25) Kyrgyzstan        42) Syria
 9) China         26) Laos          43) Taiwan
10) Cyprus        27) Lebanon           44) Tajikistan
11) East Timor        28) Macau         45) Thailand
12) Georgia       29) Malaysia          46) Turkmenistan
13) Hong Kong         30) Mongolia          47) United Arab Emirates
14) India         31) Myanmar (Burma)       48) Uzbekistan
15) Indonesia         32) Nepal         49) Vietnam
16) Iran          33) Oman          50) Yemen
17) Iraq          34) Pakistan
# 选择 9) China  
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
# 选择 2) Xinjiang Time
#? 2

The following information has been given:

    China
    Xinjiang Time

Therefore TZ='Asia/Urumqi' will be used.
Local time is now:      Wed Apr  1 08:44:13 +06 2026.
Universal Time is now:  Wed Apr  1 02:44:13 UTC 2026.
Is the above information OK?
1) Yes
2) No
# 选择 1) Yes
#? 1

You can make this change permanent for yourself by appending the line
    TZ='Asia/Urumqi'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /bin/tzselect command in shell scripts:
Asia/Urumqi
# 结果显示对应的时区代码是 Asia/Urumqi

通过变量设置时区

# 设置时区为东6区
[root@server1 ~ 10:45:11]# TZ='Asia/Urumqi'; export TZ
[root@server1 ~ 08:45:18]# date
2026年 04月 01日 星期三 08:45:24 +06

# 设置时区为东8区
[root@server1 ~ 08:45:24]# TZ='Asia/Shanghai'; export TZ
[root@server1 ~ 10:45:43]# date
2026年 04月 01日 星期三 10:45:48 CST

自动对时

chrony 软件。

# 安装软件
[root@server1 ~ 10:45:48]# yum install -y chrony

# 设置与哪个服务器对时
[root@server1 ~ 10:47:52]# vim /etc/chrony.conf
# 将原先server开头的行注释掉,并新增一行
# 设置与aliyun对时
server ntp.aliyun.com iburst

# 启动服务
[root@server1 ~ 10:53:50]# systemctl start chronyd
# 验证时间准确性
[root@server1 ~ 10:53:54]# date
2026年 04月 07日 星期二 10:55:01 CST

# 查看与哪个服务器对时
[root@server1 ~ 10:55:01]# chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 203.107.6.88                  2   6    17    26   +107us[ +465us] +/-   17ms
# 带* 开头的是对时的服务器

网络管理

网络查看

[root@server1 ~ 10:55:18]# ip -br addr
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fecc:2745/64 
# -br brief 简洁

# 查看特定网卡IP地址
[root@server1 ~ 11:20:45]# ip -br addr show ens33
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fecc:2745/64 

# 查看MAC地址
[root@server1 ~ 11:20:55]# ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
ens33            UP             00:0c:29:cc:27:45 <BROADCAST,MULTICAST,UP,LOWER_UP> 
[root@server1 ~ 11:21:09]# ip -br link show ens33
ens33            UP             00:0c:29:cc:27:45 <BROADCAST,MULTICAST,UP,LOWER_UP> 

# 查看网关
[root@server1 ~ 11:21:15]# ip route
default via 10.1.8.2 dev ens33 proto static metric 100 
10.1.8.0/24 dev ens33 proto kernel scope link src 10.1.8.11 metric 100 
# default 开头的条目是网关

# 查看 DNS
[root@server1 ~ 11:21:43]# cat /etc/resolv.conf 
# Generated by NetworkManager
search 223.6.6.6 tz.cloud
nameserver 223.5.5.5

网络配置

通过配置文件修改

[root@server1 ~ 11:21:56]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=27e5a959-f6b0-4c7f-ad50-e11cfb886d7c
DEVICE=ens33
ONBOOT=yes
IPADDR=10.1.8.11
PREFIX=24
GATEWAY=10.1.8.2
DNS1=223.5.5.5
DOMAIN=223.6.6.6


# 修改完成后需要重新加载和激活配置文件
[root@server1 ~ 11:22:37]# nmcli connection reload 
[root@server1 ~ 11:22:52]# nmcli connection up ens33 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)

通过命令行修改

明白两个概念:

  • device,设备,网卡。
  • connection,连接,网卡的配置。

device和connection之间关系是,网络需要一个配置,同一时刻只能激活一个配置。

例如我在2401教室,激活2401配置,使用的是同一个网卡 以太网2

管理设备
# 查看网络设备清单
[root@server1 ~ 11:22:59]# nmcli device 
DEVICE  TYPE      STATE   CONNECTION 
ens33   ethernet  已连接  ens33      
lo      loopback  未托管  --   

# 断开连接,相当于拔掉网线
[root@server1 ~ 11:23:18]# nmcli device disconnect ens33
成功断开设备 "ens33"# 接上连接,相当于接上网线
[root@server1 ~ 11:23:32]# nmcli device connect ens33
成功用 "ens3327e5a959-f6b0-4c7f-ad50-e11cfb886d7c" 激活了设备 ""# 查看网卡详细配置
[root@server1 ~ 11:24:55]# nmcli device show ens33
GENERAL.DEVICE:                         ens33
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:CC:27:45
GENERAL.MTU:                            1500
GENERAL.STATE:                          100(已连接)
GENERAL.CONNECTION:                     ens33
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConn
WIRED-PROPERTIES.CARRIER:               开
IP4.ADDRESS[1]:                         10.1.8.11/24
IP4.GATEWAY:                            10.1.8.2
IP4.ROUTE[1]:                           dst = 10.1.8.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 10.1.8.2, mt = 100
IP4.DNS[1]:                             223.5.5.5
IP6.ADDRESS[1]:                         fe80::20c:29ff:fecc:2745/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = ff00::/8, nh = ::, mt = 256, table=2
IP6.ROUTE[2]:                           dst = fe80::/64, nh = ::, mt = 256
管理连接

实践:

  1. 静态配置IP
  2. 动态配置IP

给CentOS 系统添加一块网卡。
在这里插入图片描述

[root@CentOS ~ 14:37:40]# nmcli device
DEVICE  TYPE      STATE   CONNECTION         
ens33   ethernet  已连接  ens33              
ens36   ethernet  已连接  Wired connection 1 
lo      loopback  未托管  --     
# 多了一个 ens36 网卡

添加一个动态获取的配置

[root@CentOS ~ 14:37:54]# nmcli connection add type ethernet ifname ens36 con-name dongtai ipv4.method auto
连接 "dongtai" (81ba4b56-536f-4bba-88a6-90c6aec34155) 已成功添加。
# 参数说明:
# type ethernet:连接类型是以太网
# ifname ens36:给网卡ens36配置链接
# con-name dongtai:连接名称是dongtai
# ipv4.method auto:获取地址方法是auto

# 激活连接
[root@CentOS ~ 14:48:49]# nmcli connection up dongtai 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)

# 验证网卡配置信息
[root@CentOS ~ 14:49:24]# nmcli device show ens36
GENERAL.DEVICE:                         ens36
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:A3:DE:D8
GENERAL.MTU:                            1500
GENERAL.STATE:                          100(已连接)
GENERAL.CONNECTION:                     dongtai
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConn
WIRED-PROPERTIES.CARRIER:               开
IP4.ADDRESS[1]:                         10.1.1.128/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 10.1.1.0/24, nh = 0.0.0.0, mt = 101
IP4.DNS[1]:                             10.1.1.1
IP4.DOMAIN[1]:                          localdomain
IP6.ADDRESS[1]:                         fe80::8709:7048:c20:ad6a/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 101
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=2table=255

# 查看连接清单:多了一个dongtai,而且是激活状态。
[root@CentOS ~ 14:50:31]# nmcli connection 
NAME                UUID                                  TYPE      DEVICE 
ens33               27e5a959-f6b0-4c7f-ad50-e11cfb886d7c  ethernet  ens33  
dongtai             81ba4b56-536f-4bba-88a6-90c6aec34155  ethernet  ens36  
Wired connection 1  b689944b-3d74-3423-88ea-a1ca4a350f76  ethernet  --    

添加一个静态配置

[root@CentOS ~ 14:50:38]# nmcli connection add type ethernet ifname ens36 con-name jingtai ipv4.method manual ipv4.addresses 10.1.1.10/24 
连接 "jingtai" (764b435f-94cf-4937-aa89-d27d04aa0b7f) 已成功添加。
[root@CentOS ~ 15:00:11]# nmcli connection up jingtai 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
# 网卡配置中只有IP地址,没有网关和DNS,因为没有配置。
[root@CentOS ~ 15:01:44]# nmcli device show ens36
GENERAL.DEVICE:                         ens36
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:A3:DE:D8
GENERAL.MTU:                            1500
GENERAL.STATE:                          100(已连接)
GENERAL.CONNECTION:                     jingtai
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConn
WIRED-PROPERTIES.CARRIER:               开
IP4.ADDRESS[1]:                         10.1.1.10/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 10.1.1.0/24, nh = 0.0.0.0, mt = 101
IP6.ADDRESS[1]:                         fe80::4ec1:f4ed:bcaa:6f6f/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 101
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=2

NAME                UUID                                  TYPE      DEVICE 
ens33               27e5a959-f6b0-4c7f-ad50-e11cfb886d7c  ethernet  ens33  
jingtai             764b435f-94cf-4937-aa89-d27d04aa0b7f  ethernet  ens36  
dongtai             81ba4b56-536f-4bba-88a6-90c6aec34155  ethernet  --     
Wired connection 1  b689944b-3d74-3423-88ea-a1ca4a350f76  ethernet  --   
修改连接配置
[root@CentOS ~ 15:02:47]# nmcli connection modify jingtai ipv4.addresses 10.1.1.100/24
[root@CentOS ~ 15:12:34]# nmcli connection up jingtai 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@CentOS ~ 15:12:40]# ip -br a show ens36
ens36            UP             10.1.1.100/24 fe80::4ec1:f4ed:bcaa:6f6f/64 
删除连接
# 删除自带连接
[root@CentOS ~ 15:13:13]# nmcli connection delete Wired\ connection\ 1 
成功删除连接 "Wired connection 1" (b689944b-3d74-3423-88ea-a1ca4a350f76)[root@CentOS ~ 15:13:35]# nmcli connection 
NAME     UUID                                  TYPE      DEVICE 
ens33    27e5a959-f6b0-4c7f-ad50-e11cfb886d7c  ethernet  ens33  
jingtai  764b435f-94cf-4937-aa89-d27d04aa0b7f  ethernet  ens36  
dongtai  81ba4b56-536f-4bba-88a6-90c6aec34155  ethernet  --  

# 删除dongtai和jingtai连接
[root@CentOS ~ 15:13:51]# nmcli connection delete dongtai 
成功删除连接 "dongtai" (81ba4b56-536f-4bba-88a6-90c6aec34155)[root@CentOS ~ 15:14:16]# nmcli connection delete jingtai 
成功删除连接 "jingtai" (764b435f-94cf-4937-aa89-d27d04aa0b7f)[root@CentOS ~ 15:14:29]# nmcli c
NAME   UUID                                  TYPE      DEVICE 
ens33  27e5a959-f6b0-4c7f-ad50-e11cfb886d7c  ethernet  ens33  

修改dns
# 服务器可以具备多个DNS,通常是两个
[root@centos7 ~ 14:09:38]# nmcli connection modify ens33 ipv4.dns 223.5.5.5 +ipv4.dns 223.6.6.6

[root@centos7 ~ 14:10:17]# nmcli connection up ens33 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/12)

[root@centos7 ~ 14:10:19]# cat /etc/resolv.conf 
# Generated by NetworkManager
search laoma.cloud
nameserver 223.5.5.5
nameserver 223.6.6.6

使用半图形化工具cmtui

自行研究使用方法。
在这里插入图片描述

系统间复制文档

windows与Linux

使用 ftp 相关工具

提示:前提条件是Linux服务器开启了sshd 服务。
在这里插入图片描述

使用 lrzsz

提示:前提条件是Linux服务器安装了lrzsz工具。

适合传送小文件,因为速度慢。

  • sz file,传输文件到windows中。
    在这里插入图片描述

  • rz file,上传到Linux中,直接拖拽方式更方便。

在这里插入图片描述

Linux与Linux

scp

全量传输:每次传输都是完整的传输,不支持比对传输。

# 系统主机名存储位置
[root@server1 ~ 14:54:55]# cat /etc/hostname 
server1.tz.cloud

# 将文件传输到server2的/root目录
# server2要能够解析成ip
[root@server1 ~ 14:55:02]# scp /etc/hostname server2:/root
hostname                                        100%   17    38.3KB/s   00:00  
[root@server1 ~ 14:55:15]# ssh server2 cat /root/hostname
server1.tz.cloud
# 如果之前配置过秘钥登录,则不需要输入密码就可以同步

# 复制目录,需要-r选项
[root@server1 ~ 14:56:39]# scp -r /etc/yum server2:/tmp
contentdir                                      100%    7     6.1KB/s   00:00    
infra                                           100%    6    12.1KB/s   00:00    
fastestmirror.conf                              100%  279   626.3KB/s   00:00    
langpacks.conf                                  100%  385   856.3KB/s   00:00    
systemd.conf                                    100%    8    16.0KB/s   00:00    
version-groups.conf                             100%  444     1.0MB/s   00:00   

# 也可以拉取文件
[root@server1 ~ 14:57:01]# scp server2:/etc/hostname /tmp
hostname                                        100%   17    36.0KB/s   00:00    
[root@server1 ~ 14:58:03]# cat /tmp/hostname
server2.tz.cloud

rsync

全量和增量同步:每次传输的时候,比对目标位置是否有相同的文件。如果有相同的文件,则不重复传输。

# 准备文件
[root@server1 ~ 15:00:54]# mkdir Pictures
[root@server1 ~ 15:10:51]# touch Pictures/snap-{1..6}.jpg

# 同步目录
[root@server1 ~ 15:13:55]# rsync -av Pictures server2:/root
sending incremental file list
Pictures/
Pictures/snap-1.jpg
Pictures/snap-2.jpg
Pictures/snap-3.jpg
Pictures/snap-4.jpg
Pictures/snap-5.jpg
Pictures/snap-6.jpg
# 选项 -v 显示详细过程
sent 408 bytes  received 134 bytes  361.33 bytes/sec
total size is 0  speedup is 0.00

# 第二次同步:没有变化,所以不用同步
[root@server1 ~ 15:14:37]# rsync -av Pictures server2:/root
sending incremental file list

sent 171 bytes  received 17 bytes  376.00 bytes/sec
total size is 0  speedup is 0.00

# 更新文件时间戳
[root@server1 ~ 15:15:52]# touch Pictures/snap-3.jpg 

# 只同步变化的文件
[root@server1 ~ 15:16:19]# rsync -av Pictures server2:/root
sending incremental file list
Pictures/snap-3.jpg

sent 218 bytes  received 36 bytes  169.33 bytes/sec
total size is 0  speedup is 0.00

# 同步内容发生变化的文件
[root@server1 ~ 15:18:10]# rsync -av Pictures server2:/root
sending incremental file list
Pictures/snap-6.jpg

sent 238 bytes  received 36 bytes  548.00 bytes/sec
total size is 12  speedup is 0.04

rsync也支持拉取文件。

[root@server1 ~ 15:18:35]# rsync -av server2:/root/Pictures /tmp
receiving incremental file list
Pictures/
Pictures/snap-1.jpg
Pictures/snap-2.jpg
Pictures/snap-3.jpg
Pictures/snap-4.jpg
Pictures/snap-5.jpg
Pictures/snap-6.jpg

sent 142 bytes  received 436 bytes  1,156.00 bytes/sec
total size is 12  speedup is 0.02

周期性计划作业

定个闹钟 7:00 。

计算机每天要完成自己的事情:

  1. 巡检系统存储使用情况。
  2. 检查异常日志
  3. 每天夜里0:00 备份数据

crond服务,提供定制任务功能,定期触发执行相应命令。

实践:每分钟同步一次上一章节创建的Pictures目录到server2.

前提条件:

  1. server1可以秘钥登录server2
  2. server1上要准备好相应的目录

步骤1:确保crond服务启动

[root@server1 ~ 15:19:14]# systemctl is-active crond
active

步骤2:设置定时任务

# 查看当前定时任务
[root@server1 ~ 15:36:05]# crontab -l
no crontab for root

# 设置vim作为默认编辑器
[root@server1 ~ 15:46:57]# export EDITOR=vim

# 编辑定时任务
[root@server1 ~ 15:49:50]# crontab -e
# 弹出vim编辑文件
*  *  *  *  * rsync -av Pictures server2:/root
# 提前配置好秘钥登录

[root@server1 ~ 15:52:28]# crontab -l
*  *  *  *  * rsync -av Pictures server2:/root

# 创建一个文件
[root@server1 ~ 15:54:21]# touch Pictures/snap-7.jpg

# 验证-1: 查看执行日志
[root@server1 ~ 15:52:38]# tail -f /var/log/cron
...
Apr  7 15:52:01 server1 crond[688]: (root) RELOAD (/var/spool/cron/root)
Apr  7 15:52:01 server1 CROND[68174]: (root) CMD (rsync -av Pictures server2:/root)
Apr  7 15:53:01 server1 CROND[69332]: (root) CMD (rsync -av Pictures server2:/root)


# 验证-2:目标服务器查看
[root@server1 ~ 15:55:19]# ssh server2 ls Pictures/snap-7.jpg
snap-7.jpg

# 验证-3:查看邮件
[root@server1 ~ 15:59:12]# yum install mailx -y
[root@server1 ~ 16:02:43]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 16 messages 16 new
...
 N  9 (Cron Daemon)         Tue Apr  7 15:59  30/973   "Cron <root@server1> rsy"
 N 10 (Cron Daemon)         Tue Apr  7 16:00  28/943   "Cron <root@server1> rsy"
 N 11 (Cron Daemon)         Tue Apr  7 16:01  28/943   "Cron <root@server1> rsy"
 N 12 (Cron Daemon)         Tue Apr  7 16:02  28/943   "Cron <root@server1> rsy"
 N 13 (Cron Daemon)         Tue Apr  7 16:03  28/943   "Cron <root@server1> rsy"
 N 14 (Cron Daemon)         Tue Apr  7 16:04  28/943   "Cron <root@server1> rsy"
 N 15 (Cron Daemon)         Tue Apr  7 16:05  28/943   "Cron <root@server1> rsy"
 N 16 (Cron Daemon)         Tue Apr  7 16:06  28/943   "Cron <root@server1> rsy"

# 查看第9封邮件
& 9
Message  9:
From root@server1.tz.cloud  Tue Apr  7 15:59:01 2026
Return-Path: <root@server1.tz.cloud>
X-Original-To: root
Delivered-To: root@server1.tz.cloud
From: "(Cron Daemon)" <root@server1.tz.cloud>
To: root@server1.tz.cloud
Subject: Cron <root@server1> rsync -av Pictures server2:/root
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=11>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Tue,  7 Apr 2026 15:59:01 +0800 (CST)
Status: RO

sending incremental file list
Pictures/
Pictures/snap-7.jpg

sent 248 bytes  received 39 bytes  574.00 bytes/sec
total size is 12  speedup is 0.04

# 按q 退出
& q

默认情况:命令的执行结果的标准输出内容以邮件方式通知相应的执行用户。

关闭邮件通知:

  1. 将命令的输出结果重定向到文件中,示例中使用/var/log/rsync.log。
*  *  *  *  * rsync -av Pictures server2:/root >> /var/log/rsync.log
  1. 关闭邮件服务器(不建议)
[root@server1 ~ 16:53:21]# systemctl stop postfix.service 

删除计划任务

[root@server1 ~ 16:55:00]# crontab -r
[root@server1 ~ 16:55:02]# crontab -l
no crontab for root

配置模版

# 默认位置
[root@server1 ~ 15:55:27]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

其他示例

每年2月2日上午9点执行年度备份脚本:

0 9 2 2 * /usr/local/bin/yearly_backup

7月每周五9:00-16:00,每5分钟发送包含「Chime」的邮件给任务所有者:

*/5 9-16 * Jul 5 echo "Chime"

每个工作日(周一至周五)23:58执行每日报告脚本:

58 23 * * 1-5 /usr/local/bin/daily_report

每个工作日9:00发送邮件给老板(% 表示换行,后续内容为邮件正文):

0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值