8.9. 其他配置:时间同步、记录、共享近用…
本节列出的细目对希望精通 GNU/Linux 系统配置极有帮助。这里只列出简要的内容,详情仍需参阅文档。
8.9.1. 时区
基本 符号链接
符号链接是一种指向另个文件的指针。近用时,被指向的文件就被打开。移除链接不会删除指向的文件。同样的,没有自的授权,而是使用目标本身的授权。最后,可以用于任何类型的文件:文件夹、特殊文件 (网络插座、具名管道、设备文件等)、甚至另个符号链接。
ln -s *target* *link-name*
命令添加一个符号链接,命名为 link-name,指向 target。
若目标不存在,则链接算是 “破损” 且其近用送回错误消息指示目标文件不存在。若链接指向另个链接,该链接又指向其前任链接,则该等链接的 “链” 形成 “循环”。在这种情况下,近用循环内的任一链接也会得到特定的错误 (“过多层的符号链接”);经过若干循环后核心放弃它。
初始安装时经由 tzdata 软件包配置时区。dpkg-reconfigure tzdata
命令以交互方式修改时区。其配置内容保存在 /etc/timezone
文件。在 /usr/share/zoneinfo
文件夹内映射的文件复制在 /etc/localtime
文件内;此文件包括使用日光节约时间的国家。
暂时变更时区,可使用 TZ
环境变量,它的优先次序在缺省的配置档之前:
$
说明 系统时钟,硬件时钟
电脑内有两个时间来源。主板有个硬件时钟,称为 “CMOS 时钟”。这个时钟不准,近用的速度慢。操作系统核心有自己的系统时钟,以自己的方式 (可能由时间服务器协助,见 第 8.9.2 节 “时间同步”) 保持时间的正确。此系统时钟较为准确,尤其是不需经由硬件变量就能近用。然而,系统时钟只存在于内存,开机就归零,不像 CMOS 时间钟,有电池支持,不受重新开机或暂停下仍能 “存活”。因此,开机时,由 CMOS 时钟设置系统时钟,关机时更新 CMOS 时钟 (若被不当调整就能修正它)。
实务上有个问题,因为 CMOS 时钟只是个计数器,未含时区信息。有几个方式选择其解释方式:系统以世界标准时间 (UTC,旧称 GMT),或当地时间看待。虽然可以简单切换,但却颇为复杂:它的偏移值不是常数。系统无法判断偏移值的正确性,尤其在时区交接。总是在世界标准时间与时区信息之间重组本地时间,建议使用 CMOS 时间为世界标准时间。
不幸的是,窗口系统缺省的配置忽视此建议;仍以 CMOS 时钟为本地时间,启动时猜测时区的变动。只要运行单一的窗口系统,就没有问题。可是,电脑经常安装多个系统 (“双重开机” 配置或在虚拟机运行其他系统),混乱就免不了,无法决定正确的时间。必须保留窗口系统的前提下,应把 CMOS 时钟配置成 UTC (把机码 HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal
设置为 “1” 做为 DWORD),或使用 Debian 系统的 hwclock --localtime --set
设置硬件时钟并标记追踪其为本地时间 (并且在春秋两季手段检查时钟的正确性)。
8.9.2. 时间同步
时间同步,在单机时代是多余,但在网络时代却很重要。用户无权修改日期与时间,所以需要精准的时间以免混乱。尤有甚者,网络上的电脑时间同步后,有助于安排社区工作者透过网络全球串联。受到攻击时,容易依序恢复原来的运作。由多部机器收集来的统计数据,必须有同步的时间,才能发挥作用。
基本 NTP
网络时间协议 (Network Time Protocol, NTP) 可以让机器间相当精准的同步,甚至把网络延迟及其他偏移值列入考量。
互联网上很多 NTP 服务器可用,受欢迎的其工作量可能负荷过重。所以建议使用 pool.ntp.org NTP 服务器,它是一组公开的 NTP 服务器。也可使用针对特定地区的次群组服务器,如 us.pool.ntp.org 系供美国使用、ca.pool.ntp.org 供加拿大使用。
然而,管理大型网络时,还是应安装与公共服务器同步的自己 NTP 服务器。同个网络上自己的机器,就能使用内部的 NTP 服务器不必增加外部公共服务器的负担。以自己的时钟增加网络内机器的同质化,同步截取与共用资源,使用共同的网络交换时间。
8.9.2.1. 给工作站
工作经常需要重新开机 (虽然只是节省能源),开机时以 NTP 同步就够了。安装 ntpdate 软件包就可以。需要更换 NTP 服务器时,再修改 /etc/default/ntpdate
文件即可。
8.9.2.2. 供服务器
服务器很少重开机,系统时间必须绝对精准。为了永久维持时间的正确性,必须安装由 ntp 软件包提供的 NPT 服务器。缺省的配置方式系与 pool.ntp.org 同步,且回应本地网络的请求。可以编辑 /etc/ntp.conf
文件改变原来的配置,NTP 服务器依照该文件的内容而变更。若有多个服务器,最好有一个本地时间服务器与公共的服务器同步,并做为本地网络其他服务器的同步的依据。
进一步 GPS 模块与其他时间来源
如果网络对时间同步极为敏感,最好在服务器安装 GPS 模块 (which will use the time from GPS satellites) 或 DCF-77 模块 (which will sync time with the atomic clock near Frankfurt, Germany)。在这种情况下,NTP 服务器的配置就有点复杂,必须参照文档办理。
8.9.3. 轮转日志档
日志档成长的速度很快,需要典藏它。最常的做法是循环典藏:只保留最新的 X 部分。logrotate
是负责循环的程序,根据 /etc/logrotate.conf
文件内的配置,把日志档保存在 /etc/logrotate.d/
文件夹内。管理者可以修改该等文件,修改 Debian 缺省的循环政策。logrotate(1) 手册页面描述该配置可用的选项。可以在循环的过程中,增加典藏的文件数,或把文件移至指定的文件夹而不是删除它们。也可以电子邮件方式寄到别的地方。
logrotate
程序每日运行 cron
调度的要求 (详情见 第 9.7 节 “使用 cron
和 atd
运行计划任务”)。
8.9.4. 共享管理员权限
数个管理者共同在同个服务器工作。共用同个根用户密码不是好主意,匿名引发的误用很麻烦。解决方案是使用 sudo
程序,允许用户对特定命令拥有专门的权力。在多数情况下,sudo
允许受信任的用户以根的权限运行命令。用户只需运行 sudo *command*
并以个人的密码通过认证。
安装的时候,sudo 软件包把完整的 root 权限授权给 sudo
Unix 群组。管理者必须使用 visudo
命令授予其他权利,该命令允许用户修改 /etc/sudoers
配置档 (当然,必须启用 vi
编辑器,或在 EDITOR
环境变量指定的编辑器)。添加一列 *username* ALL=(ALL) ALL
就能允许该用户以 root 的授权运行命令。
还有较复杂的配置,只允许特定用户运行部分命令。详情在 sudoers(5) 手册页面。
8.9.5. 挂载点清单
基本 挂载与卸载
在 Debian 这类的 Unix-like 系统里,文件以树状的文件夹阶层组织。/
文件夹称为 “根文件夹”;其他的文件夹都是此根文件夹的次文件夹。“挂载” 是把周边设备 (通常是磁盘) 纳入系统文件树的作业。如果以其他磁盘保存用户个人的数据,将 “挂载” 于 /home/
文件夹。根文件系统由核心永远挂载于根;其他设备则稍后再透过启动顺序或以 mount
命令挂载进来。
有些移动式设备在链接时系统自动挂载,尤其在 GNOME、KDE 或其他图形桌面环境。有些情况就需要用户手动挂载。同样的,也需要卸载 (从文件树移除)。标准的用户权限不允许运行挂载 mount
与卸载 umount
命令。只有管理者才能够设置 user
选项于 /etc/fstab
文件内,授权用户运行该等命令 (独立于每个挂载点)。
mount
命令可以直接使用不需参数 (列出所有已挂载的文件系统)。以下参数为挂载或卸载设备所必需。完整的参数,请参见对应的手册页面,mount(8) 与 umount(8)。单纯个案的语法也简单:例如,挂载使用 ex3 文件系统的 /dev/sdc1
分区入 /mnt/tmp/
文件夹时,需运行 mount -t ext3 /dev/sdc1 /mnt/tmp/
命令。
/etc/fstab
文件列出所有开机自动挂载或手动挂载的移动保存设备。每个挂载点由一列文本描述,包括若干空格区隔的字段:
待挂载的设备:可以是本地分区 (硬盘、CD-ROM) 或远程的文件系统 (如 NFS)。
此字段通常以文件系统的 ID 取代 (可以用
blkid **`device`**
) 前置及UUID=
。此种方式可以应付添加或移除磁盘设备名称的情况,或者以其他顺序侦测到的磁盘。挂载点:这是把设备、远程系统,或分区挂载于本地文件系统的位置。
类型:这个字段定义挂载设备使用的文件系统。
ext4
、ext3
、vfat
、ntfs
、btrfs
、xfs
等。基本 NFS,网络文件系统
NFS 是一种 Linux 环境下的网络文件系统,把远程的文件以透明方式纳入本地的文件系统内。
知名的文件系统清单在 mount(8) 手册页面。特殊值
swap
系供交换分区使用;特殊值auto
告诉mount
程序自动侦测文件系统 (对读卡机与 USB 磁盘机特别有用,因为它们可能使用不同的文件系统);选项:依文件系统的不同,而有多种选项,详情见
mount
手册页面。最常用的是rw
或ro
,表示该设备挂载后可以读/写,或只有读取的权限。noauto
开机时关闭自动挂载。nofail
允许在启动时处理设备,即使该设备不存在。确认启动时,该外置磁盘机可能未插入,因为systemd
将确认所有挂载点在启动完成前必须自动挂载。可将此与x-systemd.device-timeout=5s
并用,告诉systemd
不必等 5 秒以上的时间,直接进入下个作业阶段 (见 systemd.mount(5))。user
授权所有的用户均可挂载此文件系统 (若无此选项,则只有根用户才有此权限)。defaults
表示缺省的选项群组为:rw
、suid
、dev
、exec
、auto
、nouser
与async
,使用了defaults
之后,还可以用nosuid
命令、nodev
及其他类似的命令,中止suid
、dev
等作用。加入user
选项可再启用它,因为defaults
包括nouser
。
备份:此字段几乎都设为
0
。当它是1
时,告诉dump
工具将备份有数据的分区。检查顺序:最后一个字段告知系统在启动时,或其他时机,检查文件系统的完整性。若设为
0
,则不检查。根文件系统的值为1
,其他固定文件系统的值为2
。
例 8.5. 范例 /etc/fstab
文件
- # /etc/fstab: static file system information.
- #
- # <file system> <mount point> <type> <options> <dump> <pass>
- proc /proc proc defaults 0 0
- # / was on /dev/sda1 during installation
- UUID=c964222e-6af1-4985-be04-19d7c764d0a7 / ext3 errors=remount-ro 0 1
- # swap was on /dev/sda5 during installation
- UUID=ee880013-0f63-4251-b5c6-b771f53bd90e none swap sw 0 0
- /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
- /dev/fd0 /media/floppy auto rw,user,noauto 0 0
- arrakis:/shared /shared nfs defaults 0 0
此例的最后一个条目对应于网络文件系统 (NFS):/shared/
文件夹位于 arrakis 服务器挂载于本地机器的 /shared/
。/etc/fstab
文件格式位于 fstab(5) 手册页面。
下一步 自动挂载
am-utils 软件包提供 amd
自动加载公用程序,使月手者近用其惯用的挂载点时,可在需要时挂载移动式媒体。无法在不用时自动卸载该等设备。
还有其他自动挂载公用程序,诸如 automount
位在 autofs 软件包中。
与 GNOME、KDE 及其他图形桌面环境一起工作的 udisks,在链接移动媒体时,也可自动挂载。
8.9.6. locate 与 updatedb
可以用 locate
命令找寻已知名称的文件。几乎即时送回结果,因为它搜索的数据库保存系统内所有文件的位置;此数据库由 updatedb
命令每日更新。locate
命令还有其他用途,Debian 选择 mlocate 做为其标准系统。
mlocate
很聪明,只送回该命令用户能够近用的文件,不会显示系统内其他符合条件的文件 (因为它以根权限运行 updatedb
命令)。为了提供额外的安全保护,管理者可以使用 PRUNEDPATHS
位于 /etc/updatedb.conf
,排除已经索引的其他文件夹。