讓 curl 在狀態碼非2XX時,回傳錯誤

一般在使用 curl 去存取某個網路資源時,只要可以連上並存取,curl 的 exit code 就會是 0。

可是很常見的情境是會想要加上 HTTP 狀態碼的判斷,例如 404 表示 not found,這時候就只能用 -I(即 -X HEAD) 再加上 -v 去取得 HTTP 請求回應標頭裡的狀態碼,再來判斷。

curlf() {
  OUTPUT_FILE=$(mktemp)
  HTTP_CODE=$(curl --silent --output $OUTPUT_FILE --write-out "%{http_code}" "$@")
  if [[ ${HTTP_CODE} -lt 200 || ${HTTP_CODE} -gt 299 ]] ; then
    >&2 cat $OUTPUT_FILE
    return 22
  fi
  cat $OUTPUT_FILE
  rm $OUTPUT_FILE
}

還好,在 curl 7.76 以後的版本加入了 --fail-with-body/–fail ,使用這個參數就可以不用那麼複雜的判斷,當 HTTP 狀態碼不是 2XX ,exit code 就不會是 0 了,而會是 22,22 表示 。

curl -sI --fail-with-body http://example.com/not-found/
echo $?
22

這樣以後就不需要解析請求回應標頭裡的狀態碼了。

參考資料

電影流水帳(2022/07/01~2022/07/31)

Elizabeth Olsen & Paul Bettany
Elizabeth Olsen
  • Doctor Strange in the Multiverse of Madness (IMDB, Wikipedia),台譯:奇異博士2-失控多重宇宙。
  • Spider-Man: No Way Home (IMDB, Wikipedia),台譯:蜘蛛人3-無家日。

Doctor Strange in the Multiverse of Madness

看這部之前,最好先看「蜘蛛人3-無家日」跟「汪達與幻視」,會比較好理解為什麼奇異博士會提到多重宇宙,還有為什麼汪達會失控。簡單的說,都是對愛的執著,一個是對前女友的愛,一個是對孩子跟幻視的愛。

一開始就單刀直入地深入奇異博士的夢境,艾美莉卡被怪物追殺,奇異博士拯救她,隨即夢就醒了。持續發生這樣的夢,讓奇異博士感到困擾。這天奇異博士在真實世界處理事情時,怪物與艾美莉卡就出現了,奇異博士隨即施展法術拯救了艾美莉卡。事後,艾美莉卡跟奇異博士說明來龍去脈,原來艾美莉卡有穿越時空的能力,在某次事件後,他一直被怪物追著跑。奇異博士沒有頭緒,他決定去找汪達求助。

在跟汪達聊時,奇異博士感到不對勁,明明還沒說明來意,汪達就知道是艾美莉卡。奇異博士隨即想通了事情經過,原來就是汪達派怪物追著艾美莉卡跑,想要取得艾美莉卡的能力,以跳躍到另外一個宇宙去跟自己的孩子相會。奇異博士要守護艾美莉卡,汪達想活捉艾美莉卡,兩方就打了起來。奇異博士打不過汪達,跟著艾美莉卡的能力跳躍到另外一個宇宙去了。汪達無法跳躍到另外一個宇宙,就藉由黑暗魔力持續的追殺著奇異博士跟艾美莉卡。打打逃逃的,奇異博士遇到了許多其他宇宙的奇異博士,每個宇宙的奇異博士個性都不一樣,但同樣都為了愛而有所偏差。奇異博士跟艾美莉卡在這樣的歷程裡,心態慢慢的改變,放下了對克莉絲汀那份執著的愛。

最後奇異博士跟艾美莉卡說服了汪達,告訴他到另外一個宇宙,是會導致那個宇宙的汪達失去孩子的,你應該要放下。汪達接受了失去孩子跟幻視的事實,也捨棄了黑暗魔力。奇異博士跟艾美莉卡回歸到原來的宇宙,故事到這邊結束。

Spider-Man: No Way Home

湯姆弟的蜘蛛人第三集,故事加入多重宇宙把之前的兩個蜘蛛人串接起來,收尾的不錯。

