Linux初学(CnetOS Linux7)之目录配置--FHS(Filesystem Hierarchy Standard)

1.根目录 (/) 的意义与内容

根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软体、核心档案、开机所需程式、函式库等等档案资料,若系统出现错误时,根目录也必须要包含有能够修复档案系统的程式才行。
因此FHS标准建议:根目录(/)所在分割槽应该越小越好, 且应用程式所安装的软体最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的档案系统也较不容易发生问题。

FHS针对目录树架构仅定义出三层目录底下应该放置什麽资料而已,分别是底下这三个目录的定义:

  • / (root, 根目录):与开机系统有关;
  • /usr (unix software resource):与软体安装/执行有关;
  • /var (variable):与系统运作过程有关。

目录 应放置档案内容
第一部份:FHS 要求必须要存在的目录
/bin 系统有很多放置执行档的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。 在/bin底下的指令可以被root与一般帐号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot 这个目录主要在放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。 Linux kernel常用的档名为:vmlinuz,如果使用的是grub2这个开机管理程式, 则还会存在/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/ 目录下喔:
  • /etc/opt(必要):这个目录在放置第三方协力软体 /opt 的相关设定档
  • /etc/X11/(建议):与 X Window 有关的各种设定档都在这裡,尤其是 xorg.conf 这个 X Server 的设定档。
  • /etc/sgml/(建议):与 SGML 格式有关的各项设定档
  • /etc/xml/(建议):与 XML 格式有关的各项设定档
/lib 系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库, 以及在/bin或/sbin底下的指令会呼叫的函式库而已。 什麽是函式库呢?你可以将他想成是『外挂』,某些指令必须要有这些『外挂』才能够顺利完成程式的执行之意。 另外 FHS 还要求底下的目录必须要存在:
  • /lib/modules/:这个目录主要放置可抽换式的核心相关模组(驱动程式)喔!
/media media是『媒体』的英文,顾名思义,这个/media底下放置的就是可移除的装置啦! 包括软碟、光碟、DVD等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom等等。
/mnt 如果你想要暂时挂载某些额外的装置,一般建议你可以放置到这个目录中。 在古早时候,这个目录的用途与/media相同啦!只是有了/media之后,这个目录就用来暂时挂载用了。
/opt 这个是给第三方协力软体放置的目录。什麽是第三方协力软体啊? 举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果你想要自行安装额外的软体(非原本的distribution提供的),那麽也能够将你的软体安装到这裡来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下呢!
/run 早期的 FHS 规定系统开机后所产生的各项资讯应该要放置到 /var/run 目录下,新版的 FHS 则规范到 /run 底下。 由于 /run 可以使用记忆体来模拟,因此效能上会好很多!
/sbin Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来『设定』系统,其他使用者最多只能用来『查询』而已。 放在/sbin底下的为开机过程中所需要的,裡面包括了开机、修复、还原系统所需要的指令。 至于某些伺服器软体程式,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, mkfs等等。
/srv srv可以视为『service』的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/裡面。 不过,系统的服务资料如果尚未要提供给网际网路任何人浏览的话,预设还是建议放置到 /var/lib 底下即可。
/tmp 这是让一般使用者或者是正在执行的程序暂时放置档案的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊! 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除!
/usr 第二层 FHS 设定
/var 第二层FHS 设定,主要为放置变动性的资料
第二部份:FHS 建议存在的目录
/home 这是系统预设的使用者家目录(home directory)。在你新增一个一般使用者帐号时, 预设的使用者家目录都会规范到这裡来。比较重要的是,家目录有两种代号:
  • ~:代表目前这个使用者的家目录
  • ~xiaohui:则代表 xiaohui的家目录!
/lib<qual> 用来存放与 /lib 不同的格式的二进位函式库,例如支援 64 位元的 /lib64 函式库等
/root 系统管理员(root)的家目录。之所以放在这裡,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分割槽中。

事实上FHS针对根目录所定义的标准就仅有上面,不过Linux底下还有许多目录也需要瞭解一下。 底下是几个在Linux当中也是非常重要的目录:

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

