Linux 系統管理員和開發者經常需要處理各種檔案系統操作、網路設定和監控任務。熟練掌握相關的 Linux 指令和工具對於提高工作效率至關重要。本文彙整了常用的 Linux 指令,並提供實際應用場景的範例,涵蓋檔案系統操作、網路掃描、流量監控、進階功能應用以及 Shell 變數和環境變數等方面,希望能幫助讀者更有效率地管理 Linux 系統和網路。從檔案目錄操作、網路連線狀態檢視、到使用 Python 建立臨時 HTTP 伺服器、斷線後繼續執行指令等技巧,都提供了簡潔易懂的說明和範例。此外,文章也探討了 Shell 變數和環境變數的用法,包括常用的 Shell 變數、環境變數的設定和檢視,以及如何設定永續性變數等,讓讀者能更深入地理解 Linux 系統的運作機制。

Linux 系統管理與網路操作的進階指令與應用

在 Linux 系統管理與網路操作中,掌握各種進階指令與工具的使用對於提升工作效率和系統維護至關重要。本文將介紹一系列實用的 Linux 指令和工具,並詳細說明其使用方法與實際應用場景。

檔案系統與檔案操作

在 Linux 系統中,檔案系統的管理和檔案操作是基礎且重要的任務。以下是一些實用的指令:

使用 tree 指令檢視目錄結構

要檢視 /home 目錄的結構,可以使用 tree 指令。首先,需要安裝 tree 套件:

sudo apt-get install tree
# 或者
sudo yum install tree

安裝完成後,執行以下指令:

tree /home

轉換文字檔案格式

在處理文字檔案時,經常需要在 Windows 和 UNIX 格式之間進行轉換。可以使用 awk 指令來實作這一轉換:

# 將 Windows 格式轉換為 UNIX 格式
awk '{ sub("\r$", ""); print }' windows_file.txt > unix_file.txt

# 將 UNIX 格式轉換為 Windows 格式
awk 'sub("$", "\r")' unix_file.txt > windows_file.txt

使用 diff 比較兩個目錄的內容

diff 指令可以用來比較兩個目錄的內容,而無需建立臨時檔案:

diff <(ls directory_name1) <(ls directory_name2)

自動執行 ls 指令

可以定義一個函式,使其在執行 cd 指令時自動執行 ls

cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }

網路操作與監控

網路操作和監控是 Linux 系統管理中的重要環節。以下是一些常用的網路相關指令:

使用 nmap 進行網路掃描

nmap 是一個功能強大的網路掃描工具,用於掃描網路中的主機和服務。首先,需要安裝 nmap

sudo apt-get install nmap
# 或者
sudo yum install nmap

安裝完成後,可以使用以下指令進行網路掃描:

nmap -oS example.com
# 或者
nmap -oS - scanme.nmap.org

網路流量統計與監控

可以使用 iptraf-ng 來取得網路流量統計資訊。首先,需要安裝 iptraf-ng

sudo apt-get install iptraf-ng
# 或者
sudo yum install iptraf-ng

安裝完成後,執行以下指令:

iptraf-ng

使用 lsof 檢視開啟的網路連線

lsof 指令可以用來檢視開啟的檔案和網路連線,包括網路連線:

lsof -i -nP

使用 netstat 檢視網路連線狀態

netstat 指令可以用來檢視網路連線的狀態,包括監聽中的埠:

netstat -lnp

可以結合 grep 指令來過濾特定的連線狀態:

netstat -c | grep 'State'

進階功能與應用

以下是一些進階的 Linux 指令和應用場景:

使用 Python 建立臨時 HTTP 伺服器

可以使用 Python 的 SimpleHTTPServer 模組來建立一個臨時的 HTTP 伺服器:

python -m SimpleHTTPServer

這樣,當前目錄下的檔案就可以透過 HTTP 存取。

在斷線後繼續執行指令

可以使用 nohup 指令使命令在登出 SSH 工作階段後繼續執行:

nohup wget http://mirror.example.com/mirror/linux-64bit.iso &

使用 watch 定期執行指令

watch 指令可以用來定期執行指定的指令,並顯示結果。例如,定期重新整理網頁內容:

watch --interval=10 lynx -dump http://example.com/statisitics.html

首先,需要安裝 lynx 瀏覽器:

sudo apt-get install lynx
# 或者
sudo yum install lynx

