Linux目录配置规范

  版权声明本文章参考了《鸟哥的Linux私房菜》、《Linux命令手册》、《Linux命令大全》以及《Linux man pages》。未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


1 目录配置规范FSH

  FSH将目录定义成为四种交互作用的形态:

可分享的(shareable) 不可分享的(unshareable)
不变的(static) /usr (软件放置处) /etc (配置文件)
/opt (第三方协力软件) /boot (开机与内核)
可变动的(variable) /var/mail (使用者邮件信箱) /var/run (程序相关)
/var/spool/news (新闻组) /var/lock (程序相关)

  上表中的目录就是一些代表性的目录,该目录底下所放置的数据在底下会谈到,这里先略过不谈。 我们要了解的是,什么是那四个类型?

  • 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
  • 不可分享的:自己机器上面运作的装置文件或者是与程序有关的 socket 文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
  • 不变的:有些数据是不会经常变动的,跟随着 distribution 而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
  • 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。

  事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

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

5.1 根目录/

  根目录是整个系统最重要的一个目录,因此 FHS 标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。
   FHS定义出根目录(/)底下应该要有底下这些次目录的存在,即使没有实体目录,FHS 也希望至少有链接存在。

  • FHS要求根目录下必须要存在的目录
    • /bin——存放放在单人维护模式下还能够被操作的指令Linux下常用的有单用户方式、普通多用户方式、完全多用户方式和XWin方式。单用户方式下,系统并没有完全运行进来,只是部分程序运行,这时也不能进行远程登录到Linux系统。进入单用户方式进行系统维护由是ROOT用户来进行完成,而且是由ROOT直接的进入,没有密码检验。这时的ROOT用户对系统有完全的操作权限,可以修复系统的同时,也能随时的对系统进行破坏。)在/bin底下的指令可以被root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir,cp, bash 等等常用的指令。
    • /boot——存放开机会使用到的文件,包括 Linux 内核文件以及开机选单与开机所需配置文件等等。 Linux kernel 常用的目录名为:vmlinuz,如果使用的是 grub2 这个开机管理程序, 则还会存在/boot/grub2/这个目录!
    • /dev——任何设备都是以文件存放在这个目录中。你只要透过存取这个目录底下的某个文件,就等于存取某个装置。 比要重要的文件有/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——存放开机时以及在/bin 或/sbin 底下的指令会调用的函数库。另外 FSH 还要求底下的目录必须要存在:
      • /lib/modules/:这个目录主要放置可抽换式的核心相关模块(驱动程序)喔!
    • /media——存放可移除的装置,包括软盘、光盘、DVD等等装置都暂时挂载于此。常见的目录有:/media/floppy, /media/cdrom 等等。
    • /mnt——存放暂时挂载的某些额外的设备。在早些时候,这个目录的
      用途与/media 相同啦!只是有了/media 之后,这个目录就用来暂时挂载用了。
    • /opt——存放第三方协力软件。什么是第三方协力软件啊?举例来说,KDE 这个桌面管理系统是一个独立的计划,不过他可以安装到 Linux 系统中,因此 KDE 的软件就建议放置到此目录下了。另外,如果妳想要自行安装额外的软件(非原本的 distribution 提供的),那么也能够将你的软件安装到这里来。 不过,以前的 Linux 系统中,我们还是习惯放置在/usr/local 目录下呢!
    • /run——存放开机后所产生的各项信息,以前放到 /var/run 目录下, 由于 /run 可以使用内存来仿真,因此效能上会好很多!
    • /sbin——存放包括了开机、修复、还原系统等在开机过程汇总需要的指令。指Linux有非常多指令是用来设定系统环境的,这些指令只有 root 才能够利用来设定系统,其他用户最多只能用来查询而已。至于某些服务器软件程序,一般则放置到/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)。在你新增一个一般使用者账号时, 默认的用户家目录都会规范到这里。比较重要的是,家目录有两种:
      • ~:代表目前这个用户的家目录
      • ~dmtsai :则代表 dmtsai 的家目录!
    • /lib——存放与 /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非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量!

