文件和目录
字数: 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 是大小写敏感的,这意味着 Dog 、dog 、Dog 和 DOg 会被视为不同的文件或目录。 |
扩展名含义 | 在 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 文件系统,其中包含以下目录结构:
/
├── bin
├── home
│ ├── user1
│ │ ├── Documents
│ │ └── Pictures
│ └── user2
│ ├── Music
│ └── Videos
└── etc
假设当前位于 /root
目录,并且想要查看 /home/user1/Documents/resume.txt
文件的内容。可以使用以下命令:
[root@localhost ~]# cat /home/user1/Documents/resume.txt
测试文件
绝对路径是从根目录 /
开始的完整路径。在这个例子中,resume.txt 文件的绝对路径是 /home/user1/Documents/resume.txt
。无论当前的工作目录是什么,这个路径都能准确指向 resume.txt 文件。
现在,假设已经切换到了 /home/user1
目录,并且想要查看同一文件 resume.txt 的内容。可以使用以下命令:
# 进入到 /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
:
[root@localhost Documents]# cat ./notes.txt
hello,world!
这个命令使用 ./notes.txt
来引用当前目录中的 notes.txt 文件。这里的 ./
表示当前目录,所以这个命令等同于直接使用 cat notes.txt
。
如果仍然在 /home/user1/Documents
目录中,但想要查看 Pictures 目录中的 photo.jpg 文件,可以使用以下命令:
[root@localhost Documents]# cat ../Pictures/photo.jpg
这个命令使用 ../Pictures/photo.jpg
来引用父目录 /home/user1
中的 Pictures 目录下的 photo.jpg 文件。这里的 ../
表示上一级目录,即从 /home/user1/Documents
回到 /home/user1
,然后进入 Pictures 目录,最后访问 photo.jpg 文件。