Skip to content

文件基本操作

概述

本章介绍 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.txt

mkdir - 创建目录

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.txt

less - 分页查看

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.txt

tail - 显示结尾

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 +0800

file - 文件类型

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 executable

wc - 统计

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 *.txt

du - 磁盘使用

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指定文件名
-zgzip 压缩
-jbzip2 压缩
-Jxz 压缩
-C解压到指定目录

gzip / gunzip

bash
# 压缩文件(原文件会被删除)
$ gzip file.txt
# 产生 file.txt.gz

# 保留原文件
$ gzip -k file.txt

# 解压
$ gunzip file.txt.gz
$ gzip -d file.txt.gz

zip / 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 文件操作的核心命令:

  • 创建touchmkdir
  • 复制cp
  • 移动/重命名mv
  • 删除rmrmdir
  • 查看catlessheadtail
  • 信息statfilewcdu
  • 链接ln
  • 目录lstree
  • 压缩targzipzip

掌握这些命令是使用 Linux 的基础。在日常使用中多加练习,它们很快就会成为你的得力工具。


上一章:文件系统结构

下一章:文件权限