Linux入职基础-2.1_文件目录结构
Linux入职基础-2.1_文件目录结构
目前利用Linux内核来开发产品或distributions的社群、公司及个人均很多, 如果他们都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰。所以,就有了Filesystem Hierarchy Standard (FHS)标准。
FHS(http://www.pathname.com/fhs/)官方的主要目的:让使用者了解到已安装软件通常放置于那个目录下,他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS的标准。
操作系统环境RHEL5,硬盘80G,外接U盘8G。分区信息如下:
图1(分区)
FSH针对目录树架构定义,规划以下这的三个目录:
/(系统根目录):与开机系统有关;
/usr(unix software resource):与软件安装/执行有关;
/var(variable):与系统运作过程有关。
图片来于源网络
我们规划文件系统目录如下:
图2(分区挂载的目录列表)
RHEL5系统环境的根目录列表。如下:
图3(根目录下的文件列表)
1、系统根目录 (/) :
根目录是整个系统最重要的一个目录,所有的目录都是由根目录衍生出来的,同时含系统需要的开机/还原/修复软件、核心文件、开机相关程序、 函式库等等。若系统出现错误时,根目录也必须包含有能够修复文件系统的程序才行。
根目录的分区内要适当小些, 因为越大的分区会放入更多的数据,如此一来根目录所在分区就有较多发生错误的机会,故应用程序所安装的软件和用户数据(/home目录)最好不要与根目录放在同一个分区内;若用户的数据较大则把/home目录另建分区存放。
FHS定义出根目录(/)底下应该要有以下这些次目录的存在:
目 录 | 意义 |
/ | 根目录 |
/boot |
存放的是开机系统启动Linux时必须一些核心文件,包括开机选项与开机所需配置文件等等。 /boot/grub/menu.lst GRUB设置,grub开机管理程序。 /boot/vmlinuz Linux 内核文件 /boot/initrd Linux启动过程中内核使用的临时很小的文件系统,用来加载设备驱动(可能存储在SCSI或者RADI上)。 /boot可与根目录在同一个分区,建议单独分区,200M就可以了。 |
/sbin |
放在/sbin目录下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。这些指令只有root权限才能够运行,其他用户最多只能用来查询,也就是说这里存放的是系统管理员使用的管理程序。 与其它bin目录的对比,如下: /usr/sbin/ 一般则放置某些服务器软件程序; /usr/local/sbin/ 一般在本机自行安装的软件所产生的系统执行文件(system binary),常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。 /sbin必须与根分区在同一个分区。 |
/bin |
/bin放置的是在单人维护模式下还能够被操作的指令。 /bin下的指令可以被root权限与一般账号权限所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。 /bin必须与根分区在同一个分区。 |
/lib |
存放着系统最基本的动态链接共享库,比如,在开机时会用到的函式库,以及在/bin或/sbin目录下的指令会使用的函式库。其作用类似于Windows里的.dll文件。 /lib/modules/,这个目录会放置核心相关的模块(驱动程序)。 /lib必须与根分区在同一个分区。 |
/etc |
系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启动代码等等。这个目录下的各文件属性使用者可以查阅, 但是只有root有权力修改。 如下: /etc/inittab,/etc/init.d/,/etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等。 另外,其下重要的文件: /etc/host.conf 文件说明用户的系统如何查询节点名 /etc/hosts 设定用户自已的IP与名字的对应表 /etc/hosts.allow 设置允许使用inetd的机器使用 /etc/hosts.deny 设置不允许使用inetd的机器使用 /etc/hosts.equiv 设置远端机不用密码 /etc/xinetd.conf 设定系统网络守护进程xinetd(取代inetd)的配置 /etc/protocols 设定系统支持的协议 /etc/sysconfig/network-scripts/ifcfg-eth0 设置IP /etc/resolv.conf 设置DNS /etc/X11/:与 X Window 有关的各种配置文件都在这里,如:X Server的配置文件xorg.conf。 /etc/issue 记录用户登录前显示的信息 /etc/inittab 设定系统启动时init进程将把系统行在哪个runlevel运行 /etc/fstab 记录开机要mount的文件系统 /etc/group 设定用户的组名与相关信息 /etc/passwd 帐号信息 /etc/shadow 密码信息 /etc/sudoers 可以sudo命令的配置文件 /etc/securetty 设定哪些终端可以让root登录 /etc/login.defs 所有用户登录时的缺省配置 /etc/exports 设定NFS系统用的 /etc/init.d/ 所有服务的预设启动 script 都放在这里;如启动iptables: /etc/init.d/iptables;关闭iptables:/etc/init.d/iptables。 etc/xinetd.d/:这是super daemon管理各项服务的配置文件目录。 建议不要放可执行文件(binary)在这个目录中! /etc/modprobe.conf 内核模块额外参数设定 /etc/syslog.conf 日志设置文件 /etc/sysconfig/ 在这个目录中有很多重要的系统配置文件 /etc必须与根分区在同一个分区。 |
/dev |
这个目录下是所有Linux的外部设备,任何硬件与接口设备都是以文件的型态存在于这个目录当中的,而不是存放设备的驱动程序,其功能类似DOS下的.sys和Win下的.vxd,只要通过存取这个目录底下的某个文件,就等于存取某个硬件,比较重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd* ..等。 如,U盘插入后,用fdisk -l查看分区,显示文件为/dev/sdb;/dev/hda代表第一个物理IDE硬盘等。 /dev必须与根分区在同一个分区。 |
/media |
这个目录下放置的就是可移除的硬件设备,包括软盘、光盘、DVD等等都可暂挂载于此。常见的文件名有:/media/floppy, /media/cdrom等等。 见图(2),一般自动挂载的分区都被放到/media,挂载点都是由系统自动建立和删除的。 |
/mnt |
与/media无特殊区别,一般需要手动建立好挂载点,再用命令挂载,在没有 /media之前常使用暂时挂载。 如将u盘挂载到/mnt/usb下:mount /dev/sdb4 /mnt/usb |
/home |
系统默认的用户家目录(home directory),当新增一个一般使用者账号时,默认的用户家目录都会放在这里来。 ~: 代表当前这用户的家目录。cd ~rabbit ~rabbit: 代表用户 rabbit的家目录。 举例说:有个用户叫wang,他的主目录就是/home/wang,也可以用~wang表示。 |
/root |
系统管理员(root)的家目录。进入单人维护模式则仅挂载根目录。 root的家目录一般与根目录放在同一个分区 。 |
/opt |
安装第三方协力软件的目录。 举例来说,KDE这个桌面管理系统是一个独立的计划,可以安装到Linux系统中,因此KDE的软件就建议放置到此目录下了。
另外,如果想要自行安装额外的软件(非原本的distribution提供的),也可安装到这里来。不过,第三方协助软件还是习惯放置在/usr/local目录。 |
/srv |
一些网络服务启动之后,这些服务所需要取用的数据目录。 举例来说,WWW服务器需要的网页资料就可以放置在/srv/www/里面。 |
/tmp |
暂时存放一般用户或者是正在执行的程序的目录。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。 其次,重要数据不可放在此目录。 最后建议在开机时,应该要将/tmp下的数据全部都删除。 |
其它还有
/proc |
一个虚拟的目录,它是系统内存的映射,这个目录的数据放在内存当中,有系统核心、行程信息(process)、周边装置的状态及网络状态等等,如里面一些重要的文件:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。本身不占任何硬盘空间。 /proc/version 内核版本 cat /proc/version /proc/sys/kernel 系统内核功能 |
/sys | 这个目录也是一个虚拟的文件系统,主要记录与核心相关的信息,跟/proc非常类似。 包括目前已加载的核心模块与核心侦测到的硬件配置信息等等。同样不占硬盘容量。 |
/lost+found |
这个目录是当文件系统发生错误时,一些遗失的片段将放到这个目录下。 一般使用标准的ext2/ext3文件系统格式才会产生的这个目录。 通常会在分区的最顶层,如果你加装一块硬盘于/disk中,系统下就会自动产生一个这样的目录/disk/lost+found。 |
注意:通过上面讲解,现在你能理解有些目录必须与根目录在同一个分区中!即有以下五个目录:
/bin:重要的执行程序(root权限和一般用户均可执行)
/sbin:重要的系统执行文件(只有root权限可执行)
/lib:执行文件所需的函式库与运行核心所需的模块
/etc:配置文件
/dev:所需要的设备文件
2、Unix操作系统的软件资源的存放目录(/usr)
/usr(Unix SoftwareResource的缩写)是存放Unix操作系统软件资源的目录。所有系统默认的软件(或随distribution发布者提供的软件)都会存放到/usr这个目录底下。系统刚安装完毕时,这个目录会占用最多的硬盘容量,因此这个目录看起来有点类似Windows 系统 “C:\Windows + C:\Program files”这两个目录的综合。
依据FHS的定义,/usr目录里面存放的文件属于可分享的与不可变动的(shareable, static),接下我们来了解这个目录下的文件:
图4(/usr目录的文件列表)
目录 | 意义 |
/usr/bin/ | 用户大部分可使用的指令都放在这个目录。不同于/bin(与开机过程有关的)。 |
/usr/etc/ | 这个目录存放应用程序和文件的设定。而/etc 存放系统配置文件。 |
/usr/sbin/ | 这个目录存放超级用户(root)使用的一些管理程序,非系统正常运行所需要的系统指令。常见的就是某些网络服务器软件的服务指令(daemon)。如,sshd、tcpdump 、useradd等。 |
/usr/lib/ | 这个目录存放各应用软件会使用到的函数库。 |
/usr/local/ |
系统管理员在本机安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理,你们去看看/usr/local,该目录下也是具有bin, etc, include, lib...等目录。 举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,这样可与原先的旧版软件区别开来。 |
/usr/include/ |
在Linux下开发和编译应用程序需要的头文件,存放c/c++等程序语言的文件头(header)与其的包含文件(include)。 如果我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到这个目录里的许多包含文件。 |
/usr/share/ |
在这个目录下存放几乎是文本文件,不同硬件架构设备均可读取的。 其底下还有目录。如下: /usr/share/man:联机帮助文件 /usr/share/doc:软件杂项的文件说明 /usr/share/zoneinfo:与时区有关的时区档案 |
/usr/src/ | src有source的意思,存放原始代码。如,内核原始码存放到/usr/src/linux/目录。 |
/usr/X11R6/ | 存放X Window System重要数据的目录,取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意。 |
/usr/man | Linux帮助文档的存放目录。 |
3、Unix操作系统的软件运行数据的存放目录(/var)
/var存放系统运行时要改变的数据。目的是把/usr目录在运行过程中需要更改的文件或者临时生成的文件及目录提取出来,由此可以使usr目录挂载为只读的方式。
其中,不能够与其他计算机共享的目录(每个系统是特定的),如/var/log,/var/lock,/var/run。有些目录可以与其他系统共享,如/var/mail, /var/cache/man, /var/cache/fonts,/var/spool/news。
目录 | 意义 |
/var/log/ |
记录各个软件运行过程日志,这个目录比较重要,如: /var/log/boot.log 记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息,就是Linux系统开机自检过程显示的信息。 /var/log/cron 记录crontab守护进程crond所派生的子进程的动作。 /var/log/maillog 该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动。 /var/log/syslog 记录系统出问题的信息,可以配置/etc/syslog.conf让系统生成该日志文件。如,在/etc/syslog.conf文件中加上:*.warning /var/log/syslog该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息。 /etc/log/messages 记录警告信息,常常是系统出问题的信息。 /var/log/lastlog 该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,需要使用lastlog命令查看。 /var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。需要使用last命令查看。 /var/log/xferlog 该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件;显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。 /var/log/secure 记录登入系统存取资料的档案,如 pop3、ssh、telnet、ftp 等都会记录在此文件中。 /var/log/maillog 记录邮件存取或往来( sendmail 与 pop3 )的使用者信息 以下的网络服务日志文件的作用暂不一一介绍了: /var/log/httpd、/var/log/news、 /var/log/mysqld.log、/var/log/samba、 /var/log/procmail.log等。 |
/var/lock/ |
某些硬件设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时, 就可能产生一些错误的状况,因此就得要将该硬件设备上锁(lock),以确保该装置只会给单一软件所使用。 /var/lock/subsys 这个目录就是让程序判断是否有实例运行的标志,比如说xinetd,如果存在这个文件,表示已经有xinetd在运行了,否则就是没有。通常与该目录配套的还有/var/run目录,用来存放对应实例的PID。
|
/var/run/ | 某些程序或者是服务启动后,会将他们的PID存放在这个目录 |
/var/lib/ |
程序本身执行的过程中,把需要使用到的数据文件存放在此目录下,每个软件均有各自的目录。 举例来说,MySQL的数据库放到/var/lib/mysql/目录;而rpm的数据库(__db.001)则放到/var/lib/rpm目录。 |
/var/spool/ |
这个目录通常存放一些队列数据,所谓的“队列”就是排队等待其他程序使用的数据啦! 这些数据被使用后通常都会被删除。 举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。 如,工作排程数据(crontab),就会被存放到/var/spool/cron/目录。 |
/var/mail/ | 存放个人电子邮件信箱的目录,这个目录也被放置到/var/spool/mail/目录。 通常这两个目录是互为链接文件。mail->/spoo/mail |
/var/cache/ | 存放应用程序本身运作过程中会产生的一些暂存文件。 |