清除 DNS 快取

清除 DNS 快取可以透過重新啟動網路管理服務來實作:

sudo service network-manager restart
# 或者
sudo /etc/init.d/nscd restart

其他進階工具與應用

以下是一些其他進階的 Linux 工具和應用場景:

使用 tmux 分割終端機畫面

tmux 可以用來分割終端機畫面,實作多視窗操作。首先,需要安裝 tmux,然後執行以下指令:

tmux

tmux 中,可以使用以下快捷鍵進行操作:

  • 垂直分割:Ctrl+B 然後 Shift+5
  • 水準分割:Ctrl+B 然後 Shift+"
  • 切換視窗:Ctrl+B 然後方向鍵

使用 asciiview 將圖片轉換為文字模式顯示

首先,需要安裝 aview 套件:

sudo apt-get install aview

然後,使用以下指令將圖片轉換為文字模式顯示:

asciiview input_file.png

使用 tesseract 進行 OCR 文字辨識

tesseract 可以用來從圖片中提取文字。首先,需要安裝 tesseract-ocr

sudo apt-get install tesseract-ocr
# 或者參考官方檔案進行 RPM 安裝:https://github.com/tesseract-ocr/tesseract/wiki

然後,使用以下指令進行 OCR 文字辨識:

tesseract input_file.png output_file.txt

如果遇到辨識效果不佳的問題,可以嘗試調整圖片大小、轉換為灰階、銳化等預處理步驟。

使用 ImageMagick 處理圖片大小轉換

ImageMagick 可以用於轉換圖片大小。首先,需要安裝 ImageMagick:

sudo apt-get install imagemagick 

然後,使用以下命令將圖片縮放至原來的50%大小:

convert -resize 50% input_file.png output_file.jpg 

萬用字元與正規表示式入門

萬用字元和正規表示式是Linux系統中強大的文書處理工具,用於匹配和操作文字模式。

萬用字元(Wildcards)

萬用字元用於簡化檔案名稱的匹配,常見於檔案操作命令中。

  • ?:代表任意單一字元,例如 file?.txt 可匹配 file1.txtfile2.txt 等。
  • *:代表零個或多個任意字元,例如 chmod 777 * 可更改目前目錄下所有檔案的許可權。

萬用字元範例

# 刪除以file開頭且副檔名為.txt的三個檔案
rm file?.txt

# 修改目前目錄下所有檔案的許可權
chmod 777 *

正規表示式(Regular Expression)

正規表示式是一種強大的文字模式匹配工具,廣泛應用於文字搜尋和處理。

基本概念

  • ^\A:匹配字串的開頭。
  • $\Z:匹配字串的結尾。
  • .:匹配任意單一字元(除換行符號外)。
  • *:匹配前一個表示式零次或多次。
  • +:匹配前一個表示式一次或多次。
  • ?:匹配前一個表示式零次或一次。

正規表示式範例

# 匹配以非數字開頭,後接四位數字並以.jpg結尾的檔案名稱
^\D+\d{4}\.jpg

例如:匹配 PICP0119.jpg

正規表示式符號說明

| 符號 | 說明 | 範例 | |


|


|


| | (a|b) | 匹配字元a或b | a|b 匹配 “a” 或 “b” | | ^\A | 匹配字串開頭 | ^abc 匹配 “abcdef” 或 “abc123” | | $\Z | 匹配字串結尾 | abc$ 匹配 “123abc” | | . | 匹配任意單一字元 | a.c 匹配 “abc” 或 “adc” | | * | 匹配前一個表示式零次或多次 | ab*c 匹配 “abc” 或 “abbbc” | | + | 匹配前一個表示式一次或多次 | ab+c 匹配 “abc” 或 “abbc” | | ? | 匹配前一個表示式零次或一次 | ab?c 匹配 “ac” 或 “abc” | | {} | 指定前一個表示式的重複次數 | ab{2}c 匹配 “abbc” | | [] | 匹配方括號內的任意單一字元 | [abc] 匹配 “a”、“b” 或 “c” | | [^] | 匹配不在方括號內的任意單一字元 | [^pqr] 匹配除 “p”、“q”、“r” 外的任意字元 |

正規表示式的應用

正規表示式廣泛應用於文字編輯器、程式語言和命令列工具中,用於搜尋、替換和驗證文字模式。

