7

Bash Script 的好習慣

 3 years ago
source link: https://blog.gslin.org/archives/2020/12/19/9891/bash-script-%e7%9a%84%e5%a5%bd%e7%bf%92%e6%85%a3/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Bash Script 的好習慣

這篇給了一份 bash script 用的 tempalte,但更重要的反而是裡面提到的 best practice:「Minimal safe Bash script template」。

首先是不要寫 /bin/bash 這件事情,因為有些系統是沒有 /bin/bash 的,像是 FreeBSD

如果程式是可以用 POSIX sh 語法的話,應該優先考慮 /bin/sh,如果用到非 POSIX 標準的語法的話,用 env 帶出來會少一些問題:

#!/usr/bin/env bash

再來是 fail 時就趕快停止,不要再往下執行,這點算是老生常談了,文章作者也有給一個範例說明:

set -Eeuo pipefail

再來另外一個還蠻有用的事情是攔下常見的 signal 處理「後事」:

trap cleanup SIGINT SIGTERM ERR EXIT

cleanup() {
  trap - SIGINT SIGTERM ERR EXIT
  # script cleanup here
}

其他的可以看一看,但未必要全盤收下...

Related

Amazon Redshift 的效能調校

在「Amazon redshift optimizing performance 20150721」這篇給了不少效能調校的細節,這邊的效能調校都是針對多機器時的設計規劃 (multi nodes)。 本文圖多並且穿插大量文字,但應該是可以輕鬆讀。我從中選了重點投影片出來,在讀完這篇導讀後建議再點進去從頭讀一次,會對 Amazon Redshift 有更多了解。 第一個主題是資料的放置方式,有這幾種: 中間還有好幾張投影片是說明測試資料的類型,測試出來的結果可以看到效能還是差很多: 再來是講資料不平均當然會造成沒辦法充分運用機器效能: 然後給了一些建議: 接下來是講 sort keys 有三種,其中 interleaved 很特別,有興趣的可以研究看看,不然 compound keys 應該是已經很好用了: 接下來是每個欄位都可以設定壓縮格式,可以看到壓縮的部份如果設計的好,效能也會上升不少: 然後原始資料可以儘量拆成多個檔案再匯入 Amazon Redshift,這樣可以加速進行: 最後則是 VACUUM 的操作介紹,如果可以允許完整 deep copy 的話會更好,因為這算是最乾淨的作法: 是份很有用的投影片 :p

July 29, 2015

In "AWS"

在 HTML 內嵌 JSON object 時要注意的事情...

有時候我們會因為效能問題,在 HTML 內嵌入 JSON object,而不是再多一個 HTTP request 取得。 但「嵌入」的行為如果沒有處理好,就產生非常多 XSS attack vector 可以玩。 首先最常犯的錯誤是使用錯誤的 escape function: <!DOCTYPE HTML> <html> <body> <script> var a = "<?= addslashes($str) ?>"; </script> </body> </html> 這樣可以用 </script><script>alert(1);// 攻擊 $str。因為 addslashes() 並不會過濾到這個字串,而產生這樣的 HTML: <!DOCTYPE HTML> <html> <body> <script> var a = "</script><script>alert(1);//"; </script> </body> </html> 而這個字串會造成…

January 6, 2014

In "Computer"

innobackupex

innobackupex 是 Percona 因為 XtraBackup 需要,改自 InnoDB 的 script,可以不停機備份 InnoDB 或 XtraDB。對於沒有一開始就設定 DRBD 或是類似架構的人來說,這個方法算是蠻不錯的。(當然,如果允許停機的話更簡單) 這個方法是以 InnoDB 為主體的 database 為主,MyISAM 也可以透過這個方式備份,不過這就不在我測試的範圍內了... (我測的兩個 cluster 只有系統資料庫是使用 MyISAM,其他都是 InnoDB) 這邊寫的版本是使用 XtraBackup 0.7 版 (前幾天測試的,當時 0.8 版還沒有正式放出來,就先拿 0.7 版測試),在 Debian 上先安裝 package: # dpkg -i xtrabackup_0.7-1_amd64.deb 裝完後就可以試著使用 innobackupex 備份,並要求 innobackupex 紀錄 slave 資訊: # innobackupex-1.5.1…

July 4, 2009

In "Computer"

a611ee8db44c8d03a20edf0bf5a71d80?s=49&d=identicon&r=gAuthor Gea-Suan LinPosted on December 19, 2020Categories Computer, Murmuring, Programming, SoftwareTags bash, best, fail, posix, practice, programming, sh, signal, standard, template

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Comment

Name *

Email *

Website

Notify me of follow-up comments by email.

Notify me of new posts by email.

Post navigation


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK