Linux 基础网络设置、工作调度、基础的文件压缩与打包 (tar) 等等的应用!
帐号与权限的部份了解告一段落之后,读者应该可以针对系统进行一些基础的设置了,包括网络、日期时间等等。 同时,最好也能理解一下系统的备份工作,同时为了减少备份的容量,理解一下文件的压缩与打包也是重要的工作。 最终,当事情通通要交给系统独自运作时,读者对于工作调度的理解也不能少。
在更进一步管理系统前,先来整理一下系统的网络建置、日期与时间的修改、语系等相关的设置,让系统更符合你的操作行为与环境。
网络设置是系统管理员主要负责的项目。一般来说,以服务器的角度观之,通常服务器的网络都是固定的,大多使用手动的方式来设置好网络。 如果是以桌机的角度来看,则大多使用自动取得网络参数,亦即所谓的『 dhcp 』协定来自动处理。如果是台湾地区的一般民众, 可能会有两个主要的网络参数取得方式,一个是与电话线路结合,例如中华电信的 ADSL 或者光世代的拨接方式,一种则是通过与第四台的缆线结合。
CentOS 7 以后,系统希望读者使用 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
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
mode DEFAULT qlen 1000
link/ether 52:54:00:21:bc:9e brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
mode DEFAULT
link/ether 52:54:00:2f:74:a6 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state
DOWN mode DEFAULT qlen 500
link/ether 52:54:00:2f:74:a6 brd ff:ff:ff:ff:ff:ff
上述的 lo, eth0, virbr0, virbr0-nic 等等就是网络适配器!系统实际上就是通过这些适配器来连接到网络的。读者应该要知道, 一张适配器可以同时提供多个网络地址 (IP),而利用这些适配器来达成连接的方式就称为网络连接代号。查找网络连接代号的方式如下:
[root@localhost ~]# nmcli connection show
NAME UUID TYPE DEVICE
virbr0-nic 94c93abe-6786-444c-9cdd-1f20961473ca generic virbr0-nic
virbr0 ac82c547-0c6c-464f-8e38-d4a5efa90788 bridge virbr0
eth0 ff0b88ed-7cc6-4803-be7d-e77c74fea95b 802-3-ethernet eth0
读者们应该要注意的是:
由于读者们所操作的系统是本教材提供的拷贝品,对于您的环境来说,可能有些许的差异,因此,建议你应该要删除 eth0 这个连接代号, 然后重建一次 eth0 比较妥当。删除连接与创建连接的方式如下:
[root@localhost ~]# nmcli connection delete eth0 [root@localhost ~]# nmcli connection add con-name eth0 ifname eth0 type ethernet Connection 'eth0' (ab47810d-2aca-4956-9263-de0952b4eebc) successfully added. [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE virbr0-nic 94c93abe-6786-444c-9cdd-1f20961473ca generic virbr0-nic virbr0 ac82c547-0c6c-464f-8e38-d4a5efa90788 bridge virbr0 eth0 ab47810d-2aca-4956-9263-de0952b4eebc 802-3-ethernet eth0
读者会发现到 eth0 连接代号的 UUID 改变了,同时 DEVICE 会搭配到你的网络界面卡,此时系统就帮你建置好 eth0 这个连接代号。
详细的网络连接代号内容的观察,可以这样做:
[root@localhost ~]# nmcli connection show eth0
connection.id: eth0
connection.uuid: ab47810d-2aca-4956-9263-de0952b4eebc
connection.interface-name: eth0
connection.type: 802-3-ethernet
connection.autoconnect: yes
.......
ipv4.method: auto
ipv4.dns:
ipv4.dns-search:
ipv4.addresses:
ipv4.gateway: --
ipv4.routes:
.......
ipv6.method: auto
ipv6.dns:
ipv6.dns-search:
ipv6.addresses:
ipv6.gateway: --
.......
IP4.ADDRESS[1]: 172.16.0.83/16
IP4.GATEWAY: 172.16.200.254
IP4.DNS[1]: 172.16.200.254
IP4.DOMAIN[1]: gocloud.vm
DHCP4.OPTION[1]: requested_domain_search = 1
DHCP4.OPTION[2]: requested_nis_domain = 1
DHCP4.OPTION[3]: requested_time_offset = 1
.......
IP6.ADDRESS[1]: fe80::5054:ff:fe21:bc9e/64
IP6.GATEWAY:
一般来说,输出的信息有小写字符与大写字符,小写字符大多为『设置值』,大写字符大多为『现在运作中的状态数据』。 上表仅列出较为重要的信息,包括有:
至于大写字符里头,比较常见的重要项目:
基本上,如果看到 DHCP4.OPTION 之类的字样,代表这个网络连接代号主要是通过『自动取得 IP 』的方式来处理的。
所谓的自动取得 IP 参数,代表使用 DHCP 服务器来管理网络参数的给予,因此读者的环境中应该具有 IP 分享器或其他提供 DHCP 功能的设备。 由于所有的设置均来自于 DHCP 服务,因此读者仅须提供 ipv4.method 为自动 (auto) 即可。
[root@localhost ~]# nmcli connection modify eth0 ipv4.method auto [root@localhost ~]# nmcli connection up eth0 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
上表『 nmcli connection up eth0 』代表使用设置值来重新启动这个网络连接代号之意。
网络环境的设置主要由 ISP 来提供,假设你的系统所在的 ISP 告知你的网络设置如下:
读者可以通过底下的方式来处理手动设置 IP 的方式:
[root@localhost ~]# nmcli connection modify eth0 \ > 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 eth0 ....... 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 eth0
确认启动网络之后,观察一下最下方的大写字样的数据,是否正确显示出跟你设置值相同的信息?
[root@localhost ~]# nmcli connection show eth0
.......
IP4.ADDRESS[1]: 172.16.50.1/16
IP4.GATEWAY: 172.16.200.254
IP4.DNS[1]: 172.16.200.254
IP6.ADDRESS[1]: fe80::5054:ff:fe21:bc9e/64
IP6.GATEWAY:
一般连接到 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: 741c73b552ed495d92a024bc7a9768cc Boot ID: 2b1132689ed24361b2dec52309174403 Virtualization: kvm Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-327.el7.x86_64 Architecture: x86-64
这样立刻设置好主机名称,且可以不用重新开机。
地球上每个地区都有专属于自己的时区,因此当你带着 notebook 到不同时区的地点时,可能得要修订自己的电脑时间才行。 修订的方式可以使用 CentOS7 提供的 timedatectl 指令。
[root@localhost ~]# timedatectl
Local time: Tue 2016-05-10 19:25:38 CST
Universal time: Tue 2016-05-10 11:25:38 UTC
RTC time: Tue 2016-05-10 11:25:52
Time zone: Asia/Taipei (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
除了自行设置之外,读者亦可通过网络来进行时间的校正。以昆山科大来说,昆山科大提供了 ntp.ksu.edu.tw 这个 NTP 服务器, 因此网络校时可以简单的进行:
[root@localhost ~]# ntpdate ntp.ksu.edu.tw 10 May 11:28:30 ntpdate[18839]: step time server 120.114.100.1 offset -28784.726606 sec [root@localhost ~]# hwclock -w
如上表所示,某些特殊的环境下,台湾的时间会快了 8 小时,这是因为虚拟机使用了格林威治时间所致。校正后系统即可正确设置。
读者应该会发现到现今的操作系统大多可以保持正确的时间,再也无须进行手动校时。CentOS 7 提供两个机制来协助网络校时, 一个是通过 chronyd 服务,一个则是通过 ntpd。CentOS 7 缺省使用 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). #server 0.centos.pool.ntp.org iburst <==将缺省的服务器注解 #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst server ntp.ksu.edu.tw iburst <==加入所需要的服务器 ..... [root@localhost ~]# systemctl enable chronyd [root@localhost ~]# systemctl restart chronyd [root@localhost ~]# systemctl status chronyd ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled) Active: active (running) since 一 2017-04-03 02:26:43 EDT; 4s ago Process: 2086 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS) Process: 2082 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 2084 (chronyd) CGroup: /system.slice/chronyd.service └─2084 /usr/sbin/chronyd 4月 03 02:26:43 localhost systemd[1]: Starting NTP client/server... 4月 03 02:26:43 localhost chronyd[2084]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC... 4月 03 02:26:43 localhost chronyd[2084]: Generated key 1 4月 03 02:26:43 localhost systemd[1]: Started NTP client/server. 4月 03 02:26:47 localhost chronyd[2084]: Selected source 120.114.100.1 4月 03 02:26:47 localhost chronyd[2084]: System clock wrong by 2.322333 seconds, adjustment started Hint: Some lines were ellipsized, use -l to show in full.
若有需要了解到目前的 NTP 时间状况,可以使用追踪 (tracking) 来处理看看:
[root@localhost ~]# chronyc tracking
Reference ID : 120.114.100.1 (ntp.ksu.edu.tw)
Stratum : 4
Ref time (UTC) : Mon Apr 3 06:38:52 2017
System time : 0.000042931 seconds slow of NTP time
Last offset : -0.000060345 seconds
RMS offset : 0.000033498 seconds
Frequency : 19.614 ppm slow
Residual freq : -0.102 ppm
Skew : 0.959 ppm
Root delay : 0.008587 seconds
Root dispersion : 0.054062 seconds
Update interval : 64.2 seconds
Leap status : Normal
如此一来,如果有网络,则此 Linux 系统就能够持续的更新时间了。
登录系统时,取得 bash 之后,会有缺省的语系数据,缺省读者的环境应该是 zh_TW.utf8 这个语系。但是图形界面登录处缺省为英文语系, 那个环境即为『系统语系』的相关设置。读者可以使用 locale 来查阅目前的语系,而使用 localectl 来查阅系统的缺省语系。
[root@localhost ~]# localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us,cn
X11 Variant: ,
X11 Options: grp:ctrl_shift_toggle
若想要让图形界面的画面以台湾中文为主,可以使用如下的方式来处置:
[root@localhost ~]# localectl set-locale LANG=zh_TW.utf8 [root@localhost ~]# systemctl isolate multi-user.target [root@localhost ~]# systemctl isolate graphical.target
若要作为服务器,那么 Linux 的防火墙管理就显的重要了。CentOS 7 提供一个名为 firewalld 的防火墙服务, 这个防火墙主要通过 firewall-cmd 指令管理,而防火墙的运行分为两种方式:
此外,为了方便管理,防火墙将许多不同的应用定义了多种的领域 (zone),不过,在这里我们只需要知道公开的领域 (public) 即可。
[root@localhost ~]# firewall-cmd --get-default-zone public [root@localhost ~]# firewall-cmd --list-all public (default, active) interfaces: eth0 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
上面表格显示缺省的防火墙使用 public 这个领域的规则设置,而 public 领域内的数据中,主要应用了:
未来如果读者的服务器要加上 httpd 这个 WWW 网页服务器服务的话,就以如下的方式来加入:
[root@localhost ~]# firewall-cmd --add-service=http success [root@localhost ~]# firewall-cmd --list-all public (default, active) interfaces: eth0 sources: services: dhcpv6-client http ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
但是上述指令仅能在这次开机阶段运行,重新开机后,或者是重新加载 firewalld 之后,这条规则就被注销了。因此, 确认规则是正常的之后,应该使用如下的方式增加到设置档当中才对:
[root@localhost ~]# firewall-cmd --add-service=http --permanent success [root@localhost ~]# firewall-cmd --list-all --permanent
请自行确认输出的结果含有 http 才行。
许多时刻读者应该会进行文件系统的压缩与打包,让系统的备份数据或者是减少数据的使用空间。同时,程序员在网络提供数据时, 为了降低带宽使用率,更好的压缩比会是数据压缩的考量选项之一。
在 Linux 环境下,常见的压缩指令有:gzip, bzip2, xz 三种,这三个指令主要的目的为压缩单一文件而已。但缺省的情况下, 被压缩的文件会遗失而仅存在被压缩完成之后的压缩档,除非使用 -c 的选项搭配数据流重导向,方可源文件案与压缩文件同时存在。
因为 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 后续接的选项,你可以这样思考:
我们很常进行将 /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 5635764 5月 11 11:57 etc.tar.xz
一般来说,tar 的扩展名是可以随意取的,亦即上方的 etc.tar.xz 。不过最好搭配 tar 以及压缩指令的扩展名较佳,因此常见的扩展名为:
若需要查看 etc.tar.xz 的文件内容,可以使用如下的方式来查看:
[root@localhost zip]# tar -Jtv -f etc.tar.xz
.......
-rw-r--r-- root/root 11 2016-05-10 19:06 etc/hostname
-rw-r--r-- root/root 163 2016-02-18 02:54 etc/.updated
-rw-r--r-- root/root 12288 2016-02-18 18:42 etc/aliases.db
只要将 -c 改成 -t 即可查阅压缩文件的内容,同时读者也很清楚的看到,文件名的项目『已经移除了根目录』! 因此,解打包 tar 文件时,缺省会在工作目录解开文件名。若需要在不同的目录下解开,就需要搭配 -C 的选项才行 (man tar)。
tar 经常被用来作为系统文件备份的工具,如果不考虑容量,一般建议使用 gzip 支持速度较快,如果不考虑时间, 则建议支持 xz 压缩的方式处理,可以有较小的空间使用率。
以 Linux 操作系统的正规目录来说,建议备份的目录应该有底下的这些目录:
若是针对网络服务方面的数据,那经常备份的有:
Linux 系统的工作非常的多,管理员总是希望系统可以自行管理自己,这样维护系统会比较轻松。而自动调度的方式有两种,分别是:
在缺省的情况下,Linux 系统提供的上述两种工作调度,最小的时间分辨率为分钟,最大的时间分辨率为一年内。
单次调度工作必须要启动 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 二 2016-05-03 00:01:14 CST; 1 weeks 2 days ago Main PID: 1271 (atd) CGroup: /system.slice/atd.service └─1271 /usr/sbin/atd -f 5月 03 00:01:14 localhost systemd[1]: Started Job spooling tools. 5月 03 00:01:14 localhost systemd[1]: Starting Job spooling tools...
确定有在运作即可。
单次循环工作可使用『 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 Thu May 12 11:00:00 2016
上表的案例中,我们仅输入一行指令 (ip addr... 那行),底下那行不要输入任何字符,直接按下 [ctrl]+d 的组合按钮即可出现 <EOT> 字样, 然后就结束 at 的输入。接下来我们可以查阅 at 的工作队列状态:
[student@localhost ~]$ atq
1 Thu May 12 11:00:00 2016 a student
上表即表示第一项工作为 student 在 5 月 12 日 11:00 要运行的。但是实际的内容就得要以『 at -c 1 』来查看,那个 1 指的是第一个工作, 亦即是 atq 输出的最前面字符的数字。
缺省所有人都可以使用 at 这个指令,但如果管理员想要关闭某些用户的 at 使用权,可以将该用户写入 /etc/at.deny 即可。 若要管理的较为严格,则将可以运行 at 的用户写入 /etc/at.allow,则没有写入 at.allow 的用户将无法使用 at。亦即:
循环型的工作调度需要启动 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 二 2016-05-03 00:01:14 CST; 1 weeks 2 days ago Main PID: 1273 (crond) CGroup: /system.slice/crond.service └─1273 /usr/sbin/crond -n 5月 03 00:01:14 localhost systemd[1]: Started Command Scheduler. 5月 03 00:01:14 localhost systemd[1]: Starting Command Scheduler... 5月 03 00:01:14 localhost crond[1273]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 67% if used.) 5月 03 00:01:15 localhost crond[1273]: (CRON) INFO (running with inotify support)
基本上,cron 的设置可以分为两种,一种与 at 很类似,直接让用户操作指令来设置, 一种则是需要修改到系统设置档,第二种方式只能让管理员来设置。
所有用户 (包含 root) 缺省都能使用 crontab 这个指令,当运行 corntab -e 之后,系统就会进入到 cron 的设置环境, 该环境其实就是使用 vi 函数。设置方式主要有六个字段,设置口诀为『分 时 日 月 周 指令』,每个字段中间可用空格或 [tab] 按钮隔开。 至于前面五个字段的时间参数限制如下:
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 指令 |
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-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 ,相同意思! |
除了 crontab 之外,管理员也可以在底下的位置放置系统管理的设置,包括:
系统管理的部份,建议写入到 /etc/crontab 文件中,如果是管理员想要开发个别的软件,则建议放置于 /etc/cron.d/* 当中。 举例而言,若前一小节谈到的 /backups/backup_system.sh 想要每周日定期运行一次时,可以这样设置:
[root@localhost ~]# vim /etc/crontab
0 11 * * 0 root sh /backups/backup_system.sh &> /dev/null
与一般用户的 crontab -e 指令不同,管理员还需要指定『运行该指令的用户身份』为何较佳。读者也可以将上述的设置写入成为一个文件名, 然后将该文件放入 /etc/cron.d 目录中即可。此外,系统也已经指定了一些特定时间会运行的目录,用户也能够自己撰写脚本后, 将该脚本写入下列的目录中即可。
前置动作:请使用 unit11 的硬盘进入作业环境,并请先以 root 身分运行 vbird_book_setup_ip 指令设置好你的学号与 IP 之后,再开始底下的作业练习。
请使用 root 的身份进行如下实做的任务。直接在系统上面操作,操作成功即可,上传结果的程序会主动找到你的实做结果。
作业结果传输:请以 root 的身分运行 vbird_book_check_unit 指令上传作业结果。 正常运行完毕的结果应会出现【XXXXXX;aa:bb:cc:dd:ee:ff;unitNN】字样。若需要查阅自己上传数据的时间, 请在操作系统上面使用: http://192.168.251.250 检查相对应的课程文件。