Peter 因為上集的關係,身份曝光,有些人相信神祕法師是好人,蜘蛛人殺了他,這樣的誤會造成輿論譁然。Peter 跟好友每天被跟拍,日子開始變得不好過,再加上三人都沒被麻省理工學院錄取,Peter 很難過,覺得都是自己害的,就跑去找奇異博士,想請他幫忙。奇異博士很同情 Peter ,再加上之前曾經患難與共,決定幫他一把。奇異博士隨即念起咒語,要施展魔法讓大家忘記 Peter 是蜘蛛人的事情。但施展過程中,Peter 更動了三次,讓奇異博士的魔法出了狀況。

是的,奇異博士的魔法把其他宇宙的蜘蛛人對手都召喚過來了,像是綠惡魔、八爪博士、沙人、電人、蜥蜴人等等的。奇異博士很生氣,要 Peter 想辦法把這些人捉過來,他再用魔法把他們變回去。Peter 只好協同好友,把這些人找回來。梅嬸發現這些人都有些缺憾,就跟 Peter 說,你應該要幫幫他們。但好心被雷親,綠惡魔殺了梅嬸,Peter 非常自責,也很消沉。沒多久,奈德用王留下的手環打開了傳送門,找來了同樣被魔法召喚來的兩個蜘蛛人。兩人以自身遭遇鼓舞 Peter,經過一番轉折,Peter 決定要遵循梅嬸遺願,幫助這些人,3個 Peter 隨即合作開發解藥。

最後三人一同幫助了這些人,奇異博士隨即釋放了被禁錮的魔法,但奇異博士無法控制魔法,Peter 見狀,決定讓所有人都遺忘 Peter ,奇異博士才得以控制魔法,所有人都回到原來的宇宙去。Peter 付出的代價也很大,包括好友,都忘了 Peter,他只能重新開始人生,以蜘蛛人跟 Peter 的雙重身份繼續下去。

visidata

很酷的工具,個人覺得是終端機的神器。

一般在終端機要察看 csv / json / yaml 等檔案,就是用 less 或 vim 來看,然後自己腦補進行閱讀。visidata 就是用來解決這個痛點,他會自動解析資料內容,然後以表格方式呈現,這在閱讀上就帶來很大的便利。

安裝很簡單,像 ArchLinux 或 Ubuntu 都已經有了,所以只要用套件管理工具安裝 visidata 就可以。在 RHEL8 ,就需要用 pip3 來安裝。其他發行版的安裝可以參考 Install VisiData | VisiData

安裝

ArchLinux

pacman -S visidata

Ubuntu

sudo apt install visidata

RHEL8

sudo yum install python3-pip
sudo pip3 install visidata

使用

安裝完成以後,就可以用了。

visidata <your_json_file>
visidata <your_csv_file>
visidata <your_yaml_file>

我有試著用在 Ansible playbook 或是 Kubernetes YAML 上,在這類型的 YAML 檔,欄位型態常有 dict 的情況。如果該欄位型態是 dict,按下 Enter ,會再展開,讓你一層一層進去,意外的發現 visidata 挺方便的。

剛剛看了一下 “–help” ,發現挺多選項的,之後再來持續挖掘吧。

電影流水帳(2022/05/16~2022/06/30)

Zoe Saldana
Zoe Saldana

The losers

The losers 是一組特別的小隊,一開始就去玻利維亞出任務,要從毒梟身上取得東西,但毒梟不肯透露,The losers 的領隊者,Clay 只好殺了他。在這裡他們發現了許多孩童,為了這些孩子,他們決定將目標改為救孩子,就帶著孩子逃了出去。到了接應地點,直昇機接走孩子後,直昇機卻發生爆炸。The losers 發現這事不對勁,好像早就設計好,他們要被滅口了,於是小隊離開了玻利維亞。

匆匆經過一段時間,他們遇到了 Aisha,聲稱可以幫他們回到美國,只要幫她幹掉 Max。於是 The losers 經過一番討論後,決定出手。Max 處事很小心,形蹤很隱密,The loser 跟 Aisha 花一番功夫,才追查到。但 Max 也發現了他們的企圖,準備了反制。此時 The losers 也發現 Aisha 是之前毒梟的女兒,還有 Roque 是叛徒,眼見就要全團被滅了。最後,The losers 仍然殺出一條生路,幹掉 Max,順利解決事件。

