文件操作 #

一、Linux 文件系统概述 #

1.1 文件类型 #

Linux 中一切皆文件,包括:

类型 标识 说明
普通文件 - 文本、二进制、图片等
目录文件 d 文件夹
链接文件 l 软链接/硬链接
块设备 b 硬盘、U盘等
字符设备 c 键盘、鼠标等
管道文件 p 命名管道
套接字 s 网络通信
bash
# 查看文件类型
ls -l
ls -l /dev/sda
ls -l /dev/null

1.2 文件命名规则 #

  • 区分大小写
  • 避免使用特殊字符:/ \ : * ? " < > |
  • . 开头的文件是隐藏文件
  • 文件名最长 255 个字符

二、创建文件 #

2.1 touch - 创建空文件 #

bash
# 创建单个文件
touch file.txt

# 创建多个文件
touch file1.txt file2.txt file3.txt

# 批量创建
touch file{1..10}.txt

# 更新文件时间戳
touch -a file.txt          # 更新访问时间
touch -m file.txt          # 更新修改时间
touch -t 202401011200 file.txt  # 设置指定时间

2.2 使用重定向创建 #

bash
# 创建空文件
> file.txt

# 创建带内容的文件
echo "Hello World" > file.txt

# 使用 cat 创建多行文件
cat > file.txt << EOF
Line 1
Line 2
Line 3
EOF

2.3 使用编辑器创建 #

bash
# 使用 nano
nano file.txt

# 使用 vim
vim file.txt

# 使用 vi
vi file.txt

三、复制文件 #

3.1 cp - 复制命令 #

bash
# 基本语法
cp 源文件 目标文件

# 复制文件
cp file.txt file_backup.txt

# 复制到目录
cp file.txt /backup/

# 复制多个文件到目录
cp file1.txt file2.txt /backup/

# 复制目录(递归)
cp -r dir1/ dir2/

# 显示复制过程
cp -v file.txt /backup/

# 交互式复制(覆盖前询问)
cp -i file.txt /backup/

# 保持文件属性
cp -p file.txt /backup/

# 强制覆盖
cp -f file.txt /backup/

# 只复制更新的文件
cp -u file.txt /backup/

3.2 常用选项组合 #

bash
# 复制目录并保持属性
cp -rp source_dir/ dest_dir/

# 备份复制
cp -av file.txt file.txt.bak

# 交互式复制目录
cp -ri dir1/ dir2/

3.3 复制示例 #

bash
# 备份配置文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

# 复制所有 .txt 文件
cp *.txt /backup/

# 复制并重命名
cp file.txt /backup/newfile.txt

# 复制整个网站目录
cp -r /var/www/html/ /backup/www/

四、移动文件 #

4.1 mv - 移动/重命名 #

bash
# 基本语法
mv 源文件 目标位置

# 重命名文件
mv oldname.txt newname.txt

# 移动文件到目录
mv file.txt /home/user/

# 移动多个文件
mv file1.txt file2.txt /home/user/

# 移动目录
mv dir1/ /home/user/

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

# 强制覆盖
mv -f file.txt /backup/

# 不覆盖已存在文件
mv -n file.txt /backup/

# 显示移动过程
mv -v file.txt /backup/

4.2 批量重命名 #

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

# 批量添加前缀
rename 's/^/prefix_/' *.txt

# 批量添加后缀
rename 's/$/_backup/' *.txt

# 转换大小写
rename 'y/a-z/A-Z/' *.txt

4.3 移动示例 #

bash
# 移动日志文件
mv *.log /var/log/archive/

# 重命名目录
mv old_dir/ new_dir/

# 移动并保持时间戳
mv -u file.txt /backup/

五、删除文件 #

5.1 rm - 删除命令 #

bash
# 删除文件
rm file.txt

# 删除多个文件
rm file1.txt file2.txt

# 删除目录(递归)
rm -r dir/

# 强制删除
rm -f file.txt

# 交互式删除
rm -i file.txt

# 显示删除过程
rm -v file.txt

# 删除空目录
rmdir empty_dir/

5.2 危险操作警告 #

bash
# 危险!强制递归删除(慎用)
rm -rf /path/to/dir

# 更安全的删除方式
rm -ri dir/

# 使用 trash-cli 代替 rm
sudo apt install trash-cli
trash file.txt
trash-restore

5.3 删除示例 #

bash
# 删除所有 .tmp 文件
rm *.tmp

# 删除 7 天前的日志
find /var/log -name "*.log" -mtime +7 -delete

# 删除空目录
find . -type d -empty -delete

# 清空文件内容(保留文件)
> file.txt

六、查找文件 #

