概述
多数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允许rsync ,ftp ,www 等数据存放在改目录 |
/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设备
tty
是Teletype
的简称,表示原生的终端设备,通常指的是物理终端设备如串口,键鼠接口等,以及系统内核模拟的终端设备。pts设备
pts
是Pseudo 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 的数据 |