ls - 列出目錄內容
常用參數組合
| 參數 | 功能 | 推薦組合 |
-a | 顯示所有檔案(含隱藏檔 . 開頭) | ls -la 完整長列表 |
-A | 顯示所有檔案(不含 . 和 ..) | ls -lA 日常最常用 |
-l | 長格式:權限、連結數、擁有者、大小、時間、名稱 | |
-h | 人類可讀大小(K、M、G) | |
-d | 僅列出目錄本身,不遞迴進入 | ls -ld /etc |
-t | 按修改時間排序(新→舊) | ls -lt |
-r | 反向排序 | ls -ltr 由舊到新 |
-S | 按檔案大小排序 | ls -lSh |
-i | 顯示 inode 號 | ls -li 硬連結分析 |
實戰範例
ls -lA /tmp # 列出 /tmp 所有檔案(含隱藏),長格式
ls -ld /home/* # 僅列出 /home 下一級目錄
ls -ltr /var/log # 按時間舊→新,方便看最新日誌
ls -i config.php # 獲取 inode,配合 find -inum 尋找硬連結
cp - 複製檔案與目錄
核心參數
| 參數 | 功能 | 典型場景 |
-r/-R | 遞迴複製目錄 | 複製整個目錄樹 |
-a | 歸檔模式 = -dR --preserve=all(保留權限、時間、擁有者、連結) | 備份、遷移、保留屬性 |
-p | 保留模式、擁有者、時間戳(等同 --preserve=mode,ownership,timestamps) | |
-f | 強制覆蓋,不提示 | 腳本自動化 |
-i | 互動模式,覆蓋前確認 | 手動操作防誤刪 |
-u | 僅複製較新檔案(update) | 增量備份、同步 |
-l | 建立硬連結而非複製 | 節省空間、同步修改 |
-s | 建立符號連結 | 快捷方式 |
權限陷阱
預設 cp 目標檔擁有者為執行用戶,權限受 umask 影響。需完整保留屬性請用 cp -a 或 cp -p。
mv - 移動與重命名
參數
| 參數 | 功能 |
-f | 強制覆蓋,不提示 |
-i | 互動確認 |
-u | 僅當來源較新或目標不存在時移動 |
-n | 不覆蓋現有檔案(GNU 核心工具 8.24+) |
-b | 覆蓋前備份(加 ~ 後綴) |
跨檔案系統行為
- 同檔案系統:僅修改目錄項,極快(原子操作)
- 跨檔案系統:複製後刪除來源,等同
cp -a && rm -rf
rm - 刪除檔案與目錄
參數
| 參數 | 功能 | 風險等級 |
-f | 強制刪除,忽略不存在、不提示 | 高 |
-i | 逐一確認 | 低 |
-I | 僅刪除超過 3 檔案或遞迴時確認一次(折中) | 中 |
-r/-R | 遞迴刪除目錄 | 極高 |
-d | 刪除空目錄(等同 rmdir) | 低 |
--preserve-root | 拒絕刪除 /(預設開啟) | 安全 |
--no-preserve-root | 允許刪除 /(慎用!) | 核彈級 |
安全習慣
- 刪除前先
ls 確認範圍
- 目錄刪除用
rm -ri 或 rm -rI
- 重要資料先備份或用
trash-cli 移至垃圾桶
- 生產環境禁用
rm -rf / 類指令,配置 alias rm='rm -I'
進階技巧:配合 find/xargs 批次處理
# 複製所有 .log 到 /backup/logs,保留目錄結構
find /var/log -name "*.log" -exec cp -a --parents {} /backup/logs \;
# 刪除 30 天前的 .tmp 檔案
find /tmp -name "*.tmp" -mtime +30 -delete
# 重命名:將 .jpeg 改為 .jpg
find . -name "*.jpeg" -exec sh -c 'mv "$1" "${1%.jpeg}.jpg"' _ {} \;