文件系统
- 计算机的文件系统是一种存储和组织计算机数据的方法,使用文件和树形目录的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念。
- 用于管理数据组及其名称的结构和逻辑规则称为“文件系统”
- 如果没有文件系统,放置在存储介质中的数据将是一大堆数据,无法分辨一个数据从哪里停止,下一个从哪里开始。通过将数据分成几部分并为每个部分命名,可以轻松地隔离和识别数据。
- 每个数据被称为file,文件系统会维护其名字、大小、时间等一系列信息,供用户层应用访问。
Linux文件系统架构
VFS(Visual Filesystem Switch)
虚拟文件系统(也称为虚拟文件系统交换机)是内核中的软件层,为用户空间程序提供文件系统接口。它还在内核中提供了一个抽象,允许不同的文件系统实现共存。
目录结构
FHS:Filesystem Hierarchy Standard
所有的Linux发行版都需要遵循FHS来设置其文件系统目录结构。FHS用于规范目录树中必须存在的目录,推荐存在的目录,包括名字、位置以及存放内容的相关规范。
- 根目录(/):文件系统中所有其他文件和目录的共同的根
- /home目录:主要用于存放一般用户的家目录
- /usr目录:是一个非常重要的目录,存放系统的各类资源。usr不是user,而是Unix System Resources
- /bin目录:实际上连接到 /usr/bin,/bin中存放一般用户就可以执行的二进制程序
- /sbin目录:实际上连接到 /usr/sbin,/sbin存放需要root用户才能执行的二进制程序
- /etc目录:存放各种系统配置文件
- /boot目录:存放系统内核及引导程序
- /var目录:保存系统运行过程中会改变的数据
- /run目录:存放自系统引导以来系统信息数据,在每次系统重启后,该目录内容都会重新创建。/run原来放置在/var目录中的,现在已经移出放置于根目录下,一个tmpfs文件系统被挂在到/run目录,其是一个基于内存的文件系统
- /dev目录:存放各种设备文件。一个devtmpfs文件系统被挂载到/run目录,其也是一个基于内存的文件系统。
- /proc目录:是一个虚拟文件系统,有时被称为进程信息伪文件系统。它被视为内核的控制和信息中心,很多系统命令其实就是读取/proc的某个文件,然后美化输出而已。
- /sys目录:也是一个虚拟文件系统,用于暴露设备、驱动程序以及内核某些功能的相关信息。
- /mnt目录:是临时性的文件系统的挂载点
- /media目录:FHS描述/media是可移动存储介质的挂载点。CentOS 8中CDROM或USB的实际被自动挂载在/run/media目录下
- /opt目录:从名字可知,是可选的,推荐用于非官方软件的安装位置。那些无法使用rpm或dnf安装,只能通过源代码安装的软件,建议安装在这里。不过很多源代码安装配置程序,会将默认安装目录设置在/usr/local。也就是说实际中可以将/opt和/usr/local的意义等同起来
- /srv目录:主要用于存放本地网络服务器提供的服务或数据
- /tem目录:主要用于存放系统临时文件,任何人都可以读写此目录,但不能保证其持久性。系统重启后,可能会清除目录内容
- /root目录:是root用户家目录
当前工作目录
当前工作目录就是一个你当前工作所处的目录
绝对路径
- 从根目录’/‘开始一直到所要访问的文件之间的所有目录以’/'连接起来的字符串,称之为该文件所谓的绝对路径。
- 例如:命令ls的绝对路径是:/usr/bin/ls
相对路径
- 描述文件的相对路径时,有一个描述路径的出发点,即所谓的当前工作目录,从当前工作目录开始表示到某个文件的路径,这个路径被称为该文件的相对路径。
- 在描述相对路径时,有几个特殊符号:
- " . ":表示当前工作目录
- “…”:表示当前工作目录的上一级目录
- “-”:上一次切换目录前的目录
- “~”:当前用户的家目录
- 假设当前处在/usr/bin目录中,在不改变当前工作目录的前提下,使用相对路径描述/bin目录下的命令ls:./ls
目录
目录主要用来保存其他目录或文件的文件名
文件
文件主要用来存放代码或数据
文件属性
- 文件名:用户使用的文件表示
- 大小:文件大小,以字节为单位
- 块:文件所占用的数据块数
- IO块:每个数据块的大小
- 文件类型
类型 | 含义 |
---|---|
- | 常规文件 |
d | 目录文件 |
b | 块设备文件 |
c | 字符设备文件 |
l | 符号链接文件 |
p | 管道文件 |
s | 套接字文件 |
- 设备:所在的设备名和设备号
- inode:inode节点编号,每一个文件具有一个inode
- links:即链接到该inode的链接数
- 权限:(拥有者、所属组用户及其他用户)该文件的读写执行权限设置
- 拥有者:文件用户(uid/user)
- 所属组:文件所属组(gid/group)
- atime:最近一次访问时间
- mtime:最近一次内容修改时间
- ctime:最近一次属性变化时间
- birth:文件创建时间
文件链接
在Linux文件系统中,有两种类型的链接文件:软链接(符号链接)和硬链接。
软链接
- 符号链接文件实际上是一个真实文件(需要占用一个独立inode),其用来保存另外一个文件(可以不存在)的路径信息;
- 符号链接可以跨文件系统,即可以链接到另外一个文件系统中的文件;
- 符号链接可以链接到目录或不存在的文件。
硬链接
- 硬链接并不是一个真实文件,它只是某一个文件的副本,但不会占用实际存储空间(一个真实文件都需要占用一个inode,而inode可以被链接多次,只有该inode的链接数为0时,其关联的文件才会被删除)。
- 硬链接不能跨文件系统,即只能链接同一文件系统中的文件;
- 硬链接不能链接到目录;
文件基本权限
对于使用文件的不同用户(文件拥护者、文件所属用户组用户、其他用户),使用不同的文件权限,控制不同用户的操作,一般是修改文件的读、写和执行3种权限
文件特殊权限
Linux系统中提供3种文件特殊权限,它们只有设置到可执行文件或目录上才有意义。
SUID
仅设置在可执行文件上才有意义。设置的目的是,当用户执行该可执行文件时,可以临时获得该可执行文件拥有者的权限。
SGID
仅设置在可执行文件上才有意义。
- 当用户执行具有SGID的可执行文件时,将临时获得该可执行文件的用户组用户的权限
- 当用户进入具有SGID的目录时,该用户的有效用户组将变为该目录的用户组,即具有该目录用户组的权限
STICKY
仅设置在目录上有意义。用户在具有sticky的目录中,可以进行任何操作,但是不能删除其他用户的文件。
文件默认权限
默认权限指,用户在新建一个文件或目录时,默认设置的文件基本权限