6.1 find - 强大的查找工具 #

bash
# 基本语法
find 路径 条件 操作

# 按名称查找
find /home -name "*.txt"

# 不区分大小写
find /home -iname "*.TXT"

# 按类型查找
find /home -type f        # 文件
find /home -type d        # 目录
find /home -type l        # 链接

# 按大小查找
find /home -size +100M    # 大于 100M
find /home -size -10k     # 小于 10k
find /home -size 50M      # 等于 50M

# 按时间查找
find /home -mtime -7      # 7 天内修改
find /home -mtime +30     # 30 天前修改
find /home -atime -1      # 1 天内访问
find /home -ctime -1      # 1 天内状态改变

# 按用户查找
find /home -user root
find /home -group users

# 按权限查找
find /home -perm 755
find /home -perm -u+x     # 用户可执行

# 组合条件
find /home -name "*.txt" -size +1M
find /home \( -name "*.txt" -o -name "*.md" \)

# 执行操作
find /home -name "*.tmp" -delete
find /home -name "*.log" -exec gzip {} \;
find /home -name "*.txt" -exec cp {} /backup/ \;

6.2 locate - 快速查找 #

bash
# 更新数据库
sudo updatedb

# 查找文件
locate file.txt

# 忽略大小写
locate -i FILE.txt

# 限制结果数量
locate -n 10 file.txt

# 统计数量
locate -c file.txt

6.3 whereis - 查找命令 #

bash
# 查找命令位置
whereis ls

# 只查找二进制文件
whereis -b ls

# 只查找手册页
whereis -m ls

6.4 which - 查找可执行文件 #

bash
# 查找命令位置
which python
which java

# 查找所有匹配
which -a python

七、文件链接 #

7.1 软链接(符号链接) #

bash
# 创建软链接
ln -s /path/to/file link_name

# 创建目录软链接
ln -s /path/to/dir link_dir

# 示例
ln -s /var/www/html /home/user/web
ls -l /home/user/web

特点:

  • 类似 Windows 快捷方式
  • 可以跨文件系统
  • 删除原文件,链接失效
  • 可以链接目录

7.2 硬链接 #

bash
# 创建硬链接
ln file.txt hardlink.txt

# 查看链接数
ls -l file.txt

特点:

  • 指向相同的 inode
  • 不能跨文件系统
  • 删除原文件,链接仍有效
  • 不能链接目录

7.3 链接对比 #

特性 软链接 硬链接
跨文件系统 支持 不支持
链接目录 支持 不支持
inode 不同 相同
原文件删除 链接失效 链接有效

八、文件属性 #

8.1 stat - 查看文件详情 #

bash
# 查看文件详细信息
stat file.txt

# 查看文件系统信息
stat -f /home

# 简洁输出
stat -c "%s %n" file.txt

8.2 file - 查看文件类型 #

bash
# 查看文件类型
file file.txt
file image.png
file archive.tar.gz

# 查看 MIME 类型
file -i file.txt

# 查看压缩文件内容
file -z archive.tar.gz

九、实践练习 #

9.1 练习一:创建和复制 #

bash
# 1. 创建测试目录
mkdir -p ~/test/{dir1,dir2,dir3}

# 2. 创建多个文件
touch ~/test/file{1..5}.txt

# 3. 复制文件到不同目录
cp ~/test/file*.txt ~/test/dir1/

# 4. 复制整个目录
cp -r ~/test/dir1 ~/test/dir2/backup

9.2 练习二:移动和重命名 #

bash
# 1. 重命名文件
mv ~/test/file1.txt ~/test/renamed.txt

# 2. 移动文件
mv ~/test/file2.txt ~/test/dir2/

# 3. 批量移动
mv ~/test/dir1/file*.txt ~/test/dir3/

# 4. 批量重命名
cd ~/test/dir2
rename 's/file/test/' *.txt

9.3 练习三:查找和删除 #

bash
# 1. 查找所有 .txt 文件
find ~/test -name "*.txt"

# 2. 查找大于 1M 的文件
find ~/test -size +1M

# 3. 删除所有 .txt 文件
find ~/test -name "*.txt" -delete

# 4. 清理测试目录
rm -rf ~/test

十、小结 #

本章学习了 Linux 文件操作的核心命令,包括创建、复制、移动、删除和查找文件。

关键要点:

  1. touch 创建文件,cp 复制文件
  2. mv 可以移动和重命名文件
  3. rm 删除文件要谨慎,推荐使用 -i 选项
  4. find 是最强大的查找工具
  5. 软链接和硬链接有不同用途

下一章预告: 目录操作 - 学习目录的创建、删除、切换和管理命令。

最后更新:2026-03-27