2026年9月15日 星期二

Boot to TTY or Graphic Mode in Ubuntu

1. 預設開機直接進入純文字模式 (CLI/TTY)

    sudo systemctl set-default multi-user.target

    sudo reboot

2. 預設開機直接進入圖形模式

    sudo systemctl set-default graphical.target

    sudo reboot

3. 檢查目前預設的啟動模式

    systemctl get-default

4. 不重啟電腦,立即從文字模式進入圖形介面

    sudo systemctl start gdm3

    (註:依據 Ubuntu 版本不同,顯示管理器也可能是 lightdm 或 sddm)

2026年9月14日 星期一

Ubuntu Login keyring password "no longer matches"

 

1.  Update via Seahorse

    a. run seahorse in a terminal.

    b. Look at the sidebar under Passwords and find the item named login.

    c. Right-click on login and select Change Password.

    d. Enter your old system password (the previous password before you changed it) when prompted for the current password.

    e. Enter your new current Ubuntu login password for the new password fields, then save.

 

2. Reset the Keyring (If old password is unknown) 

    a. Delete the login keyring file: ~/.local/share/keyrings/login.keyring 

    b. Log out

 

 

Shell(.sh)


1. 在終端機螢幕上顯示文字、變數內容,或將訊息輸出到檔案中

    echo "Hello World"

2. 定義變數

    <variable name>=<data>

規則:

    a. 等號前後,不能有空格

    b. 變數名稱只能是英文和數字,且數字不能在開頭 

    c. 變數內容,如需空白,可放在雙引號 "" 或是單引號 '' 裡面

        -雙引號中若有特殊字元,例如 $,會保有原本的特性

        -單引號中所有的字元即為一般字元,沒有任何功能 。

    d. 反斜線 \, 可以跳脫其後接的第一個字元本身的功能  

3.  取得變數內容

    $<variable name>
    ${<variable name>}

4. 指令內容,可以使用 $(command) 或是 `command` 取得其他指令的值。

    username=$(whoami)
    echo $username
    user 

5. 取消變數設定

    unset username

6. 取得所有環境變數

    env

7.  自訂變數轉成環境變數

    export <variable name> 

8.  查看目前開放哪些環境變數

    export

9.  列出所有的變數:自訂變數,環境變數,bash 本身變數

    set

10. 語系相關

    a. 查看目前語系變數:locale

    b. 查看支援哪些語系:locale -a 

    c. 暫時修改語系的變數:export LANG=zh_TW.utf8

        只要有設定 LANG 或是 LC_ALL,則其他的變數就會被這兩個變數自動取代。

    d. 永久修改語系的變數:打開 /etc/locale.conf, 加入或更改:LANG="en_US.utf-8"

11.  讀取鍵盤輸入,當作變數值

    read <option> <variable name>

    option :
        -a : array,變數為陣列格式,以空白隔開,依序存入陣列中,索引從0開始。
        -p : prompt,跳出提示字串。
        -t : timeout,設定秒數內沒有完成則結束。 

12. 宣告變數的類型,沒指定,預設為字串。只有整數才可運算。 

    declare <option> <variable name>

    option :
        -a : 變數為陣列格式,以空白隔開,依序存入陣列中,索引從0開始。
        -i : 整數類型,可以進行數值運算,但是預設只能做到整數型態。
        -l : 將變數內容轉換為小寫。
        -r : 變數僅為 readonly,不可被更改也不可以被 unset。
        -u : 將變數內容轉換為大寫。
        -x : 開放變數轉換成環境變數,等同使用 export。

 

13. 比較符號:

    字串比較符號:
        =:等於(字串相等)
        !=:不等於(字串不相等)
        <:小於(按字典序比較)
        >:大於(按字典序比較)
        -z:檢查字串是否為空(長度為零)
        -n:檢查字串是否非空(長度大於零)

    數字比較符

        -eq:等於(數字相等)
        -ne:不等於(數字不相等)
        -lt:小於(數字小於)
        -le:小於或等於(數字小於或等於)
        -gt:大於(數字大於)
        -ge:大於或等於(數字大於或等於)

