# 那些你不能不會的 Linux 基礎指令!(上)
[TOC]
感謝您點進本篇文章,我是 LukeTseng,近期接觸到 Linux 系統,時常需要面對黑色終端機,有些時候想做到一些操作,卻也不知道那個指令叫什麼,我也沒有好好奠基 Linux 的基礎指令,所以特此製作本篇文章!希望能解決到你我的痛點!
若本篇文章某處有誤,敬請告知,感謝!
## 一個點跟兩個點的意義
一個點 `.` 在 Linux 中代表當前目錄的意思,兩個點 `..` 則為上一個目錄。
## 檔案與目錄操作
### ls
首先要介紹的是 `ls` 指令,英文全名是 list directory contents,主要是用來「列出目前目錄下的所有檔案與資料夾名稱(不含隱藏檔案)」,作用同於 Windows 系統的 `dir` 指令。
基本語法如下:
```bash
ls [options] [files or directories]
```
options 則為可選的參數,可加可不加。
若直接 `ls` 該檔案名稱時,會直接顯示檔案名稱,若沒有找到則會顯示 `"No such file or directory"`。
而 `ls` 目錄,則會顯示該目錄裡面的所有檔案與資料夾名稱。
`ls` 的參數如下:
| 參數 | 說明 |
| :-- | :-- |
| -a | 顯示所有檔案(包含隱藏檔,檔名以 `.` 開頭) |
| -A | 顯示所有檔案,但不包含 `.`(目前目錄)和 `..`(上一層目錄) |
| -l | 以詳細列表方式顯示,包括權限、擁有者、檔案大小、修改時間等 |
| -h | 搭配 -l 時,以人類易讀的格式顯示檔案大小(如 KB、MB) |
| -r | 反向排序(如名稱由 Z 到 A) |
| -t | 依檔案修改時間排序(新到舊) |
| -S | 依檔案大小排序(大到小) |
| -R | 遞迴顯示所有子目錄內容 |
| -d | 僅顯示目錄本身,而非其內容 |
| -i | 顯示檔案的 inode 編號 |
以下是 `ls` 的常用範例指令:
- `ls -a`:將所有含隱藏檔案、資料夾一起被印出在終端機上。
- `ls -l`:(不含隱藏檔案)以詳細列表方式印出所有檔案與資料夾。
- `ls -al`:印出所有含隱藏檔案、資料夾的詳細列表。
- `ls -lh`:詳細列表並以易讀格式顯示檔案大小。
- `ls -ltr`:依修改時間排序,最新的在最後。
- `ls -R`:遞迴顯示所有子目錄內容。
- `ls ./etc`:列出在當前目錄中 etc 目錄下的內容。
在當使用 `ls -al` 時,會出現類似以下的詳細資訊:
```bash
drwxr-xr-x 2 luketseng luketseng 4096 Sep 13 01:07 Music
drwxr-xr-x 2 luketseng luketseng 4096 Sep 13 01:07 Pictures
```
### cd
再來則是 `cd`,英文取自為 change directory 的縮寫,用於「切換目前工作目錄」的指令。
用法很簡單,只要在後面加上路徑名稱就會切換到該路徑了,如:
- `cd 路徑`,如 `cd etc` 會進入 `etc` 目錄。
- 切換到家目錄:`cd ~` 或直接輸入 `cd`,會回到目前使用者的家目錄(如 `/home/username`)。
- 切換到根目錄:`cd /` 會回到檔案系統的最上層。
- 切換到上一層目錄:`cd ..` 會回到目前目錄的上一層。
- 切換到前一個目錄:`cd -` 會回到你上一個所在的目錄。
- 切換到子目錄:`cd 子目錄名稱`,如目前在 `/home/user`,輸入 `cd documents` 會進入 `/home/user/documents`。
**cd 的進階技巧**:
- `cd .`:切換到目前目錄(不會改變位置,但在撰寫 `.sh` 腳本中有時會用到)。
- `cd ~/downloads`:直接進入家目錄下的 downloads 子目錄。
- `cd ../../`:連續回到上兩層目錄。
#### 絕對路徑與相對路徑
- 絕對路徑:從根目錄 `/` 開始的完整路徑,如 `cd /usr/local/bin`。
- 相對路徑:相對於目前目錄的路徑,例如 `cd ../downloads` 會進入上一層目錄下的 `downloads` 資料夾。
### mkdir、rmdir
`mkdir` 的英文縮寫取自 make directory,如其名,主要在 linux 裡面建立目錄用的。
語法:
```bash
mkdir [options] directory_name
```
常用的參數:
- `-p`:一次建立多層目錄,若上層目錄不存在會自動建立。如:
- `mkdir -p test1/test2/test3` 會同時建立 test1、test2、test3 三層目錄。
- `-m`:直接設定新目錄的權限。如:
- `mkdir -m 711 demo` 會建立權限為 711 的 demo 目錄。
而 `rmdir` 的英文縮寫取自 remove directory,與 `mkdir` 相對,他是拿來刪除目錄用的,語法也跟 `mkdir` 一樣。
在這邊的 `-p` 表示遞迴刪除多層空目錄,如果下層目錄都為空,會一併刪除。如:`rmdir -p a/b/c` ,如果 `a/b/c` 都是空的,會全部刪除。
:::danger
需要注意 `rmdir` 只能刪除「**空目錄**」,如果目錄裡有檔案或其他目錄,會出現錯誤訊息。
解法是使用 `rm -r` 指令,但須非常小心使用這個指令,因為一不小心就可能直接把該目錄裡面的所有仔目錄給全刪了。
:::
### pwd
`pwd` 的英文縮寫取自 print working directory,也就是印出當前的工作目錄,但這目錄是**絕對路徑**。
會需要這個指令是因為終端機上操作是沒有任何視覺化界面告訴你現在在哪,所以 `pwd` 可以讓你隨時知道自己目前位於檔案系統的哪個位置,避免在複雜目錄結構中迷路。
基本語法:
```bash
pwd [options]
```
最常見的用法是直接輸入 `pwd`,會顯示目前所在的完整路徑,如 `/home/username/projects`。
常用參數:
- `-L`(`--logical`):顯示「邏輯路徑」,也就是你進入目錄時所用的路徑(預設行為)。
- `-P`(`--physical`):顯示「實體路徑」,如果目前目錄是符號連結,會顯示實際目錄位置。
需再提醒的是,pwd 只會顯示「絕對路徑」,不會顯示相對路徑。
### touch
`touch` 沒有什麼特別的縮寫,`touch` 就是 `touch`。
`touch` 指令在 Linux 中有兩大用途:
1. 建立新的空白檔案(如果檔案不存在)。
2. 更新現有檔案的「時間戳記」(access time、modify time、change time)。
基本語法:
```bash
touch [options] file_name
```
如果檔案不存在,會建立一個空白檔案。
如果檔案已存在,會將檔案的存取時間(atime)和修改時間(mtime)更新為目前系統時間,內容不會改變。
常用參數:
- `-a`:只更新存取時間(access time)。
- `-m`:只更新修改時間(modify time)。
- `-c` 或 `--no-create`:如果檔案不存在,不會建立新檔案。
- `-t`:指定時間戳記(格式為 `[[CC]YY]MMDDhhmm[.ss]`),如 `touch -t 202501181200 file.txt` 會把 `file.txt` 的時間設為 `2025/01/18 12:00`。
- `-r`:參考另一個檔案的時間戳記,如 `touch -r ref.txt target.txt` 會把 `target.txt` 的時間設為 `ref.txt` 的時間。
相關範例:
- 建立空白檔案:`touch demo.html`
- 同時建立多個檔案:`touch file1.txt file2.txt file3.txt`
- 只更新存取時間:`touch -a demo.html`
- 指定時間戳記:`touch -t 202510181200 demo.html`
- 參考其他檔案的時間:`touch -r old.txt new.txt`
### ln
`ln` 是來自 link 的英文縮寫,是 Linux 系統中用來「建立檔案或目錄的連結」的工具。它可以讓你在不同位置建立一個檔案的「別名」,讓多個路徑都能存取同一份資料,節省磁碟空間並方便管理。
這有點像是 Windows 中捷徑的概念,可以把 Windows 的捷徑想像成是在 Linux 中軟連結的方式。
以下 `ln` 能建立兩種連結:
- 硬連結(Hard Link):使用 `ln` 指令時預設建立的。硬連結就像是同一本書但有不同書名,但內容完全相同。在檔案系統中,硬連結讓多個檔案名稱直接指向相同的資料儲存位置(inode),所有硬連結都是平等的,刪除其中一個名稱不會影響其他連結對檔案的存取。
- 軟連結(Symbolic Link,又稱符號連結):類似於 Windows 系統中的捷徑,只是儲存了目標檔案的路徑資訊,而非實際的檔案內容。
基本語法:
```bash
ln [options] src_file dst_file
```
`src_file`:source file,來源檔案。
`dst_file`:destination file,目標檔案。
建立硬連結(預設使用硬連結,不須加什麼參數):`ln file.txt file_hardlink.txt`
建立軟連結:`ln -s file.txt file_softlink.txt`
常用參數:
- `-s`:建立軟連結(符號連結)。
- `-f`:強制覆蓋目標位置已存在的連結檔案。
- `-i`:交互模式,覆蓋前會提示。
- `-v`:顯示詳細處理過程。
- `-n`:將符號連結視為一般檔案。
相關範例:
- 建立目錄的軟連結:`ln -s /var/log ~/log_link`
- 強制覆蓋舊連結:`ln -f -s new.txt link.txt`
### cp
`cp` 來自英文 copy 的縮寫,用於複製檔案、目錄用的。
基本語法:
```bash
cp [options] src_file/directory dest_file/directory
```
常用用法:
- 複製檔案:`cp fileA.txt fileB.txt`
- 複製到目錄:`cp fileA.txt /home/user/backup/`
- 複製多個檔案到目錄:`cp fileA.txt fileB.txt /home/user/backup/`
相關範例:
- 複製檔案並改名:`cp demo.html demo1.html`。
- 遞迴複製目錄:`cp -r mydir /home/user/backup/`
- 顯示複製過程:`cp -v demo.html /home/user/backup/`
需要特別注意的是,在複製目錄的時候一定要加上 `-r` 或 `-R` 參數遞迴複製!!這非常重要,否則會出錯。
### mv
`mv` 取自英文 move 的縮寫,主要用來移動檔案、目錄,或是重新命名檔案、目錄的工具。
語法同 `cp`。
相關範例:
- 移動檔案到目錄:`mv demo1.html ~`
- 重新命名檔案:`mv oldname.txt newname.txt`
- 移動多個檔案到目錄:`mv file1.txt file2.txt /home/user/backup/`
### rm
rm 取自英文 remove 的縮寫,如其名,就是拿來刪除檔案、目錄用的。
基本語法:
```bash
rm [options] files/directory
```
相關範例:
- 刪除單一檔案:`rm file1.txt`
- 互動模式刪除(避免誤刪,然後會問你要不要刪這樣):`rm -i file2.txt`
- 加上參數 `-f` 強制刪除(不提示):`rm -f stubbornfile.txt`
- 遞迴刪除整個資料夾及內容:`rm -r foldername`
- 強制遞迴刪除(最不安全,不建議使用):`rm -rf foldername`
須注意要刪除空目錄要使用 `rm -d` 或 `rmdir`,其中 `-d` 參數表示刪除空目錄的意思。另外以管理員(root)權限執行 `rm`,可能造成系統損毀,務必小心。
## 日常用、系統指令
### date
`date` 指令可顯示當前的時間與日期,指令用法就是輸入 `date` 即可,結果可能如下(使用 Ubuntu OS):

