Linux 文件操作完全指南 | 創建、複製、移動、刪除文件命令詳解
在 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+Dmore 和 less 對比
| 特性 | more | less |
|---|---|---|
| 向前翻頁 | ❌ | ✅ |
| 搜索功能 | 有限 | 強大 |
| 啟動速度 | 快(加載全部) | 快(按需加載) |
| 推薦場景 | 小文件 | 大文件、日誌 |
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 的意思,若目標文件已經存在且無法開啟,則移除後再嘗試一次; |
-i | 若 clear 動作的進行 |
-l | 進行硬式連結 hard link 的連結檔創建,而非複製文件本身; |
-p | 連同文件的屬性一起復制過去,而非使用默認屬性 備份常用 |
-r | 遞歸持續複製,用於目錄的複製行為:常用 |
-s | 複製成為符號連接檔 symbolic link,亦即 捷徑 文件; |
-u | 若 destination 比 source 舊才升級 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-f | force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋; |
|---|---|
-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 -delete2. 文件比較
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 -104. 文件監控
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 文件操作是系統管理的基礎:
- 查看文件:cat、less、more、head、tail
- 創建文件:touch、echo、重定向
- 複製文件:cp 及其各種選項
- 移動重命名:mv 的多功能應用
- 刪除文件:rm 的安全使用
- 高級技巧:批量操作、文件查找、監控
關鍵命令速查:
bash
cat -n file.txt # 查看帶行號
cp -r dir1/ dir2/ # 遞歸複製
mv old.txt new.txt # 重命名
rm -rf directory/ # 強制刪除(謹慎!)
tail -f log.txt # 實時監控日誌下一步學習:
熟練運用這些命令,讓你的文件管理更高效!📁