Linux基础
目录结构
Linux系统将所有的文件都挂载到根目录(” / “)下,形成了一个树形结构,可以通过 ls -a / 或者 cd / && ls -a 查看根目录下的所有一级文件或文件夹。
如果想查看当前目录的树状图情况,使用如下命令:
[root@rocky /]# tree -La 1 #-L指定显示到第几层,-a指定显示所有文件名
.
├── .autorelabel
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
19 directories, 1 file
由于 Linux 属于开源产品,这使得 Linux 发行版众多,为了避免开发者或使用者对 Linux 系统目录结构的随意解释或修改,Linux 基金会于1994年发布了 FHS 标准(文件系统层次结构标准)。当前最新版为2015年发布的3.0版本。官方网站:https://wiki.linuxfoundation.org/lsb/fhs
此前,多数Linux发行版遵从FHS标准并且声明其自身政策以维护FHS的要求。但截至2009年,包括由自由标准小组成员参与开发的版本在内的绝大多数发行版,并不完全执行建议的标准了。
目录 | 释义 |
---|---|
/ | 整个文件系统的根目录 |
/bin | 需要在单用户模式下可用的命令,且面向所有用户 |
/boot | 引导程序文件目录,包含系统内核文件、引导加载程序文件等 |
/dev | 设备文件目录,包含系统所有设备文件,如磁盘、键盘等 |
/etc | 系统配置文件目录,FHS限制此目录下只存放静态配置文件,而非二进制文件。(注意:此目录名称存在争议,如需了解可查询维基) |
/home | 非root用户的家目录,包含用户个人文件和个人配置 |
/lib(/lib64) | 存放系统和应用程序所需要的库和内核模块等 |
/usr | 用于存放与用户和系统管理相关的二进制文件、库文件、头文件、共享数据和文档 |
/root | root用户的家目录 |
/media | 用于临时挂载可移动媒体设备,如U盘、CD等 |
/mnt | 临时挂在的文件系统 |
/opt | 第三方软件包的安装位置 |
/proc | 包含了关于系统状态的各种虚拟文件,用户可以通过读取这些文件获取系统的信息,比如进程信息、系统信息等 |
/run | 用于替代/var/run目录,用于临时存储运行时产生的数据,此目录通常挂载在 tmpfs 文件系统上,存储位置在内存中 |
/sbin | 存放只有 root 用户才有权限执行的文件 |
/srv | 存放各种特定服务的数据,如web、ftp等 |
/sys | 此目录为虚拟文件系统,此文件夹提供统一接口,以允许用户空间的应用程序或脚本读写系统设备。在系统启动时将自动挂载 |
/tmp | 临时文件目录,系统重启时其中的文件将不会保留 |
/var | 存储系统允许中不断变化的数据,如日志、缓存文件等 |
/usr 目录 | 释义 |
---|---|
bin(sbin) | 用户可执行的二进制文件,sbin仅为root用户可执行 |
lib(lib64) | 共享的库文件,包含动态链接库(.so)、静态库文件等 |
libexec | 存放由其他应用程序可调用的可执行文件,通常不是由用户调用 |
include | 包含 C/C++ 等编程语言引用的头文件 |
share | 通常包含以系统架构无关的只读文件,如共享文档、配置文件、引用程序数据等 |
local | 用户自行编译安装的软件,用户可将第三方软件安装到此目录,同 /opt 目录类似 |
src | 用户下载的源码包保存位置 |
/var 目录 | 释义 |
---|---|
cache | 存储应用生成的缓存数据,如浏览器缓存、包管理器缓存等 |
lib | 存储应用程序的状态信息和持久性数据,如 mysql 的数据文件,rpm 管理器的数据库等 |
log | 存放系统和程序的日志文件,记录了系统操作、错误信息等 |
run | 几乎已废弃,链接指向 /run 目录 |
tmp | 存放临时文件,但与 /tmp 不同的是此目录中的文件生命周期长,重启之后仍存在 |
spool | 存放临时任务队列文件,等待处理的任务将放在此处 |
mail(spool/mail) | 存储用户的电子邮件 |
lock | 存储锁文件,几乎已废弃,链接指向 /run/lock |
一切皆文件
在 Linux 和其他类 Unix 系统中,“一切皆文件”的设计哲学是其核心特性之一。这一设计理念旨在简化操作系统的结构和接口,使得资源的访问和管理更加统一和直观。这种设计有许多优点,但也有一些缺点。
-
有点:
- 统一接口:通过文件系统进行统一管理,简化了编程模型。程序员只需使用文件操作函数(如 open、read、write、close)即可访问各种资源(如硬件设备、进程间通信、网络连接等)。
- 简化系统设计:系统调用接口简单,减少了开发和维护操作系统的复杂度。
- 强大的灵活性和可拓展性:新的资源和功能可以很容易地映射到文件系统中。例如,虚拟文件系统(如 /proc 和 /sys)可以提供动态的系统和进程信息。
- 管道和重定向:输入输出的重定向和管道操作非常方便。通过标准输入、输出和错误流的重定向,可以轻松实现进程间的数据传输和操作。
- 权限管理:统一的权限管理机制。文件权限(读、写、执行)和所有权可以直接应用于系统资源。
-
缺点:
- 性能开销:文件系统的抽象层可能带来一些性能开销,特别是在处理频繁和高性能要求的操作时。这些开销包括系统调用的开销和文件系统的管理开销。
- 调试困难:文件系统和资源之间的映射关系有时可能复杂,导致调试和问题排查变得困难。
- 安全问题:如果不当管理,可能会出现安全漏洞。例如,错误的权限设置可能导致未授权的访问或修改系统资源。
- 复杂性:有些硬件或资源的特性可能难以通过简单的文件接口表达,需要额外的机制或抽象层来处理。