導航:首頁 > 操作系統 > linux計數器

linux計數器

發布時間:2022-12-25 23:26:47

linux系統文件刪除原理

Linux系統是通過Link的數量來控制文件是否被刪除的,只有當一個文件不存在任何Link的時候,這個文件才會被刪除。
一般來說,每個文件都有2個Link計數器,既i_count和i_nlink:

當為文件創建硬鏈接的時候,對應i_nlink的數量就會增加,而當一個文件被某個進程調用時,對應i_count的數量就會增加。

rm命令原理:

⑵ 請教關於linux性能計數器

08中文對應是0804 項,如果在0804項里沒有Counter和Help 這兩項多字元串值,需要自己手動新建下。內容可以復制009的,或是CurrentLanguage.

⑶ Linux下的並行神器——parallel

GNU Parallel的輸入源支持文件、命令行和標准輸入(stdin或pipe)。

當然,若不想像上面那樣進行組合,可使用 --xapply 參數從每一個源獲取一個參數(或文件一行),這個參數有些類似R中的函數,具有廣播作用——如果其中一個輸入源的長度比較短,它的值會被重復。

GNU Parallel可以通過 --arg-sep 和 --arg-file-sep 指定分隔符替代 ::: 或 ::::,當這兩個符號被其它命令佔用的時候會特別有用。

GNU Parallel默認把一行做為一個參數:使用 \n 做為參數定界符。可以使用 -d 改變:

GNU Parallel支持通過 -E 參數指定一個值做為結束標志:

GNU Parallel使用 --no-run-if-empty 來跳過空行:

如果parallel之後沒有給定命令,那麼這些參數會被當做命令:

此外,命令還可以是一個腳本文件,一個二進制可執行文件或一個bash的函數(須用 export -f 導出函數)

