“时间是一种幻觉,午餐时间更是如此。” (Douglas Adams.)

本章解释了Linux系统是如何维护(或保持)时

间的,以及需要做些什么来避免引起麻烦。通常,关于时间你用不着做什么事,但理解它是很有好处的。

时区(Time zones)

时间的度量主要是基于有规则的自然现象,比如行星的旋转导致了有白天和黑夜的交替周期。两个连

续周期所用的总时间是个常数,但是白天以及黑夜的周期长度却是在变化。一个简单的常数例子是正午。

正午是一天中太阳离地面位置

最高时的时刻。由于地球是圆的,正午在不同的地方有不同的时刻。这致使有了当地时间(local

time)的概念。人们用许多单位来度量时间,其中许多的度量单位都与自然现象相关,如正午。只要你待在同一个地方,就用不着关心有不同的当地时间。

在你需要与远地通信的时候,你就会注意到需要一个共同的时间。在现代时期,世界上的许多地方都在相互通信,于是,定义了一个度量时间的全球

标准。这个时间称为世界时(universal time)(UT或UTC,以前以格林威治平均时间Greenwich Mean

Time或GMT,因为这在英格兰格林威治是当地时间)。当有不同当地时间的人进行通信时,他们就能用世界时来表达时间了。这样就不会混淆事情应在什么时

候发生了。

每个当地时间都称为一个时区[time

zone]。虽然地理上理应所有正午时刻相同的地方属于同一个时区,但是政治使它变的复杂。由于各种原因,许多国家使用夏令时(daylight

savings

time),他们调整时钟使工作时获得更多的日光,然后在冬天时把时钟调回。别的国家不这样做。那些这样做的国家,常常争执什么时候调整时钟,而且他们几

乎年年改变规则。这使得时区的转换非常的不易。

时区最好是以地理位置命名或者是通过告知当地与世界时之差的方法。在美国和一些

其他国家,当地时间都有一个名字以及三个字母的缩写。但是,缩写不是唯一的,并且除非与国家名连用,否则不宜使用。最好使用当地名称,如赫尔辛基,来谈论

当地时间而不要用东欧时间(East European time)。因为不是所有的东欧国家都遵循同样的规律的。

Linux

有一个时区软件包,里面包括所有的现存时区,而且当规则改变时能够很容易更新。每个系统管理员所需做的就是选择合适的时区。同样,每个用户可以设置自己的

时区;这显的很重要,因为许多使用计算机的人是通过internet网来自不同的国家。当你本地时区的夏令时规定改变时,一定至少要更新Linux系统中

是那个部分。除了设置系统时区和更新时区数据文件以外,很少要为时间方面烦恼的。

硬件和软件时钟

个人计算机有一颗电池来驱动硬件时钟,这颗电池确保即使在计算机的其它部分没有电时时钟也能工作。硬件时钟可以从

BIOS的设置屏幕上或从正在运行的操作系统中进行设置。

Linux内核从硬件时钟上直接取得时间。在引导期间,Linux将

自己的时钟设置成与硬件时钟同步。在这以后,两个时钟都独立地运行。Linux维持着自己的时钟,因为读取硬件时钟是很慢的并且也比较复杂。

内核时钟总是显示世界时。这样,内核就根本不需要知道什么时区。这种简明性导致高可靠性并使得更新时区信息变得很容易。每一个进程独自处理

时区的转换(使用属于时区软件包中的标准工具)。

硬件时钟可以是本地时间也可以是世界时。通常将硬件时钟设置成世界时更好一

些,因为这样当夏令时开始或结束时你就不需要调整硬件时钟了(UTC没有DST)。不幸的是,有些PC操作系统,包括MS-DOS、Windows、

OS/2,假设硬件时钟显示的是本地时间。Linux对于这两者都可以处理,但如果硬件时钟显示本地时间时,那么,在夏令时开始和结束时都需要调整它(否

则,它将不会显示本地时间)。

