Linux 文件系统简介
在 Linux 操作系统中,一切被操作系统管理的资源,如磁盘驱动器、打印机、普通文件或目录等,都被视为文件进行管理和访问。在Linux 系统中,“一切都是文件”。
Linux 系统可以通过统一的文件接口来管理和操作不同类型的资源。Linux可以使用类似于读写文件的方式来对待网络接口、磁盘驱动器等,使得操作和管理这些资源更加统一和简便。
这种文件为中心的设计理念为 Linux 系统带来了灵活性和可扩展性。
Linux中的存储单位
硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个连续的扇区组成(每个扇区存储 512 字节)。
为什么使用inode (索引节点:i(index)+node)
inode 是 Linux 文件系统的基础。
一个文件可能会占用多个块,但是一个块只能存放一个文件。我们将文件存储在了块(block)中后,每一块的地址,创建时间,权限等信息都需要被存储。所以还需要空间来存储文件的 元信息 metadata。 存储文件元信息的区域就叫 inode。
每个文件都有一个唯一的 inode,存储文件的元信息。
inode的一些性质
inode 是一种固定大小的数据结构,它的大小在文件系统创建时就会确定,并且在文件的生命周期内保持不变
inode 的数量是有限的,每个文件系统只能包含固定数量的 inode。当文件系统中的 inode 用尽后,无法再创建新的文件,尽管磁盘可能还有空间。因此,在创建文件系统时,需要合理分配 inode 的数量
可以使用 stat 命令可以查看文件的 inode 信息,包括文件的 inode 号码、文件类型、权限、所有者、文件大小、修改时间。
使用inode的优点和缺点
优点:
安全性。即使文件名被修改或删除,文件的 inode 号码不会改变,从而可以避免一些因文件被移动或删除导致的错误。
性能高。因为 inode 的访问速度非常快,可以直接通过 inode号码定位到文件的元数据信息,无需遍历整个文件系统。
缺点:
使用更加复杂。使用 inode 号码也使得文件系统在用户和应用程序层面更加抽象和复杂,需要通过系统命令或文件系统接口来访问和管理文件的 inode 信息。
硬链接和软链接
在Linux系统中,文件链接(File Link)是一种特殊的文件类型,可以在文件系统中指向另一个文件(文件链接也是文件)。常见的文件链接类型有两种:
硬链接(Hard Link)
在 Linux文件系统中,每个文件和目录都有一个唯一的索引节点(inode)号,用来标识该文件或目录。硬链接通过 inode节点号建立连接,硬链接和源文件的 inode节点号相同。删除其中任何一个对另外一个没有影响,可以通过给文件设置硬链接文件来防止重要文件被误删
只有删除了源文件和所有对应的硬链接文件,该文件才会被真正删除。
硬链接的一些限制:
不能对目录以及不存在的文件创建硬链接
硬链接也不能跨越文件系统
软链接(Symbolic Link)(软链接又名符号链接)
软链接和源文件的 inode 节点号不同,而是指向一个文件路径。
源文件删除后,软链接依然存在,但是指向的是一个无效的文件路径。(软连接类似于 Windows 系统中的快捷方式)
软链接与硬链接不同,他可以对目录或者不存在的文件创建,并且,软链接可以跨越文件系统。
如何创建软/硬链接
ln
命令用于创建硬/软链接
ln [选项] <源文件> <硬链接/软链接文件>
:创建硬链接/软链接。例如:ln -s file.txt file_link
,创建名为 file_link
的软链接,指向 file.txt
文件。-s
选项代表创建软链接。s 即 symbolic 。
硬链接为什么不能跨文件系统?
硬链接是通过 inode 节点号建立连接的
然而,每个文件系统都有自己的独立 inode 表。如果在不同的文件系统之间创建硬链接,可能会导致 inode 节点号冲突的问题,即目标文件的 inode 节点号已经在该文件系统中被使用。
Linux 文件类型
Linux 支持很多文件类型: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件 等。
- 普通文件(-):用于存储信息和数据。 Linux 用户可以根据访问权限对普通文件进行查看、更改和删除。例如:图片、PDF、text、视频、源代码等。
- 目录文件(d,directory file):目录用于表示和管理系统中的文件,目录文件中包含一些文件名和子目录名。
- 符号链接文件(l,symbolic link):保留了指向文件的地址而不是文件本身。
- 字符设备(c,char):用来访问字符设备比如键盘。
- 设备文件(b,block):用来访问块设备比如硬盘、软盘。
- 管道文件(p,pipe) : 用于进程之间的通信。
- 套接字文件(s,socket):用于进程间的网络通信,也可以用于本机之间的非网络通信。
常见目录以及说明
- /bin: 存放二进制可执行文件(ls、cat、mkdir 等),常用命令一般都在这里;
- /etc: 存放系统管理和配置文件;
- /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户 user 的主目录就是/home/user,可以用~user 表示;
- /usr: 用于存放系统级应用程序;
- /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,可以把 tomcat 等都安装到这里
- /proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
- /root: 超级用户(系统管理员)的主目录;
- /sbin: 存放二进制可执行文件,只有 root 才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如 ifconfig 等;
- /dev: 用于存放设备文件;
- /mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
- /boot: 存放用于系统引导时使用的各种文件;
- /lib 和/lib64: 存放着和系统运行相关的库文件 ;
- /tmp: 用于存放各种临时文件,是公用的临时文件存储点;
- /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件;
- /lost+found:存放系统非正常关机后残存的文件。