GNU Parallel支持多種替換字元串,默認使用 {},使用 -I 改變替換字元串符號 {}。其最常見的字元串替換包括以下幾種: {.} ,去掉擴展名; {/} ,去掉路徑,只保留文件名; {//} ,只保留路徑; {/.} ,同時去掉路徑和擴展名; {#} ,輸出任務編號。同時對於每一個字元串替換都可以自己指定符號: -I 對應 {} ; --extensionreplace 替換 {.} ; --basenamereplace 替換 {/} ; --dirnamereplace 替換 {//} ; --basenameextensionreplace 替換 {/.} ; --seqreplace 替換 {#} 。

同時,如果有多個輸入源時,可以通過 {編號} 指定某一個輸入源的參數:

使用 --header 把每一行輸入中的第一個值做為參數名。

使用 --colsep 把文件中的行切分為列,做為輸入參數。

--xargs 會在一行中輸入盡可能多的參數(與參數字元串長度有關),通過 -s 可指定一行中參數的上限。

為了獲得更好的並發性,GNU Parallel會在文件讀取結束後再分發參數。
GNU Parallel 在讀取完最後一個參數之後,才開始第二個任務,此時會把所有的參數平均分配到4個任務(如果指定了4個任務)。
第一個任務與上面使用 --xargs 的例子一樣,但是第二個任務會被平均的分成4個任務,最終一共5個任務。(奇怪的是我的結果與官網教程的結果不一樣)

替換字元串可以是輸出字元的一部分,使用 -m 參數表示每個job不重復輸出「背景」(context), -X 則與 -m 相反,會重復輸出「背景文本」,具體通過下面幾個例子進行理解:

使用 -N 限制每行參數的個數,其中 -N0 表示一次只讀取一個參數,且不輸入這個參數(作為計數器來使用)。

如果命令行中包含特殊字元,就需要使用引號保護起來。
perl腳本 'print "@ARGV\n"' 與linux的 echo 的功能一樣。

使用GNU Parallel運行這條命令的時候,perl命令需要用引號包起來,也可以使用 -q 保護perl命令:

使用 --trim 去除參數兩頭的空格:

使用 --tag 以參數做為輸出前綴,使用 --tagstring 修改輸出前綴:

--dryrun 作用類似於echo:

--verbose 則在運行之前先列印命令:

一般來說,GNU Parallel 會延遲輸出,直到一組命令執行完成。使用 --ungroup ,可立刻列印輸出已完成部分。

使用 --ungroup 會很快,但會導致輸出錯亂,一個任務的行輸出可能會被另一個任務的輸出截斷。像上例所示,第二行輸出混合了兩個任務: '4-middle' '2-start'。使用 --linebuffer 避免這個問題(稍慢一點):

強制使輸出與參數保持順序 --keep-order/-k :

GNU Parallel可以把每一個任務的輸出保存到文件中,臨時文件默認保存在 /tmp 中,可以使用 --tmpdir改變(或者修改 $TMPDIR):

輸出文件可以有結構的保存 --results ,輸出文件不僅包含標准輸出(stdout)也會包含標准錯誤輸出(stderr):

在使用多個變數的時候會顯示很有用:

使用 --jobs/-j 指定並行任務數。

通過使用 --interactive 在一個任務執行之前讓用戶決定是否執行。

當job有大量的IO操作時,為避免 「驚群效應」 ,可使用 --delay 參數指定各個job開始的時間間隔。

若已知任務超過一定時間未反應則為失敗則可以通過 --timeout 指定等待時間避免無謂的等待。GNU parallel能計算所有任務運行時間的中位數,因此可以指定時間為中位數的倍數關系。

GNU parallel有多種方式可用來動態的顯示任務進度信息,如:

使用 --joblog 參數能夠生成各個任務的日誌文件:

通過 --resume-failed 參數可以重新運行失敗的任務; --retry-failed 的作用與 --resume-failed 類似,只是 --resume-failed 從命令行讀取失敗任務,而 --retry-failed 則是從日誌文件中讀取失敗任務:

GNU parallel支持在某一情況下(如第一個失敗或成功時,或者20%任務失敗時)終止任務,終止任務又有兩種類型,其一為立即終止(通過 --halt now 指定),殺死所有正在運行的任務並停止生成新的任務,其二為稍後終止(通過 --halt soon 指定),停止生成新任務並等待正在運行任務完成。

GNU parallel還支持在任務失敗後重試運行 --retries :

關於終止信號的高級用法參考 官方入門文檔 。

GNU parallel能夠在開始一個新的任務前檢查系統的負載情況防止過載(通過 --load 可指定負載),同時還能檢查系統是否使用了交換空間(swap)(通過 --noswap 限制使用swap)。

同時,對於某些佔用內存較多的程序,parallel會檢查內存只有內存滿足時才啟動任務(通過 --memfree 指定需要內存大小),而且在啟動任務後內存不夠50%時會殺掉最新開始的任務,直到這個任務完成再重新開始那些殺死的任務。

還可以通過 --nice 來指定任務的優先順序。

可使用 -S host 來進行遠程登陸:
parallel -S username@$SERVER1 echo running on ::: username@$SERVER1

GNU parallel 文件傳輸使用的是rsync。

更多遠程操作參見入門文檔。

--pipe 參數使得我們可以將輸入(stdin)分為多塊(block),然後分配給多個任務多個cpu以達到負載均衡,最後的結果順序與原始順序一致。使用 --block 參數可以指定每塊的大小,默認為1M。

如果不關心結果順序,只想要快速的得到結果,可使用 --round-robin 參數。沒有這個參數時每塊文件都會啟動一個命令,使用這個參數後會將這些文件塊分配給job數任務(通過 --jobs 進行指定)。若想分配更為均勻還可同時指定 --block 參數。

參考:
官方文檔
GNU Parallel指南

⑷ Linux下的計數器。

bc命令可以進行計算:+ 加法 - 減法* 乘法/ 除法^ 指數% 余數例如:
# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+6 <=加法
7
5+2*3 <=加法、乘法
11
(4+2)*3 <=加法、乘法(優先)
18
4*6/8 <=乘法、除法
3
10^3 <=指數
1000
18%5 <=余數
3
6+7;7*5;6/3 <=一行輸入多個計算,用;相隔。
13
35
2

quit <=退出
# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=4 <=設小數位
1/6
.1666
quit

⑸ linux 路徑之後跟了一個命令計數器,我每次輸入一個命令這個計數器就增加1 請問怎麼去掉啊

你得裝一個calc軟體啊,我用archlinux,pacman -S calc可以裝上calc,然後term里運行就可以。 如果用ubuntu,還是apt-cache search calc看看,應該有這個軟體 apt-get install calc

⑹ linux借用外部命令expr,實現計算器功能,利用管道,進程

test指令(使用指令man查詢)

功能:檢查文件類型,值比較。

test的各種參數和使用。

test EXPRESSION1 –a EXPRESSION2

當表達式1和表達式2同時為真時值為真

test EXPRESSION1 –o EXPRESSION2

當表達式1或者表達式2為真時值為真

test –n STRING

或者

test STRING

當STRING串的長度不為零時值為真

test –z STRING

當STRING串長度為零時值為真

test STRING1 = STRING2

當STRING1和STRING2相同時值為真

test STRING1 != STRING2

當STRING1 和 STRING2不同時值為真

test INTEGER1 –eq INTEGER2

當INTEGER1等於INTEGER2時值為真

test INTEGER1 –ge INTEGER2

當INTEGER1大於或者等於INTEGER2時值為真

test INTEGER1 –gt INTEGER2

當INTEGER1 大於INTEGER2時值為真

test INTEGER1 –le INTEGER2

當INTEGER1小於等於INTEGER2時值為真

test INTEGER1 –lt INTEGER2

當INTEGER1 小於INTEGER2時值為真

test INTEGER1 –ne INTEGER2

當INTEGER1不等於INTEGER2時值為真

test FILE1 –ef FILE2

當FILE1和FILE2有同樣的device和inode號時為真(詳細見linux文件學習筆記)

test FILE1 –nt FILE2

當FILE1修改時間比FILE2新時值為真

test FILE1 –ot FILE2

當FILE1修改時間比FILE2舊時值為真

test –b FILE

FILE存在並且內容是block類型的

test –c FILE

FILE存在並且是字元類型的

test –d FILE

FILE存在並且是一個目錄

test –e FILE

FILE是否存在

test –f FILE

FILE存在並且是一個正則表達式類型的文檔

test –g FILE

FILE存在並且是 set-group-ID也就是SGID(詳細見後文學習筆記)

test –G FILE

FILE存在並且由有效的GROUP ID所擁有(詳細見後文學習筆記)

test –h FILE

FILE存在並且是一個符號鏈接(詳細見後文學習筆記)

test –k FILE

FILE存在並且設置了sticky bit set(詳細見後文學習筆記)

test –L FILE

FILE存在並且是一個符號鏈接

test –O FILE

FILE存在並且由一個有效的USER ID所擁有

test –p FILE

FILE存在並且是一個命名管道(命名管道見後文學習筆記)

test –r FILE

FILE存在並且授予了可讀的許可權

test –s FILE

FILE存在並且size大於0

test –S FILE

FILE存在並且是一個socket

test –t FD

文件的描述符FD在終端打開

test –u FILE

FILE存在並且SUID已經被設置

test –w FILE

FILE存在並且授予了寫操作許可權

test –x FILE

FILE存在並且授予了可執行的許可權

----------------------------------------------------------------------------------------------------------------------------------------------------

expr

expr是linux的手工命令行計數器,它可以幫助我們完成一些基本的表達式值運算。同時它也是一個字元串處理工具

(1) 整數運算

$expr ARG1 | ARG2

$expr ARG1 & ARG2

$expr ARG1 < ARG2

$expr ARG1 <= ARG2

$expr ARG1 = ARG2

$expr ARG1 != ARG2

$expr ARG1 >= ARG2

$expr ARG1 > ARG2

$expr ARG1 + ARG2

$expr ARG1 – ARG2

$expr ARG1 * ARG2

使用乘法時,需要使用反斜杠進行轉義

$expr ARG1 % ARG2

(2) 字元串操作

$expr length 「xxx」 //計算字元串長度

$expr substr 「this is a」pos length //從第pos位開始截取length長度的子串

$expr index 「tesr」e //獲取e在主串中首次出現的位置

(3) 增量計數

例子

loop=3

loop=`expr $loop + 1`

echo $loop

結果是4,在第二行代碼中,使用反引號,shell會將反引號中的內容作為一個系統命令,這樣一來,就好像我們在命令行內輸入了expr $loop + 1然後這個命令的返回結果被賦值到loop。

(4) 模式匹配(按照正則表達式模式匹配串)

通過指定冒號選項計算字元串中字元數。.*意即任何字元重復0次或多次。

> VALUE=account.doc

> expr $VALUE : 』.*』

8

在expr中可以使用字元串匹配操作,這里使用模式抽取.doc文件附屬名。

$expr $VALUE : 『\(.*\).doc』

accounts

(5) 其他

+ TOKEN

將TOKEN解釋為串,不管它是一個關鍵字或者一個操作符

延伸知識:

引號的作用

1 雙引號(「」)

1)使用」」可引用除字元$(美元符號)、`(反引號)、\(反斜線)外的任意字元或字元串。雙引號不會阻止shell對這三個字元做特殊處理(標示變數名、命令替換、反斜線轉義)。

Eg:name=gezn; echo 「User name:$name」//將列印User name :gezn

Echo 「The date is:`date +date-%d-%m-%Y`」//將列印The date is: 03-05-2009

Echo –e 「$USER\t$UID」 //將列印gezn 500

2)如果要查新包含空格的字元串經常用到雙引號

2 單引號(』』)

1) 如果用單引號把字元串括起來,則dayi9nhao內字元串中的任何特殊字元的特殊含義均被屏蔽。

2) 舉例:echo –e 『$USER\t$UID』//將列印$USER $UID(沒有屏蔽\t,是因為選項「-e」的緣故)

echo 『USER\t$UID』 //將列印$USER\t$UID

3 反引號(``)

1) shell將反引號中的內容作為一個系統命令,並執行其內容。使用這種方法可以替換輸出為一個變數

2) 舉例:a=`date + date-%d-%m-%Y` //將列印The date is: 03-05-2009

4.反斜線(\)

1)如果下一個字元有特殊含義,反斜線防止shell誤解其含義,即屏蔽其特殊含義。

2)下屬字元包含有特殊含義:& * + $ ` 「 | ?

