1.4 基本文件操作命令

预计阅读时间:19 分钟

📖 目录

学习目标

学完本章后,你将能够:

  • 理解 Linux "一切皆文件"的设计哲学和 FHS 目录结构标准
  • 熟练使用 lscdpwd 浏览文件系统
  • mkdirtouch 创建文件和目录,用 rmrmdir 删除
  • cpmv 复制和移动/重命名文件
  • 使用通配符(*?[]{})批量操作文件
  • 区分硬链接和符号链接的原理与用途

核心知识

  • FHS(Filesystem Hierarchy Standard)——Linux 文件系统目录结构标准,定义了 //home/etc/var 等核心目录的用途
  • 绝对路径 vs 相对路径——绝对路径以 / 开头(如 /home/alice/docs),相对路径相对于当前目录(如 docs../docs
  • 当前目录(.)和父目录(..)——每个目录中都有这两个特殊条目。. 指向自己,.. 指向上一级
  • 通配符(Globbing)——Shell 在运行命令前对文件名模式进行展开,* 匹配任意字符,? 匹配单个字符
  • 链接(Link)——硬链接(Hard Link)是文件的另一个名称,共享同一个 inode;符号链接(Symbolic Link / Symlink)是指向另一个文件路径的"快捷方式"
  • inode——文件系统元数据结构,存储文件的权限、所有者、大小、时间戳等信息,不包含文件名

知识关联

原理讲解

1. "一切皆文件"——Linux 最根本的抽象哲学

在 Linux 中,"文件"不仅仅是你双击打开的文档。系统将几乎所有东西都抽象为文件接口:

类型实际是什么文件路径例子
普通文件文本、图片、二进制程序等数据/home/alice/report.txt
目录包含其他文件名的"容器"/home/alice/
设备文件块设备(磁盘)或字符设备(键盘、串口)/dev/sda/dev/tty1
进程信息运行中进程的状态和数据(虚拟文件系统)/proc/cpuinfo/proc/1234/
网络套接字网络通信端点通过 ss -l 查看,不直接是磁盘文件
管道进程间通信通道| 在命令间建立

这意味着你可以用读写普通文件的方式——open()read()write()——来操作打印机、磁盘、网络连接等多达数百种硬件设备。Linux 内核在底层完成了"不同硬件 → 统一文件接口"的转换。

2. FHS——Linux 的目录结构标准

Linux 遵循 Filesystem Hierarchy Standard(FHS),规定了主要目录的位置和用途。以下是必须了解的核心目录:

/             根目录。Linux 文件系统的起点,所有路径都从这里开始
├── bin/       → /usr/bin (最近发行版的符号链接)
├── boot/      GRUB 和 Linux 内核文件(vmlinuz、initrd)所在地
├── dev/       设备文件。包含磁盘(sda)、终端(tty)、随机数生成器(random)等
├── etc/       系统配置文件。纯文本,可直接用编辑器修改(如 apt sources.list)
├── home/      用户家目录。每个用户一个子目录(如 /home/alice)
├── proc/      进程文件系统(虚拟)。内核和进程信息的实时窗口(CPU、内存、网络)
├── root/      root 用户的家目录(不是 /home/root!)
├── usr/       用户软件资源。第二层"根",包含 bin/、lib/、share/ 等
│   ├── bin/   绝大多数用户命令(ls、cp、cat、python3)
│   ├── lib/   系统库文件(.so 动态链接库)
│   └── local/ 用户手动编译安装的软件
├── var/       可变数据。日志(log/)、缓存(cache/)、数据库(lib/)
├── tmp/       临时文件,任何人可写。重启后可能被清理
├── mnt/       临时挂载点(手动挂载 U 盘等)
└── media/     可移动介质自动挂载点(光盘、U盘)
💡 FHS 不强迫 FHS 是"标准"而非"法律"——大多数发行版遵循它,但可以自定义。不过理解和遵循 FHS 是专业 Linux 管理员的基本素养。

为什么 Linux 采用这样的目录结构?——FHS 背后的设计哲学

FHS 的目录结构不是随意堆砌,而是基于 Unix 的"文件系统层次化"哲学,核心原则是按用途分类、按变化频率分层、按共享需求隔离

  • /bin 和 /usr/bin 的历史演变:早期 Unix 中,/bin 存放启动时必需的基本命令(ls、cp),/usr/bin 存放用户级命令。随着磁盘空间增长,/bin 逐渐变成了 /usr/bin 的符号链接。现代 systemd 发行版(如 Fedora 30+)已经合并了这两个目录。这个演变体现了"简化 vs 兼容"的工程权衡。
  • /etc 放配置、/var 放可变数据:这种分离的关键价值在于备份与恢复的便利性。你可以单独备份 /etc(系统配置)和 /home(用户数据),而无需备份整个系统。/var 被单独隔离是因为日志和缓存文件频繁变化,如果和系统文件放在同一个分区,日志暴增可能撑满磁盘导致系统崩溃——独立分区可以限制这种风险。
  • /proc 是虚拟文件系统:它不在磁盘上,而是内核在内存中动态生成的。通过读取 /proc/cpuinfo、/proc/meminfo,用户空间程序可以获取内核和硬件信息,无需特殊的系统调用。这是"一切皆文件"哲学的极致体现。
  • /tmp 的 Sticky Bit:/tmp 目录设置了 Sticky Bit(权限末尾的 t),这意味着任何用户都可以在其中创建文件,但只有文件的所有者才能删除自己的文件。这解决了公共临时目录中的安全问题——没有 Sticky Bit,恶意用户可以删除其他人的临时文件。

3. 绝对路径与相对路径

Linux 中有两种定位文件的方式:

  • 绝对路径(Absolute Path):从根目录 / 开始的完整路径。例如 /home/alice/Documents/report.txt。无论你当前在哪,绝对路径都指向同一个文件。
  • 相对路径(Relative Path):从当前目录开始的路径。使用 . 表示当前目录,.. 表示上一级目录。例如 Documents/report.txt(如果当前在 /home/alice)。
# 假设当前在 /home/alice

cd Documents          # 相对路径:进入 /home/alice/Documents
# 输出: (无输出——cd 成功时默认静默)
cd /var/log           # 绝对路径:进入 /var/log(无论当前在哪)
# 输出: (无输出——cd 成功时默认静默)

# 特殊路径
cd ~                  # 回自己的家目录
# 输出: (无输出)
cd ~otheruser         # 去 otheruser 的家目录(如果有权限)
# 输出: (无输出)
cd -                  # 回到上一个工作目录(超实用!)
# 输出: /home/alice
cd ..                 # 上一级
# 输出: (无输出)
cd ../..              # 上两级
# 输出: (无输出)

4. 文件类型——ls -l 的第一列告诉你的

当你运行 ls -l,输出最左侧的10个字符表示文件类型和权限。第一个字符表示文件类型:

-rwxr-xr-x  1 alice alice  12345 Jul 30 10:00 script.sh
^
└── 第一个字符:文件类型
字符文件类型例子
-普通文件文本、图片、二进制程序
d目录/home/etc
l符号链接/usr/bin 在很多发行版中是符号链接
b块设备磁盘 /dev/sda
c字符设备终端 /dev/tty1
sUnix 套接字进程间通信
p命名管道进程间通信
# 实操:查看文件类型
ls -l /dev/sda          # 块设备
# 输出: brw-rw---- 1 root disk 8, 0 7月  30 14:30 /dev/sda
ls -l /dev/tty          # 字符设备
# 输出: crw-rw-rw- 1 root tty 5, 0 7月  30 14:30 /dev/tty
ls -ld /home            # 目录
# 输出: drwxr-xr-x 4 root root 4096 7月  30 14:30 /home
ls -l /bin              # 可能是符号链接(指向 /usr/bin)
# 输出: lrwxrwxrwx 1 root root 7 7月  30 14:30 /bin -> usr/bin

5. 链接——硬链接与符号链接

Linux 有两种"链接":

硬链接(Hard Link):为同一个文件内容(inode)创建另一个名称。删除一个硬链接不影响其他硬链接,只有当所有硬链接都被删除时文件才被真正删除。硬链接不能跨越文件系统,也不能链接目录。

符号链接(Symbolic Link / Symlink):一个特殊文件,内容是指向另一个文件或目录的路径。类似于 Windows 的"快捷方式"。如果原文件被删除,符号链接会"悬空"(指向一个不存在的路径)。

# 创建硬链接
ln original.txt hardlink.txt
# 输出: (无输出——成功时默认静默)
ls -li *.txt            # -i 显示 inode 号,两个文件 inode 相同
# 输出: 1234567 -rw-r--r-- 2 alice alice 0 7月  30 14:30 hardlink.txt
# 输出: 1234567 -rw-r--r-- 2 alice alice 0 7月  30 14:30 original.txt

# 创建符号链接
ln -s original.txt symlink.txt
# 输出: (无输出——成功时默认静默)
ls -l *.txt             # 符号链接会显示 -> 指向的目标
# 输出: -rw-r--r-- 2 alice alice    0 7月  30 14:30 hardlink.txt
# 输出: -rw-r--r-- 2 alice alice    0 7月  30 14:30 original.txt
# 输出: lrwxrwxrwx 1 alice alice   12 7月  30 14:30 symlink.txt -> original.txt

关键区别

特性硬链接符号链接
共享 inode是(与原文件同一个 inode)否(自身有独立 inode)
跨文件系统
链接目录
原文件删除后仍然可用悬空(broken link)
检查方式ls -li 看 inode 号ls -l 显示 ->
📝 inode 是什么? inode(索引节点)是 Linux 文件系统管理文件元数据的核心结构。每个文件和目录都有一个唯一的 inode,包含:权限(rwx)、所有者、大小、时间戳、数据块指针。但 inode 不包含文件名——文件名存放在目录条目中,目录条目将文件名映射到 inode 号。这就是为什么硬链接可以"多个名字、同一个文件"。

硬链接 vs 软链接——为什么需要两种链接?

两种链接解决的是不同的问题:

  • 硬链接的核心价值是文件去重与可靠性。因为多个硬链接共享同一个 inode,删除其中一个链接不会丢失数据——只有当最后一个链接被删除时,文件才被真正删除。这在备份场景中非常有用:你可以为重要文件创建硬链接,这样即使误删了原文件名,数据仍然通过其他硬链接可达。硬链接的限制(不能跨文件系统、不能链接目录)是由 inode 的设计决定的——inode 中的块指针指向特定分区内的物理块,跨分区意味着不同的块编号体系。
  • 软链接(符号链接)的核心价值是灵活性和兼容性。它本质上是一个包含目标路径的文件,可以指向任何位置——跨文件系统、指向目录、甚至指向不存在的目标。这使得软链接成为"快捷方式"的理想实现:/usr/bin/python3 -> python3.11 就是一个典型的软链接,当 Python 版本升级时,只需修改软链接指向即可,所有调用 python3 的脚本自动使用新版本。

为什么 rm 不会"真正删除"硬链接文件? 因为 rm 实际上只是删除目录条目(文件名到 inode 的映射),并将 inode 的链接计数减 1。当链接计数降为 0 时,文件系统才释放 inode 和对应的数据块。这就是为什么 ls -li 显示的硬链接数大于 1 时,rm 只是减少了引用计数。

示例代码

打开终端,建立你自己的文件系统操作直觉:

# 练习 1:目录浏览
pwd                     # 你在哪?
# 输出: /home/alice
ls -la ~                # 家目录里有什么隐藏文件?
# 输出: 总用量 120
# 输出: drwxr-xr-x 22 alice alice 4096 7月  30 14:30 .
# 输出: drwxr-xr-x  4 root  root   4096 7月  30 14:30 ..
# 输出: -rw-------  1 alice alice  567 7月  30 14:30 .bashrc
# 输出: drwxr-xr-x  3 alice alice 4096 7月  30 14:30 Desktop
# 输出: drwxr-xr-x  2 alice alice 4096 7月  30 14:30 Documents
# 输出: ...
ls -dl /etc             # /etc 本身的属性
# 输出: drwxr-xr-x 148 root root 12288 7月  30 14:30 /etc

# 练习 2:创建目录结构
mkdir -p ~/learn/{docs,images,scripts}
# 输出: (无输出)
ls -R ~/learn           # 查看创建的完整结构
# 输出: /home/alice/learn:
# 输出: docs  images  scripts
# 输出: 
# 输出: /home/alice/learn/docs:
# 输出: 
# 输出: /home/alice/learn/images:
# 输出: 
# 输出: /home/alice/learn/scripts:

# 练习 3:创建文件
touch ~/learn/docs/readme.txt
# 输出: (无输出)
touch ~/learn/docs/notes.txt
# 输出: (无输出)
touch ~/learn/images/photo{1..5}.jpg
# 输出: (无输出)
echo "Hello Linux" > ~/learn/docs/hello.txt
# 输出: (无输出)
ls -la ~/learn/docs/
# 输出: 总用量 16
# 输出: drwxr-xr-x 2 alice alice 4096 7月  30 14:30 .
# 输出: drwxr-xr-x 4 alice alice 4096 7月  30 14:30 ..
# 输出: -rw-r--r-- 1 alice alice   12 7月  30 14:30 hello.txt
# 输出: -rw-r--r-- 1 alice alice    0 7月  30 14:30 notes.txt
# 输出: -rw-r--r-- 1 alice alice    0 7月  30 14:30 readme.txt

# 练习 4:通配符批量操作
ls ~/learn/images/photo*.jpg        # 所有 .jpg
# 输出: /home/alice/learn/images/photo1.jpg
# 输出: /home/alice/learn/images/photo2.jpg
# 输出: /home/alice/learn/images/photo3.jpg
# 输出: /home/alice/learn/images/photo4.jpg
# 输出: /home/alice/learn/images/photo5.jpg
ls ~/learn/images/photo?.jpg        # photo1.jpg - photo9.jpg
# 输出: photo1.jpg  photo2.jpg  photo3.jpg  photo4.jpg  photo5.jpg
ls ~/learn/images/photo[13].jpg     # photo1.jpg 和 photo3.jpg
# 输出: photo1.jpg  photo3.jpg
ls ~/learn/*/*.txt                  # 两层通配
# 输出: /home/alice/learn/docs/hello.txt
# 输出: /home/alice/learn/docs/notes.txt
# 输出: /home/alice/learn/docs/readme.txt

# 练习 5:复制与移动
cp ~/learn/docs/readme.txt ~/learn/docs/readme_copy.txt
# 输出: (无输出)
mv ~/learn/docs/notes.txt ~/learn/scripts/
# 输出: (无输出)
ls -R ~/learn/
# 输出: /home/alice/learn:
# 输出: docs  images  scripts
# 输出: 
# 输出: /home/alice/learn/docs:
# 输出: hello.txt  readme.txt  readme_copy.txt
# 输出: 
# 输出: /home/alice/learn/images:
# 输出: photo1.jpg  photo2.jpg  photo3.jpg  photo4.jpg  photo5.jpg
# 输出: 
# 输出: /home/alice/learn/scripts:
# 输出: notes.txt

# 练习 6:硬链接与符号链接
cd ~/learn
# 输出: (无输出)
echo "original content" > original.txt
# 输出: (无输出)
ln original.txt hard.txt             # 硬链接
# 输出: (无输出)
ln -s original.txt sym.txt            # 符号链接
# 输出: (无输出)
cat hard.txt                         # 同样内容
# 输出: original content
cat sym.txt                          # 同样内容
# 输出: original content
ls -li original.txt hard.txt sym.txt # 看 inode 区别
# 输出: 1234567 -rw-r--r-- 2 alice alice 16 7月  30 14:30 original.txt
# 输出: 1234567 -rw-r--r-- 2 alice alice 16 7月  30 14:30 hard.txt
# 输出: 1234568 lrwxrwxrwx 1 alice alice 12 7月  30 14:30 sym.txt -> original.txt

# 删除原文件后观察差异
rm original.txt
# 输出: (无输出)
cat hard.txt                         # 还能读!
# 输出: original content
cat sym.txt                          # 报错:No such file
# 输出: cat: sym.txt: No such file or directory

# 练习 7:安全删除
rm ~/learn/docs/readme_copy.txt     # 删文件
# 输出: (无输出)
rmdir ~/learn/docs                  # 报错:目录非空
# 输出: rmdir: failed to remove '/home/alice/learn/docs': Directory not empty
rm -r ~/learn/docs                  # 递归删除目录
# 输出: (无输出)
rm -rf ~/learn                      # ⚠️ 全部删除(本练习安全,因为你刚刚才创建)
# 输出: (无输出)

常见错误

错误/误区解决方案
"用 `rm -rf /` 破坏系统"永远不要运行 rm -rf /。现代 Linux 需要加 --no-preserve-root 才能执行此操作,但这不是保险箱——rm -rf .* 在家目录有时也能造成巨大破坏。删除前用 ls 确认目标。
"Linux 没有回收站"命令行删除的文件直接释放磁盘空间,不会进回收站。误删恢复很困难。建议:重要文件用版本控制(git),rm 之前先 ls 确认。
"把 `cp` 的目标路径写反了"cp 源 目标 顺序总是:源在前,目标在后。如果写反了(cp 目标 源),可能会用目标文件覆盖源文件。一个常用技巧:先写目标路径再写源文件容易搞混,始终坚持"从哪来,到哪去"的思维。
"以为路径中的空格无关紧要"cd My Documents 会报错(cd 收到了两个参数)。正确的做法:cd "My Documents"cd My\ Documents。Linux 的路径名可以包含空格,但建议不要在文件名中使用空格——用下划线或连字符替代。
"用 cp -r 复制目录时丢失了权限"如果希望完整保留权限、时间戳、符号链接等属性,使用 cp -a(archive 模式)代替 cp -r
"rmdir 删不了非空目录"这不是 bug,而是设计——rmdir 只删空目录,防止误删。想删除非空目录用 rm -r

最佳实践

#建议说明
1删除前先 ls 确认准备执行 rm -rf somedir 前,先用 ls somedir 看看里面有什么。这花 1 秒钟,但可以避免 1 小时的恢复工作。
2文件名中避免空格和特殊字符my-file.txtmy_file.txt 而非 my file.txt。这会让终端操作简单得多。
3养成用 ls -lh 的习惯-h 让文件大小更易读,-l 显示完整的元信息。ls -la 是最常用的组合。
4创建目录结构用 -pmkdir -p a/b/c 一次性创建多层目录,比 mkdir a && cd a && mkdir b... 高效得多。
5cp -imv -i 避免意外覆盖-i(interactive)会在覆盖前询问确认。很多发行版默认将 cpmv 设置为 alias cp='cp -i',正是为了避免误覆盖。
6用通配符前先用 echo 测试echo *.txt 会显示 *.txt 展开成了哪些文件——确认后再用 rmcp 替换 echo
7符号链接用绝对路径更可靠ln -s /home/alice/docs /home/alice/linkln -s docs link 更可靠,因为相对路径的符号链接在移动后可能会失效。

练习题

  1. (概念)Linux 中的 /etc/var/tmp 目录各有什么用途?请各举两个配置或数据文件的具体例子。
  2. (概念)硬链接和符号链接的本质区别是什么?为什么硬链接不能跨文件系统?
  3. (实操)执行 mkdir -p ~/test/{a,b,c},然后用一条 ls 命令查看 ~/test/ 的结构。在 ~/test/a/ 下创建一个空文件 hello.txt
  4. (实操)touch 在当前目录创建 10 个文件 file01.txtfile10.txt。然后用一条 mv 命令将所有 .txt 文件移动到 ~/test/b/。提示:mv *.txt ~/test/b/
  5. (实操)ln -s 创建一个指向 /etc 的符号链接 ~/myetc。然后 cd ~/myetc && ls——你进入了哪里?pwd 输出什么?用 pwd -P 看看区别。
  6. (探究 🔍)运行 ls -li /,查看根目录下每个文件的 inode 号。有些目录(如 /proc/sys/dev 等挂载点)的 inode 号完全相同(都是 2)——为什么会这样?
  7. (探究 🔍)运行 stat /etc/passwd,查看这个文件的 inode 信息(大小、块数、权限、时间戳)。尝试修改文件后(touch /etc/passwd 会失败,因为权限不够——这正是安全机制),理解 stat 输出的每一列的含义。
点击查看答案
  1. (概念)`/etc` 存放系统配置,例:`/etc/passwd`(用户账户)、`/etc/hosts`(主机名解析)。`/var` 存放可变数据,例:`/var/log/syslog`(系统日志)、`/var/cache/apt/`(软件包缓存)。`/tmp` 存放临时文件,所有用户可读写,重启后清空。
  2. (概念)硬链接是同一 inode 的多个文件名,指向相同磁盘数据块;符号链接是存储目标路径的特殊文件。硬链接不能跨文件系统,因为 inode 只在同一文件系统内唯一——跨文件系统无法建立指向不同 inode 表的引用。
  3. (实操)`mkdir -p ~/test/{a,b,c}` 创建 ~/test/a/、~/test/b/、~/test/c/。`ls -R ~/test/` 递归查看结构。`touch ~/test/a/hello.txt` 创建空文件。可尝试 `tree ~/test/`(需安装 tree)更直观显示目录树。
  4. (实操)`touch file{01..10}.txt` 一条命令创建 10 个文件。`mv *.txt ~/test/b/` 将所有 .txt 移动到 ~/test/b/。通配符 `*` 被 Shell 展开为所有匹配的文件名。`ls ~/test/b/` 验证移动结果。
  5. (实操)`ln -s /etc ~/myetc` 创建符号链接。`cd ~/myetc && ls` 进入的是 /etc 目录。`pwd` 显示 ~/myetc(符号链接路径),`pwd -P` 显示 /etc(物理路径)。`-P` 选项解析符号链接显示真实路径。
  6. (探究 🔍)`ls -li /` 查看 inode 号。`/proc`、`/sys`、`/dev` 等挂载点目录的 inode 号都显示为 2——它们是不同文件系统的根目录,inode 号只在各自文件系统内唯一,跨文件系统出现相同数字是正常现象。`/bin`、`/lib` 等符号链接则是独立文件,各有自己的 inode。
  7. (探究 🔍)`stat /etc/passwd` 输出:大小、占用块数、权限(八进制和符号)、UID/GID、三个时间戳(Access/Modify/Change)。`touch /etc/passwd` 因权限不符报错——非 root 不能修改系统关键文件,这正是 Linux 安全模型的基本体现。

学习检查点

学完本章后,请检验自己是否掌握以下内容:

检查项自测问题验证方法
概念理解能用自己的话解释 FHS 目录结构标准和"一切皆文件"的含义尝试向他人讲解
命令操作能不查文档使用 ls、cd、mkdir、cp、mv、rm 完成文件操作在终端实际执行
原理掌握能说出硬链接和符号链接的区别以及 inode 的作用画出关系图
故障排查能独立排查路径中空格导致的命令错误模拟故障并修复
最佳实践能说明为什么删除文件前应该先用 ls 确认目标对比不同操作习惯

本章总结

文件系统是 Linux 系统的骨架。你学会了 Linux 目录结构标准(FHS)、绝对/相对路径、七种文件类型、核心文件操作命令(lscdmkdirtouchrmcpmv)、通配符的批量处理能力,以及硬链接与符号链接的区别。这些命令是你每天都会用到的基本工具。

核心概念速查

概念一句话定义
FHSLinux 文件系统目录结构标准(/, /home, /etc, /var 等)
绝对路径/ 开始的完整路径(如 /home/alice/file.txt
相对路径从当前位置开始的路径(如 ../docs
通配符Shell 展开文件名模式的机制(*, ?, [], {}
硬链接同一 inode 的多个名字(共享文件数据,跨文件系统不行)
符号链接存储目标路径的特殊文件(可跨文件系统,原文件删除后失效)
inode文件元数据(权限、大小、时间)的存储结构,不含文件名

下一步:进入 1.5:文件系统结构「Linux 文件系统结构」,了解 Linux 目录体系与路径概念。

延伸阅读

  • 1.5:文件系统结构 Linux 文件系统结构——深入了解 FHS 目录标准的每个核心目录
  • 1.6:文件查看与文本编辑 文件查看与文本编辑——学习用 cat、less、head、tail 查看文件内容
  • FHS 3.0 官方标准——文件系统层次结构标准的完整规范
  • Linux man-pages——查看 man 7 hier 了解目录结构,man 7 inode 了解 inode
  • 实践项目:创建自己的 ~/projects/ 目录结构模板,包含 src/docs/tests/data/ 子目录。以后每个新项目都复制这个模板。

常见问题

rm -rf 删除了文件能恢复吗?
Linux 的 rm 命令直接删除文件(释放 inode 和数据块),不像 Windows 有回收站。被 rm -rf 删除的文件通常很难恢复。如果误删了重要文件,立即停止对磁盘的写入操作,使用 extundelete 或 testdisk 工具尝试恢复,但成功率无法保证。建议日常用 rm -i 别名以防误删。
cp 和 mv 复制大文件有什么区别?
cp 复制后原文件保留,mv 移动后原文件消失。在同一个文件系统内 mv 几乎瞬间完成(只修改目录条目),跨文件系统时 mv 等价于 cp + rm。复制大量小文件时 cp 较慢,可用 rsync 替代:rsync -av src/ dest/。
通配符 * 和 ? 有什么不同?
* 匹配任意长度的任意字符(包括空),? 只匹配单个字符。例如 *.txt 匹配所有 .txt 结尾的文件,而 file?.txt 匹配 file1.txt、fileA.txt 但不匹配 file10.txt。花括号扩展 {a,b}.txt 等价于 a.txt b.txt。
↑ 回到顶部