Linux中time命令,我們經常用來計算某個程序的運行耗時(real),用戶態cpu耗時(user),系統態cpu耗時(sys)
time命令最常用的使用方式就是在其後面直接跟上命令和參數:
time <command> [<arguments...>]
舉個栗子1:
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time sleep 2
real 0m2.005s
user 0m0.001s
sys 0m0.002s
小解其意:
real 0m2.005s :sleep這個程序運行耗時為0m2.005s
user 0m0.001s : 這個時間代表的是sleep運行在用戶態的cpu時間
sys 0m0.002s : 這個時間代表的是sleep運行在核心態的cpu時間。
用戶態(User Mode):
在用戶態,代碼不具備直接訪問硬體或者訪問內存的能力,而必須藉助操作系統提供的可靠的,底層的APIs來訪問硬體或者內存。由於這種隔離帶來的保護作用,用戶態的代碼崩潰(Crash),系統是可以恢復的。我們大多數的代碼都是運行在用戶態的。
核心態(Kernel Mode):
在內核態,代碼擁有完全的,不受任何限制的訪問底層硬體的能力。可以執行任意的CPU指令,訪問任意的內存地址。內核態通常情況下,都是為那些最底層的,由操作系統提供的,可信可靠的代碼來運行的。內核態的代碼崩潰將是災難性的,它會影響到整個系統。
為什麼要區分Kernel Mode 和 User Mode:
隔離保護,使得系統更穩定。
好,講完用戶態和核心態之後,我們來看user time,說過了,這個指的是程序foo運行在用戶態的cpu時間,cpu時間不是牆上的鍾走過的時間,而是指CPU工作時間。
舉個栗子2:
#time -p 不顯示單位
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time -p sleep 2
real 2.00
user 0.00
sys 0.00
『貳』 linux中的time函數怎麼實現的利用什麼原理或器件來得到秒數的
asctimeeHPLinux聯盟
ctimeeHPLinux聯盟
gettimeofdayeHPLinux聯盟
gmtimeeHPLinux聯盟
localtimeeHPLinux聯盟
mktimeeHPLinux聯盟
settimeofdayeHPLinux聯盟
timeeHPLinux聯盟
asctime(將時間和日期以字元串格式表示) 相關函數 time,ctime,gmtime,localtimeeHPLinux聯盟
表頭文件 #include<time.h>eHPLinux聯盟
定義函數 char * asctime(const struct tm * timeptr);eHPLinux聯盟
函數說明 asctime()將參數timeptr所指的tm結構中的信息轉換成真實世界所使用的時間日期表示方法,然後將結果以字元串形態返回。此函數已經由時區轉換成當地時間,字元串格式為:「Wed Jun 30 21:49:08 1993\n」eHPLinux聯盟
返回值 若再調用相關的時間日期函數,此字元串可能會被破壞。此函數與ctime不同處在於傳入的參數是不同的結構。eHPLinux聯盟
附加說明 返回一字元串表示目前當地的時間日期。eHPLinux聯盟
範例 #include <time.h>eHPLinux聯盟
main()eHPLinux聯盟
{eHPLinux聯盟<br>time_t timep;eHPLinux聯盟<br>time (&timep);eHPLinux聯盟<br>printf(「%s」,asctime(gmtime(&timep)));eHPLinux聯盟<br>}eHPLinux聯盟
執行 Sat Oct 28 02:10:06 2000eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
ctime(將時間和日期以字元串格式表示) 相關函數 time,asctime,gmtime,localtimeeHPLinux聯盟
表頭文件 #include<time.h>eHPLinux聯盟
定義函數 char *ctime(const time_t *timep);eHPLinux聯盟
函數說明 ctime()將參數timep所指的time_t結構中的信息轉換成真實世界所使用的時間日期表示方法,然後將結果以字元串形態返回。此函數已經由時區轉換成當地時間,字元串格式為「Wed Jun 30 21 :49 :08 1993\n」。若再調用相關的時間日期函數,此字元串可能會被破壞。eHPLinux聯盟
返回值 返回一字元串表示目前當地的時間日期。eHPLinux聯盟
範例 #include<time.h>eHPLinux聯盟
main()eHPLinux聯盟
{eHPLinux聯盟<br>time_t timep;eHPLinux聯盟<br>time (&timep);eHPLinux聯盟<br>printf(「%s」,ctime(&timep));eHPLinux聯盟<br>}eHPLinux聯盟
執行 Sat Oct 28 10 : 12 : 05 2000eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
gettimeofday(取得目前的時間) 相關函數 time,ctime,ftime,settimeofdayeHPLinux聯盟
表頭文件 #include <sys/time.h>eHPLinux聯盟
#include <unistd.h>eHPLinux聯盟
定義函數 int gettimeofday ( struct timeval * tv , struct timezone * tz )eHPLinux聯盟
函數說明 gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的信息則放到tz所指的結構中。eHPLinux聯盟
timeval結構定義為:eHPLinux聯盟
struct timeval{eHPLinux聯盟<br>long tv_sec; /*秒*/eHPLinux聯盟<br>long tv_usec; /*微秒*/eHPLinux聯盟<br>};eHPLinux聯盟
timezone 結構定義為:eHPLinux聯盟
struct timezone{eHPLinux聯盟<br>int tz_minuteswest; /*和Greenwich 時間差了多少分鍾*/eHPLinux聯盟<br>int tz_dsttime; /*日光節約時間的狀態*/eHPLinux聯盟<br>};eHPLinux聯盟
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下eHPLinux聯盟
DST_NONE /*不使用*/eHPLinux聯盟
DST_USA /*美國*/eHPLinux聯盟
DST_AUST /*澳洲*/eHPLinux聯盟
DST_WET /*西歐*/eHPLinux聯盟
DST_MET /*中歐*/eHPLinux聯盟
DST_EET /*東歐*/eHPLinux聯盟
DST_CAN /*加拿大*/eHPLinux聯盟
DST_GB /*大不列顛*/eHPLinux聯盟
DST_RUM /*羅馬尼亞*/eHPLinux聯盟
DST_TUR /*土耳其*/eHPLinux聯盟
DST_AUSTALT /*澳洲(1986年以後)*/eHPLinux聯盟
返回值 成功則返回0,失敗返回-1,錯誤代碼存於errno。附加說明EFAULT指針tv和tz所指的內存空間超出存取許可權。eHPLinux聯盟
範例 #include<sys/time.h>eHPLinux聯盟
#include<unistd.h>eHPLinux聯盟
main(){eHPLinux聯盟<br>struct timeval tv;eHPLinux聯盟<br>struct timezone tz;eHPLinux聯盟<br>gettimeofday (&tv , &tz);eHPLinux聯盟<br>printf(「tv_sec; %d\n」, tv,.tv_sec) ;eHPLinux聯盟<br>printf(「tv_usec; %d\n」,tv.tv_usec);eHPLinux聯盟<br>printf(「tz_minuteswest; %d\n」, tz.tz_minuteswest);eHPLinux聯盟<br>printf(「tz_dsttime, %d\n」,tz.tz_dsttime);eHPLinux聯盟<br>}eHPLinux聯盟
執行 tv_sec: 974857339eHPLinux聯盟
tv_usec:136996eHPLinux聯盟
tz_minuteswest:-540eHPLinux聯盟
tz_dsttime:0eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
gmtime(取得目前時間和日期) 相關函數 time,asctime,ctime,localtimeeHPLinux聯盟
表頭文件 #include<time.h>eHPLinux聯盟
定義函數 struct tm*gmtime(const time_t*timep);eHPLinux聯盟
函數說明 gmtime()將參數timep 所指的time_t 結構中的信息轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。eHPLinux聯盟
結構tm的定義為eHPLinux聯盟
struct tmeHPLinux聯盟
{eHPLinux聯盟<br>int tm_sec;eHPLinux聯盟<br>int tm_min;eHPLinux聯盟<br>int tm_hour;eHPLinux聯盟<br>int tm_mday;eHPLinux聯盟<br>int tm_mon;eHPLinux聯盟<br>int tm_year;eHPLinux聯盟<br>int tm_wday;eHPLinux聯盟<br>int tm_yday;eHPLinux聯盟<br>int tm_isdst;eHPLinux聯盟<br>};eHPLinux聯盟
int tm_sec 代表目前秒數,正常范圍為0-59,但允許至61秒eHPLinux聯盟
int tm_min 代表目前分數,范圍0-59eHPLinux聯盟
int tm_hour 從午夜算起的時數,范圍為0-23eHPLinux聯盟
int tm_mday 目前月份的日數,范圍01-31eHPLinux聯盟
int tm_mon 代表目前月份,從一月算起,范圍從0-11eHPLinux聯盟
int tm_year 從1900 年算起至今的年數eHPLinux聯盟
int tm_wday 一星期的日數,從星期一算起,范圍為0-6eHPLinux聯盟
int tm_yday 從今年1月1日算起至今的天數,范圍為0-365eHPLinux聯盟
int tm_isdst 日光節約時間的旗標eHPLinux聯盟
此函數返回的時間日期未經時區轉換,而是UTC時間。eHPLinux聯盟
返回值 返回結構tm代表目前UTC 時間eHPLinux聯盟
範例 #include <time.h>eHPLinux聯盟
main(){eHPLinux聯盟<br>char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};eHPLinux聯盟
time_t timep;eHPLinux聯盟
struct tm *p;eHPLinux聯盟
time(&timep);eHPLinux聯盟
p=gmtime(&timep);eHPLinux聯盟
printf(「%d%d%d」,(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);eHPLinux聯盟
printf(「%s%d;%d;%d\n」, wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);eHPLinux聯盟
}eHPLinux聯盟
執行 2000/10/28 Sat 8:15:38eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
localtime(取得當地目前時間和日期) 相關函數 time, asctime, ctime, gmtimeeHPLinux聯盟
表頭文件 #include<time.h>eHPLinux聯盟
定義函數 struct tm *localtime(const time_t * timep);eHPLinux聯盟
函數說明 localtime()將參數timep所指的time_t結構中的信息轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。結構tm的定義請參考gmtime()。此函數返回的時間日期已經轉換成當地時區。eHPLinux聯盟
返回值 返回結構tm代表目前的當地時間。eHPLinux聯盟
範例 #include<time.h>eHPLinux聯盟
main(){eHPLinux聯盟<br>char *wday[]={「Sun」,」Mon」,」Tue」,」Wed」,」Thu」,」Fri」,」Sat」};eHPLinux聯盟
time_t timep;eHPLinux聯盟
struct tm *p;eHPLinux聯盟
time(&timep);eHPLinux聯盟
p=localtime(&timep); /*取得當地時間*/eHPLinux聯盟
printf (「%d%d%d 」, (1900+p->tm_year),( l+p->tm_mon), p->tm_mday);eHPLinux聯盟
printf(「%s%d:%d:%d\n」, wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);eHPLinux聯盟
}eHPLinux聯盟
執行 2000/10/28 Sat 11:12:22eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
mktime(將時間結構數據轉換成經過的秒數) 相關函數 time,asctime,gmtime,localtimeeHPLinux聯盟
表頭文件 #include<time.h>eHPLinux聯盟
定義函數 time_t mktime(strcut tm * timeptr);eHPLinux聯盟
函數說明 mktime()用來將參數timeptr所指的tm結構數據轉換成從公元1970年1月1日0時0分0 秒算起至今的UTC時間所經過的秒數。eHPLinux聯盟
返回值 返回經過的秒數。eHPLinux聯盟
範例 /* 用time()取得時間(秒數),利用localtime()eHPLinux聯盟
轉換成struct tm 再利用mktine()將struct tm轉換成原來的秒數*/eHPLinux聯盟
#include<time.h>eHPLinux聯盟
main()eHPLinux聯盟
{eHPLinux聯盟<br>time_t timep;eHPLinux聯盟<br>strcut tm *p;eHPLinux聯盟<br>time(&timep);eHPLinux聯盟<br>printf(「time() : %d \n」,timep);eHPLinux聯盟<br>p=localtime(&timep);eHPLinux聯盟<br>timep = mktime(p);eHPLinux聯盟<br>printf(「time()->localtime()->mktime():%d\n」,timep);eHPLinux聯盟<br>}eHPLinux聯盟
執行 time():974943297eHPLinux聯盟
time()->localtime()->mktime():974943297eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
settimeofday(設置目前時間) 相關函數 time,ctime,ftime,gettimeofdayeHPLinux聯盟
表頭文件 #include<sys/time.h>eHPLinux聯盟
#include<unistd.h>eHPLinux聯盟
定義函數 int settimeofday ( const struct timeval *tv,const struct timezone *tz);eHPLinux聯盟
函數說明 settimeofday()會把目前時間設成由tv所指的結構信息,當地時區信息則設成tz所指的結構。詳細的說明請參考gettimeofday()。注意,只有root許可權才能使用此函數修改時間。eHPLinux聯盟
返回值 成功則返回0,失敗返回-1,錯誤代碼存於errno。eHPLinux聯盟
錯誤代碼 EPERM 並非由root許可權調用settimeofday(),許可權不夠。eHPLinux聯盟
EINVAL 時區或某個數據是不正確的,無法正確設置時間。eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
eHPLinux聯盟
time(取得目前的時間) 相關函數 ctime,ftime,gettimeofdayeHPLinux聯盟
表頭文件 #include<time.h>eHPLinux聯盟
定義函數 time_t time(time_t *t);eHPLinux聯盟
函數說明 此函數會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。如果t 並非空指針的話,此函數也會將返回值存到t指針所指的內存。eHPLinux聯盟
返回值 成功則返回秒數,失敗則返回((time_t)-1)值,錯誤原因存於errno中。eHPLinux聯盟
範例 #include<time.h>eHPLinux聯盟
mian()eHPLinux聯盟
{eHPLinux聯盟<br>int seconds= time((time_t*)NULL);eHPLinux聯盟<br>printf(「%d\n」,seconds);eHPLinux聯盟<br>}eHPLinux聯盟
執行 9.73E+08
『叄』 linux修改系統時間命令
inux修改時間命令是date-s+時分秒。
修改linux系統時間。
root使用date指令:date -s
1、只修改日期,不修改時間,輸入:
date -s 2021-04-02。
2、只修改時間,輸入:
date -s 12:00:00。
3、同時修改日期時間,注意要加雙引號,日期與時間之間有一空格,輸入:
date -s 「2021-04-02 10:25:00」
4、修改完後,記得輸入:
clock -w。
把系統時間寫入CMOS修改時區不重啟。
在root下。
復制相應的時區文件,替換系統時區文件:
cp /usr/share/zoneinfo/主時區/次時區 /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5、文件復制命令—cp cp [參數] [源地址] [目的地址]主要參數描述如下:-a :此參數和同時指定「-dpR」參數相同 -d :在復制有符號連接的文件時,保留原始的連接。 -f :強行復制文件,不管要復制的文件是否已經存在於目標目錄。 -I :覆蓋現有文件之前詢問用戶。
『肆』 linux中的time()怎麼實現的
應該是讀取CMOS晶元中的值獲取時間,CMOS晶元中存了系統時間
『伍』 linux如何設置伺服器上的系統時間
date -s 「20181121 17:34:00」
輸入這條命令系統時間會設置為2018年11月21日17點39分。
修改之後你可以輸入date命令查詢當前時間。
(5)linux下time擴展閱讀:
1、桌面右上角齒輪按鈕,點擊System Settings。
『陸』 linux下如何修改時區(TIMEZONE)
查看時區
cat /etc/sysconfig/clock
設置時區
tzselect
timeconfig
cat /etc/sysconfig/clock ZONE=」Asia/Shanghai」 —> /usr/share/zoneinfo 下面的文件。 UTC=false —> 硬體時鍾是否為 UTC 或者說 GMT 時鍾。 ARC=false —> 如果是在 Alpha 機器上,則設置為 true 。
把硬體時鍾設置為 UTC 的好處就是他能自動設置夏時制,缺點是,在安裝有多重操作系統啟動的機器上,在另外的操作 系統上時鍾會錯誤。
Linux 的時鍾設置文件為:/etc/localtime ,實際上這個文件是 /usr/share/zoneinfo 目錄下對應文件的符號連接。 假設我們所處的地區位於上海,那麼只要運行以下的命令就可以設置時區了。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Linux 啟動時,其中的一個腳本(/etc/rc.d/rc.sysinit)會運行 /sbin/hwclock 程序,把當前的硬體時鍾復制為系統 時間。hwclock 假定硬體時鍾已經設置為本地時鍾,除非帶有 –utc 參數。腳本文件會讀取 /etc/sysconfig/clock 文 件的設置,因此我們不需要修改腳本,直接修改這個配置文件就可以了,根據需要把其中的 UTC 行,設置為 true 或 者 false。
設置硬體時鍾時,首先使用 date 命令(「date MMDDhhmmYYYY.ss」) 設置好系統時鍾,然後使用 「/sbin/hwclock –systohc」 把硬體時鍾設置為和當前系統時間一致。
如果你在某些應用下面的時間是錯誤的,那麼你在運行 Red Hat Linux 5.0 或 5.1,解決的辦法是建立 /usr/lib/zoneinfo 到 /usr/share/zoneinfo 的符號連接:
ln -s /usr/share/zoneinfo /usr/lib/zoneinfo
小結:時鍾設置的問題本身比較簡單,但是它涉及到幾個基本的配置文件:
/etc/rc.d/rc.sysinit /etc/sysconfig/clock /etc/localtime /usr/share/zoneinfo時區的配置文件是/etc/sysconfig/clock。用tzselect命令就可以修改這個配置文件,根據命令的提示進行修改就好了。 但是在實際工作中,發現這種方式是不能夠使得伺服器上的時間設置馬上生效的,而且使用ntpdate去同步時間伺服器也不能夠更改時間。即使你使用了date命令手工設置了時間的話,如果使用ntpdate去進行時間同步的話,時間又會被改動到原來的錯誤時區的時間。而生產的機器往往是非常重要的,不能夠進行重啟等操作。 在網上找了幾種方法試了下,發現如果要修改時區並且馬上生效,可以更換/etc/localtime 文件來實現。比如我的時區是中國上海,那麼就可以使用如下的命令來使得時區的更改生效。 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 然後最好使用下面的命令將更改寫入bios。
『柒』 linux time函數出現段錯誤
你可以這樣聲明,time_t *a=NULL,或者這樣time_t a; time_now=time(&a); 第二種取的是a的時間,如果沒有賦值,可能是個錯的時間。
『捌』 Linux系統命令time給出的用戶時間,系統時間,實際時間分別是什麼含義
用戶CPU時間(user CPU time): 命令執行完成花費的用戶CPU時間,即命令在用戶態中執行時間總和;
實際時間(real time): 從command命令行開始執行到運行終止的消逝時間;
系統CPU時間(system CPU time): 命令執行完成花費的系統CPU時間,即命令在核心態中執行時間總和。
Linux命令的使用時linux運維中的核心基礎,因此你需要知道常見的命令的功能選項,這樣你才能夠更好的處理遇到的問題。關於Linux命令學習這塊,你學習劉遄老師的書籍《linux就該這么學》,相信你會把linux命令掌握得非常的透徹。