Linux操作系统中的文件系统
    文件系统是对一个存储设备上的数据和元数据进行组织的机制。
     文件系统是Linux操作系统的重要组成部分,Linux文件具有强大的功功能。文件系
统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所
有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。
 Linux系统中常用的文件系统:
 ext2;ext3;ext4;
 xfs;reiserfs;jfs(集群文件系统);iso9660;swap;
 GFS2;OCFS2(oracle的文件系统);NFS;SMBFS(cifs)
 VFAT;NTFS;
 一)相关知识
 1、文件的数据包括文件的元数据(相关属性信息)和文件的内容信息;
 2、inode表(inode Table)
我们知道,一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常
规、目录、符号链接等),权限,文件大小,创建/修改/访问时间等,也就是ls -l命令看
到的那些信息,这些信息存在inode中而不是数据块中。每个文件都有一个inode,一个块组
中的所有inode组成了inode表。
 3、目录--目录也是一个文件,存放通过该目录可以直接找到的文件名,和对应的
inode信息;
 4、块位图(Block Bitmap)就是用来描述整个块组中哪些块已用哪些块空闲的,
它本身占一个块,其中的每个bit代表本块组中的一个块,这个bit为1表示该块已用,这个
bit为0表示该块空闲可用。
 5、inode位图(inode Bitmap)和块位图类似,本身占一个块,其中每个bit表示
一个inode是否空闲可用。
 6、数据块(Data Block)
  a、对于常规文件,文件的数据存储在数据块中。
  b、对于目录,该目录下的所有文件名和目录名存储在数据块中,注意文
件名保存在它所在目录的数据块中,除文件名之外,ls -l命令看到的其它信息都保存在该
文件的inode中。注意这个概念:目录也是一种文件,是一种特殊类型的文件。
  c、对于符号链接,如果目标路径名较短则直接保存在inode中以便更快地
查找,如果目标路径名较长则分配一个数据块来保存。
  d、设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备
号和次设备号保存在inode中。
 二)分区的创建
 #fdisk DEV_NAME
  p --显示分区表
  n --增加一个分区
   e--新建扩展分区
   p--新建主分区
   +#{K|M|G}--分配多少空间
  d --删除一个分区
  t --改变分区的系统id
  l --列出磁盘分区的系统id
  w --保存修改并退出
  q --放弃修改并退出
 (注!!!)新建一个分区时,系统可能没有识别,这时需要命令:partprobe
DEV_NAME --系统重新扫描磁盘
 sfdisk --
 -d /dev/sdb --显示磁盘分区表;
  eg:sfdisk -d /dev/sdb > /root/sdb.partion.bak
 格式化:(高级格式化)
 #mkfs -t TYPE /dev/sdb1 
       -L label --指定卷标
 #e2label /dev/sdb1:显示卷标;
 #e2label /dev/sdb1 LABEL :指定卷标;
 mkfs -t ext2=mkfs.ext2
 #mke2fs /dev/sdb1--格式化为ext2
  -j--ext3
  -L --指定卷标
  -b --指定块大小{1024|2048|4096},默认为4096,4K(取决于页
框‘page frame’的大小)
 -c--创建文件系统前检查分区是否有坏块;
 -i--决定inode的个数;指定字节/inode 的比例;
 -N--直接指定inode的个数;
 -m--预留给超级用户的磁盘块的百分比(默认为5%)
 #mount --显示当前系统上所有已挂载的文件系统;(/etc/mtab--随时记录当前系
统上挂载的文件系统)
 -t--指定文件系统类型;
 -a--挂载所有文件系统(/etc/fstab)
 -n--挂载时不更新/etc/mtab文件;
 -r--只读挂载;
 -w--读写挂载;
 -L label --把卷标为label的设备挂载到指定的挂载点
 -U uuid
 -o 指定挂载时的选项;
   async --异步写入;
   atime --更新访问时间’
   auto -- 自动挂载;
   defaults--
   exec--具有执行权限的文件可自动执行;   
   dev--允许在分区上创建设备文件;   
   noatime--不更新访问时间;   
   remount--重新挂载;mount -o remount,rw /mnt
   ro--只读
   rw--读写
   user--允许普通用户挂载 ;
   loop--挂载回环设备(iso)
  --bind --将两个目录绑定起来; 
 mount DEV mount_point
 mount [-t fstype] [option] DEV MOUNT_POINT
#umount DEV
#umount mount_point
#fuser -v MOUNT_POINT --查看那个用户的那个进程在访问挂载点;
#fuser -km MOUNT_POINT --将访问挂载点的进程kill掉
#blkid DEV--查看文件系统类型;
 UUID--磁盘分区的编号;
 三)文件管理相关命令
 #du --查看文件大小
 option:-h  --以M为单位显示;
  -s  --显示目录及文件的总大小;
 #df --显示每一个分区的磁盘空间的使用情况
  -h  --以M为单位显示
  -i  --显示分区inode的个数
 文件压缩/解压缩的相关命令
 #gzip --只能压缩文件,不能压缩目录
  -d --解压
  -c --压缩完成后不删除原文件
   eg:gzip -c FILE > FLIE.gz
  -t --用于测试压缩文件的完整性;
  -# --#(1-9)指定压缩比(数值越大,压缩比越大,速度越慢)
 与之对应的解压缩命令#gunzip FILE.gz(解压后原文件被删除!)
 #zcat --在不解压的情况下查看文件内容
  格式:zcat FILE.gz
 #bzip2  --功能强大的文件压缩工具
  -d --解压
  -k --压缩完成后不删除原文件   
  -t --用于测试压缩文件的完整性;
  -# --#(1-9)指定压缩比(数值越大,压缩比越大,速度越慢)
 #bzcat FILE.bz2 --不解压直接查看文件;
 #bunzip2 FILE.bz2
 #zip ZIPFILE FILE,...
  eg:zip inittab.zip inittab,message --先指定压缩后的名称,再指定
需要压缩的文件名
 #unzip ZIPFILE --解压缩
 
 文件归档工具:
 #tar --打包多个文件,并不压缩文件
  -c --创建归档文件
  -f --指定归档文件名
  -x --展开归档文件
  -t -- 在不展开归档文件的情况下,查看里面存在什么文件
  -v -- 显示文件打包工程的详细信息
  -z --使用gzip压缩
  -j --使用bzip2压缩
  -C --指定展开的归档文件的目录
 常用选项的组合
  eg:tar -zcf  --既归档有压缩文件
      tar -zxf  --展开既归档又压缩的文件
 总结:文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。了解文件系统的工作原理,有助于我们更好的利用磁盘空间,也不会出现一些误操作,进而保障文件系统的安全,稳定。