早期 Linux 在设计的时候,若发生问题时,救援模式通常仅挂载根目录而已,因此有五个重要的目录被要求一定要与根目录放置在一起, 那就是 /etc, /bin, /dev, /lib, /sbin 这五个重要目录。现在许多的 Linux distributions 由于已经将许多非必要的档案移出 /usr 之外了, 所以 /usr 也是越来越精简,同时因为 /usr 被建议为『即使挂载成为唯读,系统还是可以正常运作』的模样,所以救援模式也能同时挂载 /usr ! 例如这个 CentOS 7.x 版本在救援模式的情况下就是这样。因此那个五大目录的限制已经被打破了!例如 CentOS 7.x 就已经将 /sbin, /bin, /lib 通通移动到 /usr 底下了!


2./usr 的意义与内容

其实usr是Unix Software Resource的缩写, 也就是『Unix作业系统软体资源』所放置的目录,而不是使用者的资料啦!这点要注意。 FHS建议所有软体开发者,应该将他们的资料合理的分别放置到这个目录下的次目录,而不要自行建立该软体自己独立的目录。

因为是所有系统预设的软体(distribution发佈者提供的软体)都会放置到/usr底下,因此这个目录有点类似Windows 系统的『C:\Windows\ (当中的一部份) + C:\Program files\』这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量

目录 应放置的档案内容
第一部份: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/ 主要放置唯读架构的资料档案,当然也包括共享文件。在这个目录下放置的资料几乎是不分硬体架构均可读取的资料, 因为几乎都是文字档案!在此目录下常见的还有这些次目录:
/usr/share/man:线上说明文件
/usr/share/doc:软体杂项的文件说明
/usr/share/zoneinfo:与时区有关的时区档案
第二部份:FHS 建议可以存在的目录
/usr/games/ 与游戏比较相关的资料放置处
/usr/include/ c/c++等程式语言的档头(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软体)安装某些资料时,会使用到里头的许多包含档!
/usr/libexec/ 某些不被一般使用者惯用的执行档或脚本(script)等等,都会放置在此目录中。例如大部分的 X 视窗底下的操作指令, 很多都是放在此目录下的。
/usr/lib<qual>/ 与 /lib<qual>/功能相同,因此目前 /lib<qual> 就是连结到此目录中
/usr/src/ 一般原始码建议放置到这裡,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。


3./var 的意义与内容:
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的档案,包括快取(cache)、登录档(log file)以及某些软体运作所产生的档案, 包括程序档案(lock file, run file),或者例如MySQL资料库的档案等等

重要到不行!这是登录档放置的目录!裡面比较重要的档案如/var/log/messages, /var/log/wtmp(记录登入者的资讯)等。

目录 应该放置档案内容
第一部份:FHS 要求必须要存在的目录
/var/cache/ 应用程式本身运作过程中会产生的一些暂存档;
/var/lib/ 程式本身执行的过程中,需要使用到的资料档案放置的目录。在此目录下各自的软体应该要有各自的目录。 举例来说,MySQL的资料库放置到/var/lib/mysql/而rpm的资料库则放到/var/lib/rpm去!
/var/lock/ 某些装置或者是档案资源一次只能被一个应用程式所使用,如果同时有两个程式使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软体所使用。 举例来说,烧录机正在烧录一块光碟,你想一下,会不会有两个人同时在使用一个烧录机烧片? 如果两个人同时烧录,那片子写入的是谁的资料?所以当第一个人在烧录时该烧录机就会被上锁, 第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用萝。目前此目录也已经挪到 /run/lock 中!
/var/log/  
/var/mail/ 放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中! 通常这两个目录是互为连结档啦!
/var/run/ 某些程式或者是服务启动后,会将他们的PID放置在这个目录下。 与 /run 相同,这个目录连结到 /run 去了!
/var/spool/ 这个目录通常放置一些伫列资料,所谓的『伫列』就是排队等待其他程式使用的资料啦! 这些资料被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是工作排程资料(crontab),就会被放置到/var/spool/cron/目录中

针对FHS,各家distributions的异同,与 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

4.目录树


