Skip to content

文件和目录

字数: 2148 字 时长: 8 分钟

在 Linux 系统中,文件和目录是组织数据的基本构建块。

文件是存储在文件系统中的一段数据。它可以是文本文档、图片、程序或其他类型的数据:

  • 文件具有文件名,它用于区分文件系统中的其他文件;
  • 文件可以有扩展名,这是一个通常跟在文件名后面的点(.)和一串字符,用于指示文件的类型(例如 .txt.sh);
  • 文件包含数据和元数据,元数据包括文件的权限、所有者、创建和修改日期等;
  • 文件可以被读取、写入、执行(如果它们包含可执行代码)或删除。

目录是文件系统中的一个特殊类型的文件,用于组织和存储其他文件和目录。在 Linux 中,目录可以包含子目录,形成层次结构。目录在 Windows 中通常被称为「文件夹」:

  • 目录具有目录名,它用于区分文件系统中的其他目录;
  • 目录包含文件和子目录的条目,每个条目都指向文件系统中的一个文件或目录;
  • 目录的组织结构类似于一棵树,称为目录树。根目录(/)是这棵树的顶部,所有其他目录都从它延伸出来;
  • 目录可以包含特殊的目录,如当前工作目录(.)和父目录(..)。

Linux 严格区分大小写

和 Windows 不同,Linux 是严格区分大小写的,包括文件名和目录名、命令、命令选项、配置文件设置选项等。

例如,Windows 系统桌面上有一个名为 Demo 的文件夹,当在桌面上再新建一个名为 demo 的文件夹时,系统会提示文件夹命名冲突;而 Linux 系统不会,Linux 系统认为 Demo 文件和 demo 文件不是同一个文件,因此在 Linux 系统中,Demo 文件和 demo 文件可以位于同一目录下。

文件目录命令规则

在 Linux 系统中,一切都是文件,既然是文件,就必须要有文件名。同其他系统相比,Linux 操作系统对文件或目录命名的要求相对比较宽松:

规则分类描述
特殊字符使用虽然 Linux 允许在文件和目录名中使用几乎所有的字符,但某些特殊字符可能会引起混淆或被 shell 解释为特殊命令。例如,空格、*?<>&$ 等字符在没有适当引用的情况下可能会导致命令行解释错误。
长度限制文件和目录名的长度通常限制为 255 个字符,这是由许多文件系统(如 ext4、XFS)的实现决定的。
大小写敏感性Linux 是大小写敏感的,这意味着 DogdogDogDOg 会被视为不同的文件或目录。
扩展名含义在 Linux 中,文件扩展名不用于确定文件类型,但它们是有用的惯例,可以帮助用户和程序识别文件的内容类型。例如,.txt 通常表示文本文件,.sh 表示 shell 脚本。
命名建议使用简洁、描述性的名称,以便于识别和维护。避免使用与现有命令或系统文件相同的名称,以防止命令行混淆。

绝对路径和相对路径

在 Linux 系统中,理解一个文件的路径,本质上就是确定该文件在系统中的具体存放位置。例如,路径 /home/cat.txt 表示文件 cat.txt 位于 /home 目录下。要指定一个文件的位置,通常有两种方法:

  • 绝对路径:从根目录 / 开始,一直延伸到目标文件或目录的完整路径。绝对路径确保无论当前的工作目录是什么,系统都能准确找到文件。绝对路径通常在脚本中使用,以确保无论当前工作目录在哪里,文件都可以被正确找到。例如,/usr/bin/python 表示的是位于 /usr/bin 目录下的 python 可执行文件。
  • 相对路径:相对于当前工作目录的路径。它不从根目录开始,而是从当前所在目录出发,通过相对位置来定位文件。相对路径在用户日常操作中更为常用,因为它依赖于当前的工作目录,这使得路径更短,更灵活。例如,如果当前的工作目录是 /home/user,那么相对路径 documents/report.txt 将指向 /home/user/documents/report.txt

