Linux 文件系统

一、Linux文件系统简介
无论是什么操作系统,文件系统都是十分重要的组件。文件系统用户组织和管理计算机存储设备上的大量文件,并提供给用户相应的操作交互接口。简单来说,文件系统就是操作系统用于管理、组织文件并给用户提供服务的系统。
Linux系统本分支持很多种文件系统,大致可以分为:
1)磁盘文件系统:指本地主机中实际可以通过磁盘访问的系统,包括硬盘、光驱(CD-ROM或DVD等)、USB存储、磁盘阵列(RAID)等。常见的文件系统格式有:autofs、Ext3、Ext4、UFS(Unix系统文件系统)、FAT(FAT16、FAT32)、NTFS(New Technology File System)等。
2)网络文件系统:指通过网络远程访问的文件系统,这种文件系统的客户端通过网络来远程访问数据,常见的有:NFS(Network File System)、Samba、AFP等。
3)专用/虚拟文件系统:不驻留在磁盘上的文件系统,常见的有TMPFS等。
目前来说,Linux系统使用最广泛的是Ext4系统和NFS系统,而Windwos系统使用FAT32和NTFS居多。当然,Linux系统仍然支持Windows系统的文件系统,且目前许多Linux系统可以自己检测识别Windows的文件系统,但是需要单独挂载。
我们的计算机的磁盘接口有IDE与SATA两种,其中IDE属于比较早期的接口,现已经被逐步淘汰;从2009年之后,主流磁盘接口已经换成SATA接口。在Linux系统中,管理磁盘设备的文件在/dev目录下,其中:
/dev/hd[a-d]代表IDE接口的磁盘
/dev/sd[a-p]代表SCSI/SATA/USB接口的磁盘
除了以上外,Linux系统还有一个独特的分区:交换分区(swapping)。交换分区是内存与硬盘读写的区域,内存从硬盘读入或回写数据的时候会将数据暂存在这里。交换分区必须大于等于计算机内存,且通常放在硬盘的起始位置。


二、文件系统结构
使用Windows系统的用户已经习惯了硬盘分区的结构。Windows系统是使用盘符(C盘、D盘、E盘等)来标识文件,因此存取文件时一定要弄清楚在哪个磁盘目录下。
而Linux系统采取“树形结构”来管理文件,这点与Windows系统有很大区别。
//见附图4、附图5
/************Linux目录简介******************/
Linux系统的每个目录都有其特定的功能,这里只简单介绍一些主要目录及其功能
目录 功能说明
/etc 存放系统配置文件
/bin 存放常用指令
/sbin (root用户的)存放指令目录
/home 用户主目录,所有用户p的文/件默认建立在此目录下(用户工作目录)
/boot 包含内核启动文件
/dev 存放设备文件(与底层驱动交互)
/usr 存放应用程序
/mnt 挂载目录
/root root用户主目录
/proc process的所写,存放描述系统进程的详细信息
/lib 存放常见库文件
/lost+found 可以找到一些误删除或丢失的文件并恢复它们
/************Linux目录简介end***************/
在Linux系统中有“万物皆文件”的思想,也就是说,在Linux系统中将所有的硬件设备都当做文件来处理,包括硬盘、CD-ROM、USB等设备。为了能按照统一的方法访问/管理文件资源,Linux系统内每一种设备都都自己的设备文件。
Linux文件系统采取“树形结构”来管理,将根目录(/)作为整个文件系统的唯一起点,其他的目录/文件都从该点出发。将素有的文件按照一定用户进行归类整理,整合到这棵“大树”上。这样就无需考虑文件的实际存储位置而可以通过树形结构来简便访问文件。
例如,有以下文件:
/usr/games/sol
表示的就是位于根目录下usr子目录下games子目录下sol文件(纸牌游戏)。对于某个文件的路径,我们有两种表示方法:
1)绝对路径:指文件在文件系统内的绝对位置,以根目录为起点。
2)相对路径:指文件相对于用户当前位置的位置。例如,当我们已经在/usr目录下时,则只需访问games/sol即可找到该文件。


三、查看与操作文件命令
1、pwd:显示用户所在文件系统的位置
2、ls:显示当前目录下文件
-a:显示所有文件(包括隐藏文件)
-l:使用长格式显示详细属性
使用ls -l命令后,会显示出文件的详细属性。包括:
文件权限 文件链接数 文件所有者 文件组 文件大小 文件修改时间 文件名
/***********文件权限****************/
文件权限是由10个字符组成的用来表示文件权限的字符串。其中:
第1位:文件类型
Linux有7种文件类型,分别为:
-:普通文件。例如ASCII文件、二进制文件等。
d:目录。
c:字符设备。以字符为单位进行IO的设备。
b:块设备。以块为单位进行IO的设备。
l:符号链接文件。
p:有名管道。负责进程间通讯。
s:套接字。用于计算机进程间的网络通信。
第2~4位:文件所有者权限
第5~7位:与文件所有者同组用户权限
第8~10位:其他用户权限
在这些文件权限字符中:
r:可读。数字为4
w:可写。数字为2
x:可执行。数字为1
-:无此权限。数字为0
每三位为一组,将对应字符的数字相加,即可得到文件权限的八进制数字形式。
/***********文件权限end*************/
3、cd:改变目录。若cd后没有指定目录名则会返回当前用户的工作目录。
.:当前目录
..:上级目录
/:根目录
~:用户工作目录
~用户名:其他用户名的工作目录(需授权)
4、touch:若文件不存在则创建文件;若文件存在则修改文件时间戳。
-t 时间格式:按指定时间修改文件时间戳。时间格式的写法为[[CC]YY]MMDDhhmm[.ss](方括号内为可省略内容)。
5、file:判定文件类型。当文件扩展名与文件类型不一致时使用,用于判定该文件的类型。
6、cp:复制文件
-a:复制目录及目录内所有文件
-i:若目标文件存在,则询问是否覆盖
-f:若目标文件存在,不询问直接覆盖
-v:显示复制过程的提示信息
7、mv:移动文件 或 重命名文件
-i:若目标文件存在,则询问是否覆盖
-f:若目标文件存在,不询问直接覆盖
-v:显示移动过程的提示信息
8、rm:删除文件
-r:删除目录及目录内文件
-f:忽略不存在的文件
-i:在删除时需要用户给出回答是否删除
-v:显示删除过程的提示信息
注意:使用rm命令删除文件后将无法恢复,因此要格外小心。
9、mkdir:创建目录
-p:多级创建
注意:使用mkdir创建目录需要在当前目录下具有写权限。
10、rmdir:删除空目录
-p:多级删除(即同时删除子目录)
11、cat:在终端显示文件内容
12、head:查看文件的前几行(默认为10行)
-数字:指定查看前几行。例如head -8 hello.c就会显示文件的前8行。
13、tail:查看文件结尾几行(默认为10行)
-数字:显示距文件结尾几行。
+数字:显示从该行后直至文件结尾所有内容。

