跳轉到內容

Linux 文件操作完全指南 | 創建、複製、移動、刪除文件命令詳解

Linux File Operations

在 Linux 系統中,文件操作是最基礎也是最頻繁的操作之一。熟練掌握文件管理命令可以極大提高工作效率。本文將詳細介紹 Linux 中常用的文件操作命令及其高級用法。

查看文件內容

cat由第一行開始顯示文件內容
more一頁一頁的顯示文件內容
more 空格鍵(space)代表向下翻一頁
more Enter代表向下翻【一行】
more f立刻顯示出檔名以及目前顯示的行數
more q代表立刻離開 more , 不再顯示該文件內容。
less一頁一頁翻動
less 空格鍵(space)向下翻動一頁
less pagedowm向下翻動一頁
less pageup向上翻動一頁
less q離開 less 這個程序

cat 命令詳解

bash
# 基本用法
cat file.txt                    # 顯示文件內容
cat file1.txt file2.txt         # 合併顯示多個文件

# 顯示行號
cat -n file.txt

# 顯示非打印字符
cat -v file.txt

# 壓縮空行
cat -s file.txt

# 創建文件並輸入內容
cat > newfile.txt
Hello World
Ctrl+D (結束輸入)

# 追加內容到文件
cat >> existing.txt
New content
Ctrl+D

more 和 less 對比

特性moreless
向前翻頁
搜索功能有限強大
啟動速度快(加載全部)快(按需加載)
推薦場景小文件大文件、日誌
bash
# more 常用操作
more file.txt
# 空格:下一頁
# Enter:下一行
# q:退出
# /pattern:搜索

# less 常用操作
less file.txt
# 空格/PageDown:下一頁
# PageUp:上一頁
# q:退出
# /pattern:向下搜索
# ?pattern:向上搜索
# n:下一個匹配
# N:上一個匹配
# g:跳到開頭
# G:跳到結尾

head 和 tail 命令

bash
# 查看文件前 10 行
head file.txt

# 查看前 20 行
head -n 20 file.txt

# 查看文件最後 10 行
tail file.txt

# 查看最後 20 行
tail -n 20 file.txt

# 實時監控文件變化(常用於日誌)
tail -f /var/log/syslog
tail -F /var/log/app.log  # 跟隨文件輪轉

# 組合使用
head -n 100 file.txt | tail -n 20  # 查看第 81-100 行

創建文件

語法:touch 創建一個空白的普通文件

touch 命令詳解

bash
# 創建空文件
touch newfile.txt

# 創建多個文件
touch file1.txt file2.txt file3.txt

# 更新時間戳(文件已存在時)
touch existing_file.txt

# 指定時間戳
touch -t 202401011200 file.txt  # 2024-01-01 12:00

# 參考其他文件的時間戳
touch -r reference.txt target.txt

# 只修改訪問時間
touch -a file.txt

# 只修改修改時間
touch -m file.txt

其他創建文件的方法

bash
# 使用重定向
> newfile.txt
echo "" > newfile.txt

# 使用編輯器
vim newfile.txt
nano newfile.txt

# 使用 heredoc
cat > config.yml << EOF
database:
  host: localhost
  port: 3306
EOF

寫入內容

echo 把內容重定向到指定的文件中,有則打開,無則創建

echo '內容'>文件名稱覆蓋模式
echo '內容'>>文件名稱追加模式

echo 命令高級用法

bash
# 基本輸出
echo "Hello World" > file.txt

# 追加內容
echo "New line" >> file.txt

# 多行寫入
cat > file.txt << EOF
Line 1
Line 2
Line 3
EOF

# 變量替換
NAME="World"
echo "Hello $NAME" > greeting.txt

# 禁用轉義
echo -e "Line1\nLine2\nLine3" > multiline.txt

# 輸出特殊字符
echo -e "Tab:\tSpace"
echo -e "Color: \033[31mRed\033[0m"

重定向操作符詳解

bash
# > 覆蓋重定向
echo "new content" > file.txt

# >> 追加重定向
echo "appended" >> file.txt

# 2> 錯誤重定向
command 2> error.log

