因為主要熟悉無蝦米輸入法,所以真的注音只有在必要的時候才會用到;也一直很不習慣注音的輸入法要怎麼打出標點符號…
筆記一下在Ubuntu中要如何使用:
- 使用
shift
加上標點符號 - 使用
ctrl
加上1
References:
Just another WordPress site
因為主要熟悉無蝦米輸入法,所以真的注音只有在必要的時候才會用到;也一直很不習慣注音的輸入法要怎麼打出標點符號…
筆記一下在Ubuntu中要如何使用:
shift
加上標點符號ctrl
加上 1
References:
這個問題之前遇到過幾次,每次都是透過iTerm2連接到remote linux server時跳出警告… 雖然問題不大,但昨天連到自家的機器又遇到一樣的問題時,還是決定來找一下解決方式!
這個警告主要影響的是使用者在iTerm2上的畫面顯示,只要用到UTF-8的地方會一直出現警告 !
網路上找了一下相關的解決方式以後,大概可以分為兩種方式處理:
Server 端的解決方式
將下列的設定加入到 /etc/environment
裡面
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
Client 端的解決方式(Mac)
將下列兩行環境變數加入到使用者的 ~/.bashrc
或 ~/.zshrc
(基本上看client端這邊的shell環境)
export LC_ALL=en_US.UTF-8
export LANG=US.UTF-8
我目前採用Client端的解決方式,再重新做 source ~/.zshrc
以後,目前就沒在遇到問題了!
之前是使用Certbot來更新我這個網誌的Let’s encrypt certificate,運作上也還算正常,但自動更新cert這邊常常更新不了(這部分感覺應該是我設定上的問題)…
後來在公司上, DK有提到了dehydrated這個輕量化的Let’s enrypt 設定工具,實際上去快速看了一下它的repoistory以後,真的覺得對於一般的Linux 環境使用上蠻友善的(因為它所需要的工具通常都是Linux 系統預設的工具)。
快速掃完以後,直接進入正題關於設定上的相關指令… (這邊直接參考 DK 的 wiki上的設定)
# using a temporary directory to download the dehydrated
cd ~/tmp
wget "https://raw.githubusercontent.com/dehydrated-io/dehydrated/master/dehydrated"
chmod +x dehydrated
sudo mv dehydrated /usr/local/bin/
# create directories that dehydrated will need
sudo mkdir -p /etc/dehydrated /var/www/dehydrated
#change to the dehydrated dir
cd /etc/dehydrated
# setup the config
echo 'OCSP_MUST_STAPLE=yes' | sudo tee -a config
echo 'KEYSIZE=2048' | sudo tee -a config
echo 'WELLKNOWN=/var/www/dehydrated' | sudo tee -a config
# setup the domain file
echo 'blog.gechen.org' | sudo tee -a domains.txt
這邊的範例主要是透過Nginx來當做之後dehydrated 執行時,用來回應Let’s encrypt 的challenge…
下面就直接貼Nginx 的對應domain的範例設定檔
server {
listen 80;
server_name blog.gechen.org;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name blog.gechen.org;
index index.php;
ssl_certificate /etc/dehydrated/certs/blog.gechen.org/fullchain.pem;
ssl_certificate_key /etc/dehydrated/certs/blog.gechen.org/privkey.pem;
# ... skip some configs
# this part is for dehydrated
location /.well-known/acme-challenge/ {
alias /var/www/dehydrated;
}
}
如果是第一次使用 dehydrated
則要額外執行下面指令
sudo dehydrated --register --accept-terms
透過下面的指令來做Let’s encrypt certificate的申請/更新
# the following command will apply/renew certificates for the domains in file: /etc/dehydrated/domains.txt
sudo dehydrated -c
# or we can also directly use command below to apply for specific domain certificate
sudo dehydrated -c -d blog.gechen.org
這邊直接引用DK 大大的wiki範例來設定 weekly 的憑證更新…
echo -e '#!/bin/bash\nexport PATH=/usr/sbin:/usr/bin:/bin:"${PATH}"\nsleep $(expr $(printf "%d" "0x$(hostname | md5sum | cut -c 1-8)") % 86400); dehydrated -c && ( service nginx reload )' | sudo tee /etc/cron.weekly/dehydrated; sudo chmod 755 /etc/cron.weekly/dehydrated
剛好工作上有這個需求, 就順便找了一下看 jq
指令是否可以簡單的做到這件事…
測試了下面的指令以後, 看起來真的是頗好用, 一行指令就可以把 json
轉成 env
了!
cat example.json| jq -r 'to_entries[] | [.key,.value] | join("=")' > example.env
看到DK的文章上提到這個功能覺得也太有趣了, 沒想到會有這麼簡單方式來從CSV檔中讀取想要的內容…
將sqlite3 透過memory的方式讀取了以後, 就可以透過SQL來找到其中想要的內容了…
sqlite3 :memory: -cmd '.mode csv' -cmd '.import mds_content_status.csv temp' -cmd '.mode column' 'SELECT * FROM temp'
為了讓使用方式更方便, 還可以在.bashrc
或 .zshrc
中把上面的cli 指令包裝成 shell function 如下:
function query_csv() {
local CSV_FILE=$1
local TABLE=$2
local QUERY=$3
sqlite3 :memory: -cmd '.headers on' -cmd '.mode csv' -cmd ".import ${CSV_FILE} ${TABLE}" -cmd '.mode column' "${QUERY}"
}
然後我們就可以用下面的方式去query了…
query_csv users.csv user_table 'SELECT id, name FROM user_table where id=17807'
最近剛好工作上有需要, 需要針對一些網路情況不佳的裝置去做一些實驗; 但問題來了, 要在實務上去真的找到這種裝置其實蠻難的, 這時候Linux 提供了一些很好模擬的方式來對特定的網路界面模擬上述情境…
再做了一些快速的瀏覽以後, 看起來在Linux中主要是透過 tc
這個指令來做 traffic control, 不過社群中有人提供了一個更簡便的方式 wondershaper, 如果OS是ubuntu 的話可以用 sudo apt-get install wondershaper
就可以安裝了.
一些常見的指令範例有:
設定eth1
的download=256kbps, upload=128kbps
sudo wondershaper eth1 256 128
清除 eth1
的流量設定
sudo wondershaper clear eth1
這個情境下, 我們可以模擬網路掉包在不同嚴重程度的情況下的情境; 主要是透過 iptables
來達成, 可以參考以下範例:
設定來源ip為 123.123.123.123
且封包到這台電腦的 local port為 3000
時, 其packet drop的機率為 5%
sudo iptables -I INPUT -s 123.123.123.123 -p tcp --dport 3000 -m statistic --mode random --probability 0.05 -j ACCEPT
最近收到AWS的個人帳單以後, 突然發現我帳單上的金額與我的想像有些落差, 也因為這樣子, 開始來對一下是哪些項目在吃錢…
大概對了一下, 發現主要的花費在EC2 instance 與 EBS 兩個項目上面, EC2 instance 這邊的花費就是題外話了, 但EBS這邊就慢讓我意外的… 細看了以後才發現當初不知道為什麼把使用的EBS 成 使用30GB, 但我實際上的使用也才6GB左右…
(雖然這也不是什麼大錢, 但每個月給它這樣扣也是覺得還不如把錢省下來去訂閱其他有用服務….)
原本想說把root volume EBS 調低應該不是件難事, 結果沒想到AWS預設上是不支援這件是的, 它可以往上調高, 但不支援調低…
在網路上找了不少相關的教學文, 主要的作法都是, 大概都是…
rsync
的資料拷貝/boot
以後, 就可以把新的EBS volume來取代原有的 EBS root volume. /dev/sda1
才會成為那台EC2上的root volume)經由上述步驟的教學文實際嘗試以後, 都會卡再做出來的EBS volume是無法當成是原本這一台EC2的root volume, 它會直接讓那台EC2開不起來. (機器顯示 running
, 但是ssh 連不到…)
上述的測試其實我參考了不少文章, 但最後卡的點都是一樣的, 做出來的 EBS volume是不能用的… (我這邊使用的EC2 t4g family, 不太確定跟ARM 版本的 grub-install
有關??? 也許今天使用的是x86的機器就可以? 之後有機會再來試試)
因為上面測試也花了不少時間, 所以最後就自己做了一些流程上的調整如下:
rsync
將舊的EC2 資料都複製到新的EC2上. (基本上除了 /boot, /tmp, /mnt, /dev
以外, 都要sync 到新的EC2的對應資料夾)最後靠這個方式成功把 EBS size降下來了, 不過靠這個方式比較像是duplicate出一台新的EC2, 而不是clone出一模一樣的機器…
最近接了藍芽喇叭以後, 發現ubuntu 內建的system settings 在選擇輸出音訊時有時候會不太正常, 常常聲音會出不來, 或是在先前所選的裝置。
後來查了stackoverflow上的一篇文章後, 發現了一個不錯的工具…. pavucontrol
sudo apt install pavucontrol
pavucontrol
然後執行 pavucontrol
以後就有一個新的音訊控制的UI了 XD
自從使用Ubuntu以後,一個一直困擾我的問題是,在某些情況下我的桌面左上角會彈出需要打入使用者密碼的1password popup window,然後它是無法被關掉的!!!
(即使想要打密碼進去或單純想要關閉這個視窗都不行…)
原本以為是1password的bug,後來才發現是Ubuntu本身的bug,且其他人也有遇過這問題….
不多說 ,直接附上解決方法:
Alt + F2
r
, then Enter
這樣就解決了….
主要是我想要針對某些build target做些條件判斷,只有當某些條件成立時,才可以繼續build target中的其他步驟,不然的話就中斷。
最基本的使用範例如下︰
build.target:
if [ ! -d /home/ubuntu ]; then echo "ERROR: folder not exist"; exit 1; fi
# OR
build.target2:
if [ ! -d /home/ubuntu ]; then \
echo "ERROR: folder not exist"; \
exit 1; \
fi