首页 > 编程笔记

Linux文件系统精讲

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立、存入、读出、修改、转储文件,当用户不再使用文件时撤销文件等。

Linux文件系统的结构

在 Linux 系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构,如图 1 所示。

树状结构图
图 1 树状结构图

文件系统的顶层是由根目录开始的,系统使用“/”来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含(子)目录或文件,就这样构成一个大的文件系统。

Linux 文件系统具备如下优点:

注意在 Linux 系统中,使用具有层次的树状文件结构主要是为了方便文件系统的管理与维护。

1) Linux系统文件和目录命名规则

在 Linux 系统中,文件和目录的命名规则如下:

注意在 Linux 系统中,硬件设备也是文件,也有各自的文件名称。

2) Linux系统文件或目录定位方法

程序可以通过文件名和目录名,从树结构的任何地方开始搜查并快速定位所需的文件或目录。

定位文件名或目录位置的方法有绝对路径相对路径两种:

Linux文件类型

在 Linux 中,一切都是文件,而且文件都有其所属类型。如何得知具体的文件类型呢?可以使用以下命令进行查看:

[root@bogon ~]# ls -l path

文件的属性通常会以如下形式进行显示:

drwxr-xr-x

以上代码中各字母的意思如下:
在 Linux 中常见的文件类型有 7 种,如表 2 所示。

表 2 文件类型
文件属性 文件类型
- 普通文件,即 file
d 目录文件
b block device,即块设备文件,如硬盘;支持以 block 为单位进行随机访问
c character device,即字符设备文件,如键盘支持以 character 为单位进行线性访问
1 symbolic link,即符号链接文件,又称软链接文件
P pipe,即命名管道文件
s socket,即套接字文件,用于实现两个进程进行通信

此表中,各种文件的含义如下:

Linux目录及功能

在 Linux 文件系统中有两个特殊目录,一个是用户所在的工作目录,即当前目录,可用一个点“.”表示;另一个是当前目录的上一层目录,也叫父目录,可以使用两个点“..”表示。
 
如果一个目录或文件名是以一个点开始,就表示这个目录或文件是一个隐藏目录或文件。隐藏目录或文件就是指当以默认方式查找时,系统中不显示该目录或文件。

除了以上所介绍的 Linux 文件系统的重要目录外,还有一些常用目录。在 Linux 文件系统中,通用的目录名用于表示一些常见的功能,如表 3 所示。

表 3 常见 Linux 目录名称
目 录 功 能
/ 虚拟系统的根目录,这里一般不存储文件
/bin 二进制目录,用于存放用户级的 GNU 工具(如 cat、Is 和 rm 等)
/boot 启动目录,存放 Linux 操作系统的内核和系统启动时所使用的文件
/dev 设备目录,创建设备节点,存放计算机中所有的设备,包括硬件
/etc 系统配置文件目录,只有 root 用户可以修改该文件
/home 主目录,创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂载目录,另一个可移动媒体设备的常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/proc 进程目录,常在内存中,不占用任何磁盘空间,存放现有硬件及当前进程的相关信息
/root root 用户的主目录
/sbin 系统二进制目录,存放许多 GNU 管理员级工具
/run 运行目录,存放系统运行时的运行数据
/srv 服务目录,存放的是所有与服务器相关的服务,即一些服务启动之后,这些服务需要访问的目录
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,普通用户或程序可以将临时文件存入该目录以方便与其他用户或程序交互信息。该目录所有的 用户都可以进行访问,因此,重要的信息不应该存放在该目录中
/user 用户二进制目录,存放系统的应用程序和与命令相关的系统数据,其中包括系统的一些函数库及图形界面所需的文件等
/var 可变目录,存放的是系统运行过程中经常变化的文件,如 log 日志文件等

在 Linux 系统中,为了方便管理和维护,常用目录全部采用文件系统层析标准(Filesystem Hierarchy Standard,FHS)的文件结构。FHS 仅仅定义根目录(/)下的各个主要目录应该存放的子目录或文件,包括两层规范:第一层为根目录下的各个目录应该存放哪些类型的子目录或文件,例如在 /bin 目录中存放的是可执行文件;第二层主要是针对 /user 和 /var 这两个目录的子目录定义的,例如在 /user/share 目录中存放的应该是共享数据。

系统服务管理工具systemd

systemd 是一种新的系统和服务管理器,当 Linux 系统启动时,systemd 是启动的第一个进程(代替了早期版本的 init 进程);当 Linux 系统关闭时,systemd 也是最后一个结束的进程。systemd 控制着启动的最后阶段并为使用系统做准备,同时也通过并行地装入多个服务而加快启动的速度。

Systemd 允许用户管理在系统上的各种类型单元,包括服务(name.service)、目标(name.target)、设备(name.device)、文件系统加载点(name.mount)和套接字(name.socket)等。每个 systemd 单元是由相应的单元配置文件所定义的,它们分别存放的目录如下。

注意,在 CentOS7 版本的 Linux 系统中,init 脚本已被 systemd 的服务单元所取代,服务单元的扩展名为“.service”。

1) 启动服务

启动服务需要使用命令如下:

[root@bogon ~]# systemctl start name.service

例如,启动 Apache HTTP 服务器(即 httpd 服务),过程如下:
1、开启虚拟机,进入系统页面,在“应用程序”菜单栏中选择“系统工具”选项,然后在该选项菜单栏中单击“终端”按钮,如图 4 所示。


图 4 选择“终端”

2、进入终端页面,首先需要切换用户到 root:

[root@bogon ~]# su - root
密码:
[root@bogon ~]#

3、在用户为 root 的终端页面中输入启动服务命令行:

[root@bogon ~]# systemctl start httpd.service

2) 停止服务

停止服务,必须以 root 身份使用如下命令:

[root@bogon ~]# systemctl stop name.service


比如,在上面例子的基础上输入停止服务命令行:

[root@bogon ~]# systemctl stop httpd.service

3) 重启服务

重启服务,有 restart、try-start 和 reload 三种选项。restart 用于该服务在运行中的重启服务,如果该服务没有运行,它将重新启动该服务。try-start 只用于服务已经在运行中时重启该服务。而 reload 则会重新加载配置文件。

这三者的命令行分别如下:

[root@bogon ~]# systemctl restart name.service
[root@bogon ~]# systemctl try-start name.service
[root@bogon ~]# systemctl reload name.service


例如,在终端输入相应的重启服务命令行:

[root@bogon ~]# systemctl restart httpd.service
[root@bogon ~]# systemctl try-start httpd.service
[root@bogon ~]# systemctl reload httpd.service

4) 查看、禁止、启用服务

1、检查服务状态,可以使用 status 选项,命令如下:

[root@bogon ~]# systemctl status name.service


2、可以使用enable/disable选项来控制一个服务是否开机启动,命令如下:

[root@bogon ~]# systemctl enable name.service
[root@bogon ~]# systemctl disable name.service

优秀文章