# &> 標準和錯誤都重定向
command &> output.log

# | 管道
cat file.txt | grep "pattern"

# tee 同時輸出到文件和屏幕
echo "content" | tee file.txt
echo "content" | tee -a file.txt  # 追加模式

複製/拷貝文件

bash
cp \[-adfilprsu\] 來源檔(source) 目標檔(destination)
-a相當於 -pdr 的意思
-d若來源檔為連接檔的屬性 link file,則複製連接檔屬性而非文件本身;
-f為強制 force 的意思,若目標文件已經存在且無法開啟,則移除後再嘗試一次;
-iclear 動作的進行
-l進行硬式連結 hard link 的連結檔創建,而非複製文件本身;
-p連同文件的屬性一起復制過去,而非使用默認屬性 備份常用
-r遞歸持續複製,用於目錄的複製行為:常用
-s複製成為符號連接檔 symbolic link,亦即 捷徑 文件;
-udestinationsource 舊才升級 destination

cp 命令實戰

bash
# 基本複製
cp source.txt destination.txt

# 複製到目錄
cp file.txt /path/to/directory/

# 遞歸複製目錄
cp -r directory1/ directory2/

# 保留屬性複製
cp -p file.txt backup/

# 交互式複製(覆蓋前詢問)
cp -i file.txt backup/

# 強制覆蓋
cp -f file.txt backup/

# 創建硬鏈接
cp -l file.txt hardlink.txt

# 創建符號鏈接
cp -s file.txt symlink.txt

# 僅當源文件更新時複製
cp -u file.txt backup/

# 備份現有文件
cp --backup=file.txt destination/

批量複製技巧

bash
# 複製多個文件
cp file1.txt file2.txt file3.txt /backup/

# 使用通配符
cp *.txt /backup/
cp file?.txt /backup/

# 排除某些文件
rsync -av --exclude='*.log' source/ destination/

# 保持目錄結構
cp --parents dir/subdir/file.txt /backup/

移動文件

mv 可以移動文件與目錄,或修改名稱。

bash
mv \[-fiu\] source destination
-fforce 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;
-i若目標文件 destination 已經存在時,就會詢問是否覆蓋;
-u若目標文件已經存在,且 source 比較新,才會升級 update

mv 命令詳解

bash
# 重命名文件
mv old_name.txt new_name.txt

# 移動文件到目錄
mv file.txt /path/to/directory/

# 移動並重命名
mv file.txt /path/to/new_name.txt

# 移動目錄
mv dir1/ dir2/

# 交互式移動
mv -i file.txt backup/

# 強制移動
mv -f file.txt backup/

# 僅當源文件更新時移動
mv -u file.txt backup/

# 批量移動
mv *.txt documents/
mv file{1,2,3}.txt backup/

批量重命名技巧

bash
# 使用 rename 命令
rename 's/\.txt$/.md/' *.txt

# 批量添加前綴
for file in *.txt; do mv "$file" "backup_$file"; done

# 批量添加後綴
for file in *.txt; do mv "$file" "${file%.txt}_old.txt"; done

# 按序號重命名
i=1; for file in *.jpg; do mv "$file" "photo_$(printf '%03d' $i).jpg"; ((i++)); done

刪除文件

rm 可以移除文件或目錄

bash
rm \[-fir\] 文件或目錄
-f就是 force 的意思,忽略不存在的文件,不會出現警告信息。
-i互動模式,在刪除前會詢問使用者是否動作
-r遞歸刪除,最常用在目錄的刪除,此操作危險

rm 命令安全使用

bash
# 刪除單個文件
rm file.txt

# 刪除多個文件
rm file1.txt file2.txt file3.txt

# 交互式刪除(每個文件都詢問)
rm -i file.txt

# 強制刪除(不詢問)
rm -f file.txt

# 遞歸刪除目錄
rm -r directory/

# 強制遞歸刪除(危險!)
rm -rf directory/

# 刪除空目錄
rmdir empty_directory/

# 刪除特定類型的文件
find . -name "*.tmp" -delete

⚠️ 安全刪除最佳實踐

