Linux文件系统精讲
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立、存入、读出、修改、转储文件,当用户不再使用文件时撤销文件等。
Linux文件系统的结构
在 Linux 系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构,如图 1 所示。图 1 树状结构图
文件系统的顶层是由根目录开始的,系统使用“/”来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含(子)目录或文件,就这样构成一个大的文件系统。
Linux 文件系统具备如下优点:
- 便于磁盘空间的管理;
- 方便数据的组织和查找;
- 提高磁盘空间的使用率。
注意在 Linux 系统中,使用具有层次的树状文件结构主要是为了方便文件系统的管理与维护。
1) Linux系统文件和目录命名规则
在 Linux 系统中,文件和目录的命名规则如下:- 除了字符“/”之外,所有的字符都可以使用,但是要注意,在目录名或文件名中,使用某些特殊字符并不是明智之举。例如,在命名时应避免使用“<”“>”“?”“*”和非打印字符等。如果一个文件名中包含了特殊字符,例如空格,那么在访问这个文件时就需要使用引号将文件名括起来。
- 目录名或文件名的长度不能超过 355 个字符。
- 目录名或文件名是区分大小写的。如 DOG、dog、Dog和DOg,是互不相同的目录名或文件名,但使用字符大小写来区分不同的文件或目录,也是不明智的。
- 与 Windows 操作系统不同,文件的扩展名对Linux操作系统没有特殊的含义,换句话说,Linux 系统并不以文件的扩展名来区分文件类型。例如,dog.exe 只是一个文件,其扩展名 exe 并不代表此文件就一定是可执行文件。
注意在 Linux 系统中,硬件设备也是文件,也有各自的文件名称。
2) Linux系统文件或目录定位方法
程序可以通过文件名和目录名,从树结构的任何地方开始搜查并快速定位所需的文件或目录。定位文件名或目录位置的方法有绝对路径和相对路径两种:
- 绝对路径:以一个正斜线“/”开始。绝对路径包括从文件系统的根节点到要查找的目录或文件所必须遍历的每一个目录的名字,它是文件位置的路标方向,因此在任何情况下都可以使用绝对路径找到所需的文件。
- 相对路径:不是以正斜线“/”开始,它可以包含从当前目录到要查找的目录或文件所必须遍历的每一个目录的名字。相对路径大部分情况下都要比绝对路径短。
Linux文件类型
在 Linux 中,一切都是文件,而且文件都有其所属类型。如何得知具体的文件类型呢?可以使用以下命令进行查看:[root@bogon ~]# ls -l path
文件的属性通常会以如下形式进行显示:drwxr-xr-x
以上代码中各字母的意思如下:- 第1个字母:代表文件类型;
- 第3~4字母:代表用户的权限;
- 第5~7字母:代表用户组的权限;
- 第8~10字母:代表其他的用户的权限。
在 Linux 中常见的文件类型有 7 种,如表 2 所示。
文件属性 | 文件类型 |
---|---|
- | 普通文件,即 file |
d | 目录文件 |
b | block device,即块设备文件,如硬盘;支持以 block 为单位进行随机访问 |
c | character device,即字符设备文件,如键盘支持以 character 为单位进行线性访问 |
1 | symbolic link,即符号链接文件,又称软链接文件 |
P | pipe,即命名管道文件 |
s | socket,即套接字文件,用于实现两个进程进行通信 |
此表中,各种文件的含义如下:
- 普通文件:如文本文件、二进制的可执行文件等,可用 cat、less、more、vi、emacs 来查看内容,用 mv 来改名;
- 目录文件:包括文件名、子目录名及其指针。它是 Linux 储存文件名的唯一空间,可用 ls 列出目录文件;
- 连接文件:是指向同一索引节点的目录。可以用 ls 来查看,连接文件的标志用 l 开头,而文件面后以“->”指向所连接的文件;
- 特殊文件:Linux 的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,则一类文件就是特殊文件,常放在 /dev 目录内;
Linux目录及功能
在 Linux 文件系统中有两个特殊目录,一个是用户所在的工作目录,即当前目录,可用一个点“.”表示;另一个是当前目录的上一层目录,也叫父目录,可以使用两个点“..”表示。如果一个目录或文件名是以一个点开始,就表示这个目录或文件是一个隐藏目录或文件。隐藏目录或文件就是指当以默认方式查找时,系统中不显示该目录或文件。
除了以上所介绍的 Linux 文件系统的重要目录外,还有一些常用目录。在 Linux 文件系统中,通用的目录名用于表示一些常见的功能,如表 3 所示。
目 录 | 功 能 |
---|---|
/ | 虚拟系统的根目录,这里一般不存储文件 |
/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 单元是由相应的单元配置文件所定义的,它们分别存放的目录如下。
- /user/lib/systemd/system:以安装的 RPM 软件包发行的 systemd 单元。
- /run/systemd/system:在运行期间创建的 systemd 单元。
- /etc/systemd/system:由系统管理员所创建和管理的 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 ~]#
[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