您好,登錄后才能下訂單哦!
這篇文章主要介紹“Linux基礎命令hwclock的用法”,在日常操作中,相信很多人在Linux基礎命令hwclock的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux基礎命令hwclock的用法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
hwclock
hwclock是一種訪問硬件時鐘的工具,可以顯示當前時間,將硬件時鐘設置為指定的時間,將硬件時鐘設置為系統時間,以及從硬件時鐘設置系統時間。您還可以定期運行hwlock以插入或刪除硬件時鐘中的時間,以補償系統漂移(如果繼續運行,則該時鐘始終以一定的速率獲得或丟失時間)。
該命令的適用范圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、語法
hwclock [functions] [options]
2、選項列表
下面的選項告訴hwclock指令該執行那個函數
選項 | 說明 |
-r | --show | 讀取硬件時鐘并在標準輸出上打印時間。顯示的時間總是本地時間,即使您將硬件時鐘保持在協調的世界時間。請參見-UTC選項。 |
--set | 將硬件時鐘設置為-date選項指定的時間 |
-s | --hctosys | 從硬件時鐘設置系統時間。 還將內核的時區值設置為由TZ環境變量和/或/usr/share/zoneinfo指示的本地時區,正如tzset(3)所解釋的那樣。內核時區值的過時的tz_dsttime字段被設置為DST_NONE。(有關此字段過去的含義的詳細信息,請參閱日期的settimeofday(2)。 這是在系統啟動腳本中使用的一個很好的選項 |
-w | --systohc | 將硬件時鐘設置為當前的系統時間 |
--systz | 根據當前時區設置內核的時區并重置系統時間,系統時間僅在啟動后的第一次調用時重置。 本地時區被認為是TZ環境變量和/或/usr/share/zoneinfo所指示的,tzset(3)將解釋它們。內核時區值的過時tz_dsttime字段設置為DST_NONE。(有關此字段過去的含義的詳細信息,請參閱日期的settimeofday(2)。 這是-hctosys的另一個選項,它不讀取硬件時鐘,并且可以在最近2.6內核的系統啟動腳本中使用,因為您知道系統時間包含硬件時鐘時間。如果硬件時鐘已經在協調時,則不會重置。 |
--adjust | 從硬件時鐘中增加或減去時間,以說明自上次時鐘設置或調整以來的系統漂移。請參閱下面的討論 |
--getepoch | 將內核的硬件時鐘時紀元打印到標準輸出。這是在AD中引用硬件時鐘中的零年值的年份數。正在使用的約定是,硬件時鐘中的年份計數器包含1952年以來的完整年份數,然后是內核的硬件計數器時代值必須是1952年。 每當hwlock讀取或設置硬件時鐘時,就會使用這個紀元值。epoch只有在Alpha機器上有。 |
--setepoch | 將內核的硬件時鐘紀元值設置為--epoch選項指定的值。 |
-v | --version | 在標準輸出上顯示hwclock的版本 |
--date=date_string | 如果指定-set選項,則需要此選項。否則,將忽略該選項。這將指定設置硬件時鐘的時間。選項是date指令的參數。例如:hwclock --set --date="9/22/96 16:45:05" 參數在本地時間,即使您將硬件時鐘保持在協調的世界時間。請參見-UTC選項。 |
--epoch=year | 指定硬件時鐘時代開始的年份,即在AD中,硬件時鐘的年份計數器中的零值所指的進入AD的年份數。它與-setepoch選項一起使用,以設置內核的硬件時鐘時代概念,或者指定用于直接ISA訪問的時代。例如: hwclock --setepoch --epoch=1952 |
下面的選項配合函數使用
選項 | 說明 |
-u | --utc | --localtime | 指示硬件時鐘分別保持在協調的世界時間或本地時間。您可以選擇是否將時鐘保持在協調世界協調時或本地時間,但時鐘中沒有顯示任何信息。這是你所選擇的,所以這個選項就是你如何將信息提供給時鐘。 如果您指定了這些選項中的一個錯誤的(或者沒有指定,并且選擇了錯誤的默認值),那么硬件時鐘的設置和查詢都將被搞砸。 如果您沒有指定-utc或-localtime,則默認值以最后一次使用hwlock設置時鐘時指定的值為準(即,hwlock成功地使用-set、-system ohc或-調整器選項運行),如adjtime文件中所記錄的。如果adjtime文件不存在,則默認值為本地時間。 |
--noadjfile | 禁用/etc/adjtime.hwlock提供的工具,不使用此選項讀取或寫入該文件。在使用此選項時,必須指定-UTC和--localtime |
--adjfile=ilename | 覆蓋默認的/etc/adjtime文件 |
-f | --rtc=filename | 重寫默認/dev文件名,在許多平臺上為/dev/rtc,但可能是/dev/rtc0、/dev/rtc1,等等。 |
--directisa | 只有在ISA機器或Alpha上才有意義(粗略地說,它實現了足夠多的ISA機器來實現hwlock的目的)。對于其他機器,它沒有作用。這個選項告訴hwlock使用顯式I/O指令來訪問硬件時鐘。如果沒有這個選項,hwlock就會嘗試。若要使用/dev/rtc設備(假定它由RTC設備驅動程序驅動),如果它無法打開設備(用于讀取),它將使用顯式I/O指令。 |
--badyear | 表示硬件時鐘無法存儲超出1994-1999年范圍的年份。在一些BIOSes(幾乎所有在4/26/94至5/31/95之間制造的BIOSes)中都存在一個問題,在這些BIOSes中,它們無法處理1999年之后的年份。如果試圖將世紀價值設置為小于94(或95 in)的值。在某些情況下,實際設置的值為94(或95),因此,如果您有這些機器中的一臺,則hwlock不能在1999年之后設置,也不能以正常的方式使用時鐘的值作為真正的時間。 為了彌補這一點(沒有BIOS更新,這肯定更好),請始終使用-如果您有這些機器中的一臺,就使用-壞年份。在adjtime文件中假設日期是過去一年內的日期。要想讓它發揮作用,你最好每年至少運行一次hwclock --set或hwlock –systohc。 雖然hwlock在讀取硬件時鐘時忽略了年份值,但當它設置時鐘時,它會設置年份值,將其設置為1995、1996、1997或1998,無論哪個年份在閏年周期中所處的位置與真正的年份相同。這樣,硬件時鐘就會插入。如果你讓硬件時鐘在沒有設置的情況下運行一年以上,這個方案可能會失敗,最后你可能會損失一天。 |
--srm | 此選項等價于--epoch=1900,用于使用srm控制臺指定alphad上最常見的歷元。 |
--arc | 此選項等價于--epoch=1980,用于使用ARC控制臺指定ALPHS上最常見的歷次(但Ruffans有1900年)。 |
--jensen | --funky-toy | 這兩個選項指定了您擁有的Alpha機器的類型。如果您沒有Alpha,則它們是無效的,如果有,它們通常是不必要的,因為hwlock應該能夠自行確定運行在什么上,至少在安裝/proc時是這樣的。(如果您發現您需要這些選項之一使hwlock工作,請與維護人員聯系,看看程序是否可以改進以自動檢測您的系統。‘hwlock --debug’和‘cat/proc/cpuinfo’的輸出可能會引起人們的興趣。) --jensen代表運行在Jensen模式。 --funky-toy意味著在您的機器上,必須使用UF位而不是硬件時鐘中的UIP位來檢測時間轉換。選項名中的“toy”是指機器一年中的時間 |
--test | 測試程序,不改變任何設置 |
--debug | 顯示大量關于hwlock內部正在做什么的信息,其中一些功能是復雜的,這個輸出可以幫助您理解程序是如何工作的。 |
3、說明
一般在操作系統中都會有兩個時鐘,硬件時鐘是主板上的定時器時鐘,系統時鐘是系統的內核時鐘,它們相互不影響。
1)硬件時鐘
這個時鐘,運行獨立于任何控制程序運行在CPU中,甚至當機器關閉。在ISA系統中,這個時鐘被指定為ISA標準的一部分。控制程序可以讀取或設置這個時鐘為整秒,但控制程序也可以檢測1秒時鐘的邊緣,因此該時鐘實際上具有無限的精度。
這種時鐘通常被稱為硬件時鐘、實時時鐘、RTC、BIOS時鐘和CMOS時鐘。硬件時鐘以其大寫的形式被hwlock所發明,因為其他所有的名稱都不適合誤導。例如,一些非ISA系統有幾個實時時鐘。一個非常低功耗的I2C或SPI時鐘芯片可以與備用電池一起作為硬件時鐘,以初始化一個功能更好的集成實時時鐘,用于大多數其他用途。
2)系統時鐘
這是由Linux內核內的時鐘保持的時間,由計時器中斷驅動。(在ISA機器上,計時器中斷是ISA標準的一部分)。它只有在linux在機器上運行時才有意義。系統時間是從1970年世界協調時(UTC)1月1日00:00開始的秒數(或者更簡潔地說,是1969年以來的秒數)。不過,系統時間不是整數,它實際上是無限的。系統時間是重要的時間。Linux系統中硬件時鐘的基本目的是在Linux不運行時保持時間。在Linux啟動時,將系統時間從硬件時鐘初始化,然后不再使用硬件時鐘。請注意,在設計ISA的DOS中,硬件時鐘是唯一的實時時鐘。
重要的是,當系統運行時,系統時間不存在任何不連續性,比如使用date命令來設置它。但是,在系統運行時,您可以對硬件時鐘做任何您想做的事情,而下一次Linux啟動時,它將使用硬件時鐘的調整時間進行設置。
Linux內核維護系統的本地時區的概念。但是不要被誤導-幾乎沒有人關心內核認為它在哪個時區。相反,關心時區的程序(可能因為他們想為您顯示本地時間)幾乎總是使用更傳統的方法。確定時區:它們使用“tz”環境變量或“/usr/share/zoneinfo”目錄,如tzset(3)的手冊頁所解釋的那樣。時區值是錯誤的,vFAT文件系統會在文件上報告并設置錯誤的時間戳。
當您使用”--hctosys”選項設置系統時間時,hwlock將內核時區設置為“tz”或“/usr/share/zoneinfo”所指示的值。
時區值實際上由兩部分組成:1)字段“tz_minutesWest”表示本地時間(未根據DST進行調整)滯后于UTC;2)字段“tz_dsttime”,指示當前在本地有效的夏令時(DST)約定的類型。第二個字段不在Linux下使用,始終為零。
3)hwclock如何訪問硬件時鐘
hwlock使用多種不同的方法來獲取和設置硬件時鐘值,最常見的方法是對設備特殊文件“/dev/rtc”執行I/O操作,假定該文件是由rtc設備驅動程序驅動的。然而,這種方法并不總是可用的。首先,rtc驅動程序是linux中比較新的一種。此外,雖然有一些版本的rtc驅動程序可以在decalpha上工作,但似乎有大量的alpha無法工作(常見的癥狀是時鐘掛起)。此外,最近的linux系統對rtc有更多的通用支持,甚至支持不止一個的系統,所以您可能需要通過指定/dev/rtc 0或/dev/rtc 1來覆蓋默認值。
在舊系統中,訪問硬件時鐘的方法取決于系統硬件。
在ISA系統中,hwlock通過對端口0x70和0x71進行I/O操作,可以直接訪問構成時鐘的“CMOS存儲器”寄存器。它使用實際的I/O指令,因此只有在超級用戶有效用戶ID的情況下才能這樣做。(對于jensen Alpha,hwlock無法執行這些I/O指令,因此它使用設備文件“/dev/port”,它提供了與I/O子系統幾乎一樣低的接口)。這是一種非常糟糕的訪問時鐘的方法,因為用戶空間程序通常不應該進行直接I/O和禁用中斷。但是在ISA和Alpha系統中,這是唯一的方式。
在m68k系統上,hwlock可以通過控制臺驅動程序訪問時鐘,通過設備文件“/dev/tty1”訪問時鐘。
hwlock嘗試使用文件“/dev/rtc”。如果內核沒有編譯“/dev/rtc”,或者它無法打開“/dev/rtc”,那么hwlock將返回到另一種方法(如果可用的話)。在ISA或Alpha計算機上,您可以強制hwclock使用CMOS寄存器的直接操作,而無需通過指定“--directisa”選項。
4)校準功能adjust
硬件時鐘通常不是很精確,但是它的許多不準確是完全可以預測的,它每天得到或失去相同的時間。這被稱為系統漂移。hwlock的“調整”功能允許您進行系統校正以糾正系統漂移。它的工作方式如下:hwlock保存了一個文件“/etc/adjtime”,它保存了一些歷史信息。
假設您從沒有adjtime文件開始,發出hwlock-set命令將硬件時鐘設置為真實的當前時間。hwlock創建adjtime文件,并在其中記錄當前時間,作為最后一次校準時鐘。5天后,時鐘增加了10秒,因此您可以發出另一個“hwlock --set”命令來設置它。返回10秒。hwlock更新adjtime文件,顯示當前時間作為最后一次校準時鐘,并以系統漂移速率記錄每天2秒。24小時過去,然后發出“hwlock --adjust”命令。hwlock查閱adjtime文件,看到時鐘離開時每天增加2秒。一個人呆了整整一天。所以它從硬件時鐘中減去2秒。然后,它記錄當前時間作為最后一次調整時鐘的時間。又過了24小時,你又發出了另一個“hwclock --adjust”指令。hwclock做了同樣的事情:減去2秒,用當前時間更新adjtime文件,這是最后一次調整時鐘。
每次您校準時鐘(使用--set或—systohc)時,hwlock根據上次校準的時間、上次調整后的時間、在任何中間的調整中假定的漂移率以及時鐘當前的關閉量,重新計算系統漂移率。在hwclock使用的任何時候,都會出現少量的誤差,因此它不會進行小于1秒的調整。稍后,當您再次請求調整時,累積漂移將超過1秒鐘,而hwlock則會進行調整。
在系統啟動時,在“hwlock --hctosys”之前進行hwlock的調整是很好的,并且在系統通過cron運行時也可以定期進行調整。
雖然adjtime文件的命名僅僅是為了控制時間調整的歷史記錄,但它實際上包含了hwlock在從一個調用到下一個調用時記憶信息時使用的其他信息。adjtime文件的格式是ASCII:
第1行的3個數字數字,用空格隔開,分別代表:a)系統漂移率,每天以秒為單位,浮點小數點;b)自1969年世界協調時以來最近調整或校準的秒數,小數整數;c)零(與時鐘(8)兼容)為十進制整數。
第2行一個數字,代表自1969年世界協調時以來最近一次校準產生的秒數。如果還沒有校準,或者已知任何先前的校準都是沒有意義的,那么值就是0(例如,因為在校準之后,硬件時鐘已經被找到,不包含有效時間)。這是一個十進制整數。
第3行是“utc”或“local”。指示硬件時鐘是設置為協調世界時間還是設置為本地時間。
5)內核如何自動同步硬件時鐘
在某些系統中,您應該注意到硬件時鐘保持同步的另一種方式。Linux內核有一種模式,它每11分鐘將系統時間復制一次到硬件時鐘。這是一個很好的模式,當您使用一些復雜的東西,比如NTP來保持系統時間同步時。(NTP是一種保持系統時間同步的方法,它可以與網絡上的某個時間服務器或連接到您的系統的無線電時鐘保持同步。參見RFC 1305)。
這個模式(我們稱之為“11分鐘模式”)是關閉的,直到有東西打開它。ntp守護進程xntpd就可以打開它。您可以通過運行任何東西來關閉它,包括“hwlock --hctosys”,它以老式的方式設置系統時間。
如果你的系統以11分鐘的模式運行,不要使用“hwlock --adjust”或“hwlock-hctosys”。在啟動時使用“hwlock --hctosys”來獲得一個合理的系統時間是可以接受的,直到您的系統能夠運行為止。從外部源設置系統時間并啟動11分鐘模式
4、實例
1)不適用任何參數,直接查看硬件時鐘
|
2)設置硬件時鐘
|
3)將硬件時鐘設置成本地時間格式
|
4)將硬件時鐘設置成系統時間
[root@localhost ntop-4.0.1]# date //查看當前系統時間 2018年 09月 04日星期二 12:25:15 CST [root@localhost ntop-4.0.1]# hwclock –w //將硬件時鐘設置為系統時間 [root@localhost ntop-4.0.1]#hwclock //查看硬件時鐘 2018年09月04日星期二 12時25分48秒 -0.263687 seconds |
到此,關于“Linux基礎命令hwclock的用法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。