📑 目录

复习和预习

昨天课堂内容

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

  4. CentOS 系统配置

课前思考

  1. 概述配置windows通过秘钥登录Linux服务器过程 - 生成密钥对 - 放入到对方家目录文件 - 验证

  2. Openssh 服务加固从哪几方面着手?

## {0}root 用户使用秘钥登录

## {0}禁用密码认证 ## {0}设置允许指定用户/禁用指定用户 ## {0}设置允许指定用户组/禁用指定用户组 ## {0}修改端口号 ## {0}启用 SELinux 3. sshd 服务重启失败,如何通过日志排故?

今天课堂内容

  1. 时间设置

  2. 网络管理

  3. 系统间复制文档

  4. 周期性计划作业

Linux 服务器之间秘钥登录

环境准备

准备两台服务器server1和server2

1
10.1.8.11 server1.laoma.cloud server1
2
10.1.8.12 server2.laoma.cloud server2

配置 server1

bash

1

设置主机名

2 [root@server1 ~ 09:23:07]# hostnamectl set-hostname server1.laoma.cloud 3 ​ 4

修改 IP 地址

5 [root@server1 ~ 09:23:07]# cd /etc/sysconfig/network-scripts/ 6 [root@server1 network-scripts 09:24:52]# vim ifcfg-ens33 7

修改IP地址为 10.1.8.11

8 IPADDR=10.1.8.11 9 ​ 10

重新加载配置文件

11 [root@server1 network-scripts 09:24:52]# nmcli connection reload 12

激活配置

13 [root@server1 network-scripts 09:24:52]# nmcli connection up ens33 14 ​ 15

配置名称解析

16 [root@server1 ~ 09:42:48]# vim /etc/hosts 17 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 18 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 19 ​ 20

最后追加解析记录

21 10.1.8.11 server1.laoma.cloud server1 22 10.1.8.12 server2.laoma.cloud server2 23 ​ 24 [root@server1 ~ 09:53:40]# ping -c 1 server2 25 PING server2.laoma.cloud (10.1.8.12) 56(84) bytes of data. 26 64 bytes from server2.laoma.cloud (10.1.8.12): icmp_seq=1 ttl=64 time=0.695 ms 27 ​ 28 --- server2.laoma.cloud ping statistics --- 29 1 packets transmitted, 1 received, 0% packet loss, time 0ms 30 rtt min/avg/max/mdev = 0.695/0.695/0.695/0.000 ms

配置 server2

1
# 设置主机名
2
[root@server2 ~ 09:23:07]# hostnamectl set-hostname server2.laoma.cloud
3
​
4
# 修改 IP 地址
5
[root@server2 ~ 09:23:07]# cd /etc/sysconfig/network-scripts/
6
[root@server2 network-scripts 09:24:52]# vim ifcfg-ens33 
7
# 修改IP地址为 10.1.8.12
8
IPADDR=10.1.8.12
9
​
10
# 重新加载配置文件
11
[root@server2 network-scripts 09:24:52]# nmcli connection reload
12
# 激活配置
13
[root@server2 network-scripts 09:24:52]# nmcli connection up ens33
14
​
15
# 配置名称解析
16
[root@server2 ~ 09:42:48]# vim /etc/hosts
17
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
18
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
19
​
20
# 最后追加解析记录
21
10.1.8.11 server1.laoma.cloud server1
22
10.1.8.12 server2.laoma.cloud server2

验证.

452d94d84460f309ac519eaf08c6e2ce


配置server1秘钥登录server2

```bash
1
# 1. 生成密钥对
2
[root@server1 ~ 10:02:52]# ssh-keygen
3
Generating public/private rsa key pair.
4
# 私钥保存位置
5
Enter file in which to save the key (/root/.ssh/id_rsa): 
6
# 私钥密码为空
7
Enter passphrase (empty for no passphrase): 
8
Enter same passphrase again: 
9
Your identification has been saved in /root/.ssh/id_rsa.
10
Your public key has been saved in /root/.ssh/id_rsa.pub.
11
The key fingerprint is:
12
SHA256:EWHD23ebuaOEMAQOP6kgXl2IEErL5YqiszrAPlRjX5o root@server1.laoma.cloud
13
The key's randomart image is:
14
+---[RSA 2048]----+
15
| +o.o oo=.       |
16
|+ +..=.+.o       |
17
|oo.o .= oo       |
18
|o.o= . +... . .  |
19
|+oo + + S  . . + |
20
|+o   E   o .  +  |
21
|*         . .  . |
22
|.=         .  o  |
23
|+..         .. . |
24
+----[SHA256]-----+
25
​
26
[root@server1 ~ 10:04:35]# ls .ssh/id_rsa*
27
id_rsa      id_rsa.pub 
28
​
29
# 删除之前生成的文件
30
[root@server1 ~ 10:04:35]# rm -fr .ssh/id_rsa*
31
​
32
# 也可以使用以下命令,非交互方式生成
33
[root@server1 ~ 10:05:47]# ssh-keygen -N '' -f .ssh/id_rsa
34
# -f 私钥存储位置
35
# -N 指定秘钥为空
36
​
37
# 2. 推送到目标服务器
38
[root@server1 ~ 10:06:40]# ssh-copy-id laoma@server2
39
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
40
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
41
/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
42
laoma@server2's password: `123`
43
​
44
Number of key(s) added: 1
45
​
46
Now try logging into the machine, with:   "ssh 'laoma@server2'"
47
and check to make sure that only the key(s) you wanted were added.
48
​
49
# 3. 验证
50
[root@server1 ~ 10:08:12]# ssh laoma@server2 id
51
uid=1000(laoma) gid=1000(laoma) groups=1000(laoma),10(wheel)
52
[root@server1 ~ 10:07:46]# ssh laoma@server2 hostname
53
server2.laoma.cloud

时间管理

常见管理命令

date 命令

1
[root@centos7 ~ 10:28:25]# date
2
Tue Apr  7 10:28:27 CST 2026
3
[root@centos7 ~ 10:28:27]# echo $LANG
4
en_US.UTF-8
5
​
6
# 设置时间显示格式
7
[root@centos7 ~ 10:28:44]# LANG=zh_CN.UTF-8 
8
[root@centos7 ~ 10:29:03]# date
9
2026年 04月 07日 星期二 10:29:04 CST
10
​
11
# 设置时间
12
[root@centos7 ~ 10:29:04]# date -s 'Tue Apr  6 10:28:27 CST 2026'
13
2026年 04月 06日 星期一 10:28:27 CST

tzselect 命令

查看时区对应代码。

1
[root@centos7 ~ 10:28:40]# tzselect 
2
Please identify a location so that time zone rules can be set correctly.
3
Please select a continent or ocean.
4
 1) Africa
5
 2) Americas
6
 3) Antarctica
7
 4) Arctic Ocean
8
 5) Asia
9
 6) Atlantic Ocean
10
 7) Australia
11
 8) Europe
12
 9) Indian Ocean
13
10) Pacific Ocean
14
11) none - I want to specify the time zone using the Posix TZ format.
15
# 选择 5) Asia
16
#? 5
17
Please select a country.
18
 1) Afghanistan       18) Israel            35) Palestine
19
 2) Armenia       19) Japan         36) Philippines
20
 3) Azerbaijan        20) Jordan            37) Qatar
21
 4) Bahrain       21) Kazakhstan        38) Russia
22
 5) Bangladesh        22) Korea (North)     39) Saudi Arabia
23
 6) Bhutan        23) Korea (South)     40) Singapore
24
 7) Brunei        24) Kuwait            41) Sri Lanka
25
 8) Cambodia          25) Kyrgyzstan        42) Syria
26
 9) China         26) Laos          43) Taiwan
27
10) Cyprus        27) Lebanon           44) Tajikistan
28
11) East Timor        28) Macau         45) Thailand
29
12) Georgia       29) Malaysia          46) Turkmenistan
30
13) Hong Kong         30) Mongolia          47) United Arab Emirates
31
14) India         31) Myanmar (Burma)       48) Uzbekistan
32
15) Indonesia         32) Nepal         49) Vietnam
33
16) Iran          33) Oman          50) Yemen
34
17) Iraq          34) Pakistan
35
# 选择 9) China
36
#? 9
37
Please select one of the following time zone regions.
38
1) Beijing Time
39
2) Xinjiang Time
40
# 选择 2) Xinjiang Time
41
#? 2
42
​
43
The following information has been given:
44
​
45
    China
46
    Xinjiang Time
47
​
48
Therefore TZ='Asia/Urumqi' will be used.
49
Local time is now:  Mon Apr  6 08:30:40 +06 2026.
50
Universal Time is now:  Mon Apr  6 02:30:40 UTC 2026.
51
Is the above information OK?
52
1) Yes
53
2) No
54
# 选择 1) Yes
55
#? 1
56
​
57
You can make this change permanent for yourself by appending the line
58
    TZ='Asia/Urumqi'; export TZ
59
to the file '.profile' in your home directory; then log out and log in again.
60
​
61
Here is that TZ value again, this time on standard output so that you
62
can use the /bin/tzselect command in shell scripts:
63
Asia/Urumqi
64
# 结果显示对应的时区代码是 Asia/Urumqi
1
# 设置时区为东6区
2
[root@centos7 ~ 10:30:57]# TZ='Asia/Urumqi'; export TZ
3
[root@centos7 ~ 08:32:37]# date
4
2026年 04月 06日 星期一 08:32:39 +06
5
​
6
# 设置时区为东8区
7
[root@centos7 ~ 08:32:39]# TZ='Asia/Shanghai'; export TZ
8
[root@centos7 ~ 10:33:37]# date
9
2026年 04月 06日 星期一 10:33:40 CST

自动对时

chrony 软件。

1
# 安装软件
2
[root@centos7 ~ 10:45:20]# yum install -y chrony
3
​
4
# 设置与哪个服务器对时
5
[root@centos7 ~ 10:45:30]# vim /etc/chrony.conf
6
# 将原先server开头的行注释掉,并新增一行
7
# 设置与aliyun对时
8
server ntp.aliyun.com iburst
9
​
10
# 启动服务
11
[root@centos7 ~ 10:47:57]# systemctl start chronyd
12
# 验证时间准确性
13
[root@centos7 ~ 10:48:05]# date
14
2026年 04月 07日 星期二 10:49:53 CST
15
​
16
# 查看与哪个服务器对时
17
[root@centos7 ~ 10:49:53]# chronyc sources -v
18
210 Number of sources = 1
19
​
20
  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
21
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
22
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
23
||                                                 .- xxxx [ yyyy ] +/- zzzz
24
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
25
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
26
||                                \     |          |  zzzz = estimated error.
27
||                                 |    |           \
28
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
29
===============================================================================
30
^* 203.107.6.88                  2   6    17    12    +21ms[  +22ms] +/-   41ms
31
# 带* 开头的是对时的服务器

网络管理

# 查看IP地址
[root@centos7 ~ 11:07:11]# ip -br addr
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.10/24 fe80::20c:29ff:feae:bf1d/64
# -br brief 简洁

# 查看特定网卡IP地址
[root@centos7 ~ 11:07:17]# ip -br addr show ens33
ens33            UP             10.1.8.10/24 fe80::20c:29ff:feae:bf1d/64

# 查看MAC地址
[root@centos7 ~ 11:08:13]# ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
ens33            UP             00:0c:29:ae:bf:1d <BROADCAST,MULTICAST,UP,LOWER_UP> 
[root@centos7 ~ 11:08:18]# ip -br link show ens33
ens33            UP             00:0c:29:ae:bf:1d <BROADCAST,MULTICAST,UP,LOWER_UP>

# 查看网关
[root@centos7 ~ 11:08:23]# 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.10 metric 100
# default 开头的条目是网关

# 查看 DNS
[root@centos7 ~ 11:09:22]# cat /etc/resolv.conf 
# Generated by NetworkManager
search laoma.cloud
nameserver 223.5.5.5
nameserver 223.6.6.6

网络配置

通过配置文件修改

修改完成后需要重新加载和激活配置文件

[root@centos7 ~ 11:12:35]# nmcli connection reload [root@centos7 ~ 11:12:38]# nmcli connection up ens33 -

通过命令修改

明白两个概念:

device和connection之间关系是,device可以有多个connection,同一时刻只能激活一个connection。

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

管理设备

bash

查看网络设备清单

[root@centos7 ~ 11:12:41]# nmcli device DEVICE TYPE STATE CONNECTION ens33 ethernet 已连接 ens33
lo loopback 未托管 --

断开连接,相当于拔掉网线

[root@centos7 ~ 11:17:18]# nmcli device disconnect ens33

接上连接,相当于接上网线

[root@centos7 ~ 11:17:53]# nmcli device connect ens33

查看网卡详细配置

[root@centos7 ~ 11:18:32]# nmcli device show ens33 GENERAL.DEVICE: ens33 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:AE:BF:1D GENERAL.MTU: 1500 GENERAL.STATE: 100(已连接) GENERAL.CONNECTION: ens33 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/4 WIRED-PROPERTIES.CARRIER: 开 IP4.ADDRESS[1]: 10.1.8.10/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 IP4.DNS[2]: 223.6.6.6 IP6.ADDRESS[1]: fe80::20c:29ff:feae:bf1d/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = ff00::/8, nh = ::, mt = 256, table=255 IP6.ROUTE[2]: dst = fe80::/64, nh = ::, mt = 256

管理连接

实践:

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

给CentOS 系统添加一块网卡。

image-20260407133623513

[root@centos7 ~ 13:36:49]# nmcli device 
DEVICE  TYPE      STATE   CONNECTION         
ens33   ethernet  已连接  ens33              
ens36   ethernet  已连接  Wired connection 1 
lo      loopback  未托管  --
# 多了一个 ens36 网卡
添加一个动态获取的配置
[root@centos7 ~ 13:40:23]# nmcli connection add type ethernet ifname ens36 con-name dongtai ipv4.method auto
# 参数说明:
# type ethernet:连接类型是以太网
# ifname ens36:给网卡ens36配置链接
# con-name dongtai:连接名称是dongtai
# ipv4.method auto:获取地址方法是auto

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

# 验证网卡配置信息:自动获取了IP、网关和DNS
[root@centos7 ~ 13:42:00]# nmcli device show ens36
GENERAL.DEVICE:                         ens36
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:AE:BF:27
GENERAL.MTU:                            1500
GENERAL.STATE:                          100(已连接)
GENERAL.CONNECTION:                     dongtai
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/8
WIRED-PROPERTIES.CARRIER:               开
IP4.ADDRESS[1]:                         10.1.1.130/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 10.1.1.0/24, nh = 0.0.0.0, mt = 102
IP4.DNS[1]:                             10.1.1.1
IP4.DOMAIN[1]:                          localdomain
IP6.ADDRESS[1]:                         fe80::47ee:a597:6e46:c673/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 102
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

# 查看连接清单:多了一个dongtai,而且是激活状态(关联了网卡ens36)。
[root@centos7 ~ 13:42:17]# nmcli connection 
NAME                UUID                                  TYPE      DEVICE 
ens33               1f9d8e96-40c7-438b-adf1-67c6b3119ce9  ethernet  ens33  
dongtai             5258feee-ea13-44b0-95aa-821e38add45b  ethernet  ens36  
Wired connection 1  55598965-f922-3b5b-afba-a29a47488723  ethernet  --
添加一个静态配置
[root@centos7 ~ 13:53:05]# nmcli connection add type ethernet ifname ens36 con-name jingtai ipv4.method manual ipv4.addresses 10.1.1.10/24 
连接 "jingtai" (604950ce-a611-49fc-9d96-5b7c3ba91d92) 已成功添加。

[root@centos7 ~ 13:56:06]# nmcli connection up jingtai 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/9)

# 网卡配置中只有IP地址,没有网关和DNS,因为没有配置。
[root@centos7 ~ 13:56:18]# nmcli device show ens36
GENERAL.DEVICE:                         ens36
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:AE:BF:27
GENERAL.MTU:                            1500
GENERAL.STATE:                          100(已连接)
GENERAL.CONNECTION:                     jingtai
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/9
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 = 102
IP6.ADDRESS[1]:                         fe80::23ef:cdb3:9c88:2362/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 102
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

[root@centos7 ~ 13:56:15]# nmcli connection 
NAME                UUID                                  TYPE      DEVICE 
ens33               1f9d8e96-40c7-438b-adf1-67c6b3119ce9  ethernet  ens33  
jingtai             604950ce-a611-49fc-9d96-5b7c3ba91d92  ethernet  ens36  
dongtai             5258feee-ea13-44b0-95aa-821e38add45b  ethernet  --     
Wired connection 1  55598965-f922-3b5b-afba-a29a47488723  ethernet  -- 

书写命令的时候,多使用tab键补全功能。

修改连接配置
[root@centos7 ~ 14:05:39]# nmcli connection modify jingtai ipv4.addresses 10.1.1.100/24
[root@centos7 ~ 14:06:08]# nmcli connection up jingtai 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/10)
[root@centos7 ~ 14:06:13]# ip -br a show ens36
ens36            UP             10.1.1.100/24 fe80::23ef:cdb3:9c88:2362/64 
删除连接
# 删除自带连接
[root@centos7 ~ 14:06:19]# nmcli connection delete Wired\ connection\ 1 
成功删除连接 "Wired connection 1" (55598965-f922-3b5b-afba-a29a47488723)。

[root@centos7 ~ 14:07:28]# nmcli connection 
NAME     UUID                                  TYPE      DEVICE 
ens33    1f9d8e96-40c7-438b-adf1-67c6b3119ce9  ethernet  ens33  
jingtai  604950ce-a611-49fc-9d96-5b7c3ba91d92  ethernet  ens36  
dongtai  5258feee-ea13-44b0-95aa-821e38add45b  ethernet  --   

# 删除dongtai和jingtai连接
[root@centos7 ~ 14:07:32]# nmcli connection delete dongtai 
成功删除连接 "dongtai" (5258feee-ea13-44b0-95aa-821e38add45b)。
[root@centos7 ~ 14:07:41]# nmcli connection delete jingtai
成功删除连接 "jingtai" (604950ce-a611-49fc-9d96-5b7c3ba91d92)。

[root@centos7 ~ 14:07:45]# nmcli c
NAME   UUID                                  TYPE      DEVICE 
ens33  1f9d8e96-40c7-438b-adf1-67c6b3119ce9  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

使用半图形化工具

自行研究使用方法。

image-20260407143601638

系统间复制文档

windows与Linux

使用 ftp 相关工具

提示:前提条件是Linux服务器开启了sshd 服务。

image-20260407143938315

使用 lrzsz

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

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

image-20260407144225424

image-20260407144146431

Linux与Linux

scp(secure copy)

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

# 系统主机名存储位置
[root@server1 ~ 10:08:25]# cat /etc/hostname 
server1.laoma.cloud

# 将文件传输到server2的/root目录
# server2要能够解析成ip
[root@server1 ~ 14:45:53]# scp /etc/hostname server2:/root
root@server2's password: 
hostname                                                  100%   20     5.1KB/s   00:00    
# 验证文件内容
[root@server1 ~ 14:46:07]# ssh server2 cat /root/hostname
root@server2's password: 
server1.laoma.cloud

# 如果之前配置过秘钥登录,则不需要输入密码就可以同步

# 复制目录,需要-r选项
[root@server1 ~ 14:49:27]# scp -r /etc/yum server2:/tmp
contentdir                                                100%    7     3.8KB/s   00:00    
infra                                                     100%    6     3.0KB/s   00:00    
fastestmirror.conf                                        100%  279   168.2KB/s   00:00    
langpacks.conf                                            100%  385    23.5KB/s   00:00    
systemd.conf                                              100%    8     1.7KB/s   00:00    
version-groups.conf                                       100%  444   125.8KB/s   00:00

也可以拉取文件

[root@server1 ~ 14:49:44]# scp server2:/etc/hostname /tmp
hostname                                                  100%   20    10.9KB/s   00:00    
[root@server1 ~ 14:50:36]# cat /tmp/hostname
server2.laoma.cloud

rsync

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

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

# 同步目录
[root@server1 ~ 15:03:44]# 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
# 选项 -a 归档模式,等价于 -r -l -p -t -g -o -D,保留目录结构、软链接、权限、时间戳等
# 选项 -v 显示详细过程

sent 408 bytes  received 134 bytes  361.33 bytes/sec
total size is 0  speedup is 0.00

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

sent 167 bytes  received 17 bytes  122.67 bytes/sec
total size is 0  speedup is 0.00

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

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

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

# 同步内容发生变化的文件
[root@server1 ~ 15:06:27]# echo hello world >> Pictures/snap-6.jpg 
[root@server1 ~ 15:06:48]# 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:06:51]# 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

[root@server1 ~ 15:09:20]# ls /tmp/Pictures/
snap-1.jpg  snap-2.jpg  snap-3.jpg  snap-4.jpg  snap-5.jpg  snap-6.jpg

定个闹钟:每天 7:00 起床。

计算机也要定时要完成自己的事情:

```1每天巡检系统资源使用情况。


