Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 文件操作核心命令實戰手冊:locate、grep、tar、find、scp 參數詳解與組合技巧

編輯:Linux 教學

文件查找、過濾、打包、傳輸是 Linux 日常運維高頻動作。本文系統整理 locate、grep、tar、find、scp 五大命令的核心參數、典型組合與避坑指南,提升命令行效率。

locate:毫秒級文件名查找 (基於數據庫)


# 更新數據庫 (需 root,通常每日定時任務自動運行)
updatedb

# 查找包含關鍵字的路徑
locate nginx.conf
locate -i "*.log"          # 忽略大小寫
locate -r "^/etc/.*conf$"  # 正則匹配
locate -c pattern          # 僅統計數量
locate -e pattern          # 僅輸出當前存在的 (排除已刪除)

# 限制搜索範圍 (需構建自定義數據庫)
updatedb -l 0 -o /var/lib/mlocate/custom.db -U /home
locate -d /var/lib/mlocate/custom.db pattern

優勢:極快 (索引查找);劣勢:非實時、無法按權限/大小/時間過濾、需定期 updatedb。

grep:文本模式過濾與提取


# 基礎用法
grep "error" /var/log/messages
grep -i "error" file       # 忽略大小寫
grep -v "debug" file       # 反向匹配 (排除)
grep -n "pattern" file     # 顯示行號
grep -c "pattern" file     # 統計匹配行數
grep -l "pattern" *.conf   # 僅輸出文件名
grep -r "pattern" /etc/    # 遞歸目錄

# 正則增強
grep -E "error|fail|critical" file     # 擴展正則 (或)
grep -P "(\d{1,3}\.){3}\d{1,3}" file   # Perl 正則 (IP)
grep -w "root" file                    # 全詞匹配
grep -A 3 -B 2 "pattern" file          # 顯示匹配行前 2 行、後 3 行
grep -C 5 "pattern" file               # 前後各 5 行上下文

# 輸出控制
grep -o "pattern" file    # 僅輸出匹配部分 (每行一個)
grep -h "pattern" file1 file2  # 不顯示文件名
grep --color=auto "pattern" file   # 高亮 (別名常默認開啟)

實戰組合


# 從日志提取 IP 並統計 Top 10
grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log | sort | uniq -c | sort -nr | head -10

# 查找包含特定字符串的進程完整命令行
ps aux | grep -v grep | grep "nginx"

# 批量替換文件內容 (配合 sed)
grep -rl "old_string" /etc/app/ | xargs sed -i 's/old_string/new_string/g'

tar:歸檔與壓縮瑞士軍刀

核心操作模式 (互斥)

選項功能
-c創建歸檔
-x解壓歸檔
-t列出歸檔內容
-u更新歸檔 (僅較新文件)
-r追加文件到歸檔末尾

常用修飾選項

選項功能
-f FILE指定歸檔文件 (必須)
-v詳細輸出
-zgzip 壓縮/解壓 (.tar.gz/.tgz)
-jbzip2 壓縮/解壓 (.tar.bz2/.tbz2)
-Jxz 壓縮/解壓 (.tar.xz/.txz) 推薦:壓縮率最高
-p保留權限 (root 解壓默認開啟)
-C DIR指定解壓/歸檔目錄
--exclude=PATTERN排除模式
--strip-components=N解壓時去除前 N 級目錄

黃金範例


# 打包排除 .git、node_modules、*.log
tar -czf /backup/app-$(date +%F).tar.gz \
    --exclude=.git --exclude=node_modules --exclude="*.log" \
    -C /home/wwwroot app/

# 解壓到指定目錄,保留權限
tar -xzf app.tar.gz -C /opt/app --strip-components=1

# 列出內容不解壓
tar -tzf app.tar.gz | head -20

# 異地備份 (通過 SSH 管道)
tar -czf - /home/wwwroot/app | ssh user@backup "cat > /backup/app-$(date +%F).tar.gz"

find:文件系統遍歷查找神器

核心測試條件 (可組合 -a -o !)