使用正規表示式的命令列工具

  • grep:用於搜尋檔案中的文字模式。
  • sed:用於編輯和替換文字。

範例:使用grep搜尋符合正規表示式的行

# 在檔案example.txt中搜尋以abc開頭的行
grep '^abc' example.txt

正規表示式與 Bash 指令碼程式設計基礎

正規表示式(Regular Expression)是一種強大的文書處理工具,能夠幫助開發者快速匹配、查詢和替換文字。本文將介紹正規表示式的基本概念及其在 Bash 指令碼程式設計中的應用。

正規表示式基礎

正規表示式是一種特殊的字串,用於描述一類別字串的模式。它由字元、元字元(Metacharacters)和修飾符組成。以下是一些常見的正規表示式元素:

  • \w:匹配任何單詞字元,等同於 [a-zA-Z_0-9]
  • \W:匹配任何非單詞字元,等同於 [^a-zA-Z_0-9]
  • \s:匹配任何空白字元,等同於 [\f\n\r\t\v]
  • \S:匹配任何非空白字元,等同於 [^\f\n\r\t\v]
  • \d:匹配任何十進位制數字,等同於 [0-9]
  • \D:匹配任何非十進位制數字,等同於 [^0-9]

內容解密:

上述正規表示式元素可用於匹配不同型別的字元。例如,\w 可以用於匹配單詞中的字母、數字或下劃線,而 \d 可以用於匹配數字。

正規表示式範例

以下是一些正規表示式的範例:

  • ^\w+[0-9]{4}.jpg:匹配以至少一個單詞字元開頭,後面跟著四個數字和 .jpg 副檔名的字串,例如 PICP0119.jpg
  • ^\D+\d{4}.jpg:匹配以至少一個非數字字元開頭,後面跟著四個數字和 .jpg 副檔名的字串,例如 PICP0119.jpg

內容解密:

這些範例展示瞭如何使用正規表示式來匹配特定的檔案名稱。其中,^ 表示字串的開頭,\w+\D+ 表示至少一個單詞字元或非數字字元,\d{4} 表示恰好四個數字。

Bash 指令碼程式設計基礎

Bash 指令碼程式設計是一種強大的自動化工具,能夠幫助開發者簡化工作流程。以下是建立一個簡單 Bash 指令碼的步驟:

  1. 建立一個新的檔案,例如 script_file.sh
  2. 在檔案中新增以下內容:

#!/bin/bash ls -al /

3. 儲存並離開編輯器
4. 賦予檔案執行許可權:`chmod u+x script_file.sh`
5. 執行指令碼:`./script_file.sh`

#### 內容解密:
上述步驟展示瞭如何建立一個簡單的 Bash 指令碼。其中,`#!/bin/bash` 表示使用 Bash 作為指令碼直譯器,`ls -al /` 表示列出根目錄下的所有檔案和目錄。

### Bash 指令碼中的變數

變數是 Bash 指令碼程式設計中的重要元素,用於儲存和操作資料。以下是一些變數的基本用法:

* 定義變數:`test=HelloWorld`
* 輸出變數值:`echo $test`
* 清除變數:`unset test`

#### 內容解密:
上述範例展示瞭如何定義、輸出和清除變數。其中,`$test` 表示輸出變數 `test` 的值。

### 命令替換

