Shell 文件和目錄操作的常用命令和技巧 | 尋找檔案

Shell 文件和目錄操作的常用命令和技巧 | 尋找檔案

Overview of Content

這裡將詳細介紹如何在 Shell 中進行文件和目錄的操作。從移動、查看自身位置到創建、移除文件和目錄,再到文件內容的查看和文件搜尋,本文將一步步指導你學習各種常用的 Shell 命令和技巧,使你更加熟練地管理和操作文件系統

個人程式分享時比較注重「縮排」,所以可能不適合手機的排版閱讀,建議切換至「電腦版」、「平板版」視窗看 😀

寫文章分享不易,如有引用參考請詳註出處,如有指導、意見歡迎留言(如果覺得寫得好也請給我一些支持),感謝 😀


Shell 操作文件、目錄

移動、查看自身位置:cd / pwd

在 Shell CLI(Command Line Interface) 中常用移動命令

指令功能補充
cd進入指定目錄,可指定相對路進、絕對路徑.代表當前目錄、..代表上層目錄;cd \ 進入根目錄;cd ~ 進入使用者目錄;cd - 切換回上次移動的目錄
pwd顯示當前目錄-

移動、查看自身位置的範例如下


## 使用範例

cd ~

pwd

cd ../../etc/

pwd

## 切換到上一次所在的目錄(方便快捷用法)
cd -

文件 & 目錄列表:ls

● 常用文件 & 目錄列表命令

指令功能options補充
ls查詢指定目錄下的所有文件 & 目錄訊息就算是空目錄也有,當前目錄.、父目錄..
-a顯示所有文件包括隱藏文件
-R分類、遞歸顯示文件
-l長列表
-F區分目錄 & 文件
-i文件 inode 編號

options 可以一次性輸入多個,並且可以合併輸入,不用分開輸入


## 使用範例

ls -R

## 指定文件
ls ./Bookshelf/

ls -l ./Bookshelf/

## 可以一次性輸入多個指令,以下指令是 -l -a -F,可以合併為 -laF
ls -laF

● 使用 l 輸出長列表時,可以看到該文件、目錄的詳細訊息,其代表意義如下


## ls -laF 輸出格式

drwxr-xr-x  2 alien alien 4096 Feb 21 12:02 Bookshelf/
原數據(左到右)說明
drwxr-xr-x文件類型(- 文件、d 目錄、c 字符文件、b 塊設備)、權限(rwx)
2硬連結 總數
alien該文件、目錄的屬於哪個用戶
alien該文件、目錄的屬於哪個群組
4096該文件、目錄的大小
Feb 21 12:0296上次修改時間
Bookshelf/文件、目錄名

● 搜尋指定文件時可以使用 正則表達式


## 1 個隨意開頭但 ello 結尾的文件
ls -l ?ello

## 0 到多個 hell 開頭的文件
ls -l hello*

## 中括號 [] 內的其中一個文字配對(a, e, i, o, u)
ls -l hell[aeiou]

## 中括號 [] 內的其中一個文字配對 (a 到 z)
ls -l hell[a-z]

## 中括號 [] 內,只要不是 a 結尾的所有可匹配文件
ls -l hell[!a]

創建文件、資料夾:touch / mkdir

創建文件命令 touchmkdir

指令功能options補充
touch創建文件如果文件已存在,則只改變創建時間
-a只改變訪問時間
mkdir創建資料夾如果已經有該資料夾則會創建失敗
-p批量創建子目錄

## touch 範例

touch 123.txt

## 預設顯示 上次文件修改間
ls -l 123.txt

touch -a 123.txt

## 查看文件最後被訪問的時間(access)
ls -l --time=atime 123.txt

## mkdir 範例

mkdir myDir/my/dir

複製文件命令 cp

指令功能options補充
cp複製文件格式:cp <來源> <目的>
-i判斷目的資料夾內是否有一樣的文件,如果有則會提醒
-R遞歸複製(通常用在複製資料夾整個內容)

cp 命令中可以使用通配符


