Cody Blog

Software development

實現免密碼 ssh 登入遠端主機

建立 RSA 的 Key

如果之前沒有建立過 RSA 的 key,就可以先建一把:

:::bash
$ ssh-keygen

過程直接一直按 enter 即可

Copy ssh public to remote

RSA 由一組 public key 跟 private 組成,為了要能實現免密碼登入 remote machine 必須安裝 public key (id_rsa.pub) 到 remote machine:

:::bash
$ ssh-copy-id -i ~/.ssh/id_rsa.pub cody@172.24.22.63

執行免密碼登入

:::bash
$ ssh cody@172.24.22.63

Note: 當發生 /usr/bin/ssh-copy-id: ERROR: No identities found 的錯誤時,記得加上 -i 參數指定 public key 的位置,例如:

:::bash
$ ssh-copy-id -i ~/.ssh/id_rsa.pub mitra@172.24.22.63

Reference:

取得硬碟資訊 blkid

每次在編輯 /etc/fstab 的時侯,都會忘了要怎麼取得 disk 的 UUID,其實在 Ubuntu 有個 blkid 的指令可以使用

$ sudo blkid
/dev/sda2: LABEL="Data" UUID="357b1cbf-c4d4-47a4-8ce1-5cfd6ac110f7" TYPE="ext4"
/dev/sda5: UUID="db9ca73a-c4ba-455d-89b0-e7e6f6d8b67d" TYPE="swap"
/dev/sdb1: UUID="69ea78d6-414f-4c2a-bab4-3cbfbf160e0e" TYPE="ext4"
/dev/sdb5: UUID="75df4068-f9a8-4e04-af47-7b6165a4716f" TYPE="swap"

Linux在充放電切換時執行特定指令

Linux筆電在充放電的時侯可以執行特定指令。例如我們想增加電池的使用時間,可以在電池放電的時侯,把一些較消耗資源的背景程式先暫時暫停,等插回AC電源的時侯再重新開始。這邊以暫停Insync為例:

方法一 /etc/pm/power.d

我們可以放script放到/etc/pm/power.d來達成,當進入電池模式的時侯會帶true參數,而離開電池模式的時侯會帶false參數,只要新增一個檔案,例如/etc/pm/power.d/00-powersaving加入以下內容,實際指令就依照自己的需求修改:

case $1 in
    true)
        echo "Enable screen power saving"
        sudo -u cody insync pause_syncing
    ;;
    false)
        echo "Disable screen power saving"
        sudo -u cody insync pause_syncing
    ;;
esac

最後記得再加上執行權限sudo chmod +x /etc/pm/power.d/00-powersaving

方法二 /etc/acpi/power.sh

Linux 有一個指令 on_ac_power,如果回傳0代表是AC,如果是用電池的話,則回傳1,例如:

On AC Power

:::bash
$ on_ac_power 
$ echo $?
0

On Battery

:::bash
$ on_ac_power 
$ echo $?
1

所以透過這個指令,我們就可以修改/etc ...

sed的s指令筆記

s Command

s(substitue) 指令是 sed 中最常用的,可以把文件中的字串替換掉。基本的syntax s/RegEx/SubEx/,例如 s/Old/New/:

$ echo 'this is old' > input.txt
$ sed s/old/new/ input.txt

這個sed指令可以把文件中的old字串換成new

sed 執行流程

sed不像一般程式語言有 variable 的概念,但是sed有兩個特別的buffer(or workspace)可以讓sed執行較複雜的工作。這兩個buffer稱為Pattern spaceHold space。sed執行是從input stream中,每次執行一行,流程大致如下:

  1. sed從input stream讀一行的內容
  2. 把換行符號(trailing newlines)移除
  3. 把它放到pattern sapce
  4. 執行指令(上面的例子就是s command把old取代成new)
  5. 把換行符號(trailing newlines)補回來
  6. sed 把結果印到 output steam
  7. 如果還有input的話,就繼續執行step1,否則就結束

而pattern space在每一個迴圈都會清除,但是hold space則不會,可參考‘h’, ‘H’, ‘x’, ‘g’, ‘G’指令。

s 指令的其它選項

-e: sed script,可以連接多個 sed script,如果只有一個 sed script 則 -e 可以省略。例如: $ echo 1234567890 ...