條件功能示例
-name PATTERN文件名匹配 (通配符)-name "*.conf"
-iname PATTERN忽略大小寫-iname "readme*"
-path PATTERN完整路徑匹配-path "*/.git/*"
-type TYPE文件類型f/d/l/c/b/p/s (文件/目錄/鏈接/字符/塊/管道/Socket)
-size N[cwbkMG]文件大小-size +100M >100MB, -size -1k <1KB
-perm MODE權限精確匹配-perm 644
-perm -MODE權限包含 (所有位)-perm -u=x 擁有者可執行
-perm /MODE權限任意位匹配-perm /u=x,g=x
-user NAME擁有者用戶名-user www
-group NAME所屬組名-group www
-mtime N修改時間 N 天前-mtime +30 30天前, -mtime -7 7天內
-mmin N修改時間 N 分鐘前-mmin -60 1小時內
-atime N訪問時間-atime +365 一年未訪問
-ctime N狀態改變時間-ctime -1 1天內屬性變更
-empty空文件/目錄
-links N硬鏈接數-links +1 硬鏈接文件

動作

動作功能示例
-print輸出路徑 (默認)
-print0NUL 分隔輸出 (配合 xargs -0)
-exec CMD {} \;對每個結果執行命令-exec chmod 644 {} \;
-exec CMD {} +批量執行 (參數列表)-exec rm {} + 效率高得多
-ok CMD {} \;交互確認執行
-delete直接刪除 (慎用!)-name "*.tmp" -delete
-printf FORMAT格式化輸出-printf "%p %s %TY-%Tm-%Td\n"

實戰組合


# 1. 查找大於 100MB 的日志文件並壓縮
find /var/log -type f -name "*.log" -size +100M -exec gzip {} \;

# 2. 清理 30 天前的臨時文件
find /tmp -type f -mtime +30 -delete

# 3. 查找擁有 SUID 位的可疑文件
find / -type f -perm -4000 ! -path "/usr/bin/*" ! -path "/bin/*" -ls

# 4. 批量重命名: .jpeg -> .jpg
find . -type f -name "*.jpeg" -exec bash -c 'mv "$1" "${1%.jpeg}.jpg"' _ {} \;

# 5. 複雜條件: 修改時間 7 天內、大於 1MB、非 .git 目錄的文件
find /home/wwwroot -type f -mtime -7 -size +1M ! -path "*/.git/*" -printf "%p %s %TY-%Tm-%Td\n"

scp:SSH 加密遠程複製


# 本地 -> 遠程
scp file.txt user@host:/remote/path/
scp -r dir/ user@host:/remote/path/

# 遠程 -> 本地
scp user@host:/remote/file.txt /local/path/
scp -r user@host:/remote/dir/ /local/path/

# 遠程 -> 遠程 (經本地中轉)
scp user1@host1:/path/file user2@host2:/path/

# 關鍵參數
scp -P 2222              # 指定 SSH 端口
scp -i ~/.ssh/id_rsa     # 指定私鑰
scp -l 10000             # 限制帶寬 10000 Kbit/s
scp -p                   # 保留修改時間、權限、模式
scp -C                   # 啟用壓縮 (低帶寬環境)
scp -o StrictHostKeyChecking=no  # 自動接受新主機指紋 (自動化腳本)
scp -r -o ConnectTimeout=10      # 連接超時 10s

批量分發腳本範例


#!/bin/bash
HOSTS="web1 web2 web3 db1"
LOCAL="/opt/app/config.yaml"
REMOTE="/etc/app/config.yaml"
for h in $HOSTS; do
    echo "Deploying to $h..."
    scp -i ~/.ssh/deploy_key -o ConnectTimeout=5 "$LOCAL" "deploy@$h:$REMOTE" && \
    ssh -i ~/.ssh/deploy_key "deploy@$h" "systemctl reload app" || \
    echo "FAILED: $h"
done

命令選擇決策樹

  • 知道確切文件名、要最快速度 → locate (配合 updatedb)。
  • 需按權限/大小/時間/類型/內容過濾 → find。
  • 需在文件內容中搜索文本模式 → grep (配合 find -exec grep 或 xargs grep)。
  • 需打包備份/傳輸目錄樹 → tar (配合 ssh 管道或 scp)。
  • 需加密複製文件到遠程 → scp / rsync -e ssh (增量同步首選 rsync)。
Copyright © Windows教程網 All Rights Reserved