## 將 cp_source 資料夾下的所有檔案覆到 cp_des 資料夾中
cp -Ri ./cp_source/* ./cp_des/

ls -laF cp_des/

軟/硬連結:ln

● 軟/硬連結 ln 命令,類似於一種捷徑的概念,在 Unix 系列的系統中很常會被使用到

連接類型說明大小注意
符號連結 (Symbolic)可創造目錄軟連結(兩個完全不同的文件副本的形式的連結大小有「主從關係」,若主被刪除,從也無法訪問到
硬連結不可創造目錄軟連結,並且同步原文件更新原文件大小 + 路徑的總字節數原文件必須是絕對路徑

A. 初始化檔案,並創建軟、硬連結


# 創建一個檔案
touch file1

# 預設 ++硬連結++ 
ln flie1 file2

# -s 就是 symbolic (軟連結) 
ln -s file1 file3

# 查看目錄屬性(並添加 i 查看 inode)
ls -lai

硬連結兩者同 inode 編號(同個文件),軟連結則是不同 inode 編號(不同文件),概念圖如下所示

graph LR h1(硬連結 1) --> i1(inode 1) h2(硬連結 2) --> i1 s1(軟連結 1) --> i2(inode 2) s2(軟連結 2) --> i3(inode 3) i1 --> 文件 i2 --> 文件 i3 --> 文件

怎樣查看 inode 編號?

如果文件 使用硬連結,則兩個文件會有 相同的 inode 編號;以範例來說,可以使用 ls -lai 查看文件,就會發現,硬連結數量為 2

B. 對 file1 寫入數據,查看 file2file3 的檔案大小


echo "Hello12311111111111111111111111111111111111111111111111111111111111111111111111" >> file1

ls -laF

從下圖,我們看到「硬連結」的兩個檔案大小都有變大,「軟連結則沒有

C. 刪除 file1,查看 file2file3 的檔案,會發現軟硬連結會有不同的表現,軟連結連接不到原本數據,但硬連結則不受影響

軟連結 file3 失效(變紅字)

硬連結 file2 數目也少 1

● 硬連結可以使用是針對同一台裝置的連接,如果要連接到不同裝置,則需要使用軟連結

重新命名 & 移動文件:mv

● 重新命名 & 移動文件 mv 命令

指令功能options補充
mv移動、重新命名文件格式:mv <來源> <目的>
-i當目標目錄有同名文件時,提醒使用者

## 重新命名範例
ls -laFi

mv file1 file11

ls -laFi

重新命名後的文件 inode 不會改變

硬連結的文件會同時修改,不過 軟連結的文件則會失效

移除文件、目錄:rm / rmdir

● 移除文件 rm 命令、移除目錄 rmdir 命令

指令功能options補充
rm移除文件格式:rm <文件>
-i刪除前再次巡運使用者該文件是否要刪除
-r遞歸刪除(用來刪除某資料夾)
-f強制刪除並不詢問
rmdir移除目錄預設移除空目錄

## rm 範例
tree

rm -i file3

ls

rmdir 只能刪除空目錄


文件內容相關指令

這裡說明的是不使用編輯器 (vim... 之類)來查看文件的內容的命令

文件比較:diff

● 透過 diff 命令,可以比對兩個文件文本內容的差異;其格式如下


diff [options] <file1> <file2>

diff 指令的使用範例如下


diff file1 file2

可以看到差異會使用 --- 符號隔開

● 更多時會使用 -u Options

文件類型:file

file 命令可以探測文件內部,並從中分析出文件是哪種類型


## 查看硬連結
file file2

## 查看資料夾
file myDir/

## 創建軟連結
ln -s file1 file3

## 查看軟連結
file file3

## 很有用~ 查看二進制文件(同時顯示該文件運行的平台、依賴庫)
file /bin/ls

可能有 UTF-8, UTF-16, ASCII... 等等格式

查看完整文件:cat / more / less

● 查看完整文件有多種命令,你可以挑選你想要用、適合的去使用

指令功能options補充
cat列出文件全部內容-
-n列出文件行號
-b列出有用的文本的行號(空白不列行號)
-T替換對其符號(制表符)為 ^I
more每到要顯示下一頁時就停止-
less比起 more 更多指令可以操作less is more(少即是多)

● cat 指令使用範例


cat -bT ./.bashrc

● more 指令使用範例


more ./.bashrc

● less 指令使用範例


less ./.bashrc

查看部分文件:tail / head

● 查看部分文件也有多種指令,挑選一個適合的使用即可

指令功能options補充
tail查看文件尾部內容預設是 10 行
-n <行>指定要看尾部幾行內容
head查看文件頭部內容預設是 10 行
-n <行>指定要看頭部幾行內容

## 使用範例

head ./.bashrc

tail ./.bashrc


文件搜尋

文件搜尋:find / locate

文件搜尋命令說明
find搜尋指定資料夾內的資料
locate與 find 相同,不過它是在 系統建立的索引中尋找檔案(新檔案可能找不到,不過 locate 的搜尋效率較高)

find 命令的基礎格式如下


find [路徑] [options] [名稱]

find 命令使用範例如下


# 在當前目錄下,尋找名為「二元樹」開頭的檔案

find . -name "二元樹*"

更多 Linux Shell 知識

探索 Debian 系統上的套件管理系統(PKMS 概念)| 套件倉庫

Linux 環境、服務:用戶、權限管理

Linux 環境、服務、管理

在這個主題中,你可以探索各種 Linux 環境、服務和管理相關的重要概念…

了解 Linux 組成:內核責任、GNU 工具、桌面環境 | 基礎版到發行版

在這裡,你將了解 Linux 系統的基本組成部分,包括內核、GNU 工具和桌面環境,並了解不同 Linux 發行版之間的差異

探索 X Window 服務與桌面環境:Linux 視窗 XWindow 服務、D-Bus 機制

這裡探討了 Linux 系統中 X Window 服務和 D-Bus 機制的工作原理,讓你深入了解桌面環境的背後運作方式

Linux 系統管理入門:安全性、用戶管理與權限設定指南

在這個指南中,你將學習如何管理 Linux 系統,包括安全性、用戶管理和權限設定,以確保系統的安全和有效運作

認識身份驗證與權限管理:UNIX UID、使用者驗證與 PAM | PAM 設定

這裡介紹了 UNIX 系統中的身份驗證機制和權限管理方式,包括 UNIX UID、使用者驗證和 PAM(Pluggable Authentication Modules)設定

Linux Shell 相關知識

Linux Shell 相關知識

這個主題涵蓋了各種與 Linux Shell 相關的知識,從基礎到進階都有…

Shell 基礎知識:包括 Shell 的基礎使用以及差異,還有變數以及計算

認識命令行:Shell 類型、命令差異 | Sub Shell 關係 | Builtin 命令

這裡介紹了命令行中不同類型的 Shell,以及各種 Shell 命令之間的區別和內建命令的用法

Shell 全局及區域變數、特殊變數及環境變數 | Shell 啟動順序 | Array 變數

學習如何在 Shell 中使用全局變數、特殊變數和環境變數,以及如何設置和管理這些變數

探索腳本與命令:Shell 腳本的必備相關知識 | 腳本的數學運算

這裡介紹了 Shell 腳本的基本知識和常用技巧,包括如何執行腳本和進行數學運算

Shell 結構化

Shell 腳本程式中的條件語句和高級特性 | Shell 結構化 & 判斷

該篇文章是介紹結構化腳本的基礎以及特殊的高級技巧,轉著於腳本中的邏輯判斷

掌握 Bash 腳本中的迴圈與循環控制技巧 | Shell 結構化 & 循環

接著是腳本中的循環與控制的技巧,它可以讓我們在 Shell 腳本中有更多的判斷與技巧

探索 Shell 函數與腳本庫 | Shell 結構化 & 函數

這裡你將會學在到結構化腳本的重要技巧「函數」,它可以讓你建立可重複利用的腳本,以節省我們之後開發的時間

Shell 掌握參數處理與用戶輸入技巧 | Shell 結構化 &輸入互動

不可互動的腳本有時候相對無趣,這篇文章有分享如何讓腳本與使用者產生交互互動,並依照使用者輸入的參數做讀取

Shell script 進階

Shell 命令輸入與輸出指南:掌握標準文件描述符與重定向 | 臨時文件

掌控 Shell、指令的輸出輸入是成為進階使用 CLI 之人必經的一課,透過這篇文章可以了解到輸出輸入、臨時文件等等資訊

探索 Linux 訊號與後台進程管理:安排定期啟動腳本 | 運行時啟動腳本

信號可以算是 Shell 腳本與 Linux 系統之間的通訊方式,透過這個文章,我們可以了解到信號與 Shell 腳本的安排時間

Linux 硬體規劃:檔案系統、分區

Linux 硬體規劃:檔案系統、分區

最後,這個主題涵蓋了 Linux 系統中硬體結構相關的重要概念…

Shell 文件和目錄操作的常用命令和技巧 | 尋找檔案

這裡介紹了 Shell 中常用的文件和目錄操作命令,包括如何尋找文件和管理文件系統

深入探索 Linux 文件系統與硬體管理 | 分區、檔案系統、邏輯卷 | inode

學習如何管理 Linux 文件系統,包括分區、文件系統和邏輯卷等相關概念,以及文件系統中的 inode 機制

理解 Unix/Linux 設備偵測、建立 | 認識與使用 udevd | SCSI 與 Linux 核心

這裡介紹了 Unix/Linux 系統中的設備偵測和管理,包括如何使用 udevd 和 SCSI 相關的 Linux 核心知識


Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

發表迴響