在 Windows 中我们会看到磁盘驱动器的标识比如
C:\
E:\
文件和目录名都跟在驱动器名后面。Linux 和 Windows 完全不同在 Linux 中你可以在根目录下运行ls
观察它的目录结构
/
- 根目录
顾名思义根目录就是所有目录所在的目录它是 Linux 中所有目录的根从某种概念上讲它有点类似于 Windows中的磁盘驱动器符号。之后将会看到所有其他目录都是以
/
开头的。
/bin
- 存放重要的用户二进制文件目录
bin 是
binary
的缩写/bin 目录存放了非常重要的用户二进制文件其实就是一些程序。需要特别说明的是/bin 中存放的都是在单用户维护模式下还能被操作的命令这些命令可以被 root 和普通用户使用。在 / bin 中我们可以看到例如chmod
、du
这些我们经常使用的 Linux 命令程序。
/boot
- 存放系统启动时需要文件的目录
/boot
中存放的主要是系统启动时需要用到的文件比如EFI
、GRUB
以及 Linux 内核。
/dev
- 设备文件目录
Linux 将所有东西都看成文件设备也不例外不论是实体的硬件设备还是虚拟设备。实体硬件比如第一块被检测到的硬盘会被挂载到
/dev/sda
第二块会被挂载到/dev/sdb
以此类推。虚拟设备比如null
、random
、stderr
、stdin
和stdout
。
/etc
- 配置文件目录
etc
的含义是Et cetera
表示一些相关的其他东西/etc 从 UNIX 早期开始就被用来存放配置文件一直沿用至今。需要注意的是/etc 中存放的是系统配置文件特定用户的配置文件放在每个用户的 / home 目录下。
/home
- 用户目录
/home
目录中存放的是每个用户的用户目录比如有一个用户叫 tom/home/tom 就是他的用户目录每个用户的用户目录中存放的用户数据和用户配置文件比如每个用户的.bashrc
文件、.ssh
目录等。普通用户只能访问自己的用户目录而不能访问别人的root 用户则没有此限制。
/lib
- 重要的共享库目录
/lib
目录中存放的是/bin
和/sbin
中那些重要的二进制文件程序需要的共享库。另外/usr/bin
中二进制文件程序需要的共享库都存放在/usr/lib
。
/lost+found
- 恢复文件目录
每个 Linux 文件系统都有 / lost+found 目录当文件系统崩溃时在下次启动时将会进行文件系统自检任何在崩溃过程中损坏的文件都将被放入 / lost+found你可以尝试找到并恢复这些文件。
当你将一些可删除媒介挂比如 CDU 盘光驱等载到计算机上时系统会在 / media 下自动创建子目录之后就可以通过访问这个子目录来访问媒介。比如你在电脑上插入 CD在 / media 目录下就会自动生成一个子目录你可以通过访问这个子目录来访问 CD 的内容。
/mnt
- 临时挂载点目录
mnt
是mount的缩写
各种设备挂载到系统后会在 / mnt 目录下生成相应设备的目录比如挂载光驱、文件系统、CD 等。
/opt
- 可选包目录
opt
是Optional
的意思系统中安装的可选软件包被存放在 / opt 目录中。
/proc
- 内核和进程文件目录
/proc
是一个虚拟目录并不包含任何标准文件。当系统启动后会对当前内核和硬件信息进行检测并将这些信息放在这个目录中其实都在内存中。你可以使用cat /proc/meminfo
来查看关于内存的一些信息或者使用cat /proc/version
来查看 Linux 内核信息。
/root
- root 用户的 home 目录
和一般用户的 home 目录放在
/home/{用户名}
不同root 用户的 home 目录专门被放在/root
。
/run
- 应用程序状态目录
/run
目录用来存放应用程序在运行期间需要的一些短暂存在的文件比如 socket 和 pid 文件这些文件对这些应用程序的运行很重要因此不能把他们放在 / tmp 目录下因为 / tmp 目录下的文件有可能会被系统清空。
/sbin
- 系统管理员用的二进制文件目录
/sbin
目录和/bin
目录有些类似都是存放二进制文件。比较特殊的是/sbin 目录存放的都是系统管理的命令程序一般只有 root 用户能使用。
/srv
- 服务数据目录
/srv
目录主要用来存放一些系统提供的网络服务的数据如果你在机器上运行一个 HTTP 服务器来对外提供静态文件时/srv/http
目录将存放这些静态文件如果你运行一个 FTP 服务器对外提供文件则/srv/ftp
目录将存放这些文件。
/tmp
- 临时文件目录
应用程序会将一些临时文件存放在 / tmp 目录中一般来说当系统重启后/tmp 下的文件会被自动清空也会被一些监控程序清空。
/usr
- 用户二进制文件和只读文件目录
/usr
目录下存放的是用户使用的程序可以很明显地发现Linux 将普通用户和系统使用的程序分开存放比如上面提到过系统使用的一些重要程序存放在 / bin而那些不重要的程序就被放在 / usr/bin。不太重要的系统管理程序存放在 / usr/sbin 而不是 / sbin。usr 也被称为UNIX Software Resource
这是比较早期的说法。下面是 / usr 目录下常见的几个子目录的含义
- /usr/bin 存放用户命令
- /usr/include 存放编程语言的头文件和包含文件
- /usr/lib 存放各个应用程序的库函数和目标文件
- /usr/local 存放系统管理员下载的软件的安装目录
- /usr/sbin 存放不常用的系统命令
- /usr/src 存放源码
/var
- 变动数据目录
/var
一般用来存放经常变动的数据比如日志文件和缓存文件。下面是 / var 目录下常见的几个子目录的含义
- /var/cache 存放应用程序运行产生的临时文件
- /var/lib 存放程序在执行过程中需要使用到的数据文件每个软件在此目录下都有自己独自的目录
- /var/lock 存放程序的锁状态
- /var/log 存放各种日志文件
- /var/mail 存放个人电子邮箱
- /var/run 有些程序在运行后会将他们的 pid、socket 文件放置到这个目录中
软件安装规范
根据FHS(http://www.pathname.com/fhs/)的官方文件指出 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户都能够遵循FHS的标准。 也就是说FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。 这样做好处非常多因为Linux操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。
1. 可分享的
可以分享给其他系统挂载使用的目录所以包括执行文件与用户的邮件等数据 是能够分享给网络上其他主机挂载用的目录
2. 不可分享的
自己机器上面运作的装置文件或者是与程序有关的socket文件等 由于仅与自身机器有关所以当然就不适合分享给其他主机了。
3. 不变的
有些数据是不会经常变动的跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等
4. 可变动的
经常改变的数据例如登录文件、一般用户可自行收受的新闻组等。
事实上FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已分别是底下这三个目录的定义
-
/(root, 根目录)与开机系统有关
-
/usr (unix software resource)与软件安装/执行有关
-
/var (variable)与系统运作过程有关