Linux的文件目录结构介绍

06_目录结构介绍

一、Linux目录配置依据–FHS

利用Linux来开发产品或发行的社区、公司及个人太多了,如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰。所以,后来就有所谓的Filesystem Hierarchy Standard(FHS)标准的出现。根据FHS的标准文件指出,主要目的是希望用户了解到已安装软件通常放置在哪个目录下。事实上,FHS会根据文件系统使用的频繁与否和是否允许用户随意修改,而将目录定义成四种交互作用的形态。下面用表格说明:

可共享的(shareable)不可共享(unshareable)
不变(static)/usr(软件存放处)/boot(启动与内核文件)
/opt(第三方辅助软件)/boot(启动与内核文件)
可变动(variable)/var/mail(用户邮箱)/var/run(程序相关)
/var/spool/news(新闻组)/var/lock(程序相关)
  • 可共享:可以分享给其他系统挂载使用目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。
  • **不可共享:**自己机器上面运行的设备文件或是与程序有关的socket文件等,由于仅与自身机器有关,所以当然不适合分享给其他主机。
  • 不变:有些数据是不会经常变动的,跟随着发行版本而不变动。例如函数库、文件说明、系统管理员所管理的主机服务配置文件等。
  • 可变动:经常修改的数据,例如日志文件、一般用户可自行接受的新闻组等。

二、Linux目录的详细介绍(CentOS7)

1. 目录树(directory tree)

Linux的文件采用层级式的树状目录结构。在Linux中,所有文件的目录都是由根目录(/)开始的。那是所有目录和文件的源头。也就是说CentOS最上层是根目录"/",然后在此目录下一个一个的分支下来,有点像树枝。我们也称这种目录配置方式为:目录树(directory tree)。根目录的特性:

  • 目录树的起始点为根目录(/,root)
  • 每一个目录不止能使用本地端的partition的文件系统,也可以使用网络上的filesystem。举例来说,可以利用Network File System(NFS)服务器挂载某特定目录等
  • 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的

在这里插入图片描述

⚠️ 这句话一定要记住:在Linux中,一切皆文件

2. 目录的详细介绍

目录应放置文件内容
第一部分:FHS要求必须存在的目录
/bin系统有很多存放执行文件的目果,但/bin比t较特殊。因为/bin放置的是在单人维护模式下还能够被使用的命令。在/bin下面的命令可以被root与一般账号所使用,主要有:cat、 chmod. chown、date、mv、 mkdir、cp、 bash 等常用的命令
/boot这个目录主要在放置启动会使用到的文件,包括Linux 内核文件以及启动选项气启动所需配置文件等。Limux 内校常用的文件名为:vmlinuz,如果使用的是 grub2 这个启动引1导程序,则还会存在boot/grub2/这个目录。
/dev在 Linux 系统上,任何装置与接口设备都是以文件的型态存在于这个目录当中的。你只要透过存取这个目录底下的某个文件,就等于存取某个装置。 比较重要的文件有/dev/null,/dev/zero,,/dev/tty,/dev/loop*,/dev/sd*等等
/etc系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等,一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有 root 有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有: /etc/modprobe.d/,/etc/passwd,/etc/fstab,/etc/issue 等等。另外 FHS 还规范几个重要的目录最好要存在 /etc/ 目录下:
1. /etc/opt(必要): 这个目录在放置第三方协力软件 /opt 的相关配置文件
2./etc/X11/(建议): 与 XWindow 有关的各种配置文件都在这里,尤其是 xorg.conf 这个 XServer的配置文件。
3./etc/sgml/(建议):与 SGML 格式有关的各项配置文件
4./etc/xml/(建议]:与 XML 格式有关的各项配留文件
/lib系统的函数库非常的多,而/lib 放置的则是在开机时会用到的函式库, 以及在/bin 或/sbin 底下的指令会呼叫的函式库而已。 什么是函式库呢? 你可以将他想成是[外挂],某些指令必须要有这些[外挂]才能够顺利完成程序的执行之意。 另外 FSH 还要求底下的目录必须要存在:
/lib/modules/:这个目录放置可抽换式的核心相关模块(驱动程序)
/mediamedia 是[媒体]的英文,顾名思义,这个/media 底下放置的就是可移除的装置! 包括软盘、光盘、DVD 等等装置都暂时挂载于此。常见的档名有: /media/floppy,/media/cdrom 等等。
/mnt如果你想要暂时挂在某些额外的装置,一般建议你可以放置在这个目录中。在早期的时候,这个目录的用途与/media相同,只是现在有了/media这个目录之后,/mnt目录就用来暂时挂载使用了
/opt这个是给第三方协力软件仿制的目录。什么是第三方协力软件?举例来说:KDE这个桌面管理系统是一个独立的计划,不过可以安装到Linux系统中,因此KDE的软件就建议放在这个目录中。另外,如果你想要自行安装额外的软件,那么也能够将你的软件装到这个目录下。不过,以前的Linux系统中,我们还是习惯放在/usr/local目录中。
/run早期的FHS规定系统开机后产生的各项信息应该放置在/var/run目录下,新版的FHS则规范到/run下,由于/run可以使用内存来仿真,因此效能上会好很多。
/sbinLinux 有非常多指令是用来设定系统环境的,这些指令只有 root 才能够利用来[设定] 系统,其他用户最多只能用来[查询]而已。放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括: fdisk,fsck,ifconfig,mkfs 等等。
/srvsrv 可以视为[service] 的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如 WWW,FTP 等等。举例来说,WWW服务器需要的网页资料就可以放置在/srv/www/里面。不过,系统的服务数据如果尚未要提供给因特网任何人浏览的话,预设还是建议放置到 var/lib 底下即可。
/tmp这是让一般用户或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录啊! 因为 FHS 甚至建议在开机时,应该要将/tmp 下的数据都删除!
/usrusr 是Unix Software Resource的缩写, 也就是【Unix 操作系统软件资源】所放置的目录。 FHS 建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。/usr 里面放置的数据属于可分享的与不可变动的(shareable,static)。如果你知道如何透过网络进行分区槽的挂载(例如在服务器篇会谈到的 NFS 服务器),那么/usr 确实可以分享给局域网络内的其他主机来使用。其实/usr下面还有很多次目录也是很重要的,后续介绍…
/var主要放置变动性的数据。如果/usr 是安装时会占用较大硬盘容量的目录,那么/var 就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var 目录主要针对常态性变动的文件,包括快取(cache)、登录档(log file)以及某些软件运作所产生的文件,包括程序文件(lock file,run file),或者例如 MySOL 数据库的文件等等。其实/var下面还有很多次目录也是很重要的,后续介绍…
第二部分:FHS建议可以存在的目录
/home这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时, 默认的用户家目录都会规范到这里来,比较重要的是,家目录有两种代号:
1. ~:代表目前这个用户的家目录
2. ~kang:则代表kang的家目录
/lib<qual>用来存放与 /lib 不同的格式的二进制函式库,例如支持 64 位的 /lib64 函式库等
/root系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,目录就能够拥有 root 的家目录,所以我们会希望 root 的家目录与根目录放置在同一个分区槽中。

