文件操作 #
一、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 文件操作的核心命令,包括创建、复制、移动、删除和查找文件。
关键要点:
touch创建文件,cp复制文件mv可以移动和重命名文件rm删除文件要谨慎,推荐使用-i选项find是最强大的查找工具- 软链接和硬链接有不同用途
下一章预告: 目录操作 - 学习目录的创建、删除、切换和管理命令。
最后更新:2026-03-27