14. 檔案測試符號: 

    -e FILE:如果 FILE 存在,則為真。
    -f FILE:如果 FILE 存在且為一個檔案,則為真。
    -d FILE:如果 FILE 存在且為一個目錄,則為真。
    -s FILE:如果 FILE 存在且檔案大小不為零,則為真。
    -r FILE:如果 FILE 存在且可讀取(有讀取權限),則為真。
    -w FILE:如果 FILE 存在且可寫入(有寫入權限),則為真。
    -x FILE:如果 FILE 存在且可執行(有執行權限),則為真。
    -L FILE:如果 FILE 存在且為一個符號連結(軟連結),則為真。
    -p FILE:如果 FILE 存在且為一個命名管道(FIFO),則為真。
    -c FILE:如果 FILE 存在且為一個字元特殊文件,則為真。 

15. 流程控制:

    a. if, then else fi 

        if 條件
        then
            # 如果條件為True,執行這裡的命令
        else
            # 如果條件為False,執行這裡的命令
        fi

    b. if … elif … fi

        if 條件1
        then
            # 如果條件1為真,執行這裡的命令
        elif 條件2
        then
            # 如果條件2為真,執行這裡的命令
        else
            # 如果以上所有條件都不滿足,執行這裡的命令
        fi

    c.  case

        case 值 in
            條件1)
                    條件1匹配時執行的命令

                    ;;
            條件2)
                    條件2匹配時執行的命令

                    ;; 
            *)

                    沒有任何匹配時執行的命令

                    ;;
        esac

    d. for

        for 變數 in 列表; do
            執行的命令
        done

    e. while

        while 條件
            do
                # 當條件為真時執行的程式碼
        done

16. 函式(Function)結構: 

    function 函式名稱 {
        # 函式的程式碼
        # 可以使用傳遞給函式的參數
        # 函式的操作
        # ...
        # 返回值(可選)
    }

 

17. 結果輸出導向: 

    a. >(複寫導向

        echo "Hello" > output.txt

    b. >>(附加導向將指令的標準輸出以附加(Append)的方式存入檔案。它不會刪除舊資料,而是將新資料寫在檔案的最末端。

        echo "Hello" >> output.txt

    c. &>(全輸出導向):標準輸出(stdout)和標準錯誤輸出(stderr)「同時」存入同一個檔案中。無論指令執行成功還是發生錯誤,所有的訊息都會被寫進檔案(並採覆寫模式)。&> 與較傳統的寫法 > 檔案名稱 2>&1 效果完全相同。)

        echo "Hello" &> output.txt

    d. 2>&1 將標準錯誤輸出(stderr,代號 2)重新導向至標準輸出(stdout,代號 1)

        在 Linux 與 Bash 中,每個執行中的程式都有預設的資料流代號: 

            0:標準輸入(stdin,鍵盤輸入)

            1:標準輸出(stdout,正常顯示的訊息)

            2:標準錯誤(stderr,錯誤或警告訊息) 

 

18. 管線命令 (pipe):管線命令使用『 | 』,上一個指令輸出,給下一個指令使用。
    例:ls -al /etc | less
    ls 指令輸出後的內容,給 less 讀取

  

  

19. Shell Script基本結構元素:

    1. Shebang行:通常以#! 開頭後面接著一個解釋器(interpreter)的路徑,用來告訴系統使用哪種shell來執行script,系統會自動使用指定的解釋器執行script。

        #!/bin/bash

    2. 註釋:使用 # 符號來添加註釋。註釋不會被執行僅供備註閱讀。

        # 這是一個註釋

    3. 變數

        variable="Hello World!"

    4. 特殊變數

        $0, ${BASH_SOURCE[0]}:這個變數代表目前shellscript程式的檔案名稱(包括路徑)。

         $1, $2, ... $n:用於獲取命令行參數傳遞給程式的值。$1代表第一個參數,$2代表第二個參數,依此類推,$n代表第n個參數。

    5.  特殊的環境變數

        $HOME:代表當前的主目錄路徑,通常用於訪問家目錄。
        $USER:代表當前使用者名。
        $PWD:代表當前工作目錄的路徑。
        $SHELL:代表當前所使用的Shell的路徑。
        $PATH:包含了Shell用於查詢可執行命令的目錄列表。

    6. 指令:

        echo "This is a shell script."

    7. 流程控制:(如 if、else、case)和迴圈(如 for、while)來執行流程控制
        if [ $age -ge 18 ]; then
            echo "You are an adult."
        else
            echo "You are not yet an adult."
        fi

    8. 函數:函數能夠接受參數與返回值。

        function afunc {
            echo "Hello, $1!"
        }
        afunc "Alice"

 

 參考網站:

    Shell 的變數設定 

    Shell Script 基礎介紹