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 # 实时监控日志下一步学习:
熟练运用这些命令,让你的文件管理更高效!📁