摘要:實(shí)際上,認(rèn)為文本文件都是結(jié)構(gòu)化的,它將每一個(gè)輸入行定義為一個(gè)記錄,行中的每個(gè)字符串定義為一個(gè)域段,域和域之間使用分割符分割。
看到一篇“Docker 技巧:刪除 Docker 容器和鏡像”其中提到刪除標(biāo)簽為none的鏡像的方法,其中用到了awk,就去查了下,下面舉例說(shuō)明:
docker rmi $(docker images | awk "$1 == "" && $2 == " " {print $3}")
很多挺長(zhǎng)的指令不明白的時(shí)候可以拆成短的去學(xué)習(xí)了解,這里 “$()” 中的語(yǔ)句可以單摘出來(lái):
docker images | awk "$1 == "" && $2 == " " {print $3}"
這條語(yǔ)句又可以看作兩步操作:
docker images:查詢(xún)本地鏡像列表;
awk:文本分析工具,這里的 “"$1 == "
為了方便理解,這里再簡(jiǎn)化下語(yǔ)句:
docker images | awk "{print $0}" # 返回結(jié)果: REPOSITORY TAG IMAGE ID CREATED SIZE mono/jexus 6.24 1972cdc31613 4 days ago 727.9 MB
然后將結(jié)果與下面的兩個(gè)語(yǔ)句進(jìn)行對(duì)比
docker images | awk "{print $1}" # 返回結(jié)果: REPOSITORY mono/jexus docker images | awk "{print $3}" # 返回結(jié)果: IMAGE 1972cdc31613
不難看出 “$” 后的參數(shù)分別對(duì)應(yīng)的結(jié)果是有規(guī)律的。實(shí)際上,awk認(rèn)為文本文件都是結(jié)構(gòu)化的,它將每一個(gè)輸入行定義為一個(gè)記錄,行中的每個(gè)字符串定義為一個(gè)域(段),域和域之間使用分割符分割。awk會(huì)把每行進(jìn)行一個(gè)拆分,用相應(yīng)的命令對(duì)拆分出來(lái)的“段”進(jìn)行處理。
行工作模式,讀入文件的每一行,會(huì)把一行的內(nèi)容,存到$0里;
使用內(nèi)置的變量FS(段的分隔符,默認(rèn)用的是空白字符),分割這一行,把分割出來(lái)的每個(gè)段存到相應(yīng)的變量$(1-100);
輸出的時(shí)候按照內(nèi)置變量OFS(out FS);
讀入下一行繼續(xù)操作;
而"$1 == "
docker rmi $(docker images | awk "$1 == "" && $2 == " " {print $3}")
通過(guò)awk可以得到想要的文本,再與docker的其他命令組合可以實(shí)現(xiàn)很多有意思的功能,關(guān)于awk更多的信息請(qǐng)參考《Shell腳本之a(chǎn)wk詳解》,這里是備份。關(guān)于Docker的相關(guān)指令可以參照《Docker的學(xué)習(xí)--命令使用詳解》,里面有詳盡的注釋。
另外,如果需要幾個(gè)命令組合就可以用$()將命令嵌套起來(lái),如:
# 查詢(xún)本地鏡像的ID列表 docker images -q
和
# 根據(jù)鏡像的ID或鏡像的名稱(chēng) + 標(biāo)簽刪除鏡像 docker rmi ImageID
組合之后就成了
# 刪除所有的鏡像 docker rmi $(docker images -q)
同樣的,你可以根據(jù)自己的情況將其他的命令進(jìn)行組合,同時(shí)用awk對(duì)文本進(jìn)行處理可以實(shí)現(xiàn)更多有意思的功能。還有就是如果對(duì)docker的命令不熟悉的話(huà)
# 查看命令的幫助信息 docker COMMAND --help # 例如: docker rmi --help # 返回結(jié)果 Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] Remove one or more images -f, --force Force removal of the image --help Print usage --no-prune Do not delete untagged parents
這里沒(méi)辦法列全所有的用法,也沒(méi)必要,如果你自己掌握用法既可以記得牢,也可以自己組合出自己需要的命令。
參考文獻(xiàn):
Shell腳本之a(chǎn)wk詳解;
Docker的學(xué)習(xí)--命令使用詳解;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/26649.html
摘要:初步列了以下方案用實(shí)現(xiàn)擅長(zhǎng),通過(guò)重定向?qū)⒌妮敵鰝鹘o,處理完后執(zhí)行系統(tǒng)命令清除鏡像。對(duì)鏡像列表進(jìn)行去重操作可以以鏡像名稱(chēng)為進(jìn)行去重獲取歷史鏡像要保留最近個(gè)鏡像清除歷史鏡像,其實(shí)就是保留數(shù)據(jù)前行,有個(gè)內(nèi)置變量保存當(dāng)前處理行編號(hào)。 背景 雖然對(duì)awk早有耳聞,據(jù)說(shuō)是個(gè)很強(qiáng)大的工具,但一直沒(méi)機(jī)會(huì)去了解和使用,最近碰到一個(gè)需求,用awk輕松解決,才真正一窺它的厲害。需求是這樣的,應(yīng)用每次升級(jí)都會(huì)...
摘要:前兩天在本地安裝了,熟悉了下命令之后,還是忍不住到上進(jìn)行了一波鏡像部署,以下是我的操作步驟和一些想法。但是如果想要將當(dāng)前目錄的文件復(fù)制進(jìn)里頭,首先要保證鏡像在運(yùn)行,然后命令中的容器名使用我圈出來(lái)的那個(gè)名字。 前兩天在本地安裝了docker,熟悉了下命令之后,還是忍不住到centos上進(jìn)行了一波golang鏡像部署,以下是我的操作步驟和一些想法。準(zhǔn)備:一臺(tái)安裝了docker的可聯(lián)網(wǎng)的ce...
摘要:博文參考命令預(yù)覽基礎(chǔ)命令文本搜索權(quán)限管理文件搜索幫助命令用戶(hù)管理壓縮解壓網(wǎng)絡(luò)配置關(guān)機(jī)重啟常用命令系統(tǒng)信息顯示機(jī)器的處理器架構(gòu)顯示正在使用的內(nèi)核版本顯示的信息校驗(yàn)內(nèi)存使用顯示哪些被使用顯示內(nèi)核的版本顯示網(wǎng)絡(luò)適配器及統(tǒng)計(jì)顯示已加載的文件系統(tǒng) 博文參考 http://www.178linux.com/78199 http://www.cnblogs.com/suliuer/p/5448747...
閱讀 783·2023-04-25 17:33
閱讀 3636·2021-07-29 14:49
閱讀 2487·2019-08-30 15:53
閱讀 3440·2019-08-29 16:27
閱讀 2008·2019-08-29 16:11
閱讀 1036·2019-08-29 14:17
閱讀 2443·2019-08-29 13:47
閱讀 2023·2019-08-29 13:28