3) 在列印字元串時要加入八進制字元(ASCII相應字元)時,必須在前面加反斜線,否則shell作普通數字處。

舉例: bj=Beijing; echo 」variable\$bj=$bj」//將列印variable $bj = beijing

------------------------------------------------------------------------------------------------------------------------------------------------

Shell特殊變數

在Shell中,預先定義了幾個有特殊含義的Shell變數,它們的值只能由Shell根據實際情況進行賦值,而不能通過用戶重新設置。shell的特殊變數包括它的位置和一些系統變數.

(一)常用位置變數:

$# 命令行上實際參數的個數,但不包含Shell腳本名。
$? 上一條命令執行後的返回值(也稱作 「退出碼」)。它是一個十進制數。多數Shell命令執行成功時,則返回值為0;如果執行失敗,則返回非0值。
$$ 當前進程的進程號。
$! 上一個後台命令對應的進程號,這是一個由1~5位數字構成的數字串。
$- 由當前Shell設置的執行標志名組成的字元串。例如:
set -xv 這個命令行給Shell設置了標志-x和-v(用於跟蹤輸出)。
$* 表示在命令行中實際給出的所有實參字元串,它並不僅限於9個實參。
$@ 它與$*基本功能相同,但是使用時加引號,並在引號中返回每個參數
$0 腳本名稱
$1..$9 第N個參數