实际上,FHS针对根目录所定义的标准仅有上面的目录,不过Liunx下还有其他目录你也需要理解一下,下面是几个在Linux当中也是非常重要的目录:

目录应放置文件内容
/lost+found这个目录是使用标准的 ext2/ext3/ext4 文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话,就不会存在这个目录了!
/proc这个目录本身是一个[虚拟文件系统(virtual filesystem)] 。他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间。 比较重要的文件例如: /proc/cpuinfo,/proc/dma,/proc/interrupts,/proc/ioports,/proc/net/* 等等。
/sys这个目录其实跟/proc 非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量喔!

下面就对/usr和/var下的次目录进行详解:先对/usr进行讲解,再对/var进行讲解。

  • /usr的意义与内容

所有系统默认的软件(distribution 发布者提供的软件)都会放置到/usr 底下,因此这个目录有点类似 Windows 系统的 [C:Widowsl(当中的一部份)+ C:Program filesl] 这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。一般来说,/usr 的次目录建议有底下这些:

目录应放置的文件内容
第一部分:FHS要求必须存在的目录
/usr/bin所有一般用户能够使用的指令都放在这里。目前新的 CentOS 7 已经将全部的用户指令放置于此,而使用连结档的方式将 /bin 连结至此!!也就是说, /usr/bin 与 /bin 是一模一样了!另外,FHS要求在此目录下不应该有子目录!
/usr/lib基本上,与/lib功能相同,所以/lib就是链接到次目录中的。
/usr/local系统管理员在本机自行安装自己下载的软件(非 distribution 默认提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的 distribution 提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦! 你可以自行到/usr/local 去看看,该目录下也是具有 bin,etc,include, lib…的次目录。
/usr/sbin非系统正常运行所需要的系统指令,最常见的就是某些网络服务器软件的服务指令(daemon)。不过基本功能与/sbin也差不多,因此目前/sbin就是链接到此目录的。
/usr/share主要放置只读架构的数据文件,当然也包括共享文件。在这个目录下放置的数据几乎是部分硬件架构均可读取的数据,在此目录下常见的还有这些次目录:
1. /usr/share/man:联机帮助文件
2./usr/share/doc:软件杂项的文件说明
3./usr/share/zoneinfo:与时区有关的时区文件
第二部分:FHS建议可以存在的目录
/usr/games与游戏比较相关的数据放置处
/usr/includec/c++等程序语言的档头(header)与包含档(include)放置处,当我们以 tarball 方式(*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档。
/usr/libexec某些不被一般使用者惯用的执行档或脚本(script)等等,都会放置在此目录中。例如大部分的 X 窗口底下的操作指令, 很多都是放在此目录下的。
/usr/lib<qual>与 /libequa>/功能相同,因此目前 /libequal> 就是链接到此目录中
/usr/src般原始码建议放置到这里,src 有 source 的意思。至于核心原始码则建议放置到/usr/src/linux目录下。
  • /var的意义与内容
目录应放置的文件内容
第一部分:FHS要求必须要存在的目录
/var/cache应用程序本身运作过程中会产生的一些暂存档
/var/lib程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MysQL 的数据库放置到/var/lib/mysql/而 rpm 的数据库则放到/var/lib/rpm 去!
/var/lock某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时,可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。举例来说,刻录机正在刻录一块光盘,你想一下,会不会有两个人同时在使用一个刻录机烧片?如果两个人同时刻录,那片子写入的是谁的资料?所以当第一个人在刻录时该刻录机就会被上锁, 第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用。目前此目录也已经挪到/run/lock 中。
/var/log这个很重要! 这是登录文件放置的目录!里面比较重要的文件如var/log/messages, /var/log/wtmp(记录登入者的信息)等。
/var/mail放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中。通常这两个目录是互为链接文件啦。
/var/run某些程序或者是服务启动后,会将他们的 PID 放置在这个目录下。至于 PID 的意义我们会在后续提到的。与 /run 相同,这个目录链接到 /run 去了!
/var/spool这个目录通常放置一些队列数据,所谓的[队列]就是排队等待其他程序使用的数据! 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中,等到被送出后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中。

3.针对FHS,各家分配的异同,与CentOS7的变化

由于 FHS 仅是定义出最上层(/)及次层(/usr,var)的目录内容应该要放置的文件或目录数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了。举例来说,CentOS的网络设定数据放在/etc/sysconfig/network-scripts/ 目录下,但是 SuSE 则是将网络放置在 /etc/sysconfig/network/ 目录下。目录名称可是不同的,不过只要记住大致的 FHS 标准,差异性其实有限。

此外,CentOS 7 在目录的编排上与过去的版本也有所不同。比较大的差异在于将许多原本应该要在根目录(/)里面的目录,将他内部数据全部挪到 /usr 里面去,然后进行连结设定。包括底下这些:

  • /bin -->/usr/bin
  • /sbin --> /usr/sbin
  • /lib --> /usr/lib
  • /lib64 -->/usr/lib64
  • /var/lock --> /run/lock
  • /var/run --> /run

三、绝对路径和相对路径

说起目录必定会提及的就是路径,根据我们写法的不同,可以将路径定义为绝对路径(absolute)相对路径(relative)。这两种文件名/路径的写法是这样的:

  • 绝对路径:由根目录(/)开始写起的文件名或目录名称,例如:/home/user;
  • 相对路径:相对于当前路径的文件名写法。例如:./home/user 或 …/…/home/user 等等,口诀:开头只要不是 / 就属于相对路径

你必须要了解,相对路径是以你当前所在路径的相对位置来表示的。举例来说:假如你当前在/home这个目录下,如果想要进入/etc/sysconfig/network-scripts这个目录时,你可以使用下面两种的任意一种写法:

  1. cd /etc/sysconfig/network-scripts (绝对路径)
  2. cd …/sysconfig/network-scripts (相对路径)

在使用相对路径时,因为你在/home目录下,所以你需要回到上一层(…/)之后,才能够继续进入到 /etc 目录下,要特别注意这两个特殊的目录:

  • . :代表当前的目录,也可以使用 ./ 表示
  • … :代表上一层目录,也可以用 …/ 表示

这个 . 与 …目录概念很重要,你经常会见到 cd… 或 ./command 之类的指令下达方式,这就是代表上一层和当前所在目录的方式。

例题:

​ 问:如何先进入/var/spool/mail/目录,再进入/var/spool/cron/目录内?

​ 答:从题目中可以看出/mail 与 /cron 是同样在/var/spool目录中,所以可以通过下面的指令下达:

  1. cd /var/spool/mail
  2. cd …/cron

如此就不需要再由根目录开始写起了。这个相对路径是非常有帮助的。如果你需要进入的目录距离你当前所在的目录很近,就可以使用相对路径的方法进入你所需要的目录。灵活的使用相对路径和绝对路径会让你在切换路径时行云流水。

例题:

​ 问:有时候你常常会看到类似 ./run.sh 之类的数据,这个指令又是什么意思呢?

​ 答:由于指令的执行需要变量的支持,若你的执行文件放置在本目录,并且本目录并非正规的执行文件目录(bin,/usr/bin 等为正规),此时要执行指令就得要严格指定该执行档。[./] 代表本目录的意思,所以[./run.sh] 代表[执行本目录下,名为 run.sh 的文件] 。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值