目录
[显示]

1.摘要

今天在翻硬盘时发现了很久之前学习Linux系统使用时做的笔记,主要内容参考《鸟哥的Linux私房菜》。本篇是笔记中关于Linux文件系统的内容,包括分区、目录及文件的基本知识。

2. 分区Pattern

2.1. 分区基础知识

主要启动记录区(Master Boot Record, MBR)

可以安装启动管理程序的地方,有446 bytes

分割表(partition table)

记录整颗硬盘分割的状态,有64 bytes

每个分区对应的文件
主分区1-4
扩展分区5-n:IDE5-63 SATA5-15

2.2. 文件系统类型

ext2/ext3
是Linux适用的档案系统类型。

physical volume (LVM)
这是用来弹性调整档案系统容量的一种机制, 可以让你的档案系统容量变大或变小而不改变原有的档案数据内容

software RAID
利用Linux操作系统的特性,用软件模拟出磁盘阵列的功能

swap
就是内存置换空间!由於swap并不会使用到目录树的挂载, 所以用swap就不需要指定挂载点

vfat
同时被Linux与Windows所支援的档案系统类型

3. 目录

3.1. 目录说明

/ (root, 根目录):
与开机系统有关
 

以下目录不可与根目录分开
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件

/bin
在单人维护模式下还能够被操作的指令。
在/bin底下的指令可以被root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。

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

/dev
任何装置与接口设备都是以文件的型态存在于这个目录当中
比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*
硬件设备:

IDE硬盘 /dev/hd[a-d]
SCSI/SATA/USB HDD $/dev/sd[a-p]
USB $/dev/sd[a-p]
软驱 $/dev/fd[0-1]
打印机 25针:/dev/lp[0-2]
USB:/dev/usb/lp[0-15]
鼠标 USB:/dev/usb/mouse[0-15]
PS2:/dev/psaux
CDROM/DVDROM /dev/cdrom
当前鼠标 /dev/mouse
磁带机 IDE:/dev/ht0
SCSI:/dev/st0

/etc
系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有root有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。
/etc/init.d/
所有服务的预设启动 script 都是放在这里的
/etc/xinetd.d/
这就是所谓的super daemon管理的各项服务的配置文件目录。
/etc/X11/
与X Window 有关的各种配置文件都在这里,尤其是xorg.conf 这个X Server 的配置文件。

/home
这是系统默认的用户家目录(home directory)。
~:代表目前这个用户的家目录,而
~dmtsai :则代表dmtsai 的家目录

/lib
/lib放置在开机时会用到的函式库, 以及在/bin或/sbin底下的指令会呼叫的函式库
/lib/modules/
放置核心相关的模块(驱动程序)
/lost+found
这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录『/disk/lost+found』

/media
/media底下放置的就是可移除的装置。 包括软盘、光盘、DVD等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom等等。

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

/opt
给第三方协力软件放置的目录

/proc
这个目录本身是一个『虚拟文件系统(virtual filesystem)』,他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间

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

/sbin
放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。

/srv
srv可以视为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP等等。

/sys
这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录与核心相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量

/tmp
这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。

/usr (unix software resource)
与软件安装/执行有关;
/usr/share/doc 

/var (variable)
与系统运作过程有关,数据缓存。

软件说明
/usr/X11R6/
为X Window System重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意。
/usr/bin/
绝大部分的用户可使用指令都放在这里!请注意到他与/bin的不同之处。(是否与开机过程有关)
/usr/include/
c/c++等程序语言的档头(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档
/usr/lib/
包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script)。 某些软件会提供一些特殊的指令来进行服务器的设定,这些指令也不会经常被系统管理员操作, 那就会被摆放到这个目录下啦。要注意的是,如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生
/usr/local/
系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。
/usr/sbin/
非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令
/usr/share/
放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件
/usr/share/man:联机帮助文件
/usr/share/doc:软件杂项的文件说明
/usr/share/zoneinfo:与时区有关的时区文件
/usr/src/
一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。
/var (variable):
与系统运作过程有关。
数据缓存
/var/cache/
应用程序本身运作过程中会产生的一些暂存档;
/var/lib/
程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去.
/var/lock/
某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。
/var/log/
这是登录文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。
/var/mail/
放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中! 通常这两个目录是互为链接文件啦!
/var/run/
某些程序或者是服务启动后,会将他们的PID放置在这个目录下
/var/spool/
这个目录通常放置一些队列数据,所谓的『队列』就是排队等待其他程序使用的数据啦! 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中。
 

3.2. Filesystem Hierarchy Standard (FHS)

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

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

3.3. 目录权限

r (read contents in directory)
表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。
 
w (modify contents of directory)
建立新的文件与目录;
删除已经存在的文件与目录(不论该文件的权限为何!)
将已存在的文件或目录进行更名;
搬移该目录内的文件、目录位置。
 
x (access directory)
用户能否进入该目录成为工作目录

4. 文件

4.1. 文件种类

  1. -正规文件(regular file )
  2. d-目录(directory)
  3. l-连结档(link)
    类似快捷方式
  4. 设备与装置文件(device)
    b-区块(block)设备档
    c-字符(character)设备文件
  5. s-数据接口文件(sockets)
    通常被用在网络上的数据承接
  6. p-数据输送文件(FIFO, pipe)
    解决多个程序同时存取一个文件所造成的错误问题

4.2. 文件名

单一文件或目录的最大容许文件名为255 个字符;
包含完整路径名称及目录(/) 之完整档名为4096 个字符。
避免符号* ? > < ; & ! [ ] | \ ' " ` ( ) { }

4.3. 文件权限

r (read)
可读取此一文件的实际内容,如读取文本文件的文字内容等
w (write)
可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
x (execute)
该文件具有可以被系统执行的权限。

4.4. 特殊文件

/etc/fstab
启动挂载点
参数

参数 内容意义
async/sync  
异步/同步 配置磁盘是否以异步方式运行!默认为async(效能较佳)
auto/noauto  
自动/非自动 当下达mount -a 时,此文件系统是否会被主动测试挂载。默认为auto。
rw/ro  
可擦写/只读 让该分割槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给用户随意变更的, 这里也能够配置为只读。则不论在此文件系统的文件是否配置w 权限,都无法写入喔!
exec/noexec  
可运行/不可运行 限制在此文件系统内是否可以进行『运行』的工作?如果是纯粹用来储存数据的, 那么可以配置为noexec 会比较安全,相对的,会比较麻烦!
user/nouser  
允许/不允许使用者挂载 是否允许用户使用mount 命令来挂载呢?一般而言,我们当然不希望一般身份的user 能使用mount 啰,因为太不安全了,因此这里应该要配置为nouser 啰!
suid/nosuid  
具有/不具有suid 权限 该文件系统是否允许SUID 的存在?如果不是运行文件放置目录,也可以配置为nosuid 来取消这个功能!
usrquota 注意名称是『usrquota 』不要拼错了!这个是在启动filesystem 支持磁盘配额模式,更多数据我们在第四篇再谈。
grpquota 注意名称是『grpquota』,启动filesystem 对群组磁盘配额模式的支持。
defaults 同时具有rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,默认情况使用defaults 配置即可!