linux学习笔记10——Linux目录讲解

为什么么每套Linux distributions他们的配置文件啊、可执行文件啊、每个目录内放置的咚咚啊,其实都差不多? 因为它是有一套标准滴。

一、Linux目录配置

为什么么每套Linux distributions他们的配置文件啊、可执行文件啊、每个目录内放置的咚咚啊,其实都差不多? 因为它是有一套标准滴。

1,Linux目录配置的依据--FHS

FHS是Filesystem Hierarchy Standard (FHS)标准,FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态:

那3么什么是可分享、可变与不可变?

(1)可分享:可以分享给其他系统挂载使用的目录,所以包括可执行文件与使用者的邮件

等数据, 是能够分享给网络上其他主机挂载用的目录。

(2)不可分享的:自己机器上面运行的设备文件或者是与程序有关的socket文件等。

(3)不变的:不会经常变动的数据,例如函数库、文件说明文档、系统管理员所管理的主机服务配置文件等等;

(4)可变动的:经常变动的数据,比如登录文件、一般用户可自行收受的新闻群组等。

实际上,FHS仅定义了三个目录:/(root,根目录),   /usr(unix software resource)   /var (variable)。根目录和系统开机有关;/usr原来一直以为是user的简写,原来是unix类的软件,这个目录放的是与软件安装、执行有关的东西;至于/var 则放的是与系统运行过程有关的东东。

根目录的意义与内容:

根目录是整个系统中最重要的一个目录,因为不但所有目录是由根目录衍生出来的,而且,根目录还和开机、还原、系统修复等动作有关。因此FHS系统希望根目录不要放在非常大的分区,因为越大的分区会放入越多的数据,就更有可能发生各种问题。

FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。

有鉴于上述的说明,因此FHS定义出根目录(/)下面应该要有下面这些次目录的存在才好,即使没有实体目录,FHS也希望至少有链接文件存在才好:

(1)/bin:系统有很多放置可执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。 在/bin下面的指令可以被root与一般帐号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。

(2)/boot:这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机菜单与开机所需配置文件等等。 Linux kernel常用的文件名为:vmlinuz,如果使用的是grub2这个开机管理程序, 则还会存在/boot/grub2/这个目录喔!

(3)/dev:在Linux系统上,任何设备与周边设备都是以文件的型态存在于这个目录当中的。比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/loop, /dev/sd等等

(4)/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格式有关的各项配置文件

(5)/lib:系统的函数库非常的多,而/lib放置的则是在开机时会用到的函数库, 以及在/bin或/sbin下面的指令会调用的函数库而已。 什么是函数库呢?你可以将他想成是“外挂”,某些指令必须要有这些“外挂”才能够顺利完成程序的执行之意。 另外 FSH 还要求下面的目录必须要存在:/lib/modules/:这个目录主要放置可抽换式的核心相关模块(驱动程序)喔!

(6)/media:media是“媒体”的英文,顾名思义,这个/media下面放置的就是可移除的设备啦! 包括软盘、光盘、DVD等等设备都暂时挂载于此。常见的文件名有:/media/floppy, /media/cdrom等等。

(7)/mnt:如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦!只是有了/media之后,这个目录就用来暂时挂载用了。

(8)/opt:这个是给第三方协力软件放置的目录。如果你想要自行安装额外的软件(非原本的distribution提供的),那么也能够将你的软件安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下呢!

(9)/run:早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录下,新版的 FHS 则规范到 /run 下面。 由于 /run 可以使用内存来仿真,因此性能上会好很多!

放在/sbin下面的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统可执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, mkfs等等。

(10)/srv:srv可以视为“service”的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。常见的服务例如WWW, FTP等等。举例来说,WWW服务器需要的网页数据就可以放置/srv/www/里面。 不过,系统的服务数据如果尚未要提供给网际网络任何人浏览的话,默认还是建议放置到 /var/lib下面即可。

(11)/tmp:这是让一般使用者或者是正在执行的程序暂时放置文件的地方。

第二部分,FHS建议可以存在的目录:

(1)/home:这是系统默认的使用者主文件夹(home directory)。在你新增一个一般使用者帐号时, 默认的使用者主文件夹都会规范到这里来。用~可以指代

(2)/lib<qual>:用来存放与 /lib 不同的格式的二进制函数库,例如支持 64 位的 /lib64 函数库等

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

其他重要目录:

(1)/lost+found:这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话,就不会存在这个目录了!

