Linux管理员手册(9)--KeepingTime
Linux -- 手册 管理员
2023-06-13 09:13:45 时间
本章说明Linux系统如何keepstime,及需要做什么来避免发生问题。通常,你无须对时间做什么,但理解它会更好。
时区
时间测量基于最规则的自然现象,如地球转动导致的昼夜更替。昼夜总时间是恒定的,但昼夜分别的长度是变化的。一个简单的常数是正午。
正午是白天太阳在最高点的时间。由于地球是圆的,不同地方正午发生在不同的时间。这引出了本地时localtime的概念。
硬件时钟和软件时钟
个人计算机有一个电池驱动的硬件时钟。电池保证始终在计算机没电的时候依然能工作。硬件始终能从BIOS设置屏或操作系 统的别的地方进行设置。
Linux核心独立于硬件始终跟踪时间。启动时,Linux根据硬件时钟设置自己的时钟。此后,2个始终相互独立运行。因为查看硬件始终慢而复杂,因此Linux管理自己的时钟。
核心始终一直显示通用时间。这样,核心无须知道时区,高可靠的简单结果使更新时区信息更简单。每个进程自己处理时区转换(使用时区包部分里的标准工具)。
硬件始终可以是本地时间或通用时间。通常用通用时间更好,因为这样你无须在夏时制开始或结束时改变硬件时钟(UTCdoesnothaveDST)。不幸的是,有些PC操作系统,包括MSDOS、Windows、OS/2都假设硬件时钟是本地时间。Linux可处理2种方式,但如果硬件时钟显示本地时间,那么必须在夏时制开始或结束时(否则就不能显示本地时间)。
显示和设置时钟
在Debian系统中,系统时区由符号连接/etc/localtime决定。连接指向描述本地时区的时区数据文件。时区数据文件存在/usr/lib/zoneinfo中。其他Linuxdistributions可能不同。
用户可以用设置TZ环境变量来改变他的私人时区。如果不设置,就假定是系统时区。TZ变量的语法在tzset(3)man页中说明。
date命令显示当前日期和时间。例如:
$date
SunJul1421:53:41EETDST1996
$
ThattimeisSunday,14thofJuly,1996,atabouttenbeforetenattheevening,inthetimezonecalled``EETDST""(whichmightbeEast EuropeanDaylightSavingsTime).date也可用于显示通用时间:
$date-u
SunJul1418:53:42UTC1996
$
date也可用于设置核心的软件始终:
#date07142157
SunJul1421:57:00EETDST1996
#date
SunJul1421:57:02EETDST1996
#
更详细的见dateman页--syntaxisabitarcane.只有root能设置时间。虽然每个用户可以有自己的时区,但时钟对每个人都是一样的。
date只显示或设置软件时钟。clock命令同步硬件和软件时钟。用于系统启动时读取硬件时钟和设置软件时钟。如果两个时钟都需要设置,则先用date设置软件时钟,然后用clock-w设置硬件时钟。
clock的-u告诉它硬件时钟是通用时间。必须正确使用-u选项。否则计算机将困惑到底是什么时间。
时钟必须小心改变。Unix系统的许多部分要求时钟工作正常。例如,cron守侯程序周期地运行命令。如果改变时钟,它可能迷惑它是否该运行命令。OnoneearlyUnixsystem,someonesettheclocktwentyyearsintothefuture,andcronwantedtorunalltheperiodiccommandsfortwentyyearsallatonce.现在版本的cron可以正确处理,但仍然要小心。大的前后跳跃比小的更危险。
当时钟错误时
Linux软件时钟不会始终精确。PC硬件产生的时间中断周期地运行软件时钟。如果系统运行了太多进程,服务于时间中断需要花费太多的时间,软件时钟启动靠后。硬件时钟独立运行并通常更精确。如果你的系统经常启动(比如不是服务器的多数系统),那么通常时间很精确。
如果需要调整硬件时钟,通常最简单的是重启动,进入BIOS设定屏幕,并在那里完成。这避免了改变系统时间可能导致的所有问题。如果不能通过BIOS,用date和clock设定新时间(以此顺序),但如果系统有部分工作不正常,必须准备重启动。
连网的计算机(即使是通过modem)能通过与其他计算机时间比较来自动检查自己的时钟。如果知道保持很精确时间的其他计算机,那么2台计算机都将保持精确的时间。这可以使用rdate和netdate命令来完成。2个命令都检查远程的计算机(netdate可处理多台远程计算机),来同步本地计算机的时间。有规律地运行这样一个程序,你的计算机就可以保持与远程计算机一样精确的时间。
测量孔(MeasuringHoles)
本附录包括用于测量文件系统中潜在的孔的程序的有趣的部分。Thesourcedistributionofthebookcontainsthefullsourcecode(sag/measure-holes/measure-holes.c).
intprocess(FILE*f,char*filename){
staticchar*buf=NULL;
staticlongprev_block_size=-1;
longzeroes;
char*p;
if(buf==NULL||prev_block_size!=block_size){
free(buf);
buf=xmalloc(block_size+1);
buf[block_size]=1;
prev_block_size=block_size;
}
zeroes=0;
while(fread(buf,block_size,1,f)==1){
for(p=buf;*p=="\0";)
++p;
if(p==buf+block_size)
zeroes+=block_size;
}
if(zeroes>0)
printf("%ld%s\n",zeroes,filename);
if(ferror(f)){
errormsg(0,-1,"readfailedfor`%s"",filename);
return-1;
}
return0;
}
时区
时间测量基于最规则的自然现象,如地球转动导致的昼夜更替。昼夜总时间是恒定的,但昼夜分别的长度是变化的。一个简单的常数是正午。
正午是白天太阳在最高点的时间。由于地球是圆的,不同地方正午发生在不同的时间。这引出了本地时localtime的概念。
硬件时钟和软件时钟
个人计算机有一个电池驱动的硬件时钟。电池保证始终在计算机没电的时候依然能工作。硬件始终能从BIOS设置屏或操作系 统的别的地方进行设置。
Linux核心独立于硬件始终跟踪时间。启动时,Linux根据硬件时钟设置自己的时钟。此后,2个始终相互独立运行。因为查看硬件始终慢而复杂,因此Linux管理自己的时钟。
核心始终一直显示通用时间。这样,核心无须知道时区,高可靠的简单结果使更新时区信息更简单。每个进程自己处理时区转换(使用时区包部分里的标准工具)。
硬件始终可以是本地时间或通用时间。通常用通用时间更好,因为这样你无须在夏时制开始或结束时改变硬件时钟(UTCdoesnothaveDST)。不幸的是,有些PC操作系统,包括MSDOS、Windows、OS/2都假设硬件时钟是本地时间。Linux可处理2种方式,但如果硬件时钟显示本地时间,那么必须在夏时制开始或结束时(否则就不能显示本地时间)。
显示和设置时钟
在Debian系统中,系统时区由符号连接/etc/localtime决定。连接指向描述本地时区的时区数据文件。时区数据文件存在/usr/lib/zoneinfo中。其他Linuxdistributions可能不同。
用户可以用设置TZ环境变量来改变他的私人时区。如果不设置,就假定是系统时区。TZ变量的语法在tzset(3)man页中说明。
date命令显示当前日期和时间。例如:
$date
SunJul1421:53:41EETDST1996
$
ThattimeisSunday,14thofJuly,1996,atabouttenbeforetenattheevening,inthetimezonecalled``EETDST""(whichmightbeEast EuropeanDaylightSavingsTime).date也可用于显示通用时间:
$date-u
SunJul1418:53:42UTC1996
$
date也可用于设置核心的软件始终:
#date07142157
SunJul1421:57:00EETDST1996
#date
SunJul1421:57:02EETDST1996
#
更详细的见dateman页--syntaxisabitarcane.只有root能设置时间。虽然每个用户可以有自己的时区,但时钟对每个人都是一样的。
date只显示或设置软件时钟。clock命令同步硬件和软件时钟。用于系统启动时读取硬件时钟和设置软件时钟。如果两个时钟都需要设置,则先用date设置软件时钟,然后用clock-w设置硬件时钟。
clock的-u告诉它硬件时钟是通用时间。必须正确使用-u选项。否则计算机将困惑到底是什么时间。
时钟必须小心改变。Unix系统的许多部分要求时钟工作正常。例如,cron守侯程序周期地运行命令。如果改变时钟,它可能迷惑它是否该运行命令。OnoneearlyUnixsystem,someonesettheclocktwentyyearsintothefuture,andcronwantedtorunalltheperiodiccommandsfortwentyyearsallatonce.现在版本的cron可以正确处理,但仍然要小心。大的前后跳跃比小的更危险。
当时钟错误时
Linux软件时钟不会始终精确。PC硬件产生的时间中断周期地运行软件时钟。如果系统运行了太多进程,服务于时间中断需要花费太多的时间,软件时钟启动靠后。硬件时钟独立运行并通常更精确。如果你的系统经常启动(比如不是服务器的多数系统),那么通常时间很精确。
如果需要调整硬件时钟,通常最简单的是重启动,进入BIOS设定屏幕,并在那里完成。这避免了改变系统时间可能导致的所有问题。如果不能通过BIOS,用date和clock设定新时间(以此顺序),但如果系统有部分工作不正常,必须准备重启动。
连网的计算机(即使是通过modem)能通过与其他计算机时间比较来自动检查自己的时钟。如果知道保持很精确时间的其他计算机,那么2台计算机都将保持精确的时间。这可以使用rdate和netdate命令来完成。2个命令都检查远程的计算机(netdate可处理多台远程计算机),来同步本地计算机的时间。有规律地运行这样一个程序,你的计算机就可以保持与远程计算机一样精确的时间。
测量孔(MeasuringHoles)
本附录包括用于测量文件系统中潜在的孔的程序的有趣的部分。Thesourcedistributionofthebookcontainsthefullsourcecode(sag/measure-holes/measure-holes.c).
intprocess(FILE*f,char*filename){
staticchar*buf=NULL;
staticlongprev_block_size=-1;
longzeroes;
char*p;
if(buf==NULL||prev_block_size!=block_size){
free(buf);
buf=xmalloc(block_size+1);
buf[block_size]=1;
prev_block_size=block_size;
}
zeroes=0;
while(fread(buf,block_size,1,f)==1){
for(p=buf;*p=="\0";)
++p;
if(p==buf+block_size)
zeroes+=block_size;
}
if(zeroes>0)
printf("%ld%s\n",zeroes,filename);
if(ferror(f)){
errormsg(0,-1,"readfailedfor`%s"",filename);
return-1;
}
return0;
}
相关文章
- Linux系统编程:从基础到实践的PDF手册(linux系统编程pdf)
- 手册探索Linux中不可或缺的Man手册(linux中man)
- Linux内网映射到外网实现步骤及方法(linux内网映射到外网)
- Linux内核API手册:实现技术最新突破(linux内核api手册)
- 配置Linux网卡吞吐量配置技术研究(linux网卡吞吐量)
- 如何快速分配Linux端口(linux端口分配)
- 碌Linux文件繁忙及管理之道(linux文件忙)
- 主机连接虚拟机Linux:跨平台相互探索(主机连接虚拟机linux)
- Linux系统管理入门:运维手册(linux系统管理手册)
- Linux下查看本机信息的方法(linux查看本机信息)
- 文件Linux下打开PDF文件的方法(linux如何打开pdf)
- Linux系统下快速安装电视软件(linux电视安装软件)
- 命令Linux下深入探索TTY命令(linux中tty)
- Linux集群技术:从安装到部署PDF手册(linux集群pdf)
- Linux的分支:探索系统的多样性(linux的分支)
- 探索Linux运行C语言程序的方式(linux怎么运行c程序)
- 轻松掌握 Linux 源码安装与卸载技巧(linux源码安装卸载)
- Linux软件开发简易指南(linux软件开发)
- Linux中文下载安装手册(linux中文下载)
- Linux内核技术手册:掌握技术的精髓(linux内核技术手册)
- Linux技术开发指南:让技术发挥更大的力量(linux技术手册)
- 免费下载:Linux技术手册全套指南(linux技术手册下载)
- /拯救Linux系统的引导盘之路(linux 引导盘)
- Linux多线程定时器:轻松实现任务自动化(linux多线程定时器)
- Linux管理员手册(3)--存贮介质