萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux cp 命令完整指南:複製檔案、目錄、保留屬性、連結與覆蓋控制

cp (copy) 是檔案/目錄複製的核心命令。除基本複製外,支援保留屬性 (-a/-p)、遞迴目錄 (-r)、建立連結 (-l/-s)、覆蓋提示 (-i/-n/-f)、備份既有檔 (--backup) 等進階功能。本文完整整理參數矩陣與實戰場景。

cp 命令示意圖

命令格式

cp [選項]... [-T] 來源 目標
cp [選項]... 來源... 目標目錄
cp [選項]... -t 目標目錄 來源...

核心參數分類

類別參數說明
保留屬性-a歸檔模式 = -dR --preserve=all (保留權限、擁有者、時間戳、連結、xattr 等)
-p--preserve=mode,ownership,timestamps (預設保留三者)
--preserve=屬性清單可指定 mode,ownership,timestamps,links,xattr,context,all
覆蓋控制-i互動模式,覆蓋前詢問 (別名常設為 cp -i)
-n--no-clobber不覆蓋既有檔 (優先於 -i)
-f--force目標無法開啟時移除後重試 (不影響 -i/-n 邏輯)
--backup[=CONTROL]覆蓋前建立備份 (numbered/existing/simple/never)
連結處理-d--no-dereference --preserve=links (複製連結本身而非指向檔案)
-l--link建立硬連結而非複製
-s--symbolic-link建立符號連結 (捷徑)
-L--dereference總是跟隨符號連結複製目標檔案
-P--no-dereference不跟隨符號連結 (預設)
目錄處理-R, -r--recursive 遞迴複製目錄及內容
-H命令列參數的符號連結跟隨,其餘不跟隨

實戰場景範例

1. 複製單一檔案到目標目錄 (目標不存在)

cp log.log test5/
# 不加 -a 時,目標檔案時間戳為當前時間
cp -a log.log test5/  # 保留原時間戳

2. 目標檔案已存在:覆蓋提示行為

cp log.log test5/        # 若有 alias cp='cp -i' 會詢問
cp -f log.log test5/     # 強制覆蓋 (但若有 -i alias 仍會詢問)
cp -n log.log test5/     # 不覆蓋,靜默跳過
# 解除 alias 後才真正生效
\cp -f log.log test5/

3. 複製整個目錄

# 目標目錄存在:來源目錄複製「進入」目標目錄
cp -a test3 test5/   # 結果:test5/test3/

# 目標目錄不存在:來源目錄「重命名為」目標目錄
cp -a test3 test4    # 結果:test4/ (內容同 test3)

4. 建立符號連結 (捷徑)

cp -s log.log log_link.log
# ls -l 顯示:log_link.log -> log.log

5. 建立硬連結 (節省空間)

cp -l bigfile.dat bigfile_hardlink.dat
# 同一 inode,修改任一檔案內容同步變化

6. 備份既有檔案

cp --backup=numbered -f config.ini config.ini
# 產生 config.ini.~1~, config.ini.~2~ ...

腳本中避免 alias 干擾

在 Shell 腳本中建議使用完整路徑 /bin/cp 或前置反斜線 \cp 繞過互動別名,確保自動化流程不卡住。

小結

cp 參數極豐富,核心掌握 -a (完整保留)、-r (遞迴目錄)、-i/-n/-f (覆蓋策略)、-l/-s (連結類型) 四大面向即可應對絕大多數複製需求。生產環境腳本請明確指定覆蓋行為與屬性保留策略,避免資料遺失或權限異常。

copyright © 萬盛學電腦網 all rights reserved