cp 是 Linux 最基礎的複製工具,但其參數極豐富,能精準控制屬性保留、備份行為、符號連結處理、稀疏檔優化。本文系統化說明所有核心參數、實戰範例與進階技巧。

| 短參數 | 長參數 | 功能 | 典型場景 |
|---|---|---|---|
-a |
--archive |
等同 -dR --preserve=all (遞迴、保留連結、保留所有屬性) |
**完整目錄樹備份/遷移** |
-r, -R |
--recursive |
遞迴複製目錄及內容 | 複製資料夾 |
-p |
--preserve=mode,ownership,timestamps |
保留權限、擁有者、時間戳 | 保留原檔屬性 |
-u |
--update |
來源較新才複製 | 增量同步、備份 |
-i |
--interactive |
覆蓋前詢問 | 防誤刪重要檔 |
-n |
--no-clobber |
不覆蓋既有檔 | 保護目的端 |
-f |
--force |
無法開啟目的檔則移除重試 | 強制覆蓋 |
-b |
--backup |
覆蓋前建立備份檔 | 保留舊版本 |
--backup=numbered |
備份檔命名 file.~1~, file.~2~ |
版本化備份 | |
-S |
--suffix=SUFFIX |
自訂備份尾碼 (預設 ~) |
cp -b -S _bak file dir/ |
-l |
--link |
建立硬連結而非複製 | 節省空間、瞬間完成 |
-s |
--symbolic-link |
建立符號連結 | 快捷方式 |
-L |
--dereference |
複製符號連結**指向的目標檔** | 實體化連結 |
-P |
--no-dereference |
複製符號連結**本身** (預設) | 保留連結結構 |
-H |
僅複製命令列參數中的符號連結目標 | 混合模式 | |
-d |
等同 --no-dereference --preserve=links |
保留連結屬性 | |
-x |
--one-file-system |
不跨越檔案系統邊界 | 避免掛載點誤複製 |
--sparse=auto |
偵測稀疏檔並保留稀疏性 (預設) | 虛擬機映像、大型資料庫檔 | |
--sparse=always |
強制建立稀疏檔 | 複製非稀疏來源為稀疏 | |
--sparse=never |
不建立稀疏檔 | 相容性需求 |
# 1. 完整保留屬性複製目錄 (最常用)
cp -a /src/project /dst/backup/
# 2. 僅更新較新檔案 (增量備份)
cp -au /src/data /dst/backup/
# 3. 互動式覆蓋確認
cp -i file.txt /dst/
# 4. 不覆蓋既有檔
cp -n *.conf /etc/
# 5. 強制覆蓋 (目的檔被鎖定/權限不足)
cp -f new_binary /usr/local/bin/
# 6. 建立編號備份
cp -b --backup=numbered config.yaml /etc/
# 產生 config.yaml.~1~, config.yaml.~2~
# 7. 自訂備份尾碼
cp -b -S _$(date +%Y%m%d) config.yaml /etc/
# 產生 config.yaml_20240115
# 8. 硬連結代替複製 (同檔案系統、節省空間)
cp -l large_file.img /backup/
# 9. 實體化符號連結 (複製目標而非連結)
cp -L /usr/bin/python3 /container/usr/bin/
# 10. 保留目錄結構複製單一檔案
cp -P /var/log/nginx/access.log /backup/var/log/nginx/
# 11. 跨檔案系統複製 (預設支援)
cp /mnt/disk1/data.bin /mnt/disk2/
# 12. 稀疏檔優化 (虛擬機映像備份)
cp --sparse=always dense_disk.img sparse_disk.img
# 將連續零區塊轉為稀疏,大幅縮小實際佔用空間
| 工具 | 優勢 | 適用場景 |
|---|---|---|
cp |
系統內建、無相依、參數精細控制單次操作 | 互動式、腳本單步、需特定屬性控制 |
rsync |
差量、斷點續傳、過濾、統計、遠端 | **同步、備份、鏡像、大量資料** |
install |
複製+設定權限+擁有者+備份單一指令 | 安裝腳本、套件建置 install -m 755 -o root -g root src dst |
cp -r dir/ /dst vs cp -r dir /dst:尾碼斜線影響是複製**目錄內容**還是**目錄本身** (同 rsync)cp -a **不保留 ACL/xattr** (需 --preserve=xattr,acl 或用 rsync -aAX)-x 避免遞入其他檔案系統cp file dir/ 會報錯,需先 mkdir -p dir精通 cp 參數組合,能在無網路、無額外工具的最小環境中完成精準、安全、高效的檔案複製任務。