5.2 /usr的意义与内容

  依据 FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static),如果你知道如何通过网络进行分区的挂载,那么/usr 确实可以分享给局域网络内的其他主机来使用!
  很多读者都会误会/usr 为 user 的缩写,其实 usr 是 Unix Software Resource 的缩写,也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦!这点要注意。FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。因为所有系统默认的软件(distribution 发布者提供的软件)都会放置到/usr 底下,因此这个目录有点类似 Windows 系统的C:\Windows\ (当中的一部份) + C:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。一般来说,/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/——主要放置只读架构的数据文件,当然也包括共享文件。在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,因为几乎都是文本文件!在此目录下常见的还有这些次目录:
      • /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/—— 与 /lib/功能相同,因此目前 /lib 就是链接到此目录中
    • /usr/src/——一般源码建议放置到这里,src 有 source 的意思。至于内核源码则建议放置到/usr/src/linux/目录下。

5.3 /var的意义与内容

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

  • 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放置在这个目录下喔!与 /run 相同,这个目录链接到 /run !
    • /var/spool/——这个目录通常放置一些队列数据,所谓的队列就是排队等待其他程序使用的数据啦!这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中,但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出
      后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中!

5.4 针对FHS ,各发行的异同与 CentOS7 的变化

  由于 FHS 仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据,因此,在其他次目录层级内,就可以随开发者自行来配置了。举例来说,CentOS的网络设定数据放在/etc/sysconfig/network-scripts/目录下,但是SuSE则是将网络放置在/etc/sysconfig/network/ 目录下.
  此外,CentOS7在目录的编排上与过去的版本不同喔!本节稍早之前已经有介绍过,这里做个汇整。比较大的差异在于将许多原本应该要在根目录 (/) 里面的目录,将他内部数据全部挪到/usr里面去,然后进行链接设定!包括底下这些:

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

6 目录树

  在Linux底下,所有的文件与目录都是由根目录开始的!他主要的特性有:

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

7 使用 uname查看系统信息

  命令: uname [options]
  描述: 查看某些系统信息,不带选项时,等同于-s。

选项 作用
-a, –all 打印所有信息,如果不知道 -p 和 -i, 则省略。
-s, –kernel-name 打印内核名字
-n, –nodename 打印网络节点主机名
-r, –kernel-release 打印内核公开发布版本
-v, –kernel-version 打印内核版本
-m, –machine 打印机器硬件名
-p, –processor 打印处理器类型
-i, –hardware-platform 打印硬件平台
-o, –operating-system 打印操作系统
–help 显示帮助信息并退出
–version 打印uname版本信息

8 重点回顾

  • Linux 的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限;
  • 群组最有用的功能之一,就是当你在团队开发资源的时候,且每个账号都可以有多个群组的支持;
  • 利用 ls -l 显示的文件属性中,第一个字段是文件的权限,共有十个位,第一个位是文件类型, 接下来三个
    为一组共三组,为使用者、群组、其他人的权限,权限有 r,w,x 三种;
  • 如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』;
  • 若需要 root 的权限时,可以使用 su 这个指令来切换身份。处理完毕则使用 exit 离开 su 的指令环境。
  • 更改文件的群组支持可用 chgrp,修改文件的拥有者可用 chown,修改文件的权限可用 chmod
  • chmod 修改权限的方法有两种,分别是符号法与数字法,数字法中 r,w,x 分数为 4,2,1;
  • 对文件来讲,权限的效能为:
    • r:可读取此一文件的实际内容,如读取文本文件的文字内容等;
    • w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
    • x:该文件具有可以被系统执行的权限。
  • 对目录来说,权限的效能为:
    • r (read contents in directory)
    • w (modify contents of directory)
    • x (access directory)
  • 要开放目录给任何人浏览时,应该至少也要给予 r 及 x 的权限,但 w 权限不可随便给;
  • 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)。
  • Linux 档名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个汉字字符;
  • 根据 FHS 的官方文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下
  • FHS 订定出来的四种目录特色为:shareable, unshareable, static, variable 等四类;
  • FHS 所定义的三层主目录为:/, /var, /usr 三层而已;
  • 绝对路径文件名为从根目录 / 开始写起,否则都是相对路径的文件名。

  版权声明本文章参考了《鸟哥的Linux私房菜》、《Linux命令手册》、《Linux命令大全》以及《Linux man pages》。未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!


你可能感兴趣的:(Linux教程)