### cal
`cal` 指令在使用之前,需透過 `sudo apt install ncal` 安裝套件才可使用。
然後跟 `date` 一樣,直接輸入就可以顯示當月月曆,使用結果可能如下:

`cal 2024` 可查看 2024 年當年的年曆。

### clear
`clear` 可用於清除終端機的所有內容。
以下兩圖分別展示了指令輸入前與輸入後的樣子:


### lscpu
`lscpu` 可用來查看當前 CPU 資訊。
註:每人運作機型有所不同,執行結果也可能跟著不同。

### uptime
`uptime` 可用來顯示目前的時間,檢查 Linux 系統執行多久了。(在 Windows 只要打開工作管理員 -> 【效能】就可以看到類似的東西。)

### free
`free` 指令用於查看記憶體的使用情況,可加上前面學過的 `-h` 參數讓印出的內容易讀。


上圖展示當前記憶體總量是 7.7 GB,當中 3.8 GB 是拿來被 swap(交換)用的。
### df
`df` 指令用於檢查硬碟使用量,也可使用 `-h` 參數讓印出內容易讀。

### uname
`uname` 指令可顯示 Linux 核心系統資訊:

### shutdown
`shutdown` 指令可做到讓電腦關機、重新啟動、定時關機等功能。
基本語法如下:
```bash
shutdown [options] [time] [warning_message]
```
options 參數:
- `-h`(halt):關機後停止運作或關閉電源,這是最常用的選項。
- `r`(reboot):關機後自動重新啟動系統。
- `-c`(cancel):取消之前已經排定的關機計畫。
- `-k`:只發送警告訊息給所有使用者,但不會真的關機,用來測試或提醒使用者。
- `-t seconds`:設定在送出警告訊息後延遲多少秒才執行關機。
- `-f`:重新啟動時不執行檔案系統檢查(fsck)。
- `-F`:重新啟動時強制執行檔案系統檢查。
time 參數:
- `now`:立即關機,也是最常用的時間參數。
- `+m`:在 m 分鐘後關機。如 `+10` 表示 10 分鐘後關機。
- `hh:mm`:在指定的時刻關機,使用 24 小時制。如 21:30 表示晚上 9:30 關機。
相關範例:
- 立即關機:
```bash
shutdown -h now
shutdown -h +0
shutdown -h 0
```
- 指定時間關機:`shutdown -h 21:30`,系統會在系統時間 21:30 的時候關機。
- 延遲關機並發送訊息:`shutdown -h +10 "系統將在 10 分鐘後關機"`,在 10 分鐘後關機,並向所有登入的使用者發送警告訊息。
- 立即重新啟動:`shutdown -r now`
- 背景執行關機:`shutdown -h 21:30 &`,使用 SSH 遠端登入時,設定關機後可以直接登出,系統會在指定時間自動關機。
- 取消已排定的關機:`shutdown -c`
### reboot
`reboot` 指令就是重新開機的意思,只要直接輸入 `reboot` 就會馬上重新開機。
## 總整理
### 檔案、目錄操作
`.` 代表當前目錄,`..` 代表上層目錄。
路徑分為絕對路徑(從根目錄 / 開始)和相對路徑(相對當前位置)。
- ls(列出當前目錄內容)。
- cd(切換目錄):用於移動到不同目錄。
- `cd ~` 回家目錄。
- `cd /` 到根目錄。
- `cd ..` 到上層。
- `cd -` 回前一個目錄。
- pwd(顯示當前路徑):印出目前所在的絕對路徑。
- mkdir(建立目錄):加 `-p` 可一次建立多層目錄。
- rmdir(刪除空目錄):若目錄非空需用 `rm -r`(但要非常小心)。
- cp(複製):複製檔案或目錄,複製目錄時必須加 `-r` 參數遞迴處理。
- mv(移動 / 重新命名):既可移動檔案到其他位置,也可在同目錄下改名。
- rm(刪除):刪除檔案或目錄。
- `-i` 提供互動確認。
- `-f` 強制刪除。
- `-r` 遞迴刪除整個資料夾。
- touch(建立 / 更新檔案):建立空白檔案或更新現有檔案的時間戳記。
- ln(建立連結):建立硬連結(預設)或軟連結(加 `-s`)。
- 軟連結類似 Windows 捷徑,硬連結則是多個名稱指向同一資料。
### 系統資訊查詢
- `date`:顯示當前日期時間。
- `cal`:顯示月曆或年曆。
- `lscpu`:查看 CPU 資訊。
- `uptime`:系統運行時間。
- `free`:記憶體使用狀況(加 `-h` 更易讀)。
- `df`:硬碟使用量(加 `-h` 更易讀)。
- `uname`:核心系統資訊。
### 系統控制
- `clear`:清除終端機畫面。
- `shutdown`:關機或定時關機。
- `-h now` 立即關機。
- `-r` 重新啟動。
- `-c` 取消關機。
- `reboot`:立即重新啟動。
### 溫馨提醒
- 使用 `cp` 指令去複製「目錄」必須加 `-r` 參數。
## 參考資料
[Command Documentation](https://linuxcommand.org/lc3_man_page_index.php)
[適合初學者的 12 個基本 Linux 指令 - 晟鑫科技部落格](https://blog.ossii.com.tw/?p=2241)
[[資安入門] 003 Linux 指令教學 - 飛飛](https://feifei.tw/learn-linux/)
[Day06 - 一些常用 Linux 指令 - 1-7 - 基礎篇 (exit、pwd、ls、cd、touch、mkdir、rm、cp、scp、mv、sudo、man、help、clear...等) - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天](https://ithelp.ithome.com.tw/articles/10235530)
[Linux 的 ls 指令教學與常用範例整理 – G. T. Wang](https://blog.gtwang.org/linux/linux-ls-command-tutorial/)
[cd 目錄導航 切換工作目錄 - Linux技術日誌](https://hthlinux.com/cd-%E7%9B%AE%E9%8C%84%E5%B0%8E%E8%88%AA-%E5%88%87%E6%8F%9B%E5%B7%A5%E4%BD%9C%E7%9B%AE%E9%8C%84/)
[[Linux 指令] cd 指令-切換目錄操作教學 - 科技阿宅王](https://www.tokfun.net/os/linux/linux-cd-command/)
[Linux 基本指令 mkdir, rmdir 和 rm_7.linux中命令 mkdir 是(), rm 是(-CSDN博客](https://blog.csdn.net/qq1376725255/article/details/89228281)
[Linux教學:pwd指令 - 都會阿嬤](https://weikaiwei.com/linux/linux-pwd/)
[Linux 的 touch 指令用法教學與範例 – G. T. Wang](https://blog.gtwang.org/linux/linux-touch-command-tutorial-examples/)
[Linux指令- ln 指令 – 甲寬網路科技(JQnets) – Blog](https://jqnets.com/blog/linux%E6%8C%87%E4%BB%A4-ln-%E6%8C%87%E4%BB%A4/)
[Linux 建立連結檔 ln 指令教學與範例 – G. T. Wang](https://blog.gtwang.org/linux/linux-ln-command-tutorial-examples/)
[cp 命令,Linux cp 命令详解:将源文件或目录复制到目标文件或目录中 - Linux 命令搜索引擎](https://wangchujiang.com/linux-command/c/cp.html)
[Linux mv 指令](https://www.hy-star.com.tw/tech/linux/comm/mv.html)
[Linux 教學:rm 指令 刪除檔案 - 都會阿嬤](https://weikaiwei.com/linux/linux-rm/)
[Linux 日曆 cal 與 ncal 指令教學,產生月曆、年曆的工具 – G. T. Wang](https://blog.gtwang.org/linux/linux-cal-ncal-calendar-command-tutorial/)