bash
# 1. 先確認要刪除的文件
ls -la *.tmp

# 2. 使用交互式模式
rm -i *.tmp

# 3. 或者先移動到臨時位置
mkdir -p /tmp/trash_$(date +%s)
mv *.tmp /tmp/trash_*/

# 4. 使用 trash-cli(更安全)
trash-put file.txt
trash-list          # 查看回收站
trash-restore       # 恢復文件
trash-empty         # 清空回收站

防止誤刪的保護措施

bash
# 1. 設置別名
echo "alias rm='rm -i'" >> ~/.bashrc
source ~/.bashrc

# 2. 使用 safe-rm
sudo apt install safe-rm
# 配置黑名單
echo "/etc" >> /etc/safe-rm.conf

# 3. 創建刪除確認函數
safe_rm() {
  read -p "Are you sure you want to delete $@? (y/N) " confirm
  if [[ $confirm == [yY] ]]; then
    command rm "$@"
  fi
}
alias rm=safe_rm

高級文件操作技巧

1. 文件查找與管理

bash
# 查找大文件
find / -type f -size +100M 2>/dev/null

# 查找最近修改的文件
find /home -type f -mtime -1

# 查找重複文件
fdupes -r /path/to/directory

# 清理臨時文件
find /tmp -type f -atime +7 -delete

2. 文件比較

bash
# 比較兩個文件
diff file1.txt file2.txt
diff -u file1.txt file2.txt  # 統一格式

# 圖形化比較
meld file1.txt file2.txt

# 比較目錄
diff -r dir1/ dir2/

3. 文件統計

bash
# 統計行數、單詞數、字節數
wc file.txt
wc -l file.txt  # 行數
wc -w file.txt  # 單詞數
wc -c file.txt  # 字節數

# 統計目錄大小
du -sh directory/
du -ah directory/ | sort -rh | head -10

4. 文件監控

bash
# 監控文件變化
inotifywait -m /path/to/dir -e modify -e create -e delete

# 實時監控日誌
tail -f /var/log/syslog | grep "error"

# 使用 watch 命令
watch -n 1 'ls -la /path/to/dir'

常見問題排查

問題 1:磁盤空間不足

bash
# 檢查磁盤使用情況
df -h

# 查找大文件
du -ah / | sort -rh | head -20

# 清理包管理器緩存
sudo apt clean        # Debian/Ubuntu
sudo yum clean all    # CentOS/RHEL

# 清理日誌文件
sudo journalctl --vacuum-time=7d

問題 2:權限不足

bash
# 錯誤:Permission denied

# 檢查權限
ls -l file.txt

# 使用 sudo
sudo rm protected_file.txt

# 或更改所有權
sudo chown $USER file.txt
rm file.txt

問題 3:文件被佔用

bash
# 錯誤:Device or resource busy

# 查找佔用文件的進程
lsof file.txt
fuser file.txt

# 終止進程後刪除
kill PID
rm file.txt

# 強制卸載
umount -l /mount/point

問題 4:文件名包含特殊字符

bash
# 刪除文件名帶空格的文件
rm "file with spaces.txt"
rm file\ with\ spaces.txt

# 刪除文件名以 - 開頭的文件
rm -- -filename.txt
rm ./-filename.txt

# 使用 inode 刪除
ls -i
find . -inum 12345 -delete

總結

掌握 Linux 文件操作是系統管理的基礎:

  1. 查看文件:cat、less、more、head、tail
  2. 創建文件:touch、echo、重定向
  3. 複製文件:cp 及其各種選項
  4. 移動重命名:mv 的多功能應用
  5. 刪除文件:rm 的安全使用
  6. 高級技巧:批量操作、文件查找、監控

關鍵命令速查:

bash
cat -n file.txt           # 查看帶行號
cp -r dir1/ dir2/         # 遞歸複製
mv old.txt new.txt        # 重命名
rm -rf directory/         # 強制刪除(謹慎!)
tail -f log.txt           # 實時監控日誌

下一步學習:

熟練運用這些命令,讓你的文件管理更高效!📁

最後更新於: