二维码

基础设定、备份、档案压缩打包与工作排程

836 人阅读 | 时间:2021年12月17日 23:35

11.1:Linux 系统基本设定

在更进一步管理系统前,先来整理一下系统的网络建置、日期与时间的修改、语系等相关的设定,让系统更符合你的操作行为与环境。

11.1.1:网络设定

网络设定是系统管理员主要负责的项目。 一般来说,以服务器的角度观之,通常服务器的网络都是固定的,大多使用手动的方式来设定好网络。 如果是以桌机的角度来看,则大多使用自动取得网络参数,亦即所谓的' dhcp '协议来自动处理。 如果是台湾地区的一般民众, 可能会有两个主要的网络参数取得方式,一个是与电话线路结合,例如中华电信的 ADSL 或者光世代的拨接方式,一种则是透过与第四台的缆线结合。

CentOS 8 使用 Network Manager 这个服务来管理网络,同时提供一个名为 nmcli 的简易指令,搭配 bash-completion 软件,可以快速的使用 [tab] 按键配合,完成所有的任务。

  • 观察网络连接界面与网络卡

系统上的所有网络界面都可以通过 ifconfig 这个指令来观察,不过这个指令在某些系统上并不一定会提供。 因此,近来我们建议使用 ip link show 这个指令来查阅! 方法如下:

