<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

        linux shell獲取當(dāng)前時(shí)間命令詳解

        時(shí)間: 佳洲1085 分享

          當(dāng)出現(xiàn)一個(gè)獲取一個(gè)時(shí)間戳或時(shí)間差需求時(shí),那么我們該使用什么命令來獲取當(dāng)前時(shí)間呢?下面由學(xué)習(xí)啦小編為大家整理了linux shell獲取當(dāng)前時(shí)間的命令的相關(guān)知識(shí),希望大家喜歡!

          1. Linux shell獲取時(shí)間的相關(guān)命令

          time命令:獲取一個(gè)程序的執(zhí)行時(shí)間,可以獲取到實(shí)際運(yùn)行時(shí)間以及程序在用戶態(tài)和內(nèi)核態(tài)分別的時(shí)間,大部分的性能測試,可能只需要關(guān)注實(shí)際時(shí)間。

          time命令的使用就很簡單了,在原有的要運(yùn)行的程序(可執(zhí)行文件、腳本等任何可執(zhí)行程序)之前加上time即可。

          time命令的常用選項(xiàng)

          使用time,常用的選項(xiàng)是:-f和-p。其中-f后面指定一個(gè)格式串,控制time的輸出的格式,默認(rèn)的time輸出是real、user、sys三行以xmxxx.xxxs的格式輸出,通過-f可以控制。

          -p選項(xiàng)也是格式,表示使用posix標(biāo)準(zhǔn)的格式,主要的區(qū)別是顯示的時(shí)間都是以s為單位的,具體關(guān)于格式的問題參考man time的幫助內(nèi)容就知道了。

          -f選項(xiàng)沒法工作?弄不清楚為何-f和-o等選項(xiàng)都無法工作,知道的請補(bǔ)充。(-p是工作的)

          另一種控制格式的方法是設(shè)置TIMEFORMAT環(huán)境變量,具體參考man time可以知道這些格式控制符分別表示什么。舉例如下:

          #time pwd

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #export TIMEFORMAT="real time %E, user time %U,sys time %S"

          #time pwd

          /home/sgeng2

          real time 0.000, user time 0.000,sys time 0.000

          #time -p pwd

          /home/sgeng2

          real 0.00

          user 0.00

          sys 0.00

          #

          time命令的輸出的問題

          上面已經(jīng)說到,好像-o選項(xiàng)并不工作,那么,我們就只能自己想辦法了。有時(shí)候?qū)懩_本,就希望把time的結(jié)果輸出到文件中,然后可能會(huì)根據(jù)time的輸出進(jìn)行一些處理,比如提取出real時(shí)間等。顯然,大家能想到的是重定向了,至于重定向的使用這里顯然不準(zhǔn)備討論(太復(fù)雜),只是提示一點(diǎn):time命令的輸出結(jié)果是輸出到stderr的,不是stdout,所以進(jìn)行重定向的時(shí)候要注意了。看懂下面的例子基本就能理解了:

          #time pwd

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #time pwd > out.txt

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #cat out.txt

          /home/sgeng2

          #time pwd 2> out.txt

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #cat out.txt

          #(time pwd) 2> out.txt

          /home/sgeng2

          #cat out.txt

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #(time pwd) >& out.txt

          #cat out.txt

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #

          這里更多的是涉及到的和重定向相關(guān)的內(nèi)容,所以不會(huì)詳細(xì)分析每一個(gè)例子。說明的是注意time pwd 2> out.txt和(time pwd) 2> out.txt的區(qū)別,前面一個(gè)的含義是把pwd的結(jié)果stderr重定向到out.txt,相當(dāng)于"time (pwd 2> out.txt)"的結(jié)果。

          date命令:

          關(guān)于date命令的使用,百度一把一大堆,就不重復(fù)了。這里只說明一下幾個(gè)常見的問題:

          date的%s和%N

          date中有很多控制格式的,其中%s是獲取當(dāng)前時(shí)間距離1970-01-01 00:00:00 UTC的時(shí)間差。date的其它很多格式控制都是控制當(dāng)前時(shí)間的輸出格式而已,比如只輸出時(shí)分秒,只輸出年月日等等,其中%N也是這一類,%N輸出的是當(dāng)前時(shí)間的納秒部分,由于date并沒有毫秒等級(jí)別的輸出,所以在秒以下的內(nèi)容都屬于納秒部分。所以從這個(gè)角度說,date是可以很精確的,可以達(dá)到納秒級(jí)別。

          獲取一個(gè)時(shí)間戳

          有時(shí)候會(huì)使用時(shí)間戳,或者隨機(jī)數(shù),UUID這樣的東西,百度一下也有相關(guān)文章(比如搜索”shell date隨機(jī)數(shù)“等)。一般來說,可以用%s和%N組合的方式就沒問題,同一秒內(nèi),兩次運(yùn)行%N肯定不會(huì)一樣,所以%s和%N組合能得到一個(gè)唯一數(shù)。

          #date +%s.%N

          1337435374.969263560

          #date +%s+%N

          1337435377+310281496

          #date +%s_%N

          1337435381_209334510

          #date +%s_%N

          1337435383_169263078

          #date +%s_%N

          1337435383_830009679

          #

          有時(shí)候可能希望用一個(gè)”唯一“的東西來對文件命名等,就可以加上時(shí)間戳了。

          2. linux shell獲取時(shí)間差(使用date命令)

          至于使用time命令,其本身就是獲取一個(gè)時(shí)間差,但是顯然,time只適用于一些簡單的情況,因?yàn)楹竺娴膮?shù)是可以執(zhí)行的內(nèi)容,有時(shí)候可能需要執(zhí)行多條命令,用time就比較麻煩。

          (1) 秒為單位

          date獲取的是”當(dāng)前時(shí)間“,顯然,兩次運(yùn)行date就可以得到一個(gè)時(shí)間差,理論上,可以使用很多格式來表示date的輸出,從而計(jì)算時(shí)間差,但是,顯然,最直接的方式就是使用%s了,這樣直接就可以計(jì)算出一個(gè)時(shí)間差,不需要那么復(fù)雜的shell字符串處理了。如下:

          #start=$(date +%s) && sleep 2 && end=$(date +%s) && echo $(( $end - $start ))

          2

          #start=$(date +%s) && sleep 3 && end=$(date +%s) && echo $(( $end - $start ))

          3

          #

          當(dāng)然,這里是在terminal中測試的,所以用&&連續(xù)執(zhí)行這些命令,對于腳本,一行一行的寫就很好了。。。。

          start=$(date +%s)

          ...what to do for timing...

          end=$(date +%s)

          time=$(( $end - $start ))

          echo $time

          (2) ms為單位

          更多的性能測試等場合獲取時(shí)間差,有可能希望精確到ms。事實(shí)上,使用date是可以達(dá)到ms的。直接上代碼吧。

          #! /bin/bash

          #filename: test.sh

          # arg1=start, arg2=end, format: %s.%N

          function getTiming() {

          start= class="main">

        linux shell獲取當(dāng)前時(shí)間命令詳解

        時(shí)間: 佳洲1085 分享

          end=

          當(dāng)出現(xiàn)一個(gè)獲取一個(gè)時(shí)間戳或時(shí)間差需求時(shí),那么我們該使用什么命令來獲取當(dāng)前時(shí)間呢?下面由學(xué)習(xí)啦小編為大家整理了linux shell獲取當(dāng)前時(shí)間的命令的相關(guān)知識(shí),希望大家喜歡!

          1. Linux shell獲取時(shí)間的相關(guān)命令

          time命令:獲取一個(gè)程序的執(zhí)行時(shí)間,可以獲取到實(shí)際運(yùn)行時(shí)間以及程序在用戶態(tài)和內(nèi)核態(tài)分別的時(shí)間,大部分的性能測試,可能只需要關(guān)注實(shí)際時(shí)間。

          time命令的使用就很簡單了,在原有的要運(yùn)行的程序(可執(zhí)行文件、腳本等任何可執(zhí)行程序)之前加上time即可。

          time命令的常用選項(xiàng)

          使用time,常用的選項(xiàng)是:-f和-p。其中-f后面指定一個(gè)格式串,控制time的輸出的格式,默認(rèn)的time輸出是real、user、sys三行以xmxxx.xxxs的格式輸出,通過-f可以控制。

          -p選項(xiàng)也是格式,表示使用posix標(biāo)準(zhǔn)的格式,主要的區(qū)別是顯示的時(shí)間都是以s為單位的,具體關(guān)于格式的問題參考man time的幫助內(nèi)容就知道了。

          -f選項(xiàng)沒法工作?弄不清楚為何-f和-o等選項(xiàng)都無法工作,知道的請補(bǔ)充。(-p是工作的)

          另一種控制格式的方法是設(shè)置TIMEFORMAT環(huán)境變量,具體參考man time可以知道這些格式控制符分別表示什么。舉例如下:

          #time pwd

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #export TIMEFORMAT="real time %E, user time %U,sys time %S"

          #time pwd

          /home/sgeng2

          real time 0.000, user time 0.000,sys time 0.000

          #time -p pwd

          /home/sgeng2

          real 0.00

          user 0.00

          sys 0.00

          #

          time命令的輸出的問題

          上面已經(jīng)說到,好像-o選項(xiàng)并不工作,那么,我們就只能自己想辦法了。有時(shí)候?qū)懩_本,就希望把time的結(jié)果輸出到文件中,然后可能會(huì)根據(jù)time的輸出進(jìn)行一些處理,比如提取出real時(shí)間等。顯然,大家能想到的是重定向了,至于重定向的使用這里顯然不準(zhǔn)備討論(太復(fù)雜),只是提示一點(diǎn):time命令的輸出結(jié)果是輸出到stderr的,不是stdout,所以進(jìn)行重定向的時(shí)候要注意了。看懂下面的例子基本就能理解了:

          #time pwd

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #time pwd > out.txt

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #cat out.txt

          /home/sgeng2

          #time pwd 2> out.txt

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #cat out.txt

          #(time pwd) 2> out.txt

          /home/sgeng2

          #cat out.txt

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #(time pwd) >& out.txt

          #cat out.txt

          /home/sgeng2

          real 0m0.000s

          user 0m0.000s

          sys 0m0.000s

          #

          這里更多的是涉及到的和重定向相關(guān)的內(nèi)容,所以不會(huì)詳細(xì)分析每一個(gè)例子。說明的是注意time pwd 2> out.txt和(time pwd) 2> out.txt的區(qū)別,前面一個(gè)的含義是把pwd的結(jié)果stderr重定向到out.txt,相當(dāng)于"time (pwd 2> out.txt)"的結(jié)果。

          date命令:

          關(guān)于date命令的使用,百度一把一大堆,就不重復(fù)了。這里只說明一下幾個(gè)常見的問題:

          date的%s和%N

          date中有很多控制格式的,其中%s是獲取當(dāng)前時(shí)間距離1970-01-01 00:00:00 UTC的時(shí)間差。date的其它很多格式控制都是控制當(dāng)前時(shí)間的輸出格式而已,比如只輸出時(shí)分秒,只輸出年月日等等,其中%N也是這一類,%N輸出的是當(dāng)前時(shí)間的納秒部分,由于date并沒有毫秒等級(jí)別的輸出,所以在秒以下的內(nèi)容都屬于納秒部分。所以從這個(gè)角度說,date是可以很精確的,可以達(dá)到納秒級(jí)別。

          獲取一個(gè)時(shí)間戳

          有時(shí)候會(huì)使用時(shí)間戳,或者隨機(jī)數(shù),UUID這樣的東西,百度一下也有相關(guān)文章(比如搜索”shell date隨機(jī)數(shù)“等)。一般來說,可以用%s和%N組合的方式就沒問題,同一秒內(nèi),兩次運(yùn)行%N肯定不會(huì)一樣,所以%s和%N組合能得到一個(gè)唯一數(shù)。

          #date +%s.%N

          1337435374.969263560

          #date +%s+%N

          1337435377+310281496

          #date +%s_%N

          1337435381_209334510

          #date +%s_%N

          1337435383_169263078

          #date +%s_%N

          1337435383_830009679

          #

          有時(shí)候可能希望用一個(gè)”唯一“的東西來對文件命名等,就可以加上時(shí)間戳了。

          2. linux shell獲取時(shí)間差(使用date命令)

          至于使用time命令,其本身就是獲取一個(gè)時(shí)間差,但是顯然,time只適用于一些簡單的情況,因?yàn)楹竺娴膮?shù)是可以執(zhí)行的內(nèi)容,有時(shí)候可能需要執(zhí)行多條命令,用time就比較麻煩。

          (1) 秒為單位

          date獲取的是”當(dāng)前時(shí)間“,顯然,兩次運(yùn)行date就可以得到一個(gè)時(shí)間差,理論上,可以使用很多格式來表示date的輸出,從而計(jì)算時(shí)間差,但是,顯然,最直接的方式就是使用%s了,這樣直接就可以計(jì)算出一個(gè)時(shí)間差,不需要那么復(fù)雜的shell字符串處理了。如下:

          #start=$(date +%s) && sleep 2 && end=$(date +%s) && echo $(( $end - $start ))

          2

          #start=$(date +%s) && sleep 3 && end=$(date +%s) && echo $(( $end - $start ))

          3

          #

          當(dāng)然,這里是在terminal中測試的,所以用&&連續(xù)執(zhí)行這些命令,對于腳本,一行一行的寫就很好了。。。。

          start=$(date +%s)

          ...what to do for timing...

          end=$(date +%s)

          time=$(( $end - $start ))

          echo $time

          (2) ms為單位

          更多的性能測試等場合獲取時(shí)間差,有可能希望精確到ms。事實(shí)上,使用date是可以達(dá)到ms的。直接上代碼吧。

          #! /bin/bash

          #filename: test.sh

          # arg1=start, arg2=end, format: %s.%N

          function getTiming() {

          start=$1

          end=$2

          start_s=$(echo $start | cut -d '.' -f 1)

          start_ns=$(echo $start | cut -d '.' -f 2)

          end_s=$(echo $end | cut -d '.' -f 1)

          end_ns=$(echo $end | cut -d '.' -f 2)

          # for debug..

          # echo $start

          # echo $end

          time=$(( ( 10#$end_s - 10#$start_s ) * 1000 + ( 10#$end_ns / 1000000 - 10#$start_ns / 1000000 ) ))

          echo "$time ms"

          }

          echo "This is only a test to get a ms level time duration..."

          start=$(date +%s.%N)

          ls >& /dev/null # hey, be quite, do not output to console....

          end=$(date +%s.%N)

          getTiming $start $end

          這個(gè)代碼是一個(gè)簡單的測試,可以獲取到ls命令執(zhí)行的時(shí)間,相信其執(zhí)行時(shí)間已經(jīng)夠短了,如果你需要獲取的時(shí)間差在ms以下,相信你不會(huì)使用shell了。

          結(jié)果如下:

          #./test.sh

          This is only a test to get a ms level time duration...

          3 ms

          #./test.sh

          This is only a test to get a ms level time duration...

          2 ms

          #./test.sh

          This is only a test to get a ms level time duration...

          2 ms

          #

          還滿意吧,能獲取到這么短的時(shí)間。當(dāng)然,理論上可以獲取到以ns為單位的時(shí)間差,但是,個(gè)人覺得用shell去弄這么小的時(shí)間差,你覺得準(zhǔn)確么。

          說明:

          關(guān)于代碼中的“10#”,這是表示后面的數(shù)是10進(jìn)制的數(shù)字,之所以需要這個(gè)是因?yàn)檫@里的納秒的前面是以0開頭的,shell中好像以0開頭會(huì)默認(rèn)認(rèn)為是八進(jìn)制,導(dǎo)致運(yùn)行報(bào)錯(cuò),這里就索性把所有的數(shù)字都加上了10#,表示都是10進(jìn)制。

          start_s=$(echo $start | cut -d '.' -f 1)

          start_ns=$(echo $start | cut -d '.' -f 2)

          end_s=$(echo $end | cut -d '.' -f 1)

          end_ns=$(echo $end | cut -d '.' -f 2)

          # for debug..

          # echo $start

          # echo $end

          time=$(( ( 10#$end_s - 10#$start_s ) * 1000 + ( 10#$end_ns / 1000000 - 10#$start_ns / 1000000 ) ))

          echo "$time ms"

          }

          echo "This is only a test to get a ms level time duration..."

          start=$(date +%s.%N)

          ls >& /dev/null # hey, be quite, do not output to console....

          end=$(date +%s.%N)

          getTiming $start $end

          這個(gè)代碼是一個(gè)簡單的測試,可以獲取到ls命令執(zhí)行的時(shí)間,相信其執(zhí)行時(shí)間已經(jīng)夠短了,如果你需要獲取的時(shí)間差在ms以下,相信你不會(huì)使用shell了。

          結(jié)果如下:

          #./test.sh

          This is only a test to get a ms level time duration...

          3 ms

          #./test.sh

          This is only a test to get a ms level time duration...

          2 ms

          #./test.sh

          This is only a test to get a ms level time duration...

          2 ms

          #

          還滿意吧,能獲取到這么短的時(shí)間。當(dāng)然,理論上可以獲取到以ns為單位的時(shí)間差,但是,個(gè)人覺得用shell去弄這么小的時(shí)間差,你覺得準(zhǔn)確么。

          說明:

          關(guān)于代碼中的“10#”,這是表示后面的數(shù)是10進(jìn)制的數(shù)字,之所以需要這個(gè)是因?yàn)檫@里的納秒的前面是以0開頭的,shell中好像以0開頭會(huì)默認(rèn)認(rèn)為是八進(jìn)制,導(dǎo)致運(yùn)行報(bào)錯(cuò),這里就索性把所有的數(shù)字都加上了10#,表示都是10進(jìn)制。

        3575441 主站蜘蛛池模板: 精品国产欧美一区二区三区在线| 亚洲av免费成人精品区| 九九热精品免费在线视频| 成 人免费va视频| 国产超碰无码最新上传| 啦啦啦啦www日本在线观看| 精品无码人妻一区二区三区| 国产成人精品亚洲精品密奴| 一区二区不卡99精品日韩| 亚洲狠狠狠一区二区三区| 精品无码久久久久久尤物| 蜜桃av一区二区高潮久久精品| 蜜臀av黑人亚洲精品| 精品一区二区三区在线成人| 在线观看精品自拍视频| 一区二区三区在线 | 欧洲| 色狠狠综合天天综合综合| 强奷漂亮少妇高潮麻豆| 亚洲最大福利视频网| 精品无码av不卡一区二区三区| 99精品热在线在线观看视| 国产欧美精品aaaaaa片 | 福利网午夜视频一区二区| 亚洲自拍另类| 婷婷婷国产在线视频| 男人的天堂av一二三区| 亚洲欧洲av人一区二区| 草草浮力影院| 亚洲 日韩 在线精品| 国产裸体美女视频全黄| 精品尤物国产尤物在线看| 国产精品久久综合桃花网| 狠狠综合久久av一区二| 国产精品白嫩极品在线看| 亚洲情A成黄在线观看动漫尤物 | 久久亚洲国产精品日日av夜夜| 乱60一70归性欧老妇| 成人国产亚洲精品一区二区| 亚洲国产精品无码一区二区三区 | 国外av片免费看一区二区三区| 国产精品 第一页第二页|