9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦>學習電腦>操作系統>Linux教程>

linux shell獲取當前時間命令詳解

時間: 佳洲1085 分享

  當出現一個獲取一個時間戳或時間差需求時,那么我們該使用什么命令來獲取當前時間呢?下面由學習啦小編為大家整理了linux shell獲取當前時間的命令的相關知識,希望大家喜歡!

  1. Linux shell獲取時間的相關命令

  time命令:獲取一個程序的執行時間,可以獲取到實際運行時間以及程序在用戶態和內核態分別的時間,大部分的性能測試,可能只需要關注實際時間。

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

  time命令的常用選項

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

  -p選項也是格式,表示使用posix標準的格式,主要的區別是顯示的時間都是以s為單位的,具體關于格式的問題參考man time的幫助內容就知道了。

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

  另一種控制格式的方法是設置TIMEFORMAT環境變量,具體參考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命令的輸出的問題

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

  #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

  #

  這里更多的是涉及到的和重定向相關的內容,所以不會詳細分析每一個例子。說明的是注意time pwd 2> out.txt和(time pwd) 2> out.txt的區別,前面一個的含義是把pwd的結果stderr重定向到out.txt,相當于"time (pwd 2> out.txt)"的結果。

  date命令:

  關于date命令的使用,百度一把一大堆,就不重復了。這里只說明一下幾個常見的問題:

  date的%s和%N

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

  獲取一個時間戳

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

  #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

  #

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

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

  至于使用time命令,其本身就是獲取一個時間差,但是顯然,time只適用于一些簡單的情況,因為后面的參數是可以執行的內容,有時候可能需要執行多條命令,用time就比較麻煩。

  (1) 秒為單位

  date獲取的是”當前時間“,顯然,兩次運行date就可以得到一個時間差,理論上,可以使用很多格式來表示date的輸出,從而計算時間差,但是,顯然,最直接的方式就是使用%s了,這樣直接就可以計算出一個時間差,不需要那么復雜的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

  #

  當然,這里是在terminal中測試的,所以用&&連續執行這些命令,對于腳本,一行一行的寫就很好了。。。。

  start=$(date +%s)

  ...what to do for timing...

  end=$(date +%s)

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

  echo $time

  (2) ms為單位

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

  #! /bin/bash

  #filename: test.sh

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

  function getTiming() {

  start= class="main">

linux shell獲取當前時間命令詳解

時間: 佳洲1085 分享

  end=

  當出現一個獲取一個時間戳或時間差需求時,那么我們該使用什么命令來獲取當前時間呢?下面由學習啦小編為大家整理了linux shell獲取當前時間的命令的相關知識,希望大家喜歡!

  1. Linux shell獲取時間的相關命令

  time命令:獲取一個程序的執行時間,可以獲取到實際運行時間以及程序在用戶態和內核態分別的時間,大部分的性能測試,可能只需要關注實際時間。

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

  time命令的常用選項

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

  -p選項也是格式,表示使用posix標準的格式,主要的區別是顯示的時間都是以s為單位的,具體關于格式的問題參考man time的幫助內容就知道了。

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

  另一種控制格式的方法是設置TIMEFORMAT環境變量,具體參考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命令的輸出的問題

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

  #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

  #

  這里更多的是涉及到的和重定向相關的內容,所以不會詳細分析每一個例子。說明的是注意time pwd 2> out.txt和(time pwd) 2> out.txt的區別,前面一個的含義是把pwd的結果stderr重定向到out.txt,相當于"time (pwd 2> out.txt)"的結果。

  date命令:

  關于date命令的使用,百度一把一大堆,就不重復了。這里只說明一下幾個常見的問題:

  date的%s和%N

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

  獲取一個時間戳

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

  #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

  #

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

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

  至于使用time命令,其本身就是獲取一個時間差,但是顯然,time只適用于一些簡單的情況,因為后面的參數是可以執行的內容,有時候可能需要執行多條命令,用time就比較麻煩。

  (1) 秒為單位

  date獲取的是”當前時間“,顯然,兩次運行date就可以得到一個時間差,理論上,可以使用很多格式來表示date的輸出,從而計算時間差,但是,顯然,最直接的方式就是使用%s了,這樣直接就可以計算出一個時間差,不需要那么復雜的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

  #

  當然,這里是在terminal中測試的,所以用&&連續執行這些命令,對于腳本,一行一行的寫就很好了。。。。

  start=$(date +%s)

  ...what to do for timing...

  end=$(date +%s)

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

  echo $time

  (2) ms為單位

  更多的性能測試等場合獲取時間差,有可能希望精確到ms。事實上,使用date是可以達到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

  這個代碼是一個簡單的測試,可以獲取到ls命令執行的時間,相信其執行時間已經夠短了,如果你需要獲取的時間差在ms以下,相信你不會使用shell了。

  結果如下:

  #./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

  #

  還滿意吧,能獲取到這么短的時間。當然,理論上可以獲取到以ns為單位的時間差,但是,個人覺得用shell去弄這么小的時間差,你覺得準確么。

  說明:

  關于代碼中的“10#”,這是表示后面的數是10進制的數字,之所以需要這個是因為這里的納秒的前面是以0開頭的,shell中好像以0開頭會默認認為是八進制,導致運行報錯,這里就索性把所有的數字都加上了10#,表示都是10進制。

  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

  這個代碼是一個簡單的測試,可以獲取到ls命令執行的時間,相信其執行時間已經夠短了,如果你需要獲取的時間差在ms以下,相信你不會使用shell了。

  結果如下:

  #./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

  #

  還滿意吧,能獲取到這么短的時間。當然,理論上可以獲取到以ns為單位的時間差,但是,個人覺得用shell去弄這么小的時間差,你覺得準確么。

  說明:

  關于代碼中的“10#”,這是表示后面的數是10進制的數字,之所以需要這個是因為這里的納秒的前面是以0開頭的,shell中好像以0開頭會默認認為是八進制,導致運行報錯,這里就索性把所有的數字都加上了10#,表示都是10進制。

3575441 主站蜘蛛池模板: 苍井空一区二区三区在线观看| 精品激情视频一区二区三区| 亚洲av首页在线| 亚洲一区在线成人av| 中文字幕乱码十国产乱码| 久久国产精品老女人| 一区二区传媒有限公司| 亚洲av无码之国产精品网址蜜芽| 亚洲综合一区无码精品| 激情综合网五月婷婷| 日韩不卡无码精品一区高清视频| 亚洲熟妇精品一区二区| 97欧美精品系列一区二区| 亚洲偷偷自拍码高清视频| 日韩欧美一卡2卡3卡4卡无卡免费2020| 亚洲国产精品久久久久秋霞| 国产亚洲综合另类色专区| 人妻少妇精品中文字幕| 亚洲高清中文字幕在线看不卡| 深夜释放自己在线观看| 欧洲熟妇熟女久久精品综合 | 野外做受三级视频| 国内自拍小视频在线看| 色噜噜一区二区三区| 亚洲69视频| 成 人 色 网 站免费观看| 欧美性色黄大片www喷水| 中文字幕久久波多野结衣av| 精品中文人妻在线不卡| 亚洲一区二区乱码精品| 欧美人与zoxxxx另类| 亚洲精品视频免费| 成年美女黄网站色大片免费看| 成人一区二区不卡国产| 亚洲综合久久国产一区二区| 精品自拍自产一区二区三区| 日韩福利片午夜免费观着| 精品国产成人A区在线观看| 欧美视频网站www色| 午夜视频免费试看| 国产在线中文字幕精品|