# 1. 透过 uname 检查 Linux 核心与作业系统的位元版本
[xiaohui@localhost ~]$ uname -r   # 查看核心版本
3.10.0-327.22.2.el7.x86_64
[xiaohui@localhost ~]$ uname -m   # 查看作业系统的位元版本
x86_64

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。 前言 Arena级分析 main arena中的内存申请 thread arena中的申请 内存回收 bin级分析 内存回收 内存分配 chunk级分析 前言 在展开本文之前,先解释一下本文中会提到的三个重要概念:arena,bin,chunk。三者在逻辑上的蕴含关系一般如下图所示(图中的chunk严格来说应该是 Free C
在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过 ServletContainerInitializer 实现此功能。每个框架要使用 ServletContainerInitializer 就必须在对应的jar包的META-INF/services 目录创建一个名为 javax.servlet.ServletContainerInitializer 的文件,文件内容指定具体的 ServletContainerInitialize
      Java开源Saas开发框架+Activiti流程管理=JSAAS h21.SAAS云应用场景/h2 SAAS云应用近几年来越来越火,这得益于国内云计算的基础设施的发展,如以前我们开发应用所需要的硬件计算资源、平台的操作系统、互联网IP、带宽及域名等,均可以非常有效解决了,企业建设应用或平台,不再需要考虑如何购买这些资源,我们仅需要通过在阿里或腾讯那里购买到这种云服务器即可,这些资源的使用及付费已经做到像交水费及电费那样简单。而现在唯一需要考虑的是在这些云计算资源上如何构建我们需要的企业str

Lucence源码分析---5 - 2016-07-25 22:07:11

lucence源码分析—flush 在前几章的分析中经常遇到flush操作,即当索引的相关数据存入内存中的某些数据结构后,再适当的实际就会通过flush函数将这些数据写入文件中,本章就开始分析flush函数,从DocumentsWriter的doflush函数开始分析,下面来看。 DocumentsWriter::doflush private boolean doFlush (DocumentsWriterPerThread flushingDWPT) throws IOException, Abort

代理模式之简单的动态代理 - 2016-07-25 19:07:30

目录 目录 动态代理定义 重点类和接口 代码示例 代码 代码运行截图 Java 动态代理具体有如下四步骤 美中不足 动态代理定义: 所谓Dynamic Proxy是这样一种class:它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些 interface。你当然可以把该class的实例当作这些interface中的任何一个来用。当然,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个h

[干货] Flume综述与实例 - 2016-07-25 19:07:29

Flume 是一个分布式的、可靠的数据收集、集合和移动的组件。基于流式数据模型,非常健壮、支持容错、故障转移等特性。本用实例辅助说明Flume的大部分核心概念。 版本记录: 2016-07-23 初稿 安装FLume Flume的安装非常简单,其核心就是agent。 从官网下载稳定版本: wget http://apache .fayea .com /flume/ 1.6 .0 /apache-flume- 1.6 .0 -bin .tar .gz tar zxvf apache-flume- 1.6 .
本文由EasyDarwin开源团队成员Alex贡献: http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳步的升级迭代中,近日,EasyDarwin云平台实现了语音对讲的功能。对讲功能的加入,标志着EasyDarwin云平台进一步的完善。 流程设计 客户端使用POST的方式在body中携带协议报文向云平台发送开始对讲命令; 云平台组织协议报文向指定的设备发送; 设备执行开始对讲命令后向云平台返回相应报文; 云平

Spring事务管理(5)-开启事务 - 2016-07-25 18:07:44

在前几篇文章中,我们分析了Spring的AOP实现,AOP的实现原理即JdkDynamicAop或Cglib。目标方法执行的时候,进入invoke方法中先执行Advisors链。Spring的事务开启需要在目标方法执行前进行,因此可以作为一个前置增强添加到Advisors链中。 Spring的声明式事务配置如下: bean id = "transactionManager" class = "org.springframework.orm.hibernate3.HibernateTransactionMa

Linux之vim学习 - 2016-07-25 18:07:26

vim 分三种模式:一般模式、编辑模式、命令模式 1.一般模式 一般模式下可以进行移动光标、删除、粘贴复制等操作 移动光标操作 h或向左箭头:光标左移动一个字符j或向下箭头:光标下移动一个字符k或向上箭头:光标上移动一个字符l或向右箭头:光标右移动一个字符 30 j:光标下移动 30 个字符ctrl+f:屏幕向下移动一页,相当于Page Down (常用)ctrl+b:屏幕向上移动一页,相当于Page Down (常用)ctrl+d:屏幕向下移动半页ctrl+u:屏幕向上移动半页nspace右移动n个字符
1.DispatchAction-分派Action 1.1 为什么需要DispatchAction 如果每个请求都对应一个Action,就会造成action过多,程序显得比较臃肿,所以可以把一类请求写到一个action中处理,即DispatchAction 在没有使用框架之前,当我们通过一个控制器处理多个请求的时候,我们是通过在URL后面跟上参数来区别不同的操作,比如,下述链接: http://localhost:8080/UserManager/main?operateId=adduid=123 htt