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
● 創建文件命令 touch
、mkdir
指令 | 功能 | 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 編號(不同文件),概念圖如下所示
● 怎樣查看 inode 編號?
如果文件 使用硬連結,則兩個文件會有 相同的 inode 編號;以範例來說,可以使用
ls -lai
查看文件,就會發現,硬連結數量為 2
B. 對 file1
寫入數據,查看 file2
、file3
的檔案大小
echo "Hello12311111111111111111111111111111111111111111111111111111111111111111111111" >> file1
ls -laF
從下圖,我們看到「硬連結」的兩個檔案大小都有變大,「軟連結則沒有」
C. 刪除 file1
,查看 file2
、file3
的檔案,會發現軟硬連結會有不同的表現,軟連結連接不到原本數據,但硬連結則不受影響
● 軟連結 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 知識
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 核心知識