文件基本操作
概述
本章介绍 Linux 中最常用的文件和目录操作命令,包括创建、复制、移动、删除、查看等操作。
创建文件和目录
touch - 创建空文件
bash
# 创建单个文件
$ touch file.txt
# 创建多个文件
$ touch file1.txt file2.txt file3.txt
# 使用大括号展开
$ touch file{1..5}.txt
# 创建 file1.txt, file2.txt, file3.txt, file4.txt, file5.txt
# 更新已存在文件的时间戳
$ touch existing_file.txtmkdir - 创建目录
bash
# 创建单个目录
$ mkdir mydir
# 创建多个目录
$ mkdir dir1 dir2 dir3
# 递归创建目录(包含父目录)
$ mkdir -p parent/child/grandchild
# 创建目录并设置权限
$ mkdir -m 755 mydir复制文件和目录
cp - 复制
bash
# 复制文件
$ cp source.txt dest.txt
# 复制到目录
$ cp file.txt /path/to/directory/
# 复制多个文件到目录
$ cp file1.txt file2.txt /path/to/directory/
# 复制目录(需要 -r 选项)
$ cp -r source_dir/ dest_dir/
# 常用选项
$ cp -i file.txt dest/ # 覆盖前提示
$ cp -v file.txt dest/ # 显示详细信息
$ cp -u file.txt dest/ # 仅当源文件较新时复制
$ cp -p file.txt dest/ # 保留文件属性(权限、时间等)
$ cp -a source/ dest/ # 归档模式,保留所有属性常用选项说明
| 选项 | 说明 |
|---|---|
-r, -R | 递归复制目录 |
-i | 覆盖前询问 |
-v | 显示详细过程 |
-u | 仅复制较新的文件 |
-p | 保留文件属性 |
-a | 归档模式(等同于 -dR --preserve=all) |
-f | 强制覆盖 |
示例场景
bash
# 备份文件
$ cp config.txt config.txt.bak
# 复制目录及其所有内容
$ cp -r project/ project_backup/
# 复制时保留所有属性
$ cp -a /var/www/html/ /backup/www/
# 只复制新文件或修改过的文件
$ cp -u *.txt /backup/移动和重命名
mv - 移动/重命名
bash
# 重命名文件
$ mv oldname.txt newname.txt
# 移动文件到目录
$ mv file.txt /path/to/directory/
# 移动多个文件
$ mv file1.txt file2.txt /path/to/directory/
# 移动并重命名
$ mv file.txt /path/to/directory/newname.txt
# 移动目录
$ mv source_dir/ /path/to/destination/
# 常用选项
$ mv -i file.txt dest/ # 覆盖前提示
$ mv -v file.txt dest/ # 显示详细信息
$ mv -u file.txt dest/ # 仅当源文件较新时移动
$ mv -f file.txt dest/ # 强制移动常用选项说明
| 选项 | 说明 |
|---|---|
-i | 覆盖前询问 |
-v | 显示详细过程 |
-u | 仅移动较新的文件 |
-f | 强制覆盖 |
-n | 不覆盖已存在的文件 |
批量重命名
bash
# 使用 rename 命令(需要安装)
# Debian/Ubuntu
$ sudo apt install rename
# 将所有 .txt 改为 .md
$ rename 's/\.txt$/.md/' *.txt
# 将文件名转为小写
$ rename 'y/A-Z/a-z/' *
# 添加前缀
$ rename 's/^/prefix_/' *.txt删除文件和目录
rm - 删除
bash
# 删除文件
$ rm file.txt
# 删除多个文件
$ rm file1.txt file2.txt
# 使用通配符删除
$ rm *.txt
# 删除目录(需要 -r 选项)
$ rm -r directory/
# 强制删除(不提示)
$ rm -f file.txt
# 删除目录及其内容
$ rm -rf directory/
# 删除前提示
$ rm -i file.txt
# 显示删除过程
$ rm -v file.txt常用选项说明
| 选项 | 说明 |
|---|---|
-r, -R | 递归删除目录 |
-f | 强制删除,不提示 |
-i | 删除前询问 |
-v | 显示详细过程 |
警告:
rm -rf是危险命令!误操作可能导致数据丢失。建议:
- 删除前使用
ls确认要删除的内容- 使用
-i选项确认- 考虑使用
trash-cli代替直接删除
rmdir - 删除空目录
bash
# 删除空目录
$ rmdir empty_dir/
# 递归删除空父目录
$ rmdir -p parent/child/grandchild/安全删除:trash-cli
bash
# 安装
$ sudo apt install trash-cli
# 将文件移到回收站
$ trash-put file.txt
# 列出回收站内容
$ trash-list
# 恢复文件
$ trash-restore
# 清空回收站
$ trash-empty查看文件内容
cat - 显示全部内容
bash
# 显示文件内容
$ cat file.txt
# 显示行号
$ cat -n file.txt
# 显示非打印字符
$ cat -A file.txt
# 合并多个文件
$ cat file1.txt file2.txt > combined.txtless - 分页查看
bash
$ less file.txt导航键
| 按键 | 功能 |
|---|---|
空格 / f | 下一页 |
b | 上一页 |
j / ↓ | 下一行 |
k / ↑ | 上一行 |
g | 跳到开头 |
G | 跳到结尾 |
/pattern | 向下搜索 |
?pattern | 向上搜索 |
n | 下一个搜索结果 |
N | 上一个搜索结果 |
q | 退出 |
more - 简单分页
bash
$ more file.txt
# 按空格翻页,按 q 退出head - 显示开头
bash
# 显示前 10 行(默认)
$ head file.txt
# 显示前 20 行
$ head -n 20 file.txt
$ head -20 file.txt
# 显示前 100 字节
$ head -c 100 file.txttail - 显示结尾
bash
# 显示最后 10 行(默认)
$ tail file.txt
# 显示最后 20 行
$ tail -n 20 file.txt
$ tail -20 file.txt
# 实时追踪文件更新
$ tail -f /var/log/syslog
# 从第 100 行开始显示
$ tail -n +100 file.txt文件信息
stat - 详细文件信息
bash
$ stat file.txt
File: file.txt
Size: 1234 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 12345678 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ maxwell) Gid: ( 1000/ maxwell)
Access: 2025-01-01 10:00:00.000000000 +0800
Modify: 2025-01-01 09:00:00.000000000 +0800
Change: 2025-01-01 09:00:00.000000000 +0800
Birth: 2025-01-01 08:00:00.000000000 +0800file - 文件类型
bash
$ file document.pdf
document.pdf: PDF document, version 1.4
$ file image.png
image.png: PNG image data, 1920 x 1080, 8-bit/color RGBA
$ file script.sh
script.sh: Bourne-Again shell script, ASCII text executablewc - 统计
bash
# 统计行数、单词数、字节数
$ wc file.txt
100 500 3000 file.txt
# 100 行,500 单词,3000 字节
# 只显示行数
$ wc -l file.txt
100 file.txt
# 只显示单词数
$ wc -w file.txt
# 只显示字节数
$ wc -c file.txt
# 统计字符数
$ wc -m file.txt
# 统计多个文件
$ wc -l *.txtdu - 磁盘使用
bash
# 目录大小
$ du -h directory/
4.0K directory/subdir
8.0K directory/
# 只显示总计
$ du -sh directory/
8.0K directory/
# 显示每个文件的大小
$ du -ah directory/
# 按大小排序
$ du -h directory/ | sort -h链接
硬链接
硬链接是指向同一个 inode 的多个文件名。
bash
# 创建硬链接
$ ln original.txt hardlink.txt
# 验证(inode 号相同)
$ ls -li original.txt hardlink.txt
12345 -rw-r--r-- 2 user user 100 Jan 1 10:00 hardlink.txt
12345 -rw-r--r-- 2 user user 100 Jan 1 10:00 original.txt特点
- 删除原文件不影响硬链接
- 不能跨文件系统
- 不能链接目录
符号链接(软链接)
符号链接是指向另一个文件路径的特殊文件。
bash
# 创建符号链接
$ ln -s /path/to/original.txt symlink.txt
# 查看链接指向
$ ls -l symlink.txt
lrwxrwxrwx 1 user user 20 Jan 1 10:00 symlink.txt -> /path/to/original.txt
# 读取链接指向
$ readlink symlink.txt
/path/to/original.txt
# 读取绝对路径
$ readlink -f symlink.txt特点
- 可以跨文件系统
- 可以链接目录
- 原文件删除后链接失效(断链)
链接对比
| 特性 | 硬链接 | 符号链接 |
|---|---|---|
| 跨文件系统 | 不能 | 能 |
| 链接目录 | 不能 | 能 |
| 原文件删除 | 仍可访问 | 链接失效 |
| inode | 相同 | 不同 |
| 文件大小 | 与原文件相同 | 存储路径大小 |
目录操作
ls - 列出目录内容
bash
# 基本列表
$ ls
# 详细信息
$ ls -l
# 显示隐藏文件
$ ls -a
# 人类可读的大小
$ ls -lh
# 按时间排序
$ ls -lt
# 按大小排序
$ ls -lS
# 递归显示
$ ls -R
# 显示目录本身
$ ls -d */
# 常用组合
$ ls -lah理解 ls -l 输出
-rw-r--r-- 1 maxwell maxwell 1234 Jan 1 10:00 file.txt
│├──┼──┼──┤ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ 文件名
│ │ │ │ │ │ │ │ └─ 修改时间
│ │ │ │ │ │ │ └─ 文件大小(字节)
│ │ │ │ │ │ └─ 所属组
│ │ │ │ │ └─ 所有者
│ │ │ │ └─ 链接数
│ │ │ └─ 其他用户权限
│ │ └─ 组权限
│ └─ 所有者权限
└─ 文件类型tree - 树形显示
bash
# 安装
$ sudo apt install tree
# 基本使用
$ tree
.
├── dir1
│ ├── file1.txt
│ └── file2.txt
└── dir2
└── file3.txt
# 只显示目录
$ tree -d
# 限制深度
$ tree -L 2
# 显示隐藏文件
$ tree -a
# 显示文件大小
$ tree -h压缩和归档
tar - 归档
bash
# 创建归档
$ tar -cvf archive.tar files/
# c: 创建, v: 详细, f: 文件名
# 解压归档
$ tar -xvf archive.tar
# 创建 gzip 压缩归档
$ tar -czvf archive.tar.gz files/
# 解压 gzip 归档
$ tar -xzvf archive.tar.gz
# 创建 bzip2 压缩归档
$ tar -cjvf archive.tar.bz2 files/
# 创建 xz 压缩归档
$ tar -cJvf archive.tar.xz files/
# 解压到指定目录
$ tar -xzvf archive.tar.gz -C /path/to/dest/
# 查看归档内容
$ tar -tvf archive.tar选项说明
| 选项 | 说明 |
|---|---|
-c | 创建归档 |
-x | 解压归档 |
-t | 列出内容 |
-v | 详细输出 |
-f | 指定文件名 |
-z | gzip 压缩 |
-j | bzip2 压缩 |
-J | xz 压缩 |
-C | 解压到指定目录 |
gzip / gunzip
bash
# 压缩文件(原文件会被删除)
$ gzip file.txt
# 产生 file.txt.gz
# 保留原文件
$ gzip -k file.txt
# 解压
$ gunzip file.txt.gz
$ gzip -d file.txt.gzzip / unzip
bash
# 压缩文件
$ zip archive.zip file1.txt file2.txt
# 压缩目录
$ zip -r archive.zip directory/
# 解压
$ unzip archive.zip
# 解压到指定目录
$ unzip archive.zip -d /path/to/dest/
# 查看内容
$ unzip -l archive.zip实用技巧
安全操作别名
bash
# 添加到 ~/.bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'批量操作
bash
# 创建多个目录
$ mkdir -p project/{src,bin,doc,test}
# 复制特定类型文件
$ cp *.txt backup/
# 删除特定类型文件
$ rm -f *.tmp
# 移动多个文件
$ mv file{1..5}.txt dest/查找大文件
bash
# 查找大于 100MB 的文件
$ find . -size +100M -ls
# 按大小排序目录
$ du -h --max-depth=1 | sort -hr小结
本章介绍了 Linux 文件操作的核心命令:
- 创建:
touch、mkdir - 复制:
cp - 移动/重命名:
mv - 删除:
rm、rmdir - 查看:
cat、less、head、tail - 信息:
stat、file、wc、du - 链接:
ln - 目录:
ls、tree - 压缩:
tar、gzip、zip
掌握这些命令是使用 Linux 的基础。在日常使用中多加练习,它们很快就会成为你的得力工具。
上一章:文件系统结构
下一章:文件权限