Linux目录结构
Linux的每个目录都有特定的含义,如果随便乱放文件虽然不影响使用,但维护起来就很麻烦了,而且找东西也不好找。找了点资料,虽然不绝对,但是起码能给目录的使用做个参考。
References:
- http://linux-wiki.cn/wiki/zh-hans/Linux%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84
- https://likegeeks.com/linux-file-system/
- https://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/index.html 一个说明很详细的英文文档
- https://segmentfault.com/a/1190000000497217
- http://www.pathname.com/fhs/pub/fhs-2.3.html
根文件系统
- /bin
二进制文件目录,用于存放启动系统时用到的程序。
Linux核心命令存放的位置,像ls,mv等。bin是binary的缩写,表示二进制文件。 - /boot
引导程序和启动文件存放的地方。 - /dev
所有物理设备挂载的地方,像USB,DVD等。 - /etc
该目录中包含系统和应用软件的配置文件。 - /home
存储普通用户的个人文件。每个用户的主目录均在/home下以自己的用户名命名。 - /lib
这个目录里存放着安装包的共享链接库(lib)。不像Windows,你可能会在不同的文件夹下发现相同库的拷贝。 - /lib64
64位系统有这个文件夹,64位程序的库。 - /lost+found
这并不是Linux目录结构的组成部分,而是ext3文件系统用于保存丢失文件的地方。不恰当的关机操作和磁盘错误均会导致文件丢失,这意味着这些被标注为“在使用”,但却并未列于磁盘上的数据结构上。正常情况下,引导进程会运行fsck程序,该程序能发现这些文件。除了“/”分区上的这个目录外,在每个分区上均有一个lost+found目录。 - /media
可移动设备的挂载点,当前的操作系统通常会把U盘等设备自动挂载到该文件夹下。 - /mnt
临时用于挂载文件系统的地方。一般情况下这个目录是空的,而在我们将要挂载分区时在这个目录下建立目录,再将我们将要访问的设备挂载在这个目录上,这样我们就可访问文件了。 - /opt
可选的操作系统组件和第三方应用程序可能被安装在/opt下
多数第三方软件默认安装到此位置,一些可选的包也会放在这,并且受包管理器管理。 - /proc
由于在Linux上万物皆文件,这个文件夹存放一些在系统中正在运行的进程信息,并且你可以访问这些文件获取当前进程的详细信息。 - /root
这是root用户的主目录。 - /sbin
和/bin类似,但是放在这里的二进制文件只能系统管理员(如root)使用。里面多是系统管理命令,如fsck, reboot, shutdown, ifconfig等。 - /tmp
该目录用以保存临时文件。该目录具有Sticky特殊权限,所有用户都可以在这个目录中创建、编辑文件。但只有文件拥有者才能删除文件。 - /usr
实用工具和用户间的共享文件。详见下。 - /var
包含系统日志和其他的动态程序数据,详见下。
/usr目录结构
在Linux系统中,有一个很重要的目录——/usr目录。关于这个目录名称的由来,关于/usr目录起源的说法如下:
/usr通常包含了系统中最多的数据,因此这是系统中最重要的目录之一,因为它包含了所有用户的二进制文件,以及文档,库,头文件等等。用户程序像telnet,ftp等等也是放在这里。在最初的Unix实现中,/usr是用户的主目录(也就是说,曾经的/usr/someon和如今的/home/someone是一个意思)。在现在的Unix实现中,/usr是用户的程序和数据放置的地方。路径名没有变,但是它的含义已经从“用户相关的所有内容”窄化到了“用户可用的程序和数据”。因此,有些人可能将此目录称为“User System Resources”而不是最初预期的“user”。/usr下的数据是可共享的只读数据。这意味着/usr应该可以在各种符合FHS主机之间共享,并且不得写入。任何特定于主机或随时间变化的信息都应该存储在其他位置。大型软件包不得使用/usr层次结构下的直接子目录。
应注意,程序的配置文件、动态的数据文件等都不会存放到/usr,所以除了安装、卸载软件外,一般无需修改/usr中的内容。说在系统正常运行时,/usr甚至可以被只读挂载。由于这一特性,/usr常被划分在单独的分区,甚至有时多台计算机可以共享一个/usr。
- /usr/bin
用户二进制文件目录,用于存放用户使用的标准程序。
多数日常应用程序存放的位置。如果/usr被放在单独的分区中,Linux的单用户模式不能访问/usr/bin,所以对系统至关重要的程序不应放在此文件夹中。 - /usr/local
新装的系统中这个文件夹是空的,可以用于存放个人安装的软件。安装了本地软件的/usr/local里的目录结构与/usr相似 - /usr/local/bin
本地二进制文件目录,用于存放软件安装的程序。 - /usr/include
存放C/C++头文件的目录(如stdio.h) - /usr/include/sys
依赖于特定Linux版本的头文件通常可以在/usr/include/sys和/usr/include/linux中找到。 - /usr/lib
系统的库文件 - /usr/sbin
在单用户模式中不用的系统管理程序,如apache2等。
放在这里的二进制文件只能系统管理员(如root)使用。里面多是系统管理命令 - /usr/share
与架构无关的数据。多数软件安装在此。 - /usr/X11R6
该目录用于保存运行X-Window所需的所有文件。该目录中还包含用于运行GUI要的配置文件和二进制文件。 - /usr/src
源代码
/var目录结构
/var中包括了一些数据文件,如系统日志等。/var的存放使得/usr被只读挂载成为可能。
- /var/cache
应用程序的缓存文件 - /var/lib
应用程序的信息、数据。如数据库的数据等都存放在此文件夹。 - /var/local
/usr/local中程序的信息、数据 - /var/lock
锁文件 - /var/log
日志文件 - /var/opt
/opt中程序的信息、数据 - /var/run
正在执行着的程序的信息,如PID文件应存放于此 - /var/spool
存放程序的假脱机数据(即spool data) - /var/tmp
临时文件
所以安装软件时:
所有编译安装的软件(比如通过cmake) -> /usr/local
所有其他类型的软件(比如Java web应用,有自己的服务器和加载资源) -> /opt
系统为正常使用提供的程序,包括用于程序开发的工具,都可以在目录/usr/bin中找到;系统管理员为某个特定的主机或本地网络添加的程序通常可在目录/usr/local/bin或/opt中找到。
系统管理员一般喜欢使用/opt和/usr/local目录,因为他们分离了厂商提供及后续添加的文件与系统本身提供的应用程序。一直保持以这种方式组织文件的好处在你需要升级操作系统是就可以看出来了,因为只有目录/opt和/usr/local里的内容需要保留。建议对于系统级的应用程序,可以放在/usr/local目录中来运行和访问所需的文件。对于开发用和个人的应用程序,最好在home目录中使用一个文件夹存放。
gcc一般位于/usr/bin或/usr/local/bin目录中