显示和设置时间

在Debian系统中,

系统时区由符号连接/etc/localtime确定。这个连接指向描述本地时区的时区数据文件。时区数据文件存储于/usr/lib/zoneinfo

中。其它Linux发行版做法可能不同。

一个用户可以通过设置TZ环境变量来改变他的私有时区。如果TZ没有被设置,就使用系

统时区。TZ变量的语法在tzset的manual page中有描述。

date命令用于显示当前日期和时间。[2] 例如:

$ date

Sun Jul 14 21:53:41 EET DST 1996

$

那个时间是星期日,7月14日,1996年,在大概晚上十点差十分钟,在称为“EET

DST”的时区(可能是指东欧夏令时)。date也可用来显示世界时:

$ date -u

Sun

Jul 14 18:53:42 UTC 1996

Sun Jul 14 18:53:42 UTC 1996

$

date也同样用于设置内核软件时钟:

# date 07142157

Sun Jul 14 21:57:00 EET DST 1996

# date

Sun Jul

14 21:57:02 EET DST 1996

#

详细资料参见date的manual

page;语法有些深奥而难懂。只有超级用户root能设置时间。虽然每个用户可以有他自己的时区,但时钟对每个人来说是一样的。

date仅显示或设置软件时钟。而clock命令用于同步软件时钟和硬件时钟。它用于系统引导时,读取硬件时钟并设置软件时钟。如果你需要设置这两个时

钟,首先要用date来设置软件时钟,然后用clock –w来设置硬件时钟。

clock命令的-u选项告诉系统硬件时钟是世

界时。你必须正确地使用-u选项,否则的话,你的计算机系统会对这个时间到底是什么感到困惑。

更改时钟要小心,Unix系统的

许多部分需要正确工作的时钟。例如,cron后台程序周期性地运行命令。如果你更改了时钟值,那么它会对是否要运行那些命令感到困惑。在早期的Unix系

统上,有人把时钟设快了二十年,这时cron就想要一次性地立刻运行所有二十年的周期命令。目前的cron版本能够正确地处理这个问题,但你仍需要小心。

时间上的大的向前或向后跳跃要比小的或向前的跳跃危险的多。

当时钟不准时

Linux软件时钟并不总是精确的。它是由PC硬件产生的周期性的定时器中断(timer

interrupt)来工作的。如果系统运行了太多的进程,它就需要较长的时间来执行定时器中断程序,并且软件时钟就会漏掉一些中断。硬件时钟是独立运行

的,通常比较精确。如果你经常重新引导你的计算机(对于大多数不是服务器的系统通常如此),它通常能保持较精确的时间。

如果你

需要调整硬件时钟,最简单的办法是重新引导机器,进入BIOS的设置屏幕,并在那里来设置。这样做可以避免所有的改变系统时间可能带来的问题。如果不能从

BIOS中来做的话,就用date以及clock来设置新时间(要按这个次序),并且如果系统的一些部分开始工作的很奇怪时,就要重新引导系统了。

一个连网的计算机(即使是通过modem连网的)能够通过比较自己的时间和网上其它计算机的时间来自动地检查自己的时钟。如果知道其它计算

机有着非常精确的时间的话,那么大家都会有很精确的时间。这可以通过使用rdate和netdate命令来做到。这两个命令都会检测远程计算机上的时间

(netdate能够操作几个远程计算机),并且将本地计算机的时间设置成和远程的一样。通过周期性地运行这些命令,你的计算机就能够保持和远程计算机同

样精确的时间了。

XXX中有有关NTP智能的一些叙述。

阅读(322) | 评论(0) | 转发(0) |