命令替換是一種強大的功能,能夠將命令的輸出結果指定給變數。以下是一些命令替換的範例:
```bash
x=$(cmd a1 a2 a3)
echo $x

內容解密:

上述範例展示瞭如何使用命令替換將命令 cmd a1 a2 a3 的輸出結果指定給變數 x。其中,$() 表示命令替換,echo $x 表示輸出變數 x 的值。

Linux 中的 Shell 變數與環境變數詳解

在 Linux 系統中,Shell 變數和環境變數扮演著至關重要的角色,它們用於儲存系統組態、使用者偏好設定以及各種程式所需的資訊。本文將探討 Linux 中常用的 Shell 變數和環境變數,並介紹如何使用和管理這些變數。

常用的 Shell 變數

Shell 變數是 Bash shell 用來儲存特定資訊的變數。以下是一些常見的 Shell 變數:

  • _ (underscore):儲存最近一次執行的命令。
    echo $_
    
  • HOME:儲存目前使用者的主目錄路徑。
    echo $HOME
    
  • LANG:儲存目前的語言和地區設定,包括字元編碼。
    echo $LANG
    
  • LS_COLORS:定義 ls 命令輸出的彩色程式碼。
    echo $LS_COLORS
    
  • OLDPWD:顯示前一個工作目錄的路徑。
    echo $OLDPWD
    
  • PPID:儲存目前 shell 的父行程 ID。
    echo $PPID
    
  • PWD:顯示目前的工作目錄路徑。
    echo $PWD
    
  • SHELL:顯示目前使用的登入 shell。
    echo $SHELL
    
  • TERM:顯示終端機模擬器的型別。
    echo $TERM
    
  • USER:顯示目前登入的使用者名稱。
    echo $USER
    

環境變數

環境變數是另一個重要的概念,它們用於傳遞資訊給從 shell 生成的行程。環境變數分為系統維護的變數和使用者自定義的變數。

常用的環境變數

以下是一些常見的環境變數:

  • BASH_VERSINFOBASH_VERSION:儲存目前 Bash 的版本資訊。
    echo $BASH_VERSINFO
    echo $BASH_VERSION
    
  • BASHOPTS:儲存啟動 Bash 時使用的選項列表。
    echo $BASHOPTS
    
  • CDPATH:定義 cd 命令的搜尋路徑。
    echo $CDPATH
    
  • COLUMNS:定義輸出到螢幕的寬度(字元數)。
    echo $COLUMNS
    
  • DIRSTACK:儲存可用於 pushdpopd 命令的目錄堆積疊。
    echo $DIRSTACK
    
  • HISTFILEHISTFILESIZEHISTSIZE:分別儲存命令歷史檔的名稱、歷史檔的最大行數以及記憶體中儲存的命令歷史的最大數量。
    echo $HISTFILE
    echo $HISTFILESIZE
    echo $HISTSIZE
    
  • HOSTNAME:儲存電腦的系統名稱。
    echo $HOSTNAME
    
  • IFS:定義輸入欄位的分隔符號,預設為空白字元、跳格字元和換行字元。
    echo "$IFS"
    #### 內容解密:
    

這裡使用雙引號是為了避免 IFS 的值被 shell 誤解為多個引數,$IFS 本身代表了輸入時的欄位分隔符,當你直接 echo $IFS 時可能看不到任何輸出,因為其值可能包含不可見字元,如空白或換行。使用雙引號包圍可以正確地顯示其內容。

  • MAILMAILCHECKMAILPATH:與郵件檢查相關的設定,分別定義了郵件檔案的名稱、檢查新郵件的頻率(秒)以及檢查新郵件的檔案列表。

  • PATH:定義命令的搜尋路徑,是一個以冒號分隔的目錄列表,shell 在這些目錄中搜尋可執行命令。

建立或修改環境變數

要建立或修改一個環境變數,可以使用 export 命令,例如:

export TEST=HelloWorld

要顯示環境變數的內容,使用:

echo $TEST

檢視所有環境變數

要檢視系統維護的所有環境變數,可以使用:

env | less

或者使用等效的命令:

printenv

永續性變數

由於儲存在 RAM 中的變數(包括環境變數和 Shell 變數)會在 shell 行程結束或電腦關機時消失,因此需要將一些重要的變數儲存在設定檔中,以便在系統啟動或 shell 啟動時載入。這些儲存在設定檔中的變數即為永續性變數。

根據 Bash 的啟動方式和登入型別的不同(登入式、非登入式、互動式、非互動式),Bash會讀取不同的設定檔來載入使用者特定的組態。

登入式 Shell

對於登入式 shell,會先讀取 /etc/profile,然後尋找使用者主目錄下的第一個存在的登入 shell 設定檔(/.bash_profile、/.bash_login 或 ~/.profile)。

非登入式 Shell

對於非登入式 shell,則會讀取 /etc/bash.bashrc 和使用者特定的 ~/.bashrc 設定檔。

如何強制重新讀取設定檔

要讓目前的 shell 工作階段重新讀取設定檔,可以執行:

source ~/.bashrc

或者對於登入式 shell:

source ~/.bash_profile

綜上所述,瞭解和管理 Linux 中的 Shell 變數和環境變數對於系統管理員和開發者來說至關重要。透過合理地使用這些變數,可以簡化工作流程,提高生產力。