(2)/proc:这个目录本身是一个“虚拟文件系统(virtual filesystem)”喔!他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边设备的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的文件例如:/proc/cpuinfo, /proc/dma,/proc/interrupts, /proc/ioports, /proc/net/* 等等。

(3)/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及/var

依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable,static)。usr是Unix Software Resource的缩写, 也就是“Unix操作系统软件资源”所放置的目录。FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录。/usr有点类似于Windows 系统的“C:\Windows\ (当中的一部份) + C:\Program files\”这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。

FHS建议/usr必须有如下目录:

(1)/usr/bin/:所有一般用户能够使用的指令都放在这里!目前新的 CentOS 7 已经将全部的使用者指令放置于此,而使用链接文件的方式将 /bin 链接至此!也就是说, /usr/bin 与 /bin 是一模一样了!另外,FHS 要求在此目录下不应该有子目录!

(2)/usr/lib/:基本上,与 /lib 功能相同,所以 /lib 就是链接到此目录中的!

(3)/usr/local/:系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版,此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦! 你可以自行到/usr/local去看看,该目录下也是具有bin, etc,include, lib...的次目录喔!

(4)/usr/sbin/:非系统正常运行所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)啰!不过基本功能与 /sbin 也差不多, 因此目前 /sbin 就是链接到此目录中的。

(5)/usr/share/:主要放置只读架构的数据文件,当然也包括共享文件。在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文字文件嘛!在此目录下常见的还有这些次目录:/usr/share/man:线上说明文档 /usr/share/doc:软件杂项的文件说明 /usr/share/zoneinfo:与时

区有关的时区文件。

FHS建议可以有的目录:

(1)/usr/games/:与游戏比较相关的数据放置处;

(2)/usr/include/:c/c++等程序语言的文件开始(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档喔!大概因此,要研究linux需要一些c基础吧。

(3)/usr/libexec/:某些不被一般使用者惯用的可执行文件或脚本(script)等等,都会放置在此目录中。例如大部分的 X 窗口下面的操作指令, 很多都是放在此目录下的。

(4)/usr/lib<qual>/:与 /lib<qual>/功能相同,因此目前 /lib<qual> 就是链接到此目录中

(5)/usr/src/: 一般源代码建议放置到这里,src有source的意思。至于核心源代码则建议放置到/usr/src/linux/目录下

/var目录:

如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括高速缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:

FHS要求必须存在的目录:

(1)/var/cache/: 应用程序本身运行过程中会产生的一些暂存盘;

(2)/var/lib/:程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去!

(3)/var/lock/:某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时, 就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用。 举例来说,烧录机正在烧录一块光盘,你想一下,会不会有两个人同时在使用一个烧录机烧片? 如果两个人同时烧录,那片子写入的是谁的数据?所以当第一个人在烧录时该烧录机就会被上锁, 第二个人就得要该设备被解除锁定(就是前一个人用完了)才能够继续使用啰。目前此目录也已经挪到 /run/lock 中!

(4)/var/log/ :重要到不行!这是登录文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登陆者的信息)等。

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

(6)/var/run/:某些程序或者是服务启动后,会将他们的PID放置在这个目录下喔!至于PID的意义我们会在后续章节提到的。 与 /run 相同,这个目录链接到 /run去了!

(7)/var/spool/:这个目录通常放置一些伫列数据,所谓的“伫列”就是排队等待其他程序使用的数据啦! 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是工作调度数据(crontab),就会被放置到/var/spool/cron/目录中!

由于FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了。举例来说,CentOS的网络设置数据放在 /etc/sysconfig/network-scripts/ 目录下,但是SuSE则是将网络放置在/etc/sysconfig/network/ 目录下

一些连接文件:

3,目录树(directory tree)与centos观察

目录是以根节点为基础,一个一个分支下来,这种目录配置方式为:“目录树(directory tree)”。这个目录树有什么特性呢?他主要的特性有:

(1)目录树的启始点为根目录 (/, root);

(2)每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem

。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。

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

根据FHS的定义,你最好能够将/var独立出来, 这样对于系统的数据还有一些安全性的保护呢!因为至少/var死掉时,你的根目录还会活着嘛! 还能够进入救援模式啊!

.表示当前路径,..表示父路径

如同在第一章谈到的 Linux distribution 的差异性, 除了 FHS 之外,还有个 Linux StandardBase (LSB) 的标准是可以依循的!

下面通过一些指令来看下相关参数:

1 通过 uname 检查 Linux 核心与操作系统的位版本:

uname -r # 查看核心版本

uname -m # 查看操作系统的位版本

yum install redhat-lsb

lsb_release -a

练习:

1,早期的 Unix 系统文件名最多允许 14 个字符,而新的 Unix 与 Linux 系统中,文件名最多可以容许几个字符?

由于使用Ext2/Ext3/Ext4/xfs 文件系统,单一文件名可达 255 字符

2,当一个一般文件权限为 -rwxrwxrwx 则表示这个文件的意义为?所有者、所在群组、其他人拥有读写和执行权限,但不一定能删除(要有目录的w权限)

3,我需要将一个文件的权限改为 -rwxr-xr-- 请问该如何下达指令?

chmod 754 filename

4,若我需要更改一个文件的拥有者与群组,该用什么指令?

chown  chgrp

5,请问下面的目录与主要放置什么数据: /etc/, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log, /run

/etc/:系统主要的配置文件几乎都放置在这个目录内。

/boot:这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机菜单与开机所需配置文件等等。

6,若一个文件的文件名开头为“ . ”,例如 .bashrc 这个文件,代表什么?另外,如何显示出这个文件名与他的相关属性?有“ . ”为开头的为隐藏文件,需要使用 ls -a 这个 -a 的选项才能显示出隐藏文件的内容,而使用 ls -al 才能显示出属性。

猜你喜欢

转载自blog.csdn.net/qq_22059611/article/details/83685813
今日推荐