```3每天夜里 0:00 备份数据

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





## 实践

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



前提条件:

1. server1可以秘钥登录server2

2. server1上要准备好相应的目录



配置秘钥登录

```bash
[root@server1 ~ 15:17:51]# ssh-keygen 
[root@server1 ~ 15:17:51]# ssh-copy-id root@server2
[root@server1 ~ 15:17:51]# ssh server2 hostname

步骤1:确保 crond服务启动

[root@server1 ~ 15:17:51]# systemctl is-active crond
active

步骤2:设置定时任务

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

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

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

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

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

# 验证-1: 查看执行日志
[root@server1 ~ 15:41:37]# tail -f /var/log/cron 
Apr  7 15:40:43 centos7 crontab[11739]: (root) END EDIT (root)
Apr  7 15:40:47 centos7 crontab[11741]: (root) LIST (root)
Apr  7 15:41:01 centos7 CROND[11743]: (root) CMD (rsync -av Pictures server2:/root)
Apr  7 15:42:01 centos7 CROND[11773]: (root) CMD (rsync -av Pictures server2:/root)

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

# 验证-3:查看邮件
[root@server1 ~ 15:59:10]# yum install -y mailx
[root@server1 ~ 15:59:10]# mail
......
 N  6 (Cron Daemon)         Tue Apr  7 15:46  28/964   "Cron <root@server1> rsync -av Pic"
 N  7 (Cron Daemon)         Tue Apr  7 15:47  28/964   "Cron <root@server1> rsync -av Pic"
 N  8 (Cron Daemon)         Tue Apr  7 15:48  28/964   "Cron <root@server1> rsync -av Pic"
 N  9 (Cron Daemon)         Tue Apr  7 15:49  28/964   "Cron <root@server1> rsync -av Pic"
>  10 (Cron Daemon)         Tue Apr  7 15:50  28/964   "Cron <root@server1> rsync -av Pic"
 N 11 (Cron Daemon)         Tue Apr  7 15:51  28/964   "Cron <root@server1> rsync -av Pic"
 N 12 (Cron Daemon)         Tue Apr  7 15:52  28/964   "Cron <root@server1> rsync -av Pic"
# 查看第9封邮件
& 9
......
Date: Tue,  7 Apr 2026 15:49:01 +0800 (CST)
Status: R

sending incremental file list

sent 204 bytes  received 17 bytes  442.00 bytes/sec
total size is 12  speedup is 0.05
# 按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

配置模版

bash

[root@server1 ~ 15:38:05]# 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执行每日报告脚本:

bash

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.