在linux系统中,文件和文件夹(也叫目录)是两种不同的概念,二者在系统底层实现、属性特征、操作规则上都有明确的区分,理解这些区别是使用linux进行文件管理的基础。

底层存储结构差异
linux系统使用inode来记录文件的元数据信息,每个文件和文件夹都有独立的inode编号,但二者的inode指向的内容不同。
文件的inode指向存储文件实际内容的数据块,数据块中保存的是文件的具体文本、二进制代码等内容。而文件夹的inode指向的数据块中,保存的是该文件夹下包含的所有文件和子文件夹的名称,以及它们对应的inode编号映射关系,并不保存子文件的实际内容。
我们可以通过stat命令查看文件和文件夹的inode信息:
# 查看普通文件的inode信息 stat test.txt # 查看文件夹的inode信息 stat test_dir
属性标识差异
使用ls -l命令查看文件列表时,第一个字符会标识文件类型,通过这个标识可以快速区分文件和文件夹。
- 普通文件的第一个字符为
-,比如-rw-r--r--开头的就是普通文件 - 文件夹的第一个字符为
d,比如drwxr-xr-x开头的就是文件夹
我们也可以通过file命令直接判断文件类型:
# 判断文件类型 file test.txt file test_dir
权限规则差异
文件和文件夹的权限含义存在明显不同,即使权限数值相同,对二者的操作影响也不一样。
| 权限位 | 对文件的作用 | 对文件夹的作用 |
|---|---|---|
| r(读权限) | 可以查看文件内容 | 可以列出文件夹下的文件名称 |
| w(写权限) | 可以修改文件内容 | 可以在文件夹下创建、删除、重命名文件 |
| x(执行权限) | 可以执行该文件(如果是可执行程序) | 可以进入该文件夹 |
比如一个文件夹没有执行权限,即使有读权限也无法进入该文件夹查看内容,这是和文件权限逻辑差异较大的地方。
操作差异
二者的常用操作命令也有区别,部分命令只能针对文件使用,部分只能针对文件夹使用。
创建操作
创建文件常用touch命令,创建文件夹需要使用mkdir命令:
# 创建普通文件 touch demo.txt # 创建文件夹 mkdir demo_dir # 创建多级文件夹 mkdir -p demo_dir/sub_dir
删除操作
删除空文件夹可以使用rmdir命令,删除文件或者非空文件夹需要使用rm命令,删除文件夹时需要加-r参数递归删除:
# 删除普通文件 rm demo.txt # 删除空文件夹 rmdir demo_dir # 删除非空文件夹 rm -r demo_dir
大小差异
文件的大小是实际内容占用的空间,而文件夹的大小一般是固定的(通常是4096字节或者根据文件系统块大小决定),不会因为里面包含的文件变多而明显增大,因为文件夹只保存文件名和inode的映射关系,不保存文件实际内容。
可以通过du命令查看实际占用空间:
# 查看文件占用空间 du -h demo.txt # 查看文件夹占用空间 du -h demo_dir
总结
linux中的文件和文件夹是两个完全不同的概念,从底层存储的inode指向内容,到属性标识、权限含义、操作命令都有明确的区分。日常使用中需要注意区分二者的差异,避免出现误把文件夹当文件操作、或者权限设置不符合预期的问题,熟练掌握这些区别能大幅提升linux文件管理的效率。