正規表示式是處理文字的利器,搭配 Linux 指令更能發揮強大效能。本文從正規表示式的基本語法開始,逐步介紹進階技巧,例如使用集合定義字元範圍、利用錨點精確定位、以及透過分組與反向參照提取匹配內容。接著,文章詳述了 BASH 的各種應用,包含指令組合的邏輯運算元、簡潔的 One-Liners 技巧、以及透過函式自定義指令。最後,文章列舉了許多 Linux 系統的進階指令,涵蓋檔案操作、文書處理、網路管理等,並提供實用的範例與解說,讓讀者能快速上手並應用於日常工作中,提升工作效率。
正規表示式與進階指令詳解
正規表示式(Regular Expressions)是強大的文字搜尋工具,能夠大幅提升在檔案中尋找特定文字模式的能力。以下是一些基本與進階的正規表示式指令,能夠幫助使用者更精確地進行文字操作。
基本正規表示式指令
.:匹配任何單一字元(換行符除外)*:匹配零個或多個前置字元[...]:匹配方括號內指定的任何字元[^...]:匹配不在方括號內的任何字元^:行首錨點$:行尾錨點\(...\):分組,通常用於組合條件\<:單字開頭錨點\>:單字結尾錨點\n:第 n 個分組的內容
集合(Sets)範例
集合是正規表示式的擴充套件功能,可以用於精細調整搜尋文字。例如:
- `[A-Z]`:包含大寫字母 A 至 Z
- `[a-z]`:包含小寫字母 a 至 z
- `[0-9]`:包含數字 0 至 9
- `[./=+]`:包含 .(點)、/(斜線)、= 和 +
- `[-A-N]`:包含大寫字母 A 至 N 和破折號
- `[0-9 A-Z]`:包含所有大寫字母、數字和空格
- `[A-Z][a-zA-Z]`:第一個位置是大寫 A 至 Z,第二個位置是任意字母
進階正規表示式範例
以下是一些更進階的正規表示式範例,用於搜尋特定的文字模式:
- `/HelloWorld/`:匹配包含 HelloWorld 的行
- `/^HelloWorld$/`:匹配只包含 HelloWorld 的行
- `/^[a-zA-Z]/`:匹配以任意字母開頭的行
- `/^[a-z].*/`:匹配以 a-z 開頭,後面至少跟著一個字元的行
- `/1234$/`:匹配以 1234 結尾的行
- `/\(43|76\)/`:匹配包含 43 或 76 的行
- `/[0-9]*/`:匹配行中零個或多個數字
- `/^[^#]/`:如果行的第一個字元不是 #,則匹配
範圍(Ranges)操作
範圍操作允許對一行或多行執行操作。例如:
- `:$`:最後一行
- `:%`:檔案中的所有行
- `:.`:目前行
- `:n,m`:第 n 至 m 行
#### 範例程式碼:
```vim
:3,7d " 刪除第 3 至 7 行
:.,$s/pattern/string/g " 將目前行到檔案結尾的 pattern 替換為 string
檔案指令
以下是一些用於讀取資料到編輯器和將資料寫出編輯器的檔案指令:
- `:e file`:編輯新檔案
- `:n`:轉到下一個檔案
- `:p`:轉到上一個檔案
- `:r !cmd`:在目前行後讀取命令輸出
- `:r file`:在目前行後讀取檔案
#### 程式碼範例與解密:
```vim
:r !ls " 在目前行後讀取 ls 命令的輸出
#### 內容解密:
1. `:r` 指令用於在目前位置插入外部命令的輸出或檔案內容。
2. `!ls` 表示執行 `ls` 命令並將其輸出插入到編輯器中。
3. 該指令適用於動態插入檔案列表或其他命令輸出。
其他指令
以下是一些雜項指令,用於執行各種功能:
- `~`:切換大小寫
- `.`:重複最後一次修改指令
- `J`:合併行
- `nJ`:合併接下來的 n 行
- `u`:復原最後一次修改
- `U`:復原對目前行的所有修改
#### 使用範例與解密:
```vim
u " 復原最後一次修改
#### 內容解密:
1. `u` 指令能夠復原最近一次的編輯操作。
2. 該指令在誤操作時非常有用,可以快速還原之前狀態。
3. 反覆使用 `u` 可逐步復原多步操作。
Shell 功能
以下是一些 Shell 指令,用於從其他程式匯入資料並在文字編輯器中管理:
- `:! cmd`:執行 Shell 命令
- `:!! cmd`:執行 Shell 命令並將輸出插入目前行
- `:r! cmd`:插入命令的輸出
#### 使用範例與解密:
```vim
:! ps -aux " 執行 ps -aux 命令
#### 內容解密:
1. `:!` 用於在不離開編輯器的情況下執行外部命令。
2. `ps -aux` 用於顯示系統中所有程式的詳細資訊。
3. 該功能便於在編輯過程中查詢系統狀態或執行其他任務。
設定指令
以下是一些用於組態 vi(m) 的設定指令:
- `:set all`:顯示所有設定選項
- `:set ai`:開啟自動縮排(預設 noai)
- `:set list`:顯示 tab (^l) 和行尾 ($)
- `:set nu`:顯示行號(預設 nonu)
#### 使用範例與解密:
```vim
:set nu " 顯示行號
#### 內容解密:
1. `:set nu` 用於在編輯器中顯示行號,方便導航和修改。
2. 該設定對於編寫程式碼或處理大型檔案非常有幫助。
3. 相關設定可以寫入 `.exrc` 檔案以實作啟動時的自動組態。
BASH 指令與函式應用
BASH(Bourne-Again SHell)是一種強大的命令列介面,廣泛用於 Unix-like 作業系統中。它提供了豐富的功能和靈活性,讓使用者能夠透過組合不同的指令來完成複雜的任務。
命令組合與執行順序
在 BASH 中,可以使用不同的分隔符號將多個指令組合成一行執行。這些分隔符號決定了指令的執行順序和條件。
使用分號(;)分隔指令
使用分號可以將多個指令串聯起來,無論前一個指令是否成功執行,下一個指令都會被執行。
command_1; command_2; command_3
使用 && 運算元
&& 運算元用於在前一個指令成功執行(傳回狀態碼 0)的情況下,才執行下一個指令。
command_1 && command_2
使用 || 運算元
|| 運算元則是在前一個指令執行失敗(傳回非 0 狀態碼)的情況下,才執行下一個指令。
command_1 || command_2
自動回答提示
可以透過管道(pipe)將預設的回應輸入到指令或指令碼中,例如:
y | some_command
自定義指令
可以透過將多個指令組合在函式中來建立自定義指令。呼叫函式時,只需輸入函式名稱並傳遞引數即可。
function blue() { echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m"; }
使用範例
blue "這是一個測試"
內容解密:
function blue()定義了一個名為blue的函式。echo -e用於輸出帶有顏色的文字。\x1b[34m\x1b[1m是 ANSI 色彩程式碼,用於將文字設為藍色和粗體。$@代表傳遞給函式的所有引數。\x1b[0m重置文字顏色。
One-Liners 應用
One-Liners 是將多個相關的指令、引數和值組合成一行,以實作特定功能或新增到自動化指令碼中的技巧。
系統指令
這些 one-liners 用於執行不同的系統級操作和功能,例如建立別名、監控程式等。
將 PATH 變數的內容展開並顯示
alias path='echo -e ${PATH//:/\\n}'
內容解密:
alias path='...'定義了一個名為path的別名。${PATH//:/\\n}將 PATH 變數中的冒號(:)替換為換行符號(\n),使每個路徑在新的一行顯示。
生成隨機密碼
tr -cd '[:alnum:]' < /dev/urandom | fold -w20 | head -n1
內容解密:
tr -cd '[:alnum:]'從/dev/urandom中過濾出字母和數字字元。fold -w20將輸入的字元每 20 個字元換行。head -n1只取第一行輸出,即生成一個 20 位的隨機密碼。
其他實用範例
簡易計算器函式
? () { echo "$*" | bc -l; }
內容解密:
? () { ... }定義了一個名為?的函式,用作簡易計算器。echo "$*" | bc -l將傳遞給函式的引數(通常是數學表示式)傳給bc命令進行計算。
在終端視窗右上角顯示系統時間
while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &
內容解密:
while sleep 1; do ... done &建立一個後台迴圈,每隔一秒執行一次。tput sc和tput rc用於儲存和還原遊標位置。tput cup 0 $(($(tput cols)-29))將遊標移動到螢幕的右上角。date輸出當前日期和時間。
進階 Linux 指令與應用實戰
Linux 系統提供了豐富的命令列工具,讓使用者能夠高效地完成各種任務。以下將介紹一系列實用的 Linux 指令,涵蓋檔案操作、文書處理、網路管理等領域。
檔案與目錄操作
在 Linux 中,檔案和目錄的操作是基礎且重要的任務。以下是一些實用的指令:
複製檔案到多個目錄:使用
echo和xargs結合,可以將檔案複製到多個指定的目錄。echo /path/to/directory1/ /path/to/directory2/ /path/to/directory3/ | xargs -n 1 cp /path/to/file_name.ext計算目錄中的檔案數量:使用
ls、grep和wc可以計算指定目錄中的檔案數量。ls -l /bin | grep -v ^c | wc -l列出系統中的所有檔案或目錄:使用
find命令可以搜尋系統中的檔案或目錄。find /bin -type f | less # 列出檔案 find / -type d | less # 列出目錄建立指定大小的檔案:使用
dd命令可以建立一個指定大小的檔案。dd if=/dev/zero of=output_file.txt bs=1M count=10列出當天修改的檔案:結合
ls和date命令,可以列出當天修改的檔案。ls -al --time-style=+%D | grep `date +%D`
文書處理
Linux 提供了強大的文書處理工具,以下是一些範例:
提取檔案中的特定欄位:使用
awk或cut可以提取檔案中的特定欄位或字元範圍。awk '{print $1, $3}' input_file > output_file # 提取第1和第3欄位 cut -c 8-15 input_file > output_file # 提取第8到15個字元替換文字:使用
sed可以替換檔案中的文字。sed "s/search_word1/search_word2/g" input_file > output_file轉換字元:使用
tr可以轉換字元,如將空格轉換為 tab。cat input_file.txt | tr ' ' '\t' > output_file.txt格式化輸出:使用
column可以將輸出格式化為表格形式。sudo cat /etc/passwd | column -t -s :
網路管理
Linux 下的網路管理同樣重要,以下是一些相關指令:
圖形化顯示連線主機數量:結合
netstat、awk和其他命令,可以圖形化顯示每個主機的連線數量。netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'透過 HTTP 分享檔案:使用
nc命令可以透過 HTTP 分享檔案。sudo nc -v -l 80 < file_name.ext查詢網域名稱資訊:使用
whois可以查詢網域名稱的註冊資訊。whois example.com
網路偵錯與監控
測試遠端主機的連通性:使用
curl或nc可以測試遠端主機的連通性。curl -s example.com:80 >/dev/null && echo Success. || echo Fail. nc -vz example.com 80顯示本機的外部 IP 位址:使用
dig可以查詢本機的外部 IP 位址。dig +short myip.opendns.com @resolver1.opendns.com
詳細解說:
這些指令展示了 Linux 在檔案操作、文書處理和網路管理方面的強大功能。透過組合不同的命令,可以實作複雜的任務。
網路監控工具:
ss命令:用於顯示網路連線狀態。lsof命令:用於檢視哪些程式正在使用特定的網路埠。
詳細解說:
這些工具對於系統管理和網路偵錯至關重要。透過瞭解如何使用這些工具,可以更好地管理和維護 Linux 系統。
Linux 系統進階指令與實用工具
在 Linux 系統管理中,掌握進階指令與工具的使用至關重要。本文將介紹一系列用於系統功能操作、檔案系統管理以及效能測試的實用指令。
系統時間與行程管理
時間同步與硬體時鐘管理
系統時間的準確性對於許多應用至關重要。可以使用 ntpdate 指令同步系統時間:
sudo ntpdate -s us.pool.ntp.org
查詢硬體時鐘的時間:
sudo hwclock
設定硬體時鐘的時間:
sudo hwclock --set --date="02/20/2020 20:20:00"
行程管理
使用 top 指令檢視目前執行的行程:
top
安裝並使用 htop 作為更強大的行程管理器:
sudo apt-get install htop
# 或
sudo yum install htop
htop
多檔案與背景任務管理
多檔案監控
使用 multitail 同時監控多個日誌檔案:
multitail /var/log_file1.log /var/log_file2.log
安裝 multitail:
sudo apt-get install multitail
# 或
sudo yum install multitail
背景執行任務
使用 nohup 將任務放在背景執行:
nohup wget example.com/file_name.zip &
內容解密:
此指令會將 wget 下載任務放在背景執行,即使關閉終端機也不會停止。nohup.out 檔案會儲存執行的輸出結果。
檔案與目錄操作
建立檔案捷徑(連結)
Linux 中有兩種檔案捷徑:硬連結和軟連結。硬連結只能在同一個磁碟區內建立,而軟連結(符號連結)可以跨磁碟區。
建立硬連結:
ln file_name1 file_name2
建立軟連結:
ln -s file_name1 file_name2
內容解密:
- 硬連結與原始檔案分享相同的檔案資料,刪除原始檔案不會影響硬連結。
- 軟連結則是原始檔案的指標,刪除原始檔案會使軟連結失效。
搜尋與取代
使用 grep 搜尋檔案中的特定文字字串:
grep -Pri "Search_Term" /Path_to_Directory/*.log
啟用 grep 自動著色:
alias grep="grep --color=auto"
內容解密:
-P引數啟用 Perl 相容的正規表示式。-r引數進行遞迴搜尋。-i引數忽略大小寫。
Midnight Commander (MC) - 簡化檔案系統導航
安裝 Midnight Commander:
sudo apt-get install mc
# 或
sudo yum install mc
mc
其他進階指令
刪除大檔案
清空大檔案內容但保留檔案:
> /path/to/large_file.log
修復錯誤解壓縮的檔案
tar ztf /path/to/file_name.tar.gz | xargs -d'\n' rm -v
檢視路徑下的所有檔案和子目錄
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'