怎么维护linux环境,Linux系统是如何维护时间的相关推荐

  1. Ubuntu Linux环境搭建|系统篇

    说明:本篇以ubuntu Desktop 12.04 for 64位为例 同样适用与11.10等其他版本 一.准备镜像 1. 下载Ubuntu Desktop 12.04 LTS   (目前的最新版本 ...

  2. Linux环境重启系统网卡down,linux重启网卡命令有哪些

    linux重启网卡命令有:1.命令[service network restart]:2.命令[ifconfig eth0 down / ifconfig eth0 up]:3.命令[ifdown e ...

  3. 黑裙安装linux环境,Linux学习笔记(一) ---- 安装Linux系统

    学习Linux的第一件事情,你得先有个Linux系统,才能知道怎么学吧? 于是安装Linux是第一部,找网上找了不少教程,自己总结了一下,些一个博文先. 我安装的Linux是在VMWare 7.2版本 ...

  4. 手机构建Linux环境,Linux手机DIY.构建统一安装包

    Linux手机DIY.构建统一安装包 草木瓜  于 2006-11-25 一.序 因为夏新E600与飞利浦968差异比较大,所以有必要对安装进行一次标准性 的统一.subtle早在几天前就针对目前安装 ...

  5. Linux 环境搭建(如何获得一个免费云服务器)以及Linux基本指令

    搭建 Linux 环境 Linux 环境的搭建方式 主要有三种 直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好, 不推荐. 使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是 ...

  6. 21天jenkins打卡前置准备:linux环境

    前置准备01:得有一套Linux环境 2020年05月06日软件测试圈「每日进阶」 各位,参与打卡前,一定要准备如下内容: 21天打卡,会带着各位,模拟真实企业场景: 会带大家在Linux下部署一套J ...

  7. Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  8. 【Linux】Linux系统编程(入门与系统编程)(三)(深入理解操作系统、进程、环境变量、内存分布)

    本博客操作系统最多涉及30%的理论,重点在于部分进程的内容,部分文件系统的内容,部分文件管理的内容不是主讲操作系统,我们的最终目的是理解系统中最高频的知识点,然后被完全利用指导我们编程. 下面是这三篇 ...

  9. ASP.NET Core 发布至Linux生产环境 Ubuntu 系统

    ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...

最新文章

  1. C/C++ 编程规范(02)— 标识符命名
  2. 深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?
  3. VS2012简单的使用感受+插件推荐
  4. matlab 小波变换_matlab小波工具箱实例(二):时频分析和连续小波变换
  5. Java ClassLoader getParent()方法与示例
  6. linux18.0.4安装mysql
  7. 8183微型计算机,佳木斯大学12年微机原理复习题..doc
  8. 在LINUX中部署FTP服务器
  9. 关于performSelector调用和直接调用区别
  10. Android----获取包名和sh1
  11. 清除Mac OS X文件系统的附加属性@
  12. 程序员有文化,多可怕!
  13. 【C】C语言判断是否质数
  14. 瞎琢磨先生のJava笔记之Java代码远程调用shell脚本
  15. 苹果考虑推迟发布5G iPhone
  16. c++system函数
  17. 网络游戏长连接与短连接的差异
  18. 21闭关修炼 习题分册
  19. 谷歌相机第一个版本_您的第一个Google地图
  20. PIC16F877A单片机 (IIC总线+PCF8563芯片)

热门文章

  1. python3安装speech语音模块
  2. img标签图片的刷新,删除
  3. HTML---下拉框、列表框使用详解(select 与 option)
  4. Ubuntu Desktop 更改默认应用程序 (Videos -> SMPlayer)
  5. includes() 方法
  6. 【Opencv项目实战】背景替换:动态背景移除与替换(cvzone+MediaPipe)
  7. 边框样式(border-style)、边框圆角(border-radius)以及媒体查询(@media)
  8. 怎么看台式计算机的屏幕大小,如何在计算机上查看显示器尺寸win10
  9. 正太分布函数和反函数 标量值函数 (借鉴)
  10. SQL 触发器-如何查看当前数据库中有哪些触发器