跳转到内容

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           # 实时监控日志

下一步学习:

熟练运用这些命令,让你的文件管理更高效!📁