FHS标准
Filesystem Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构
组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。
FHS定义了两层规范,第一层是,/
下面的各个目录应该要放什么文件数据,例如/etc应该要放置设置文件,/bin与/sbin则应该要放置可执行文件等等。因为Linux的开发人员实在太多了,如果每个人都使用自己的目录配置方法,那么将可能会带来很多管理问题。你能想象,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗?很难想象。所以,后来就有所谓的文件系统层次标准(Filesystem Hierarchy Standard,FHS)出台。
第二层则是针对/usr
及/var
这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等。
也就是说,实际上,FHS针对目录架构仅定义了三层目录下应该放什么数据,分别是:
/
(root,根目录):与开机系统有关。/usr
(UNIX software resource): 与软件安装和执行有关。/var
(variable): 与系统运作过程有关。
Linux目录树
树状目录结构
各个目录的解释
bin
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令,放置的是在单用户模式维护模式下还能被操作的命令,/bin下命令可以被root和一般账号使用。如:cat、chmod、chown、mkdir、cp等
boot
放置开机会使用到的文件,包括liunx内核文件以及开机菜单与开机所需配置文件,包括一些连接文件以及镜像文件等。
/dev
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备与接口设备文件,在 Linux 中访问设备的方式和访问文件的方式是相同的,只要通过访问这个目录下面的某个文件就相当于访问该设备。
/etc
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
系统主要配置文件几乎都放置在这个目录内,如用户账号、密码、各种服务起始文件等、该目录下的文件普通用户可以查看,但只有root用户有权修改。FHS建议不要放置可执行文件(binary)在此目录。
- 该目录下比较重要的文件有:
/etc/inittab
/etc/init.d/
/etc/modprobe.conf
/etc/X11/
:与X Window 有关的各种配置文件放在这里,尤其是xorg.conf这个XServer的配置文件。/etc/xinetd.d/
: super daemon 管理的各项服务的配置文件目录。/etc/fstab
/etc/sysconfig
- 该目录下重要的目录有:
-
/etc/init.d/
: 所有服务的默认启动脚本都是放置在这里的。
例如启动或关闭iptables命令为:/etc/init.d/iptables start #启动 /etc/init.d/iptables stop #关闭
-
/home
系统默认用户的主文件夹,创建账户时会在该目录下自动生成这个用户的主文件夹,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
/root
系统管理员主文件夹,一般希望root的主文件夹与根目录放置在同一个分区中。
/lib
lib 是 Library(库) 的缩写,放置的是在系统开机时用到的函数库以及系统最基本的动态连接共享库,几乎所有的应用程序都需要用到这些共享库。其作用类似于 Windows 里的 DLL 文件,在
/bin
或/sbin
下面的命令会调用到的函数库也在/lib
内。
/lib/modules/
这个目录下放置内核相关的驱动程序。
/media
/media
下面放置的是可删除设备。linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mmt
与
/media
功能相似,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/
上,然后进入该目录就可以查看光驱里的内容了。
/opt
opt 是 optional(可选) 的缩写,这是给主机额外安装 第三方软件放置目录,比如你安装一个ORACLE数据库则就可以放到这个目录下,默认是空的。
/proc
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
比如查看某个进程的信息:
ll /proc/pid
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
/sbin
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序,
/sbin
目录下的命令只有root用户能够使用,普通用户只有查询的权限。/sbin
下包含开机、修复、还原系统所需要的命令。
至于服务器软件程序命令,一般放置在
/usr/sbin/
。
本机自行安装的第三方软件产生的命令,则放置在
/usr/local/sbin/
中。
/tmp
一般用户或者正在执行的程序暂时放置文件的地方。这个目录是任何人可以访问的,需要定期清理。
注意: 不可以与根目录分开的目录有:/etc
、/bin
、/sbin
、/dev
、/lib
这五个目录。
/sys
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:
- 针对进程信息的 proc 文件系统、
- 针对设备的 devfs 文件系统
- 针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/selinux
这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/srv
一些网络服务启动之后,这些服务所需要读取数据的目录。常见的服务例如WWW、FTP等,WWW服务需要的网页数据放置在
/srv/www/
里面。
/usr
用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr
下包含的子目录:
/usr/lib/
: 包含各应用软件的函数库、目标文件以及不被一般用户惯用的执行文件或脚本。注意该文件名也可能为/usr/lib64
。/usr/bin/
: 绝大部分的用户可使用命令放这里,注意与/bin的不同之处(是否与开机过程有关)。/usr/sbin/
: 非系统正常运行所需要的系统命令。/usr/src/
: 内核源代码默认的放置目录。/usr/local/
: 第三方软件安装位置。/usr/share/
: 放置共享文件的地方,各种帮助文档目录也在这个下面。/usr/include/
:C/C++等程序语言头文件与包含文件放置处,当使用tarball方式(*.tar.gz的方式安装软件)安装某些数据时,会使用里面的许多文件。/usr/X11R6/
:X Window 系统重要数据防止目录。
/var
存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
/var
下包含的子目录:
/var/cache/
: 应用程序运行过程产生的一些暂存文件。/var/lib/
: 程序本身运行过程中,需要使用到的数据文件放置在这里。/var/lock/
: 某些设备或文件资源只能被一个应用程序使用,该文件就是将该文件上锁,以确保单一软件使用。/var/log/
: 登录文件放置目录。/var/mail/
: 个人邮件信箱目录,不过这个目录也被放置到/var/spool/mail/
目录中,这两个目录互为连接文件。/var/run/
:某些程序或服务启动后,会将它们的PID放置在该目录下。/var/spool/
: 该目录放置一些队列数据。
参考:菜鸟教程
参考:Linux系统下的目录树结构