會看這片是因為看到有 Chris Evans, Zoey Saldana, Idris Elba 這些演員,看完之後,覺得普普通通,蠻適合打發時間的。

The Suicide Squad

延續上次故事架構,Amanda Waller 再次召集了一堆罪犯,組合兩個團隊前往科托馬爾他,要摧毀地下實驗室「約頓海姆」。本來也不打算這樣做的,主要是因為科托馬爾他發生了政變,原來聽命於美國的總統被推翻,新的領袖不聽話,為了避免實驗室「約頓海姆」裡的祕密被利用來對抗美國,只好出這次任務。

第一個團隊是當作誘餌,第二個團隊是真正執行任務者,所以第一個團隊幾乎是全滅,第二個團隊則順利潛入科托馬爾他。整個潛入過程蠻有趣的,再加上僥倖逃出的小丑女在科托馬爾他所發生的事情,讓人莞爾。最後是發現了實驗室裡的祕密是外星來的巨大海星,原本 Amanda Waller 要發射核彈毀滅整個島的,但 Amanda Waller 被撂倒,自殺突擊隊扛起了事,一起對抗巨大的海星,將其消滅。

這片蠻好看的,節奏流暢,每次看這系列電影都是在看小丑女的不按常理。

從 JFrog Artifactory 下載 artifact

登入 JFrog Artifactory 以後,進入自己的 Profile,然後點 Generate API Key,取得 API Key。

接下來,就可以在 curl 裡指定 X-JFrog-Art-Api: <token> 這個 Header,這樣就可以下載 artifact 了。

例如

curl -H "X-JFrog-Art-Api: <toen>" -o commons-collections-3.1.jar http://localhost:8081/artifactory/jcenter/apache-collections/commons-collections/3.1/commons-collections-3.1.jar

參考資料

PowerShell-取得磁碟剩餘空間

朋友主機的作業系統是 Windows Server 2012,之後會定期去做維護,那連線因為懶得用滑鼠按鍵去一個一個看,所以參考網路文章,寫了個簡單的腳本來一次印出來。

這腳本我命名為 du.ps1

function Get-FreeSpace {
    param ([string]$path);
    $space = (Get-Volume -FilePath $path).SizeRemaining;
    return [int64]($space / (1024 * 1024)); # this would otherwise be a float
}

$freeSpace = Get-FreeSpace "C:\"
Write-Host $freeSpace, "MB" -Separator " "
$freeSpace = Get-FreeSpace "D:\"
Write-Host $freeSpace, "MB" -Separator " "
$freeSpace = Get-FreeSpace "E:\"
Write-Host $freeSpace, "MB" -Separator " "
Read-Host "Press ENTER to exit"

簡單說明如下:

  1. Get-Volume -FilePath "<path>" 是取得指定路徑的物件,然後取物件的 SizeRemaining 屬性。
  2. 因為單位是 bytes,所以除以 1024 變成 K,再除以 1024 變成 MB
  3. 用 Write-Host 印出來,因為找不到類似 printf 或 print 的函式。Write-Host 的 -Separator 參數是指定分隔符號,這邊我用 ” ” 當作分隔,所以印出時,就會是 “100 MB” 這樣子的字串。
  4. 最後用 Read-Host 等按鍵,因為之後我會用滑鼠點一點來執行,若不加這行,執行完,視窗就會消失。

開啟 PowerShell 終端機視窗來執行 .\du.ps1 時,會有錯誤訊息,說不允許執行。這時候需要先執行下面這行,才能執行

Set-ExecutionPolicy RemoteSigned

參考文章

電影流水帳(2022/05/01~2022/05/15)

Humans - Reboot Recharge Rebel - Bus Poster 1189
Gemma Chan
  • Everything Everywhere All at Once (IMDB, Wikipedia),台譯:媽的多重宇宙。
  • Eternals (IMDB, Wikipedia),台譯:永恆族。

