在當今快速發展的技術環境中,掌握命令列可以簡化開發人員的開發過程。可以透過各種 shell 環境(如 Bash 和 PowerShell)存取命令列。本文探討了 shell 環境,展示了它在執行複雜操作、導航檔案、處理資料和文字操作中的作用。

shell 的定義

shell 是一種使用者介面,允許使用者使用基於文字的命令與電腦作業系統進行互動。將其視為使用者和作業系統之間的轉換器。

shell 接受使用者輸入的人類可讀指令,並將其轉換為作業系統瞭解和執行的指令,也將這些指令的結果或輸出顯示給使用者。與圖形使用者介面 (GUI) 相比,這種類型的互動稱為命令列介面 (CLI),可讓您更直接地控制系統。

使用命令列介面,您可以執行程式、管理文件和執行各種任務。

shell 的重要性

  • Shell 允許使用者與作業系統互動。這使得透過鍵入特定命令來執行複雜任務變得更加容易。
  • 它允許使用者使用編寫的 shell 腳本自動執行重複任務。
  • 它幫助管理員和用戶透過 SSH 等協定存取遠端系統
  • 它可用於存取和管理文件和目錄。
  • 它診斷問題並檢查系統狀態。

shell 環境

有多種可用的 shell,每種都有其獨特的功能和語法。一些最廣泛使用的 shell 包括:

Bourne-Again Shell(BASH) :這是 Linux 發行版和 macOS 上的 shell 之一。它的語法與原始的 Unix shell 相容,使其成為流行的選擇。

PowerShell: PowerShell是Windows系統預設預先安裝的shell環境,它是物件導向的。

Z Shell(ZSH): Zsh 以其廣泛的客製化選項和高級功能而聞名。它提供了改進的選項卡補全、歷史管理和插件支援。

本文使用 Bash shell 來取得程式碼範例和命令。如果您不熟悉 Bash,請考慮使用適用於 Windows 的 Git Bash 或 macOS 上的內建終端應用程式。兩者都提供了類似 Bash 的體驗,您可以在本文中了解。

Shell 導覽和操作

透過命令列瀏覽檔案系統是掌握 shell 環境的基本技能之一。更改目錄、管理檔案和理解路徑名的能力對於有效的命令列操作至關重要。目錄在 Windows 系統中稱為資料夾。

用於導航檔案系統的各種命令是:

命令 功能
cd(更改目錄) 此命令用於更改您的工作目錄。您可以鍵入 cd 後接目錄名稱或路徑來變更到其他目錄。例如: cd newfile.
pwd(列印工作目錄) 此命令顯示您正在使用的目前目錄的路徑。
ls 此指令用於列出目錄的內容。

圖片描述

命令語法

某些命令具有修改其功能的元件。這些元件稱為選項和參數。

選項用於調整指令的操作,而參數則用於指令的操作。例如:

ls -l myfile

-l 是選項,而 myfile 是參數。

這是一個包含命令選項及其功能的表:

命令 功能
ls -a 列出所有文件內容,包括隱藏內容
ls -t 按上次修改時間列出所有文件內容
cd - 這將帶您到上一個目錄
cd .. 這將帶您到父目錄
cd ~用戶名 這將帶您到指定使用者名稱的目錄
rm -r 這將刪除目錄及其內容。
ls -l 以長格式列出所有文件內容
ls-al 列出所有文件內容,包括長格式的隱藏內容。

圖片描述

檔案和目錄操作

  • mkdir:此指令用於建立目錄,例如: mkdir newDirectory

  • touch:這個指令會建立一個空文件,例如: touch Mynewfile建立一個名為「Mynewfile」的文件

  • mv:此指令既可以移動檔案/目錄,也可以重新命名它們,例如: mv oldfile newfile ,該指令將 oldfile 移動或重新命名為 newfile。

  • cp:此指令用於複製檔案和目錄,例如: cp Myfile backup將「Myfile」複製到「backup」目錄中。

  • rm:此指令刪除文件,例如: rm unwanted.txt

  • rmdir:指令刪除空目錄,例如:rmdir emptydir

圖片描述

文件處理和文字處理

使用檔案和目錄:

有些文字編輯器可讓您直接從命令列建立、檢視和修改文字檔案。其中一些流行的文本編輯器包括:

