在Linux下面,所有的文件与目录都是由根目录开始的。对Linux来讲,系统所识别的第一个被称之为与根直接关联的文件系统,我们称之为根文件系统;根是所有目录与文件的源头,然后再一个一个分支下来,有点像是树枝状,因此我们也称这种目录配置方式为“目录树(directorytree)”;其主要特性有:

  1、目录树的起始点为根目录(/,root)

  2、每一个目录不只能使用本地端的文件系统,也可以使用网络上的文件系统

  3、每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的

  在Linux中,我们说一个文件,通常要包含其路径和基名。根据文件名写法的不同,也可将路径(path)定义为绝对路径(absolute)与相对路径(relative)。这两种文件名/路径的写法依据如下:

  绝对路径:由根目录(/)开始写起的文件名或目录名称

  相对路径:相对于目前路径的文件名写法

  其中有两个特殊的目录需注意:

  .代表当前的目录,也可以用./来表示

  ..代表上一层目录,也可以用../来表示

  我们知道,在Linux中,一切皆文件,那么Linux中都有哪些类型的文件呢?

  当我们通过ls命令查看文件时,其第一列10个属性中的第一个代表的就是此文件的类型。Linux中的文件有以下几种:

  wKiom1eb-7PR1JLdAAAISzTk2Jw128.png

  -:普通文件(regular file):依照文件的内容,普通文件又大致可分为:

    纯文本文件(ASCII)

    二进制文件(binary)

    数据格式文件(data)

    d:目录(directory)

    l:链接文件(link)

    b:块设备文件(block device)

    c:字符设备文件(character device)

    s:套接字(socket)

    p:管道(FIFO,pipe)

  我们知道,根是Linux系统中所有文件的源头,但如果我们查看各发行版根目录下的文件会发现,有很多相同的目录。这是因为LSB组织定义了Linux发行版基础目录名称命名法则及功用规定,叫做FHS(Filesystem Hierarchy Standard)--文件系统层级标准。我们通过tree命令来查看一下根目录下的文件并对每个目录的功用进行简略解释:

    wKioL1eb_c2iKO_7AAAYn-Hhvbo616.png

  /bin:系统自身启动和运行时可能会用到的核心二进制程序;在单用户维护模式下还能够被操作的命令;不能关联至独立分区;

  /boot:引导文件存放目录;开机会使用到的文件,包括Linux内核文件以及开机菜单与开机所需配置文件等;如果使用的是grub引导加载程序,则还会存在/boot/grub/这个目录

  /dev:所有设备文件及特殊文件存储位置;比较重要的文件有/dev/null、/dev/zero、/dev/tty等:

  /etc:系统主要的配置文件都存放于此,如人员的账号密码文件、各种服务的起始文件等;一般来说,这个目录下的各文件属性一般是可以让一般用户查阅的,但是只有root有权限修改;FHS建议不要放置可执行文件(binary)在这个目录中;比较重要的文件有:

    /etc/init.d/:所有服务的默认启动脚本都放置于此

    /etc/xinetd.d/:所谓的super daemon管理的各项服务的配置文件目录

    /etc/X11/:与XWindow有关的各种配置文件都在这里 ,尤其是xorg.conf这个XServer的配置文件

  /home:系统默认的普通用户的家目录;在创建一个一般用户时,默认的用户家目录都会规范到这里;家目录有两种代号:

    ~:代表目前用户的家目录

    ~USERNAME:代表USERNAME的家目录

  /lib:基本共享库文件以及内核模块文件;在开机时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库;/lib/modules/会放置内核相关的模块(驱动程序)

  /media:便携式移动设备挂载点

  /mnt:临时文件系统挂载点

  /opt:第三方应用程序的安装位置

  /root:系统管理员(root)的主文件夹;之所以放在这里,是因为如果进入单用户维护模式而仅挂载根目录时,该目录能够拥有root的主文件夹。所有我们希望root的主文件夹与根目录放置在同一个分区中

  /sbin:管理类的基本命令;不能关联至独立分区;系统启动即会用到的程序;Linux有很多命令是用来设置系统环境的,这些命令只有root才能够利用来“设置”系统,放在/sbin下面的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的命令

  /srv:可以视为"service"的缩写,服务类程序用到的中间数据;

  /tmp:临时文件存储位置;让一般用户或者是正在执行的程序暂时放置文件的地方

  /proc:用于输出内核与进程信息相关的虚拟文件系统(virtual filesystem),也叫伪文件系统,由内核参数映射而来;其放置的数据都是在内存中,例如系统内核、进程、外部设备的状态及网络状态等

  /sys:用于输出当前系统上硬件设备相关信息的虚拟文件系统,内核中与硬件设备相关的信息映射;主要记录与内核相关的信息,包括目前已加载的内核模块与内核检测到的硬件设备信息等

  /selinux:selinux相关的安全策略等信息的存储位置

  /usr:UNIX Software Resource;操作系统软件资源存放位置;一般来说,/usr的子目录建议有以下这些:

    wKiom1ecAETipuBiAAASo-hULKo208.png

    /usr/bin/:绝大部分的用户可使用的命令都放在这里;保证系统拥有完整功能而提供的应用程序

    /usr/include/:C/C++等程序语言的头文件(header)与包含文件(include)放置处

    /usr/lib/:包含各应用软件的函数库、目标文件(object file),以及不被一般用户惯用的执行文件或脚本(script)

    /usr/local/:系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录;第三方应用程序的安装位置

    /usr/sbin/:非系统正常运行所需要的系统命令,最常见的就是某些网络服务器软件的服务命令

    /usr/share/:结构化独立的数据;放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据;此目录下常见的有这些子目录:

        /usr/share/man:man帮助文件

        /usr/share/doc:软件杂项的文件说明

        /usr/share/zoneinfo:与时区有关的时区文件

    /usr/src/:一般源码建议放置到这里,src有source的意思;至于内核源码则建议放置到/usr/src/linux/目录下

  /var:经常发生变化的文件的存放位置;主要针对常态性变动的文件,包括缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件;常见子目录如下:

    wKioL1ecARKy_vSNAAAboe6dt3c326.png

    /var/cache/:应用程序缓存数据目录

    /var/lib/:应用程序状态信息数据;程序本身执行的过程中,需要使用到的数据文件放置的目录;在此目录下各自的软件应该要有各自的目录;

    /var/lock/:锁文件;某些设备或是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,因此就要将该设备上锁,以确保该设备只会给单一软件所使用

    /var/log/:日志目录及文件;登录文件放置的目录,里面比较重要的文件如/var/log/messages,/var/log/wtmp(记录登录者的信息)等

    /var/mail/:放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件

    /var/opt/:专用于为/opt下的应用程序存储可变数据

    /var/run/:运行中的进程的相关数据;通常用于存储进程的pid文件

    /var/spool/:应用程序的数据池;这个目录通常放置一些队列数据,所谓的“队列”就是排队等待其他应用程序使用的数据,这些数据被使用后通常都会被删除

    /var/tmp/:保存系统两次重启之间产生的临时数据

  需要注意的是,在开机过程中仅有根目录会被挂载,其它分区则是在开机完成后才会持续进行挂载的行为;正因如此,根目录下与开机过程有关的目录就不能与根目录放到不同的分区,主要有下面这些:

    /etc:配置文件

    /bin:重要执行文件

    /dev:所需要的设备文件

    /lib:执行文件所需的函数库与内核所需的模块

    /sbin:重要的系统执行文件

  注:以上目录的Linux发行版本为CentOS 7