Everything Everywhere All at Once

蠻有意思的一部電影,因為眾多影評都給了好評,所以趁著勞動節就去看了。

這是講母女和解的故事。媽媽撐起了這個家,但實際上這個家已經要分崩離析,女兒不想待在家裡,丈夫想離婚,父親則是失智,經營的洗衣店也因為被查稅的關係,可能要倒閉了。就在這個要命的時刻,世界發生了變化,其他宇宙的丈夫前來,導致媽媽所看到的世界發生了變化。經過一番冒險以後,媽媽慢慢了解到世界並不是自己所以為的那樣子,其他宇宙的丈夫前來則是因為女兒。經過幾番波折,媽媽認知到自己想要的是維繫家庭,也認知到自己所用的方法不對。所以她改變了自己,這個改變解決了多重宇宙的問題,也融化了自己跟女兒之間的鴻溝。

故事的最後有了快樂的結局,這是一部蠻奇幻的電影,也是一部值得自己去省思的電影。很多時候,做一件事情的方法不只一種,面對事情的態度也不只一種,有時候需要多想想,有時候需要多試試,這些都可能會帶來不同的結果,事情的結果不一定只有一個,唯一不變的是世界持續在變。

Eternals

這部電影跟之前漫威的風格不太一樣,雖然特效蠻多的,但是故事不太一樣了,這次故事講的是背叛跟愛。

簡單說,永恆族是保姆,他們扶植星球上的生命,讓他們有足夠的智慧,以便能讓天神族所佈下的種子能吸取這星球的力量而茁壯。天神族同時也創造出另外一個種族,變異族,讓永恆族能有一個目標能持續的運作。在天神族的種子茁壯以後,永恆族會被洗腦,並派到另外一個星球去。

地球上的永恆族在打倒變異族以後,因為沒接收到天神族的指令,就融入了人群生活。有一天,變異族再次出現,永恆族 Sersi 則發現這變異族居然有了新的能力,於是 Sersi 踏上尋找其他永恆族的旅程。隨著永恆族慢慢集結,真相也慢慢浮現,他們知道了永恆族要做的事情,也就是地球即將要因為「神現」而滅亡。跟地球人友善的 Sersi 決定要阻止地球滅亡的命運,但永恆族裡的 Ikaris 不贊同,就分為兩派,打了起來。到最後,Ikaris 因為之前對 Sersi 的感情改變了念頭,一行人終於阻止了「神現」。隨後 Ikaris 自盡,有些人決定留在地球,有些人則決定進行星際旅行,去告知其他永恆族這件事情。

tuned-套用適合的系統設定

RHEL 跟 Ubuntu 都有提供這個系統服務,可以啟用這個系統服務來微調系統的設定,以達到預期的效能。

安裝

印象中,RHEL8 預設已經安裝,若沒有,可以用以下指令來安裝

yum install -y tuned

Ubuntu 可以使用以下指令來安裝

sudo apt install tuned

使用

使用相當簡單,啟動系統服務以後就可以了。

systemctl start tuned

之後就可以使用 tuned-adm 來做一些操作,這邊先說明一下什麼是 profile 。

profile 就是一組針對特定用途所提供的系統設定,例如網路最佳化或是資料庫最佳化等等的,不同的用途要調整的設定也不一樣。在啟動 tuned 以後,會啟用預設的 profile ,以 ubuntu 來說,是啟動 balanced 這個 profile。

tuned-adm 有以下子指令可以使用,以進行 profile 的操作:

子指令用途
list列出所有可用的 profile,每個 Linux 發行版所提供的 profile 都不太一樣。
active列出目前啟用的 profile
off關閉所有調整
profile切換到指定的 profile
profile_info顯示指定的 profile 資訊
recommend顯示建議的 profile
verify檢查
auto_profile自動選擇 profile
profile_mode顯示目前是自動選擇 profile 還是手動指定 profile

如果要客製化自己的 profile,也是可以的,這邊可以參考 /usr/lib/tuned 裡的 profile 來做複製跟改動。