# 一、Linux 整体目录树 在 Linux 系统中,所有文件和目录都是从根目录开始,一级一级向下分支形成一个树状结构的。 我们把这种目录配置方式称为目录树。 Linux 的根目录为 “/”,我们在该目录下执行 ls -l 命令,查看根目录的目录结构。 ![目录结构](https://img.liyp.cc/images/202002161739148.png) 你可以想象一下,这么多目录,如果所有使用 Linux 开发的用户,都以自己的原则和方式随意放置文件,这会给后续开发和运维增加无谓的工作量。 因此,在 Linux 中,根目录下的目录内容都会相对固定的,而且,每个目录放置什么内容都是有规定约束的。这个标准称为 FHS 标准(Filesystem Hierarchy Standard)。 下面,我们会从 FHS 标准出发,说明这些目录的主要作用与放置文件的内容。 # 二、FHS 标准 FHS 标准主要是希望使软件在安装时,或用户自己能够判断安装和存放文件的位置。 This standard enables: * Software to predict the location of installed files and directories * Users to predict the location of installed files and directories. 所以,FHS 标准的核心在于确定每个特定的目录下应该放什么内容的文件和数据,并希望 Linux 用户能够遵循该准则。 FHS 标准根据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用形态。 * 可分享的:可以分享给其他系统挂载使用的目录 * 不可分享的:与自身机器直接相关的设备文件等,不能分享给其他主机 * 不变的:数据不常变动的文件 * 可变动的:经常改变的数据,如登录文件、新闻组等。 ![目录](https://img.liyp.cc/images/20200216173937465.png) 在了解了 FHS 准则的大致内容后,我们依据 FHS 准则,介绍根目录(/)下的所有文件夹的作用。 观察 FHS 原文后我们发现,FHS 除了说明了根目录(/)下的子目录的作用,还专门介绍了 /usr 目录及 /var 目录两个二级目录的子目录的作用。 也就是说,FHS 针对目录树架构着重强调了三个目录下的内容定义: * 根目录(/),与开机系统相关 * /usr,与软件安装和执行相关 * /var,与系统运作过程相关 因此,我们依据 FHS 的内容,分别介绍这三个目录的主要内容。 # 三、根目录 根目录是 Linux 的最高层目录,是整个目录树的根节点。 同时,根目录与开机、还原、系统修复等操作直接相关。 因此,FHS 认为,在根目录下应该包含与系统开机、还原、系统修复等必要文件的目录。 * /bin:放置执行文件/命令的目录,尤其是放置在单用户维护模式下还能够被操作执行的命令。 * /boot:放置开机会使用到的文件,包括 Linux 内核文件以及开机菜单与开机所需配置文件等。 * /dev:以文件的形式保存 Linux 所有的设备及接口设备。 * /etc:系统主要配置文件基本上都在这个目录下,包括人员账号密码文件、多种服务的起始文件等。 * /home:系统默认的普通用户的主文件夹。 * /lib:主要放置系统开机使用的、/bin 和 /sbin 目录下的命令使用的库函数。 * /media:放置可删除的设备。 * /mnt:用于暂时挂载某些额外设备。 * /opt:第三方软件放置的目录。 * /proc:这个目录是一个虚拟文件系统,它放置的数据都是在内存当中,例如进程、外部设备状态、网络状态等。 * /root:root 用户的主目录。 * /sbin:该目录下放置开机过程中需要的命令,包括开机、修复、还原系统等。 * /srv:该目录放置与网络服务相关的文件数据 * /sys:这个目录是一个虚拟文件系统,主要记录与内核相关的信息,与 /proc 目录十分相似。 * /tmp:让一般用户或者正在执行程序暂时放置文件的地方。 在根目录下,还有两个目录,分别是 /usr、/var。 FHS 详细描述了这两个目录及其子目录的结构,我们对此做一个简单介绍。 # 四、/usr 目录 usr 其实是 UNIX Software Resource 的全称,即 UNIX 操作系统软件资源。 FHS 建议所有软件开发者都应该将数据合理地放置到这个目录的子目录下。 一般来说,/usr 下的子目录有: * /usr/bin/:绝大部分的用户命令都在此处,它与/bin目录的区别在于后者存放与开机相关的命令。 * /usr/include/:C/C++的头文件和包含文件。 * /usr/lib/:包含各应用软件的函数库、目标文件,以及一些不被用户惯用的执行文件。 * /usr/local/:系统管理员在本机自行下载的软件。 * /usr/sbin/:非系统正常运行需要的系统命令。 * /usr/share/:放置共享文件的地方 * /usr/src/:源码放置的地方 # 五、/var 目录 /var 目录下主要放置常态化变动的文件,例如缓存、登录日志文件、软件运行产生的文件等。 /var 下的子目录常见有: * /var/cache/:应用程序运行过程中产生的暂存文件。 * /var/lib/:应用程序运行过程中,需要使用到的数据文件放置的目录。 * /var/lock/:某些设备或文件要求使用时具有排他性,即上锁,该目录存放这类设备文件。 * /var/log/:日志或登录文件放置的目录。 * /var/mail/:放置个人电子邮件的目录。 * /var/run/:某些程序或者是服务启动后,将它们的 PID 记录在这个目录下 * /var/spool/:这个目录通常会放置一些队列数据,包括等待收寄的电子邮件、cron 任务等。 最后,大家如果有兴趣,可以自行前往 FHS 英文文档查看 FHS 相关内容,附上链接: [FHS 英文文档](https://refspecs.linuxfoundation.org/FHS_2.3/fhs-2.3.pdf) (完) 本文为原创文章,转载请告知作者,未经授权请勿转载。 欢迎关注我的微信公众号、知乎:多面手程序员 如果您觉得这篇文章还不错,随手点赞,手有余香~ : )