[root@localhost ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000     link/ether 52:54:00:85:b1:54 brd ff:ff:ff:ff:ff:ff 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000     link/ether 52:54:00:b0:2f:5d brd ff:ff:ff:ff:ff:ff 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000     link/ether 52:54:00:b0:2f:5d brd ff:ff:ff:ff:ff:ff

上述的 lo, ens3, virbr0, virbr0-nic 等等就是网络适配器! 系统实际上就是通过这些适配器来连接到网络的。 读者应该要知道, 一张适配器可以同时提供多个网络地址 (IP address),而利用这些适配器来实现连接的方式就称为网络连接代号。 查询网络连接代号的方式如下:

[root@localhost ~]# nmcli connection show NAME    UUID                                  TYPE      DEVICE ens3    1eff13ae-e436-407c-bf67-ac0932bd1ed2  ethernet  ens3 virbr0  efe9b94d-5d0c-4f93-b55c-4c4156c7aa9f  bridge    virbr0

读者们应该要注意的是:

  • NAME:即为网络连线代号,接下来我们要处理的任务均是针对此连线代号而来。

  • UUID:Linux 的设备识别码,在系统当中几乎是独一无二的存在。

  • TYPE:网络连接的类型,包括以太网、无线网络、桥接等等功能

  • DEVICE:即是网络适配器。

由于读者们所操作的系统是本教材提供的复制品,对于您的环境来说,可能有些许的差异,因此,建议你应该要删除 ens3 这个连线代号, 然后重建一次 ens3 比较妥当。 删除连接和连接的方式如下:

[root@localhost ~]# nmcli connection delete ens3 [root@localhost ~]# nmcli connection add con-name ens3 ifname ens3 type ethernet Connection 'ens3' (167e8cf0-05b5-4ea9-8685-7775441d5d04) successfully added. [root@localhost ~]# nmcli connection show NAME    UUID                                  TYPE      DEVICE ens3    167e8cf0-05b5-4ea9-8685-7775441d5d04  ethernet  ens3 virbr0  efe9b94d-5d0c-4f93-b55c-4c4156c7aa9f  bridge    virbr0

读者会发现到 ens3 连线代号的 UUID 改变了,同时 DEVICE 会搭配到你的网络界面卡,此时系统就帮你建置好 ens3 这个连线代号。

当前大部分的系统在网络卡的命名上面已经不再使用过去的 eth0, eth1... 之类的命名方式,而是使用该适配器的总线作为代号来命名。 因此,未来大家可能会常见到不同的名称喔!

例题 11.1.1-1: 使用 man nmcli 之后,查询 connection 的关键字,找到 add 的项目,写下底下项目的意义:

  1. con-name

  2. ifname

  3. type

  • 观察网络连接代号的详细设定

详细的网络连接代号内容的观察,可以这样做:

[root@localhost ~]# nmcli connection show 連線名稱(con-name) [root@localhost ~]# nmcli connection show ens3 connection.id:                          ens3 connection.uuid:                        167e8cf0-05b5-4ea9-8685-7775441d5d04 connection.stable-id:                   -- connection.type:                        802-3-ethernet connection.interface-name:              ens3 connection.autoconnect:                 是 ....... ipv4.method:                            auto ipv4.dns:                               -- ipv4.dns-search:                        -- ipv4.dns-options:                       -- ipv4.dns-priority:                      0 ipv4.addresses:                         -- ipv4.gateway:                           -- ipv4.routes:                            -- ....... ipv6.method:                            auto ipv6.dns:                               -- ipv6.dns-search:                        -- ipv6.dns-options:                       -- ipv6.dns-priority:                      0 ipv6.addresses:                         -- ipv6.gateway:                           -- ipv6.routes:                            -- ....... IP4.ADDRESS[1]:                         172.16.5.237/16 IP4.GATEWAY:                            172.16.200.254 IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 172.16.200.254, mt = 100 IP4.ROUTE[2]:                           dst = 172.16.0.0/16, nh = 0.0.0.0, mt = 100 IP4.DNS[1]:                             172.16.200.254 IP4.DOMAIN[1]:                          gocloud.vm DHCP4.OPTION[1]:                        dhcp_lease_time = 259200 DHCP4.OPTION[2]:                        dhcp_rebinding_time = 226800 ....... IP6.ADDRESS[1]:                         fe80::d9bf:d115:c5dc:248f/64 IP6.GATEWAY:                            -- IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 100 IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

一般来说,输出的信息有小写字符与大写字符,小写字符大多为'设置值',大写字符大多为'现在运作中的状态资料'。 上表仅列出较为重要的信息,包括有:

  • connection.autoconnect [yes|no] :是否于开机时启动这个连线,默认通常是 yes

  • ipv4.method [auto|manual] :自动还是手动设定网络参数

  • ipv4.dns [dns_server_ip] :填写 DNS 服务器的 IP 地址

  • ipv4.addresses [IP/Netmask] :IP 与 netmask 的集合,中间用斜线 / 来隔开

  • ipv4.gateway [gw_ip] : gateway 的 IP 地址!

至于大写字符里头,比较常见的重要项目:

  • IP4. ADDRESS[1]: 目前运作中的 IPv4 的 IP 地址参数

  • IP4. GATEWAY: 目前运作中的IPv4的通讯闸

  • IP4. DNS[1]: 目前运作中的 DNS 服务器 IP 地址

  • DHCP4. OPTION[XX]: 由 DHCP 服务器所提供的相关参数

基本上,如果看到 DHCP4. OPTION 之类的字样,代表这个网络连线代号主要是透过'自动取得 IP '的方式来处理的。

  • 自动取得 IP 参数的设定

所谓的自动获取IP参数,代表使用DHCP服务器来管理网络参数的给予,因此读者的环境中应该具有IP分享器或其他提供DHCP功能的设备。 由于所有的设定均来自于 DHCP 服务,因此读者仅须提供 ipv4.method 为自动 (auto) 即可。

[root@localhost ~]# nmcli connection modify ens3 ipv4.method auto [root@localhost ~]# nmcli connection up ens3 連線已成功啟用(D-Bus 啟用路徑:/org/freedesktop/NetworkManager/ActiveConnection/5)

上表' nmcli connection up ens3 '代表使用设置来重新启动这个网络连线代号之意。

  • 手动设定 IP 参数

网络环境的设置主要由 ISP 来提供,假设你的系统所在的 ISP 告知你的网络设置如下:

  • IP/Netmask: 172.16.50.NN/16

  • Gateway: 172.16.200.254

  • DNS: 172.16.200.254

上述NN为你的学号(介于1~254之间的数值皆可),底下假设为1号时的情况,读者可以通过底下的方式来处理手动设定IP的方式:

[root@localhost ~]# nmcli connection modify ens3  \ > connection.autoconnect yes \ > ipv4.method manual \ > ipv4.addresses 172.16.50.1/16 \ > ipv4.gateway 172.16.200.254 \ > ipv4.dns 172.16.200.254 [root@localhost ~]# nmcli connection show ens3 ....... ipv4.method:                            manual ipv4.dns:                               172.16.200.254 ipv4.dns-search: ipv4.addresses:                         172.16.50.1/16 ipv4.gateway:                           172.16.200.254 ....... [root@localhost ~]# nmcli connection up ens3

确认启动网络之后,观察一下最下方的大写字样的资料,是否正确显示出跟你设定值相同的信息?

[root@localhost ~]# nmcli connection show ens3 ....... IP4.ADDRESS[1]:                         172.16.50.1/16 IP4.GATEWAY:                            172.16.200.254 IP4.ROUTE[1]:                           dst = 172.16.0.0/16, nh = 0.0.0.0, mt = 100 IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 172.16.200.254, mt = 100 IP4.DNS[1]:                             172.16.200.254 .......
  • 主机名称设定

一般连接到Internet的服务器应该都有一个主机名称,主机名称的观察方式可以直接使用hostname来观察,如果是设定,则需要编写/etc/hostname这个档案。 但如果手动编辑配置文件,通常都需要透过重新开机 (reboot) 来让主机名称生效。 为了解决这个 reboot 的问题, centos 提供了名为 hostnamectl 的指令来管理,假设主机名称为 www.centos 时,可以这样设定:

[root@localhost ~]# hostnamectl set-hostname www.centos [root@localhost ~]# hostnamectl    Static hostname: www.centos          Icon name: computer-vm            Chassis: vm         Machine ID: 502dbaaf2a074134909a59ef9ab651c1            Boot ID: b2952f724af0470cafc231c72afbcf9e     Virtualization: kvm   Operating System: CentOS Linux 8 (Core)        CPE OS Name: cpe:/o:centos:centos:8             Kernel: Linux 4.18.0-147.el8.x86_64       Architecture: x86-64

这样立刻设定好主机名称,且可以不用重新开机。

例题 11.1.1-2: 设定网络连线 (此网络连线会使用到学期末,所以请设定妥当喔! )

  1. 请依据下面提供的数据来设置好你的网络参数 (应该依据您的教师提供的数据为主):

    1. IP/netmask: 172.16.60.XX/16 (XX 为你的学号尾数,以全班不重复为主)

    2. gateway: 172.16.200.254

    3. DNS: 168.95.1.1 (此为中华电信惯用的 DNS 服务器,因此你的环境中须有 Internet)

    4. Hostname: stationXX.centos (XX为你的学号尾数)

  2. 检查网络参数和网络状态方式 :

    1. 透过 nmcli connection show 可以查询到哪些重要的参数?

    2. (1)如何通过 ping 这个指令来检查你的服务器与路由器之间的连线情况? 同时,(2)回传的讯息中,出现什么关键词才是顺利的连线成功? (3)出现的信息中,time 的单位与意义为何?

    3. 透过 dig www.google.com 来检查 DNS 是否顺利运作中: (1)有哪几个 section 需要注意? (2)出现哪一个 section 才算正确的查询到 IP? (3)哪个项目可以看出查询的 server IP 地址为何?

    4. 哪个指令可以查看目前本主机的主机名称

11.1.2:北京时间设置

地球上每个地区都有专属于自己的时区,因此当你带着 notebook 到不同时区的地点时,可能得要修订自己的电脑时间才行。 修订的方式可以使用 CentOS8 提供的 timedatectl 指令。

[root@localhost ~]# timedatectl                Local time: 日 2020-05-17 15:01:30 CST            Universal time: 日 2020-05-17 07:01:30 UTC                  RTC time: 日 2020-05-17 07:01:31                 Time zone: Asia/Taipei (CST, +0800) System clock synchronized: no               NTP service: inactive           RTC in local TZ: no

例题 11.1.2-1: 使用 timedatectl 指令管理系统的时区、时间等任务

  1. 透过man timedatectl之后,找到列出目前系统支持的所有时区的参数,并查出有没有日本、UTC等时区

  2. 透过 find 到 /usr/share/zoneinfo 找找看有没有 Japan 这个关键词?

  3. 先检查目前的时间,将时区改为日本时区后,查询时间变化差异多久

  4. 再将时区改为 UTC 时间,再次检查时间变化差异多久?

  5. 改回目前的时区,然后根据你的手表,设定好正确的时间!

  • 通过持续网络校时功能( 客户端功能)

读者应该会发现到现今的操作系统大多可以保持正确的时间,再也无须进行手动校时。 CentOS 8 默认提供了 chronyd 这个服务来进行网络校时! 若以昆山科大为例,昆山科大提供 ntp.ksu.edu.tw 这个时间服务器,若以此时间服务器为主要的更新时间来源,可以这样做:

[root@localhost ~]# vim /etc/chrony.conf # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #pool 2.centos.pool.ntp.org iburst server ntp.ksu.edu.tw iburst  <==加入所需要的伺服器 ..... [root@localhost ~]# systemctl enable  chronyd [root@localhost ~]# systemctl restart chronyd # 大概間隔個 10~30 秒,等待系統連上 server 後,再進行底下的動作! [root@localhost ~]# systemctl status  chronyd ● chronyd.service - NTP client/server    Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)    Active: active (running) since Sun 2020-05-17 15:38:04 CST; 51s ago      Docs: man:chronyd(8)            man:chrony.conf(5)   Process: 17512 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)   Process: 17508 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)  Main PID: 17510 (chronyd)     Tasks: 1 (limit: 11476)    Memory: 1.9M    CGroup: /system.slice/chronyd.service            └─17510 /usr/sbin/chronyd  5月 17 15:38:04 station200 systemd[1]: Starting NTP client/server...  5月 17 15:38:04 station200 chronyd[17510]: chronyd version 3.5 starting (+CMDMON +NTP +.......  5月 17 15:38:04 station200 chronyd[17510]: Using right/UTC timezone to obtain leap second data  5月 17 15:38:04 station200 systemd[1]: Started NTP client/server.  5月 17 15:38:08 station200 chronyd[17510]: Selected source 120.114.100.1  5月 17 15:38:08 station200 chronyd[17510]: System clock TAI offset set to 37 seconds  5月 17 15:38:08 station200 chronyd[17510]: System clock wrong by -2.258910 seconds, adjustment started  5月 17 15:38:06 station200 chronyd[17510]: System clock was stepped by -2.258910 seconds

若有需要了解到目前的 NTP 时间状况,可以使用追踪 (tracking) 来处理看看:

[root@localhost ~]# chronyc tracking Reference ID    : 78726401 (dns3.ksu.edu.tw) Stratum         : 4 Ref time (UTC)  : Sun May 17 07:40:16 2020 System time     : 0.000008519 seconds slow of NTP time Last offset     : -0.000019847 seconds RMS offset      : 0.000019847 seconds Frequency       : 22.813 ppm slow Residual freq   : -0.005 ppm Skew            : 3.124 ppm Root delay      : 0.008961411 seconds Root dispersion : 0.058238860 seconds Update interval : 64.4 seconds Leap status     : Normal [root@station200 ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address         Stratum Poll Reach LastRx Last sample =============================================================================== ^* ntp.ksu.edu.tw                3   6   177    28     +9ns[ -339ns] +/-   64ms

如此一来,如果有网络,则此 Linux 系统就能够持续的更新时间了。 未来我们上课时,时间应该就会是正常的啰!

11.1.3:语系设定

登录系统时,取得 bash 之后,会有默认的语系数据,默认读者的环境应该是 zh_TW.utf8 这个语系。 但是图形界面登入处默认为英文语系, 那个环境即为'系统语系'的相关设定。 读者可以使用 locale 来查阅当前的语系,而使用 localectl 来查阅系统的默认语系。

[root@localhost ~]# localectl    System Locale:.UTF-8        VC Keymap: us       X11 Layout: us

若想要让图形界面的画面以台湾中文为主,可以使用如下的方式来处置:

[root@localhost ~]# localectl list-locales | grep -i tw zh_TW zh_TW.euctw zh_TW.utf8 [root@localhost ~]# localectl set-locale.utf8 [root@localhost ~]# systemctl isolate multi-user.target [root@localhost ~]# systemctl isolate graphical.target

11.1.4:简易防火墙管理

若要作为服务器,那么 Linux 的防火墙管理就显的重要了。 CentOS 提供一个名为 firewalld 的防火墙服务, 这个防火墙主要通过 firewall-cmd 指令管理,而防火墙的执行分为两种方式:

  • 目前进行中 (acitve) 的环境

  • 永久记录 (permanent) 的配置资料

此外,为了方便管理,防火墙将许多不同的应用定义了多种的领域(zone),不过,在这里我们只需要知道公开的领域(public)即可。

[root@localhost ~]# firewall-cmd --get-default-zone public [root@localhost ~]# firewall-cmd --list-all public (active)   target: default   icmp-block-inversion: no   interfaces: ens3   sources:   services: cockpit dhcpv6-client ssh   ports:   protocols:   masquerade: no   forward-ports:   source-ports:   icmp-blocks:   rich rules:

上面表格显示默认的防火墙使用 public 这个领域的规则设置,而 public 领域内的数据中,主要应用了:

  • 『interfaces: ens3』:主要管理的界面为 ens3 这个适配器

  • 『services: cockpit dhcpv6-client ssh』可以通过防火墙进出系统的服务有 cockpit, dhcp 客户端以及 ssh 这两个服务

  • 『masquerade: no』没有启动 IP 伪装功能

未来如果读者的服务器要加上 httpd 这个 WWW 网页服务器服务的话,就以如下的方式来加入:

[root@localhost ~]# firewall-cmd --add-service=http success [root@localhost ~]# firewall-cmd --list-all public (active)   target: default   icmp-block-inversion: no   interfaces: ens3   sources:   services: cockpit dhcpv6-client http ssh   ports:   protocols:   masquerade: no   forward-ports:   source-ports:   icmp-blocks:   rich rules:

但是上述指令仅能在这次开机阶段执行,重新开机后,或者是重新加载 firewalld 之后,这条规则就被注销了。 因此, 确认规则是正常的之后,应该使用如下的方式增加到配置文件当中才对:

[root@localhost ~]# firewall-cmd --add-service=http --permanent success [root@localhost ~]# firewall-cmd --list-all --permanent

请自行确认输出的结果含有 http 才行。

例题 11.1.4-1:请依据底下的方式处理好你的防火墙,首先理解我们需要达成的防火墙任务有:

  • 我们的 Linux 预计要做成 http, https, ssh, ftp 这三个服务的服务器 (service)

  • 我们的 Linux 预计要让你的惯用系统,也就是 172.16.100.254 这部主机无条件登入

  • 我们的 Linux 预计要让区网 (LAN) ,也就是 172.16.0.0/16 这一整个区段的来源 IP 可以使用 ssh 的连接登入

  1. 先针对服务来说,应该要使用的方法:

    • 先使用 --get-services 查询 firewall-cmd 所认识的所有的服务有哪些

    • 针对永久设定来说,删除原有放行的服务,仅剩下放行 http, https, ssh, ftp 等服务到永久设定的规则中

  2. 针对可以登录我 Linux 系统的来源客户端设置来说,可以这样做:

    • 先查询 man firewalld.richlanguage 相关的规则与 example

    • 只要来自 172.16.100.254 的要求,均予以放行

    • 只要来自 172.16.0.0/16 的 ssh 连接要求,均予以放行

  3. 最终直接将服务重新启动,同时确认现在与未来的设定是否正确

11.2:档案的压缩与打包

许多时刻读者应该会进行档案系统的压缩与打包,让系统的备份数据或者是减少数据的使用空间。 同时,程序员在网络提供数据时, 为了降低带宽使用率,更好的压缩比会是数据压缩的考量选项之一。

11.2.1:档案的压缩指令

在 Linux 环境下,常见的压缩指令有:gzip, bzip2, xz 三种,这三个指令主要的目的为压缩单一档案而已。 但默认的情况下, 被压缩的文件会丢失而仅存在被压缩完成之后的压缩文件,除非使用 -c 的选项搭配数据流重导向,方可原始档案与压缩文件同时存在。

例题 11.2.1-1:测试不同压缩指令的压缩比

  1. 进行大型文件的复制任务 :

    • 前往 /dev/shm 建立 zip 目录,并成为工作目录

    • 找出 /etc 底下最大容量的文件 (使用 ll --help 找出相对应的选项),并将该档案复制到工作目录下

    • 将工作目录下的文件复制成为 filename.1, filename.2, filename.3, filename.4 四个档案

  2. 进行大型文件压缩的功能:

    • 分别使用time测试gzip压缩filename.1,bzip2压缩filename.2,xz压缩filename.3的时间

    • 观察一下哪个压缩指令所花费的时间最长,哪个指令的压缩比最佳。

    • 找到 xz 的 -T 功能搭配 --block-size=128K 的参数,重新使用多执行绪的方式,看看 xz 的压缩有没有效果?

  3. 进行解压缩

    • 最终再以 time 搭配 gzip, bzip2, xz 将刚刚的压缩文件解开,并查阅哪个指令花费的时间最长

  4. 以gzip为例,找出 gzip 的 -c 选项,当 gzip 压缩 filename.1 时,同时保留原档案与建立压缩文件

11.2.2:档案的打包指令, tar

因为gzip,bzip2,xz主要是针对单一档案来进行压缩,对于类似windows提供的 winRAR, zip, 7-zip 等可以将多数档案打包成为一个档案的用法来说, 这些压缩指令是无法达到的。 不过,Linux 环境底下有提供名为 tar 的打包指令,这个指令也可以使用 gzip, bzip2, xz 的函数来打包并压缩, 读者可以将 tar 想成 7-zip 就是了。

tar 的基本语法有点像这样:

[root@localhost ~]# tar [-z|j|J] -c|-t|-x [-v] [-f tar 支援的檔名] [filename...]

使用 tar 后续接的选项,你可以这样思考:

  • [-z|j| J] :是否需要压缩支持,三个选项分别是 gzip, bzip2, xz 的支持

  • -c|-t|-x :实际进行的任务,三个选项分别是打包、查阅资料、解打包

  • -v:是否要查阅指令执行过程

  • [-f tar 支持的文件名] :使用 -f 来处理 tar 的文件

我们很常进行将 /etc/ 完整备份的任务,假设我们要将 /etc 使用最大压缩比的 xz 压缩备份,可以这样做:

[root@localhost ~]# cd /dev/shm/zip [root@localhost zip]# tar -Jcv -f etc.tar.xz /etc [root@localhost zip]# ll etc* -rw-r--r--. 1 root root 3726192  5月 17 20:15 etc.tar.xz

一般来说,tar 的副档名是可以任意命名的,亦即上方的 etc.tar.xz 。 不过最好搭配 tar 以及压缩指令的扩展名较佳,因此常见的扩展名:

  • *.tar:单纯的 tar 并没有压缩

  • *.tar.gz:支持 gzip 压缩的 tar 文件

  • *.tar.bz2:支持 bzip2 压缩的 tar 档案

  • *.tar.xz:支持 xz 压缩的 tar 文件

若需要查看 etc.tar.xz 的档案内容,可以使用如下的方式来查看:

[root@localhost zip]# tar -Jtv -f etc.tar.xz  ....... -rw-r--r-- root/root        28 2020-02-26 09:10 etc/vconsole.conf -rw-r--r-- root/root        16 2020-05-17 15:47 etc/locale.conf -rw-r--r-- root/root        18 2020-05-17 14:40 etc/hostname

只要将 -c 改成 -t 即可查阅压缩文件的内容,同时读者也很清楚的看到,文件名的项目『已经移除了根目录』! 因此,解打包 tar 文件时,默认会在工作目录解开档名。 若需要在不同的目录下解开,就需要搭配 -C 的选项才行 (man tar)。

例题 11.2.2-1: 使用 tar 的应用方式

  1. 进行 tarball 的解压缩功能:

    • 先使用 file 确认 etc.tar.xz 所支持的压缩指令为何

    • 分别将 etc.tar.xz 在本目录与 /tmp 目录解开。

  2. 由于 xz 具有多线程的功能,因此将 tar 通过管道命令后,加入 xz 的压缩方式:

    • 先使用 time tar -Jc -f etc2.tar.xz /etc 确认压缩需要多久时间?

    • 使用 tar -Jc -f - /etc | cat > etc3.tar.xz 确认是否可执行?

    • 使用 tar -c -f - /etc | xz -T 2 --block-size=1M -c > etc4.tar.xz 看看可以执行否?

    • 加上 time 检测时间!

11.2.3:备份功能

tar 经常被用来作为系统档案备份的工具,如果不考虑容量,一般建议使用 gzip 支持速度较快,如果不考虑时间, 则建议支持 xz 压缩的方式处理,可以有较小的空间使用率。

使用 Linux 操作系统的目录来说,推荐备份的目录应该有下面的这些目录 :

  • /etc/ 整个目录

  • /home/ 整个目录

  • /var/spool/mail/

  • /var/spool/{at|cron}/

  • /root/

  • 如果你自行安装过其他的软件,那么 /usr/local/ 或 /opt 也最好备份一下!

如果针对网络服务方面的数据,那经常备份的有:

  • 软件本身的设定文件,例如:/etc/ 整个目录,/usr/local/ 整个目录

  • 软件服务提供的数据,以 WWW 及 Mariadb 为例:

    WWW 数据:/var/www 整个目录或 /srv/www
    整个目录,及系统的用户家目录 Mariadb : /var/lib/mysql 整个目录

  • 其他在 Linux 主机上面提供的服务之数据库文件!

例题 11.2.3-1: 进行系统重要资料的备份,假设我需要备份的目录有底下这些:

  • /etc

  • /home

  • /root

  • /var/spool/mail/, /var/spool/cron/, /var/spool/at/

  • /var/lib/

请撰写一只名为 /backups/backup_system.sh的脚本,来进行备份的工作。 脚本内容可以是:

  1. 设计一个名为 mysource 的变量,变量内容以空格隔开所需要备份的目录

  2. 设计一个名为 mytarget 的变量,该变量为 tar 所建立的文件名,文件名命名规则 backup_system_20xx_xx_xx.tar.gz , 其中 20xx_xx_xx 为公元年、月、日的数字,该数字依据你备份当天的日期由 date 自行取得。 该档案必须要放置到 /backups 目录下喔!

  3. 开始利用 tar 来备份

11.3 Linux 工作排程

Linux 系统的工作非常的多,管理员总是希望系统可以自行管理自己,这样维护系统会比较轻松。 而自动调度的方式有两种,分别是:

  • 单一执行一次,执行完毕后该工作则被舍弃;

  • 一直循环不停的工作

在预设的情况下,Linux 系统提供的上述两种工作调度,最小的时间分辨率为分钟,最大的时间分辨率为一年内。

11.3.1:单次工作排程: at

单次调度工作必须要启动 atd 这个'服务'才能够运作,因此读者应该先查看系统的 atd 是否有启动。

[root@localhost ~]# systemctl status atd ● atd.service - Job spooling tools    Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)    Active: active (running) since Sat 2020-05-16 21:37:02 CST; 23h ago  Main PID: 1137 (atd)     Tasks: 1 (limit: 11476)    Memory: 568.0K    CGroup: /system.slice/atd.service            └─1137 /usr/sbin/atd -f  5月 16 21:37:02 localhost.localdomain systemd[1]: Started Job spooling tools.

确定有在运作即可。

例题 11.3.1-1: 重新启动 atd若上述的判断结果显示为没有启动,该如何处理?

单次循环工作可使用' at TIME '来处理,那个 TIME 为时间格式。 最常见的时间格式为:

[student@localhost ~]$ at HH:MM YYYY-MM-DD [student@localhost ~]$ at now [student@localhost ~]$ at now + 10 minutes

若 student 希望能在今日 11 点,将 ip addr show 的结果输出到自己家目录的 myipshow.txt 文件中,那应该要这样处理:

[student@localhost ~]$ at 11:00 at> ip addr show &> /home/student/myipshow.txt at> <EOT>   <==這裡按下 [ctrl]+d 結束輸入 job 1 at Mon May 18 11:00:00 2020

上表的案例中,我们仅输入一行指令 (ip addr... 那行),底下那行不要输入任何字符,直接按下 [ctrl]+d 的组合按钮即可出现 <EOT>字样, 然后就结束 at 的输入。 接下来我们可以查阅 at 的工作队列状态:

[student@localhost ~]$ atq 1       Mon May 18 11:00:00 2020 a root

上表即表示第一项工作为 student 在 5 月 18 日 11:00 要执行的。 但是实际的内容就得要以' at -c 1'来查看,那个 1 指的是第一个工作, 亦即是 atq 输出的最前面字符的数字。

例题 11.3.1-2:假设你的系统因为所在环境的电力维护问题,因此需要在今年底的 12 月 31 日 17:30 关机。 而你希望在关机前 30 分钟通知线上用户赶快注销 (可用 wall 处理),该如何处理这项任务?

  1. 由于在前30分钟要通知,因此建议在20XX-12-31 17:00就执行at

  2. 使用 wall 来进行通知任务,但 wall 最好用英文不要写中文( 某些终端无法顺利显示)

  3. 使用 sleep 的方式来睡眠 30 分钟

  4. 最后再使用 poweroff 的方式来关机即可。

默认所有人都可以使用 at 这个指令,但如果管理员想要关闭某些用户的 at 使用权,可以将该用户写入 /etc/at.deny 即可。 若要管理的较为严格,则将可以执行 at 的用户写入 /etc/at.allow,则没有写入 at.allow 的用户将无法使用 at。 亦即:

  • 仅 at.deny 存在时:写入该档案内的用户无法使用 at,其余用户可以使用

  • 仅 at.allow 存在时:写入该档案内的用户可以使用 at,其余用户不可使用。

  • at.deny 与 at.allow 同时存在:以 at.allow 为主。

例题 11.3.1-3: 假设上课启动系统之后,你预计 4 个小时候就进行关机,这样假如忘记关电脑就离开教室也就没关系了,该如何处理?

11.3.2:循环工作排程: crontab

循环型的工作日程需要启动 crond 这个服务才行,请先确认这个服务的状态。

[root@localhost ~]# systemctl status crond ● crond.service - Command Scheduler    Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)    Active: active (running) since Sat 2020-05-16 21:37:02 CST; 24h ago  Main PID: 1138 (crond)     Tasks: 1 (limit: 11476)    Memory: 6.2M    CGroup: /system.slice/crond.service            └─1138 /usr/sbin/crond -n  5月 17 12:01:01 www.centos CROND[14959]: (root) CMD (run-parts /etc/cron.hourly)  5月 17 13:01:01 www.centos CROND[15482]: (root) CMD (run-parts /etc/cron.hourly)

基本上,cron 的设定可以分为两种,一种与at很类似,直接让用户操作指令来设定, 一种则是需要修改到系统配置文件,第二种方式只能让管理员来设定。

  • 所有用户均可操作的 crontab 指令

所有用户(包含 root) 默认都能使用 crontab 这个指令,当执行 corntab -e 之后,系统就会进入到 cron 的设置环境, 该环境其实就是使用 vi 函式。 设定方式主要有六个字段,设定口诀为'分时 日月 周 指令',每个字段中间可用空格或 [tab] 按钮隔开。 至于前面五个字段的时间参数限制如下:

代表意义分钟小时日期月份指令
数字范围0-590-231-311-120-7指令最好使用绝对路径

周的数字为 0 或 7 时,都代表'星期天'的意思! 另外,还有一些辅助的字符,大概有底下这些:

特殊字符代表意义
*(星号)代表任何时刻都接受的意思! 举例来说,范例一内那个日、月、周都是 * , 就代表着'不论何月、何日的礼拜几的 12:00 都执行后续指令'的意思!
,(逗号)代表分隔时段的意思。 举例来说,如果要下达的工作是3:00与6:00时,就会是:
0 3,6 * * * command
时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!
-(减号)代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作:
20 8-12 * * * command
仔细看到第二栏变成 8-12 喔! 代表 8,9,10,11,12 都适用的意思!
/n(斜线)那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:
*/5 * * * * command
用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!


例题 11.3.2-1: 用户执行 crontab 指令的方法

  1. 用 sutdent 的身份,让 /usr/sbin/ip addr show 的结果,在每天的 11 点时显示在 /home/student/myipshow.txt 中

  2. 用 sutdent 的身份,每 10 分钟显示一次 ip addr show 的结果到 /dev/shm/myip 文件中。

  • 管理员可以操作的系统设定文件

除了 crontab 之外,管理员也可以在底下的位置放置系统管理的设定,包括:

  • /etc/crontab

  • /etc/cron.d/*

系统管理的部份,建议写入到 /etc/crontab 档案中,如果是管理员想要开发个别的软件,则建议放置于 /etc/cron.d/* 当中。 举例而言,若前一小节谈到的/backups/backup_system.sh 想要每周日定期执行一次时,可以这样设定:

[root@localhost ~]# vim /etc/crontab 0 2 * * 0 root sh /backups/backup_system.sh &> /dev/null

与一般用户的 crontab -e 指令不同,管理员还需要指定'执行该指令的用户身份'为何较佳。 读者也可以将上述的设定写入成为一个文件名, 然后将该文件放入 /etc/cron.d 目录中即可。 此外,系统也已经指定了一些特定时间会执行的目录,用户也能够自己撰写脚本后, 将该脚本写入下列的目录中即可。

  • /etc/cron.hourly/:内容为每小时进行一次的工作

  • /etc/cron.daily/:内容为每天进行一次的工作

  • /etc/cron.weekly/:内容为每周进行一次的工作

  • /etc/cron.monthly/:内容为每月进行一次的工作

例题 11.3.2-2:除了每周进行一次系统备份外,该脚本我希望每个月还能够自动执行一次,该如何处理?

  1. 先让该脚本可以具有执行权 (chmod a+x)

  2. 将该脚本复制一份到 /etc/cron.monthly 即可! (建议可以使用物理链接处理即可)

11.4:课后练习操作

  • 上课的课后练习,非作业:

  1. 清理刚刚课堂上面实做的许多问题:

    1. 想要知道目前的 at job 在哪里,可以查询一下 /var/spool/at 这个目录。

    2. 将刚刚课堂上面的 at 工作检视一下,因为我们还需要进行某些任务,所以,将所有关机的 at job 全部取消。

    3. 关于一般用户 student 所建立的工作中,想要探查是否有正确运作,可以前往 /var/log/cron 查阅, 如果超过 10 分钟以上,就至少能够看到一笔 student 有关的例行工作排程记载

    4. 想要知道所有用户的 crontab -e 的设定资料,可以查阅一下 /var/spool/cron 这个目录!

    5. 尝试关闭 student 的每十分钟运作的那只设定,且请注解它,不要直接删除掉!

  • 作业 (不提供学生答案,仅提供教师参考答案)

作业硬盘操作帮助:

  • 开启云端虚拟机前,请务必确认你开启的硬盘是'unit11',否则就会做错题目

  • 若要使用图形界面,请务必使用 student 身份登入,若需要切换身份,再启用终端机处理。

  • 若有简答题需要使用中文,请自行以第一堂课的动作自行处理输入法安装。

  • 每部虚拟机均有独特的网卡地址,请勿使用他人硬盘上传,否则计分为 0 分。

  • 每位同学均有自己的 IP 尾数,请先向老师询问您的 IP 尾数,才可以进行作业上传。

  • 最终上传作业结果,请务必使用 root 身份上传。

  • 进入操作硬盘后,先用 root 身份执行 vbird_book_setup_ip, 执行流程请参考:vbird_book_setup_ip

作业当中,某些部份可能为简答题~若为简答题时,请将答案写入 /home/student/ans.txt 当中,并写好正确题号,方便老师订正答案。 请注意,文件名写错将无法上传!


请使用 root 的身份进行如下实做的任务。 直接在系统上面操作,操作成功即可,上传结果的程序会主动找到你的实做结果。

  1. (16%)请回答下列问题,并将答案写在 /root/ans11.txt 文件内:

    1. 一般网络检查是否有互联网,会有几个步骤? 每个步骤所需要检查的项目是什么?

    2. 一般 Linux 操作系统在 PC 上面会有两个时间纪录,分别是那两个?

    3. 在 Linux 底下,常见的压缩指令,依据压缩比从最好到最差,写出三个常见的指令。

    4. 例行工作调度的 crontab 使用中,对于一般帐号来说,设定时的六个字段口诀为何?

  2. (20%)系统的基础设置-网络的设置部分:

    • 使用的适配器为 ens3 这个适配器

    • 需要开机就自动启动这个连接

    • 网络参数的设定方式为手动设定,不要使用自动取得喔

    • IP address 为: 192.168.251.XXX/24 (XXX 为上课时,老师给予的号码)

    • Gateway 为: 192.168.251.254

    • DNS server IP为:请依据老师课后说明来设定 (若无规定,请以 168.95.1.1 及 8.8.8.8 这两个为准)

    • 主机名称:请设定为 stdXXX.book.vbird (其中 XXX 为上课时,老师给予的号码)

    1. 由于我们的系统是经过clone出来的,因此所有的设备恐怕都怪怪的。 所以,请先将系统中的 ens3 (或者是其他可对外的网络连接) 这个网络连接删除。

    2. 请根据下面的帮助,重新创建 ens3 这个网络连接 :务必记得设定完毕后,一定要启用这个网络连线,否则成绩无法上传喔!

  3. (15%)系统的基础设置-时间、语系等其他设置:

    1. 你系统的时间好像怪怪的,时区与时间好像都错乱了! 请改回台北的标准时区与时间。

    2. 不知为何,你的语系好像被修改成简体中文了。 请将它改回繁体中文语系喔!

    3. 未来这部主机会作为 WWW/FTP/SSH 服务器,因此防火墙规则中,请放行 http, ftp, ssh 这几个服务。 其他的服务请取消! 请注意,这个规则也需要写入永久设定文件中。

  4. (25%)档案的压缩、解压缩等任务

    • 第一行一定要宣告 shell 喔!

    • 自动判断 /backups 目录是否存在,若不存在则 mkdir 建立她,若存在则不进行任何动作

    • 设计一个名为 mysource 的变量,变量内容以空格隔开所需要备份的目录

    • 设计一个名为 mytarget 的变量,该变量为 tar 所建立的文件名,文件名命名规则 /backups/mysystem_20xx_xx_xx.tar.gz , 其中 20xx_xx_xx 为公元年、月、日的数字,该数字依据你备份当天的日期由 date 自行取得。

    • 开始利用 tar 来备份

    1. (10%)你的系统中有个文件名 /root/mybackup 的文件,这个文件原本是备份系统的数据,但扩展名不小心写错了! 请将这个文件修订成为比较正确的扩展名(例如 /root/mybackup.txt之类的模样),并且将该文件在 /srv/testing/ 目录中解开这个档案的内容。

    2. (15%)我需要备份的目录有:/etc, /home, /var/spool/mail/, /var/spool/cron/, /var/spool/at/, /var/lib/, 请撰写一只名为 /root/backup_system.sh 的脚本,来进行备份的工作。 脚本内容应该是:请注意,撰写完毕之后,一定要立刻执行一次该脚本! 确认实际有建立 /backups 以及相关的备份资料喔!

  5. (10%)请使用网络自动校时服务 (chronyd) 的方式,使用贵校 (以昆山来说,就是 ntp.ksu.edu.tw) 作为服务器,主动更新你的系统时间。 (若贵校并无 NTP 服务器,则以 time.stdtime.gov.tw 作为来源)

  6. (15%)例行工作调度的设置:

    1. 你的系统将在下个月的 20 号 08:00 进行关机的岁修工作,请以'单次'工作排程来设计关机的动作 (poweroff)

    2. 让系统每天 3:00am 时,全系统更新一次! 相关设定请写入 /etc/crontab 内 (可以先查询下一堂课的指令)

    3. 请使用 gooduser 这个账号身份,在每天的 15:30 时,下达' /bin/echo 'It is tea time' '的例行任务。 若有需要使用 gooduser 登入时,该帐号的密码为 mypassword

  7. 重新开机后,请在10分钟内上传你的成绩,若开机后10分钟才上传,则会失败。 只需要重新开机,在10分钟内执行上传程序,就可以继续上传成绩结果。

作业结果传输:请以 root 的身份执行 vbird_book_check_unit 指令上传操作结果。 正常执行完毕的结果应会出现【XXXXXX_aa:bb:cc:dd:ee:ff_unitNN】字样。 若需要查阅自己上传资料的时间, 请在操作系统上面使用浏览器查询: http://192.168.251.254 检查相对应的课程档案。 相关流程请参考: vbird_book_check_unit


©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
  • 验证码
◎已有 0 人评论
搜索
作者介绍
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×