查看文件內容

  • cat: cat指令在終端機中顯示檔案的全部內容,例如: cat filename

  • less: less 指令可讓您一次一屏查看文件的內容,從而實現導航和搜尋。

  • head 和 tail:這些指令分別顯示檔案的第一行或最後幾行。

圖片描述

使用 grep、sed 和 awk 進行文字處理

  • grep: grep 指令是一個強大的工具,用於搜尋檔案中的特定模式或文字。它可以與其他命令結合使用以進行更高級的操作。

範例: grep "keyword" myFile

圖片描述

  • sed: sed 指令代表流編輯器,它對輸入流執行文字轉換。它對於查找和替換文件中的文字特別有用。

範例: sed 's/old/new/' myfile ,這將在名為“myfile”的檔案中用“new”替換“old”

  • awk: awk 指令逐行處理和分析文本。它通常用於資料提取和報告。

語法: awk 'pattern { action }' file

pattern指定執行操作的條件。

action是模式匹配時要執行的程式碼區塊。

file是要處理的輸入檔。如果未指定,awk 從標準輸入讀取。

範例: awk '{sum += $1} END {print sum}' myfile ,這將計算列中數字的總和並列印它們的總和。

使用 Shell 進行遠端系統管理

遠端系統的 Shell 存取是透過 Secure Shell (SSH) 等協定實現的。 SSH 是一個私鑰,使您能夠存取遠端伺服器;它透過加密用戶電腦和遠端伺服器之間的通訊來確保安全連接。

其工作原理的簡要概述

要建立 SSH 連接,管理員需要提供遠端伺服器的位址和身份驗證憑證,例如使用者名稱和密碼或金鑰對

ssh your_username@remote-machine-address

將“your_username”替換為您的實際使用者名,將“remote-machine-address”替換為提供的位址。

如果您使用基於金鑰的身份驗證,它可能如下所示:

ssh -i /path/to/your/private/key your_username@remote-machine-address

如果您在鍵入時沒有看到字符,請不要擔心;這是一項安全功能。

一旦完成,管理員就可以在遠端電腦上執行命令、管理檔案並執行各種管理任務。

文件權限和所有權

作業系統提供對 shell 環境中的檔案和目錄的存取權限。這決定了可以對文件和目錄執行哪些操作。這允許遠端工作人員從不同的系統存取檔案。您可以使用ls -l指令查看檔案的權限設定。

共有三種基本權限類型:

  • Read(r):這允許使用者查看目錄或檔案內容。

  • Write(w):這允許使用者修改或刪除文件,以及在目錄中建立或刪除文件。

  • 執行(x):這授予檔案執行權限。

檔案權限為三類使用者設定:

  • 擁有者:建立檔案或目錄的使用者。

  • 群組:指定的使用者群組。

  • 其他:不屬於所有者或群組類別的任何人。

更改權限

chmod指令用於修改檔案權限。您可以透過數字或符號方式變更權限。

數值範例:chmod 774 myfile

符號範例:chmod u+rwx myfile

更改所有權 (chown)

chown指令用於變更檔案或目錄的擁有者和群組。

chown username filename

這會將filename的擁有權分配給名為username用戶

chown username:groupname filename

這會將filename的擁有權指派給名為username用戶,並將群組擁有權設定為groupname

chown -R username:groupname directory

這會遞歸地將directory中所有檔案和子目錄的所有權變更為usernamegroupname

輸入和輸出重定向

重定向是操作命令輸入和輸出的基本技術。

重定向允許您重定向命令輸出的位置以及命令獲取輸入的位置。

  • 輸出重定向: >符號用於將指令的輸出重定向到檔案。如果文件不存在,則建立它;如果存在,則會被覆蓋。範例: cat myfile > newfile將把 myfile 的內容重新導向到 newfile。

  • 追加重定向: >>符號與輸出重定向類似,但它不會覆蓋文件,而是將輸出加入到現有文件的末尾。範例: cat myfile >> newfile將把 myfile 的內容加入 newfile 內容的末端。

  • ### 輸入重定向

管道 (|)

一根管子|用於將一個命令的輸出作為另一個命令的輸入發送。這用於連接命令。

例如: ls -l | grep "file"

在此範例中,ls -l 命令以詳細格式列出文件,然後透過 grep 過濾輸出以僅顯示包含單字「file」的行。

管道和重定向可以結合起來執行複雜的操作。

例如: ls -l | grep "file" | sort > sorted_file_list.txt


原文出處:https://dev.to/ollie20/shell-programming-4k65


共有 0 則留言