下面的aaa bbb 為變數名

${aaa:-bbb} 如果$aaa為空或未定義,則取值$bbb.否則取值$aaa

${aaa:+bbb} 如果$aaa非空,則取值$bbb,否則取值為空

${aaa:=bbb} 如果$aaa非空,則取值$aaa,否則取值$bbb而且賦值(aaa=bbb)

${aaa:3} 如果aaa=abcdefg,則${aaa:3}的值為:defg ,相當於substr,計數從0開始

${aaa:3:2} 如上; ${aaa:3:2}取值為: de.相當於substr

${#aaa} 字元串$aaa的長度.

(二)常用系統變數:
$HOME 用戶的主目錄
$USER 用戶名稱
$GROUP 用戶所屬組名
$PATH 默認的搜索路徑
$HOSTNAME 主機名稱
$TZ 時區
$MAIL 存放郵件的路徑名

練手:

#!/bin/bash

echo $0

echo $*

echo $@

echo $#

echo $$

echo $_

在terminal窗口中執行:

./test.sh -a -b –c /home

./test.sh

-a -b -c /home

-a -b -c /home

4

3250

/home

區別$*和$@編寫如下test.sh腳本:

#!/bin/bash

function testargs

{

echo "$# args"

}

testargs "$*"

testargs "$@"

unset -f testargs

在terminal窗口中執行:

./test.sh -a -b /home

1 args //很明顯就一個嘛,傳入的是$*這個串,不是解釋後的參數

3 args //$@必須和引號搭配,所以結果正確

#!/bin/bash

function testargs

{

echo "$# args"

}

testargs $*

testargs $@

unset -f testargs

再次執行有:

./test.sh -a -b /home

3 args

3 args

作者:Aga.J
出處:http://www.cnblogs.com/aga-j

⑺ linux中 eip寄存器 程序計數器裡面放的內容到底是什麼呢

去看微機原理....

ip或者EIP(32位機) 又叫指令指針寄存器。

存放當前指令的下一條指令的地址。CPU該執行哪條指令就是通過IP來指示的。
EIP是32位機的指令寄存器。

⑻ 用loadrunner linux 性能計數器怎麼查看,以及要安裝什麼工具

你好,根據2001年1月10日國務院令第279號《建設工程質量管理條例》、2004年4月4日建設部第78號令《房屋建築工程和市政基礎設施工程竣工驗收備案管理暫行辦法》的規定,建設單位辦理房屋建築工程和市政基礎設施工程竣工驗收備案時需提交(一)建築工程施工許可證(正副本復印件);(二)工程質量監督手續;(一)建築工程施工許可證(正副本復印件);(二)工程質量監督手續;1、鄭州市工程質量監督登記表;2、工程參建單位質量責任制一覽表;3、工程質量監督計劃書、監督方案。(三)新建工程施工圖設計審查表,或施工圖審查批准書(復印件);(四)質量合格文憑;1、勘察部門對地基及處理的驗收文件;2、單位工程驗收記錄;①竣工報告;②工程竣工驗收意見表;③工程竣工驗收報告;④工程參建方工作情況報告(文字表述);⑤監理單位簽署的竣工移交證書。(五)地基與基礎、結構工程驗收記錄;1、地基驗槽記錄;2、結構(地基與基礎、主體)工程驗收報告;3、屋面、電氣檢測報告;4、工程質量整改通知書、整改報告。(六)規劃許可證及其規劃批復文件(復印件);(七)環保部門出具的認可文件或批准使用文件;(八)建設工程保修書;(九)住宅工程質量保證書;(十)住宅工程質量說明書;(十一)工程竣工報告(施工單位);(十二)工程合同價款結算材料;1、建設工程合同;2、建設工程結算書或預算書;3、建設單位支付工程款的證明材料(必須經施工單位簽字蓋章認可)。

⑼ LINUX shell 遇到的問題。 我想計算1+2+3+4.到100

這里
i
是當做計數器用的,每次循環遞增1。r
是當做累加器用的,將
i
的值進行累加。
這里沒有用for循環,而是用的while循環,其實是一樣的,而且while循環更為通用(sh不支持for循環)。
循環的次數也是有定義的,while
[
"$i"
!=
"100"
]這句就是定義,只要
i
沒遞增到100,就會一直循環。其實這句從語義上來說是不對的,這里是整數的比較而不是字元串的比較,所以比較符應該用-ne而不要用!=,即,應該寫成
while
[
$i
-ne
100
]
下面是個更為簡單的實現,你可以體會一下(shell中的變數其實不需要初始化,自有其默認值)。
#!/bin/bash
for
i
in
{1..100}
do
r=$((r+i))
done
echo
$r

⑽ linux下的幾種時鍾和定時器機制

1. RTC(Real Time Clock)

所有PC都有RTC. 它和CPU和其他晶元獨立。它在電腦關機之後還可以正常運行。RTC可以在IRQ8上產生周期性中斷. 頻率在2Hz--8192HZ.

Linux只是把RTC用來獲取時間和日期. 當然它允許進程通過對/dev/rtc設備來對它進行編程。Kernel通過0x70和0x71 I/O埠來訪問RTC。

 

2. TSC(Time Stamp Counter)

80x86上的微處理器都有CLK輸入針腳. 從奔騰系列開始. 微處理器支持一個計數器. 每當一個時鍾信號來的時候. 計數器加1. 可以通過匯編指令rdtsc來得到計數器的值。通過calibrate_tsc可以獲得CPU的頻率. 它是通過計算大約5毫秒里tsc寄存器裡面的增加值來確認的。或者可以通過cat /proc/cpuinfo來獲取cpu頻率。tsc可以提供比PIT更精確的時間度量。

 

3. PIT(Programmable internval timer)

除了RTC和TSC. IBM兼容機提供了PIT。PIT類似微波爐的鬧鍾機制. 當時間到的時候. 提供鈴聲. PIT不是產生鈴聲. 而是產生一種特殊中斷. 叫定時器中斷或者時鍾中斷。它用來告訴內核一個間隔過去了。這個時間間隔也叫做一個滴答數。可以通過編譯內核是選擇內核頻率來確定。如內核頻率設為1000HZ,則時間間隔或滴答為1/1000=1微秒。滴答月短. 定時精度更高. 但是用戶模式的時間更短. 也就是說用戶模式下程序執行會越慢。滴答的長度以納秒形式存在tick_nsec變數裡面。PIT通過8254的0x40--0x43埠來訪問。它產生中斷號為IRQ 0.

下面是關於pIT裡面的一些宏定義:

HZ:每秒中斷數。

CLOCK_TICK_RATE:值是1,193,182. 它是8254晶元內部振盪器頻率。

LATCH:代表CLOCK_TICK_RATE和HZ的比率. 被用來編程PIT。

setup_pit_timer()如下:

spin_lock_irqsave(&i8253_lock, flags);

outb_p(0x34,0x43);

udelay(10);

outb_p(LATCH & 0xff, 0x40);

udelay(10);

outb (LATCH >> 8, 0x40);

spin_unlock_irqrestore(&i8253_lock, flags);

 

 

4. CPU Local Timer

最近的80x86架構的微處理器上的local apic提供了cpu local timer.他和pit區別在於它提供了one-shot和periodic中斷。它可以使中斷發送到特定cpu。one-shot中斷常用在實時系統裡面。

閱讀全文

與linux計數器相關的資料

熱點內容
javatomcat圖片 瀏覽:413
程序員生產智能創意 瀏覽:65
匯和銀行app怎麼登錄 瀏覽:381
騰訊伺服器如何上傳源碼 瀏覽:739
單片機的原理概述 瀏覽:508
火控pdf 瀏覽:267
如何復制雲伺服器centos環境 瀏覽:984
債權pdf 瀏覽:299
紅色番字的app怎麼下載 瀏覽:876
雲伺服器流程教課 瀏覽:702
中國農業銀行app怎麼沒有網 瀏覽:997
幾率表演算法 瀏覽:902
程序員理工科 瀏覽:708
企業郵箱登錄收件伺服器地址 瀏覽:558
計算機思維與演算法設計的重要性 瀏覽:664
linux刷新磁碟命令 瀏覽:76
我的世界如何查看伺服器種子pc 瀏覽:284
linuxlamp編譯安裝 瀏覽:609
枚舉演算法ppt 瀏覽:184
cmd查看進程命令 瀏覽:956