概述

多数Linux发行版本都是遵循文件系统结构标准(Filesystem Hierarchy Standard, 简称FHS),可以在这里找到该标准。本文对Linux的文件系统结构进行简单的介绍。

根目录/

所有的Linux系统都有根目录,由/表示。Linux系统的所有内容都在该目录下。

二进制目录

目录 说明
/bin 包括了可执行的二进制文件,通常这些二进制文件可以被所有用户访问。FHS规定,该目录至少包括/bin/cat/bin/date文件
/sbin 包括了系统的二进制文件,通过需要root权限,用来配置系统
/lib 包括了/bin所依赖的库
/lib/modules Linux将从/lib/modules/$kernel-version/目录下载入内核模块
/lib32和/lib64 顾名思义,分别存放不同位数的库
/opt 该目录用来存放一些可选的软件,通常情况下,很多第三方的客户软件会选择安装在该目录下

配置文件目录

目录 说明
/boot 顾名思义,用来存放系统启动的配置文件,如grub引导的配置文件/boot/grub/grub.cfg
/etc 几乎大部分配置文件都放在改目录下。历史上etc的全称是etcetera,不过,现在一般认为是Editable Text Configuration的缩写
/etc/init.d 存放daemon启动、停止等的脚本文件。不过在引入systemd之后,启动脚本有所变化
/etc/skel 存放创建新用户之后所需的配置文件的模板,如.bashrc文件,默认会从该目录拷贝到用户目录
/etc/sysconfig 一般出现在RedHat系列的Linux系统中,存放系统有关配置,如IP的配置文件等

数据目录

目录 说明
/home 当创建一个新用户的时候,默认情况下,系统会为用户创建一个/home/<username>的目录用来存放个人数据。
/root 该目录被很多Linux系统用来存放root用户的个人数据
/srv 可以被解释为served by your system。FHS允许rsyncftpwww等数据存放在改目录
/media 该目录通常被用来挂载可移除设备,如CD-ROM,U盘等
/mnt 根据FHS,该目录通常被用来作为短期的挂载点
/tmp 该目录用来存放一些短期的文件,不要再该目录下存放重要文件,该目录下的文件有可能会被系统回收

内存目录

Linux系统中,几乎所有的东西都被映射成文件,文件有的是对应着硬盘、设备(CD-ROM等)等,有的则被Linux映射到内存中。这一节介绍映射到内存中的目录。

/dev目录

/dev目录映射了各种设备文件,这些文件由系统启动的时候扫描硬件生成。

物理设备文件

物理设备包括很多种,如硬盘,CD-ROM等。不同的物理设备映射为/dev目录下不同的文件。如SATA/SCSI设备或USB通常被映射为/dev/sd*,其中*可以为[a-z]中的任意字符;而IDE设备通常被映射为/dev/hd*,其中*[a-z]中任意字符。

/dev/tty跟/dev/pts

首先需要搞清楚tty设备跟pts设备的区别。这两者都是终端设备,所谓终端设备通常指的是能够接受命令输入,并可能同时能够输出的设备,但是这两者是有本质的不同的:

  • tty设备

    ttyTeletype的简称,表示原生的终端设备,通常指的是物理终端设备如串口,键鼠接口等,以及系统内核模拟的终端设备。

  • pts设备

    ptsPseudo Terminal Slave的简称,表示伪终端设备,通常由应用进程模拟出来,如ssh开启的终端等。

tty设备通常被映射为/dev/tty*,其中*代表数字,如/dev/tty1等。而pts设备被映射为/dev/pts/*,其中*表示数字,如/dev/pts/1

/dev/null

该文件在Linux中有着特殊的意义,是一个只有输入的文件,且文件有无限的大小,你不能从该文件读出任何东西,任何写入的内容逻辑上相当于消失了。从实现的角度,实际上任何写入的内容都被系统丢弃了。

/proc目录

该目录用来记录内核以及内核进程的实时信息,可以通过它轻而易举的实现对内核状态的获取甚至改变。

目录 说明
/proc/ 几乎每个进程都会在该目录下有映射的文件/proc/*,其中<id>代表进程的ID。该目录记录的该进程的几乎所有的状态信息。
/proc/cpuinfo 记录了系统的CPU信息,通常通过该文件可以知道系统有多少个CPU(核数)。
/proc/meminfo 记录了系统的内存信息,可以通过它知道系统有多少内存
/proc/sys /proc目录下的绝大部分文件都是只读的文件,但是在该目录下有些文件是可写的,可以通过它们改变内核状态
/proc/interrupts 记录了当前系统的中断信息
/proc/kcore 这个文件代表了系统的物理内存,其大小就是物理内存的大小,因此千万不要用cat来试图显示该文件内容

/usr目录

/usr目录估计是被误解最多的目录,一般大家都以为它是user的简写,感觉应该存放的是用户相关的东西,但是实际上完全不是这样。它其实是Unix System Resources的简写,表示Unix系统资源。通常情况下,该目录以只读的权限被挂载。

目录 说明
/usr/bin 很多命令都存放在这个目录下面,事实上,在Centos跟Solaris系统中,/bin目录实际上只是一个软连接,连接到此目录
/usr/include 存放大量的头文件,可能会被C代码引用
/usr/lib 存放库文件,同样,在Centos跟Solaris系统中,/lib其实就是软连接到此目录
/usr/lib64 存放64位的库文件,在Centos中,/lib64也是软连接到此目录
/usr/sbin 很多daemon程序都是放在此目录下,在Centos中,/sbin也是软连接到此目录
/usr/local 此目录通常用来安装一些本地的应用
/usr/share 此目录通常用来存放各种体系无关的数据。/usr/share/man就是用来存放man命令用到的帮助文档
/usr/src 此目录通常存放内核的代码文件

/var目录

/var目录用来存放可变的数据,如日志,数据库文件等。

目录 说明
/var/log 此目录用来存放各种日志文件,包括系统跟应用的日志
/var/log/messages 在RedHat系列系统中,此文件用来记录系统刚刚发生的事情。在Debian和Ubuntu系统中,对应的文件是/var/log/syslog
/var/cache 此目录存放很多应用的缓存数据,如yum命令可能会缓存部分数据在此目录
/var/spool 一般情况下,该目录会存放邮件cron任务等数据
/var/lib 通常此目录下会存放应用的状态信息,如/var/lib/mysql存放mysql数据库,/var/lib/docker存放docker的数据