可以通过一个具体的例子来说明绝对路径和相对路径的概念,假设有一个 Linux 文件系统,其中包含以下目录结构:

shell
/
├── bin
├── home
   ├── user1
   ├── Documents
   └── Pictures
   └── user2
       ├── Music
       └── Videos
└── etc

假设当前位于 /root 目录,并且想要查看 /home/user1/Documents/resume.txt 文件的内容。可以使用以下命令:

shell

[root@localhost ~]# cat /home/user1/Documents/resume.txt
测试文件

绝对路径是从根目录 / 开始的完整路径。在这个例子中,resume.txt 文件的绝对路径是 /home/user1/Documents/resume.txt。无论当前的工作目录是什么,这个路径都能准确指向 resume.txt 文件。

现在,假设已经切换到了 /home/user1 目录,并且想要查看同一文件 resume.txt 的内容。可以使用以下命令:

shell
# 进入到 /home/user1/ 目录下
[root@localhost ~]# cd /home/user1/
# 当前工作目录的完整路径
[root@localhost user1]# pwd
/home/user1
# 查看指定文件
[root@localhost user1]# cat Documents/resume.txt
测试文件

在这个例子中,Documents/resume.txt 是文件的相对路径。因为已经在 /home/user1 目录下,所以只需要指定相对于当前目录的路径 Documents/resume.txt 即可。

相对路径和绝对路径不同,相对路径不是从根目录 / 开始写起,而是从当前所在的工作目录开始写起。使用相对路径表明某文件的存储位置时,经常会用两个个特殊目录,即当前目录(用 . 表示)和父目录(用 .. 表示)。

命令

cd、cat 和 pwd 是 Linux 常用的命令 cd、cat 和 pwd 是 Linux 常用的命令,分别表示「切换当前工作目录到指定的目录」、「查看文件」和「显示当前工作目录的完整路径」,在后续文档中会介绍,先做了解。

特殊目录

在 Linux 系统中,当前目录(.)和父目录(..)是两个特殊的目录(这两个目录项实际上是一种特殊的硬链接),它们用于表示文件系统中的位置,但并不对应于实际的物理目录。这两个符号在文件路径中非常有用,因为它们允许用户在不明确指定完整路径的情况下引用目录。

  • 当前目录:符号 . 代表当前工作目录(Current Working Directory),即当前所在的目录。当执行命令或指定文件路径时,如果路径以 . 开头,它表示这个文件或目录位于当前工作目录中。例如,如果在 /home/user1 目录中,并且有一个名为 file.txt 的文件,那么可以简单地通过 ./file.txt 来引用它。
  • 父目录:符号 .. 代表当前工作目录的父目录(Parent Directory)。它用于在路径中向上移动一级,即从当前目录回到其父目录。例如,如果在 /home/user1/Documents 目录中,使用路径 ../ 将带回到 /home/user1 目录。

NOTE

在 Linux 系统中,没有直接表示「上两级目录」的符号,如 ...。但是,可以通过连续使用两次 .. 来表示「上两级目录」,例如:../../file.txt

如果当前在 /home/user1/Documents,并且想要访问一个名为 notes.txt 的文件,那么可以使用 ./notes.txt 来引用它,这等同于直接使用 notes.txt

shell
[root@localhost Documents]# cat ./notes.txt
hello,world!

这个命令使用 ./notes.txt 来引用当前目录中的 notes.txt 文件。这里的 ./ 表示当前目录,所以这个命令等同于直接使用 cat notes.txt

如果仍然在 /home/user1/Documents 目录中,但想要查看 Pictures 目录中的 photo.jpg 文件,可以使用以下命令:

shell
[root@localhost Documents]# cat ../Pictures/photo.jpg

这个命令使用 ../Pictures/photo.jpg 来引用父目录 /home/user1 中的 Pictures 目录下的 photo.jpg 文件。这里的 ../ 表示上一级目录,即从 /home/user1/Documents 回到 /home/user1,然后进入 Pictures 目录,最后访问 photo.jpg 文件。