data/method/一些思考/工作材料/03—Linux文件系统.txt

176 lines
15 KiB
Plaintext
Raw Normal View History

2024-01-29 10:44:43 +08:00
一、Linux文件系统简介
无论是什么操作系统,文件系统都是十分重要的组件。文件系统用户组织和管理计算机存储设备上的大量文件,并提供给用户相应的操作交互接口。简单来说,文件系统就是操作系统用于管理、组织文件并给用户提供服务的系统。
Linux系统本分支持很多种文件系统大致可以分为
1磁盘文件系统指本地主机中实际可以通过磁盘访问的系统包括硬盘、光驱CD-ROM或DVD等、USB存储、磁盘阵列RAID等。常见的文件系统格式有autofs、Ext3、Ext4、UFSUnix系统文件系统、FATFAT16、FAT32、NTFSNew Technology File System等。
2网络文件系统指通过网络远程访问的文件系统这种文件系统的客户端通过网络来远程访问数据常见的有NFSNetwork 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。