对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步,深入了解Linux文件目录结构的标准和每个目录的详细功能,对于我们用好Linux系统至关重要。
本文大部分都是整理自《鸟哥的Linux私房菜》
因为利用Linux来发开发产品的团队、公司或个人实在太多了,如果每个人都根据自己的想法来配置文件的放置目录,那么将可能造成很多管理上的困扰。你能想象,当你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗?很难想象吧,所以后来就有所谓的 Filesystem Hierarchy Standard(FHS)的标准出炉。
根据 FHS 的官方文件指出,其主要目的是希望让用户可以了解到已安装软件通常放置于哪个目录下,所以其希望独立的软件开发商、操作系统制作者以及想要维护系统的用户,都能够遵循 FHS 的标准。 也就是说,FHS 的重点在于规范每个特定的目录下应该应该放置什么样子的数据而已。 这样做好处非常多,这样Linux操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。
Linux文件目录
/
根目录是整个系统最重要的目录,因为不但所有的目录都是由根目录衍生出来,同时根目录也与开机、还原、系统修复等操作有关。由于系统开机时需要特定的开机软件、内核文件、开机所需程序、函数库等文件数据,若系统出现错误时,根目录也必须包含能够修复文件系统的程序才行。因为根目录是这么重要,所以在 FHS 的要求方面,希望根目录不要放在非常大的分区内,因为越大的分区会放越多的数据,如此一来根目录所在的分区就可能会有较多发生错误的机会。
因此 FHS 标准建议:根目录所在的分区越小越好,而且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能好,根目录所在的文件系统也比较不容易发生问题。
/bin
bin是Binary的缩写,这个目录存放着重要的Linux命令和二进制(可执行)文件,供所有用户使用
/boot
该目录包含启动过程所需的所有内容,配置文件和映射安装程序除外。
/dev
dev是Device(设备)的缩写,在Linux系统上,任何设备与接口设备都是以文件的形式存在于该目录当中,只需要通过访问这个目录下面的某个文件,就等于访问某个设备。比较重要的文件有 /dev/null
、/dev/zero
、/dev/tty
、/dev/Ip*
、/dev/hd*
、/dev/sd*
等
/etc
系统重要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的起始文件等。一般来说,这个目录下的各个文件可以让一般用户查阅,但是只有root有权限修改。 FHS 建议不要放置可执行文件在这个目录中。
/home
系统默认的用户主目录,在你创建一个一般用户账号时,默认的用户主文件夹都会规范到这里来。比较重要的是,主文件夹有两种代号,~
代表目前用户的主文件夹,~dmtsai
则代表 dmtsai 的主文件夹。
/lib
系统的函数库非常多,而/lib
放置的则是在开机时会用到的函数库,以及在/bin
或/sbin
下面的命令会调用的函数库。
/media
media是“媒体”的英文,顾名思义,这个/media
下面放置的就是可删除的设备。包括软盘、光盘、DVD等设备都暂时挂载于此。常见的文件名有/media/floppy
、/media/cdrom
等
/mnt
如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中,在比较早的时候,这个目录的用途跟/media
相同。只是在有了/media
之后,这个目录就用来暂时挂载用了
/opt
这个是给第三方软件放置的目录。如果你想要自行安装额外的软件(非原本的 distribution 提供的),那么就可以安装到这里来。不过以前的Linux系统中,还是习惯放置在/usr/local
目录下
/root
系统管理员root
的主文件夹。之所以放到这里,是因为如果进入单用户维护模式仅挂载根目录时,该目录就能够拥有root
的主文件夹,所以我们会希望root
的主文件夹与根目录放置在同一个分区中
/sbin
Linux有非常多的命令是用来设置系统环境的,这些命令只有root
才能利用来“设置”系统,其他用户最多只能用来“查询”而已。放置在/sbin
下面的是开机、修复、还原系统所需要的命令等。
/srv
srv可以视为service的缩写,是一些网络服务器启动之后,这些服务所需要取用的数据目录。常见的服务有WWW、FTP等。举例来说,WWW服务所需要的网页数据就可以放置在/srv/www
里面
/tmp
这是让一般用户或者正在执行的程序暂时放置文件的地方。这个目录任何人都能够访问,所以你需要定期清理下。重要的数据不可放置在此目录,以为 FHS 甚至建议在开机时将该目录下面的文件删除。
FHS 针对目录所定义的标准就仅有上面列举的,但是实际我们的Linux下面还有许多目录也需要了解下,下面几个就是在Linux系统中非常重要的目录。
/proc
这个目录是一个虚拟的目录,他放置的数据都是在内存中,系统内核、进程(process)、外部设备的状态及网络状态等。因为这个目录下的数据都是在内存中,所以本身不占用任何硬盘空间,比较重要的文件有/proc/cpuinfo
、/proc/dma
、/proc/interrupts
、/proc/ioports
、/proc/net/*
等。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/sys
该目录其实跟/proc
非常类似,也是一个虚拟文件系统,主要记录与内核相关的信息,包括目前已经加载的内核模块与内核检测到的硬件设备信息等。这个文件同样也不占用磁盘空间。
/usr
很多人会误以为 usr 是 user 的缩写,其实 usr 是 UNIX Software Resource 的缩写,也就是“UNIX 操作系统软件资源”所放置的目录,而不是用户的数据。FHS 建议所有的软件开发者应该将他们的数据合理地分别放置到这个目录的子目录,而不要自行新建该软件自己独立的目录。因为是系统所有的默认软件都会放置在/usr
下,因此这个目录有点类似 Windows 的 Program Files 目录,系统刚安装完毕时,这个目录会占用最多的硬盘容量
/var
如果/usr
是系统安装时占用磁盘容量最大的目录,那么/var
则是系统运行之后会渐渐占用磁盘容量的目录,因为/var
目录主要针对常态性变动的文件,包括缓存(cache)、日志文件(log file)以及某些软件运行时产生的文件
/run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有/var/run
目录,应该让它指向/run
需要注意的是,根目录与开机有关,开机过程只有根目录会被挂载,其他分区则是在开机完成之后才会持续进行挂载的行为,因此根目录下与开机过程有关的目录就不能够与根目录放到不同的分区中去,例如下面这些目录
-
/etc
:配置文件 -
/bin
:重要执行文件 -
/dev
:所需要的设备文件 -
/lib
:执行文件所需要用到的函数库与内核所需模块 -
/sbin
:重要的系统执行文件
这五个目录千万不可以与根目录分在不同的分区。
不同文件类型对应的颜色
- 白色:表示普通文件
- 蓝色:表示目录
- 绿色:表示可执行文件
- 红色:表示压缩文件
- 浅蓝色:链接文件
- 红色闪烁:表示软链接的文件有问题
- 黄色:表示设备文件
- 灰色:表示其它文件
补充小命令:tree
可以查看当前目录下的所有子目录和文件结构