四、Linux文件链接
1、inode是什么?
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
inode包含文件的元信息,具体来说有以下内容:
  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:
ctime指inode上一次变动的时间
mtime指文件内容上一次变动的时间
atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置
我们可以使用stat命令来查看文件的inode信息。
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
2、硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
我们可以使用ln命令来创建硬链接
ln 源文件 目标文件
运行该命令后,源文件与目标文件共用一个inode号码,即都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
特殊说明一下目录的硬链接的计算方式。与普通文件不同,创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的“.硬链接”。
特殊情况下,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
3、软链接/符号链接
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。软链接类似于Windows系统下的快捷方式。
我们可以使用ln -s命令来创建一个文件的软链接
ln -s 源文件或目录 目标文件或目录
可以使用ls -l命令查看软链接文件指向的源文件的路径。为了增强程序可移植性,通常情况下我们创建符号链接时源文件使用绝对路径而不使用相对路径。
若文件A是文件B的软链接,意味着文件A依赖于文件B。如果删除了文件B,则文件A会变成无效文件(即使文件A仍然存在)。这是软链接与硬链接最大的不同:软链接指向的是文件的路径名而不是文件的inode号码,文件B的inode号码也不会因为软链接的存在而增加。


五、文件压缩、归档与打包
我们在进行文件迁移的时候,总是想节省时间。这时我们有两个方法:
1.将零散的文件整合成一个整体的文件
2.将文件打压缩包。
第一种方法我们称为“归档”。归档文件是将一组文件或目录保存在同一个归档文件中,需要时候再从档案文件中提取该文件。归档文件是没有经过压缩的。
第二种方法我们称为“压缩”。压缩文件不仅将文件整合,而且会使用某种算法压缩文件,压缩文件所占的磁盘空间比其他所有文件总和要少。
/************压缩工具*************/
压缩工具 解压工具 文件扩展名
gzip gunzip .gz
bzip2 bunzip2 .bz2
zip unzip .zip
/************压缩工具end**********/
我们常用的归档文件的命令是tar,生成的文件扩展名为.tar格式。常用的压缩文件的命令是gzip或bzip2,生成的文件扩展名为.gz格式和.bz2格式。
我们通常情况下先使用tar命令将文件进行归档,然后使用gzip或bzip2命令进行压缩,这样生成的文件扩展名为.tar.gz/.tgz(使用gzip)或.tar.bz2/.tbz2(使用bzip2)。
1、压缩命令gzip/解压命令gunzip
gzip命令用于将一个文件进行压缩,而gunzip命令是将.gz文件进行解压。
gzip命令的一般格式为:
gzip [可选项] 文件名
-l:查看压缩文件信息,包括文件数、大小、压缩比等参数。
-d:解压文件,与gunzip命令相同
-数字:指定压缩比率,为数字1~9,代表9个压缩级别。其中,数字越小代表压缩率越低但是压缩速度越快;数字越大代表压缩率越大但是压缩速度越慢。默认情况下gzip的压缩比率是6。
gunzip命令的一般格式为:
gunzip [可选项] 压缩文件名
-f:覆盖同名文件不做提示
gzip命令的参数文件名表示要压缩文件的文件名,gzip会自动在这个文件名后添加扩展名.gz作为压缩文件名。gzip命令会将旧的文件删除,只保留压缩文件。gunzip在进行解压文件时会删除压缩包,只保留解压后的文件。
2、归档命令tar
tar命令的作用是将若干文件/目录合并成一个文件以便进行后续的备份或压缩。当然由于tar程序的改进,现在可以直接在归档后进行压缩。
tar命令的一般格式为:
tar [可选项] 生成的tar文件名 需要压缩的文件
-t:显示归档文件的内容
-x:释放归档文件
-u:更新归档文件
-c:创建新的归档文件
-v:显示归档/释放的过程信息
-f:用户指定归档文件的文件名,否则会使用默认名称
-j:使用tar归档后使用bzip2压缩
-z:使用tar归档后使用gzip压缩
我们可以使用-cf命令来创建一个归档文件,生成的文件名扩展名为.tar。然后使用gzip或bzip2来压缩这个tar文件。或者我们可以直接使用-zcvf或-jcvf来创建一个压缩文件,使用-xvf来解压文件。使用-zcvf生成的文件名扩展名为.tgz,使用-jcvf生成的文件扩展名为.tbz2。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值