Linux讲义·基础篇(1)磁盘与文件系统

柳大的Linux讲义·基础篇(1)磁盘与文件系统


《柳大的Linux讲义·基础篇》来自柳大的CSDN博客,转载请注明原文链接:http://blog.csdn.net/poechant/article/details/7214926


一、磁盘知识

1、磁盘物理结构

1)结构:

   物理上,一块磁盘,有多个盘片。每个盘片上根据半径不同,有很多磁道(track)。不同盘片上半径相同的磁道,在逻辑上称为磁柱(cylinder)。一个磁道上的某段弧内的区域,被称为扇区(sector)。每个扇区的大小是512字节。

2)容量:

   计算公式是:

   磁盘容量 = 512字节 x每个磁道的扇区数 x 磁头数 x柱面数

   磁盘容量 = 512字节 x每个磁道的扇区数 x 盘片数 x每个盘片的磁道数

   注意:磁头数 = 盘片数,柱面数 =每个盘片的磁道数。


2、磁盘分区

1)结构:

   一块磁盘从外层的某个起始柱面,到内层的某个结束柱面,称为一个分区(partition)。

2MBR

Master Boot Recorder,是整个磁盘的第0个柱面,记录有整个磁盘的分区信息。开机后对磁盘的读取首先从MBR开始。如果一个磁盘的MBR坏了,那么整个磁盘也就废了。

3MBR的限制:

   毕竟MBR的大小有限,无法存储任意多个分区的信息。所以MBR限制了只能存储4个分区的信息。这四个分区中最多只可以有一个扩展分区。所以磁盘分区的的结果一定是:X个主分区+Y个扩展分区,且X+Y<=4Y<=1。如果你分了4个分区后还有剩余空间,则这些空间是无法使用的。如果你分了1个,2个或3个分区,而且还有剩余空间,那么这些空间会被分成3个,2个或1个主分区。


3、磁盘逻辑结构

1)结构:

   磁盘的逻辑结构是由操作系统决定的。一块磁盘的最小物理存储单位是512字节的扇区,但一个磁盘的最小逻辑存储单位可以由操作系统指定,称为块(block),大小比如4KB(即8个扇区)。一个块最多只能存储一个文件,所以块的设定要适中,太大了浪费空间,太小了降低效率。

2superblock

   每个分区(partition)起始位置的那个block,存储着这个分区的信息,包括分区的块总数、空闲块总数、非空闲块总数、所有块的状态信息映射表等。对某个分区中的数据进行读写时,首先读取的是该分区的superblock。如果一个分区的superblock坏了,那么整个分区也就废了(但不影响其他分区)。


4、文件的读写过程

   先读整个磁盘的MBR,获取所有分区信息,并确定要载入的操作系统文件所在的分区。然后,读取某个分区时,先读取该分区的superblock,然后找到相应的块(可能是多个)进行读取。


二、文件系统

1、文件系统概念

   文件系统(file system,或filesystem)是硬件存储设备与操作系统之间的数据传输与管理层。恰如客户端提供与网络之间的数据通信一样,文件系统提供操作系统或者用户与硬件存储设备之间的通信。很多情况下,文件系统与操作系统分得不那么清楚,而是一个整体。任何形式的存储设备上都有文件系统,比如硬盘(hard disk)、软盘(floppy disks)、光盘(optical disks)、闪存(flash memory)。


2、文件系统分类

磁盘文件系统(disk filesystem

闪存文件系统(flash filesystem

磁带文件系统(tape filesystem

数据库文件系统(database filesystem

事务文件系统(transactional filesystem

网络文件系统(network filesystem

共享磁盘文件系统(shared disk filesystem

软盘文件系统(flat filesystem


3Linux文件系统

ext22nd EXTended filesystem,发布于1993

ext33rd EXTended filesystem,发布于2001

ext44th EXTended filesystem,发布于2008

XFSeXtended FileSystem,发布于1994

JSFJounaled1990发布JFS1AIX 3.11999发布JFSOS/24.5版本。

ReiserFSReiser File System,发布于2001

BtrfsB-TRee File System2009非稳定版,稳定版还未发布。


4Linux系统的磁盘与分区编号

1)磁盘编号:/dev/hda/dev/hdb/dev/hdc表示本地硬盘。/dev/sda/dev/sdb/dev/sdc表示外接的可移动硬盘。

2)分区编号:/dev/hda1/dev/hda2/dev/hdc1表示本地硬盘的分区。/dev/sda1/dev/sdc2表示外接硬盘的分区。


《柳大的Linux游记·基础篇》来自柳大的CSDN博客,转载请注明原文链接:http://blog.csdn.net/poechant/article/details/7214926

-

柳大的Linux讲义·基础篇(2)Linux文件系统的inode

《柳大的Linux讲义·基础篇》来自柳大的CSDN博客,转载请注明原文链接:http://blog.csdn.net/poechant/article/details/7214926


   要想理解Linux文件系统,首先要理解的就是inode。什么是inode?往下看吧。


1Linux文件系统的最基本数据结构:inodeblock

1)背景

   由于Linux系统是多用户多的,所以文件系统类型多样化是在所难免的。从ext2开始,是将文件属性和文件内容分开存储的,分别由inodeblock来负责。


2inode

   用于存储文件的各属性,包括:

    - 所有者信息:文件的ownergroup

    - 权限信息:readwriteexcite

    -时间信息:建立或改变时间(ctime)、最后读取时间(atime)、最后修改时间(mtime);

    - 标志信息:一些flags

    - 内容信息:typesize,以及相应的block的位置信息。

   注意:不记录文件名或目录名,文件名或目录名记录在文件所在目录对应的block里。


3block

   用来存储文件的内容。


4)创建目录或文件

   当创建一个目录时,文件系统会为该目录分配一个inode和至少一个block。该inode记录该目录的属性,并指向那块block。该block记录该目录下相关联的文件或目录的关联性和名字。

   当创建一个文件时,文件系统会为该文件分配至少一个inode和与该文件大小相对应的数量的block。该inode记录该文件的属性,并指向block

   如果一个目录中的文件数太多,以至于1block容纳不下这么多文件时,Linux的文件系统会为该目录分配更多的block

   (各block之间形成链表?)


5)读取目录或文件

   当我们告知操作系统一个文件的路径后,操作系统是如何找到这个文件的呢?首先操作系统会调用文件系统的相应接口,接下来:

   递归说法:当读取一个文件或目录X时,提供给文件系统的是一个路径P。文件系统会先读取X所在的目录Dinode_d(注意这里,其实是这一操作的递归过程),通过inode_d获得其对应的block_d,在block_d中通过已知的X的名称,查询到Xinode_x

    迭代说法;如果读取的是/x1/x2/x3/x4/x5这个文件,则先读取根目录的inode_root,然后找到inode_root对应的block_root,在block_root中根据x1这个名字找到x1对应的inode_x1,然后找到inode_x1对应的block_x1,在block_x1中根据x2这个名字找到inode_x2,再找到block_x2,然后根据x3找到inode_x3,再block_x3,根据x4找到inode_x4,再block_x4,再根据x5找到inode_x5,再block_x5,就读取到我们要的x5的内容了。


2、分区

1)分区结构

    分区(partition)在被Linux的文件系统(比如ext2)格式化的时候,会分成inode tableblock table两部分,且大小都是固定的。该分区的所有inode都在inode table里,所有block都在block table里。


2)块大小

    ext2允许的block size1024bytes2048bytes4096bytes


3inode大小

    ext2一般默认给inode预设的大小为128bytes


4)预设分区

    一个T bytes的分区,设定每个blockB bytes,每个inodeI bytes。如果假设平均每个文件占用两个block的话,那么inode的数量就应该设定为T/(2B+I)个,即inode tableT*I/(2B+I) bytesblock tableT*B/(2B+I) bytes。所以一个分区的文件系统所能容纳的文件数量,被限制于该分区的文件系统的inode area中的inode数。

    如果一个分区大小为1GB,每个block4KB,一个inode128B,并假设平均每个文件占用2block。那么inode的数量为1GB/(8KB+128B)=129055.5,即129055。那么inode table的大小为129055*128B=15.75MB。所以按照这样的规划,如果一个1GB的磁盘,那么格式化后,就已经有15.75MB被使用了。

   大文件应用场景:block设置的小一些,inode设置的多一些。比如新闻组、BBS等。

   小文件应用场景:block设置的大一些,inode设置的少一些。比如图片分享网站。


3、查看本机的文件系统信息

   使用dumpe2fs命令可以查看分区的文件系统的相关信息。比如我在我的一台测试机上查看sda1,可以输入:

dumpe2fs /dev/sda1


   会得到如下内容,一些信息已经标注在注释里了。


1)文件系统基本信息


#该分区的文件系统的名称

Filesystem volumn name: MAIN


#上次的挂载点

Last mounted on: <not available>


#文件系统的通用唯一标识符

Filesystem UUID: <none>


#文件系统的

Filesystem magic number: 0xEF53


#修订版本号

Filesystem revision #: 1 (dynamic)


Filesystem features: has_journal needs_recovery

Filesystem flags: signed_directory_hash

Default mount options: (none)


#文件系统状态

Filesystem state: clean


#发生错误后的行为

Errors behavior: Continue


#操作系统

Filesystem OS type: Linux


2)结构信息


#Inode总数

Inode count: 1313312


#Block总数

Block count: 1313305


#保留block

Reserved block count: 65665


#空闲block

Free blocks: 979164


#空闲inode

Free inodes: 1298415  


#第一个block的编号

First block: 0


#block的大小

Block size: 4096


#fragment的大小

Fragment size: 4096


#每个groupblock数是32K

Blocks per group: 32768


#每个groupfragment数是32K

Fragments per group: 32768


#每个groupinode

Inodes per group: 32032


#每个groupinode blocks

Inode blocks per group: 1001


3)访问信息


#上次挂载时间

Last mount time: Wed Jan 25 00:32:14 2012


#上次写时间

Last write time: Wed Jan 24 00:32:14 2012


#挂载数

Mount count: 11


#最大挂在数

Maximum mount count: 20


#上次检查文件系统时间

Last checked: Sat Oct 31 22:52:33 2009


#检查文件系统时间间隔

Check intervalle: 15552000 (6 months)


#下一次检查文件系统的时间

Next check after: Thu Apr 29 22:52:33 2010


#对保留块有权限的用户ID

Reserved blocks uid: 0 (user root)


#对保留快有权限的组ID

Reserved blocks gid: 0 (group root)


#第一个inode

First inode: 11


#每个inode大小

Inode size:128


#日志inode

Journal inode: 8


#日志大小为32M

Journal size: 32M


4group信息 

Group 0: (Blocks 0-32767)

  Primary superblock at 0,Group descriptors at 1-1

  Block bitmap at 2 (+2), Inode bitmap at 3 (+3)

  Inode table at 4-1004 (+4)

  0 free blocks, 32019 free inodes, 2 directories

  Free blocks:

  Free inodes: 14-32032

Group 1: (Blocks 32768-65535)

  Backup superblock at 32768, Group descriptors at 32769-32769

  Block bitmap at 32770 (+2), Inode bitmap at 32771 (+3)

  Inode table at 32772-33772 (+4)

  3 free blocks, 32032 free inodes, 0 directories

  Free blocks: 33773-33775

  Free inodes: 32033-64064

Group 2: (Blocks 65536-98303)

  Backup superblock at 65536, Group descriptors at 65537-65537

  Block bitmap at 65538 (+2), Inode bitmap at 65539 (+3)

  Inode table at 65540-66540 (+4)

  3 free blocks, 32032 free inodes, 0 directories

  Free blocks: 66541-66543

  Free inodes: 64065-96096

Group 3: (Blocks 98304-131071)

  Backup superblock at 98304, Group descriptors at 98305-98305

  Block bitmap at 98306 (+2), Inode bitmap at 98307 (+3)

  Inode table at 98308-99308 (+4)

  3 free blocks, 32031 free inodes, 0 directories

  Free blocks: 99309-99311

  Free inodes: 96098-128128

Group 4: (Blocks 131072-163839)

  Backup superblock at 131072, Group descriptors at 131073-131073

  Block bitmap at 131074 (+2), Inode bitmap at 131075 (+3)

  Inode table at 131076-132076 (+4)

  0 free blocks, 32032 free inodes, 0 directories

  Free blocks:

  Free inodes: 128129-160160

...

Group 40: (Blocks 1310720-1313304)

  Backup superblock at 1310720, Group descriptors at 1310721-1310721

  Block bitmap at 1310722 (+2), Inode bitmap at 1310723 (+3)

  Inode table at 1310724-1311724 (+4)

  1580 free blocks, 32032 free inodes, 0 directories

  Free blocks: 1311725-1313304

  Free inodes: 1281281-1313312


    可见,各Group对应的blocks(注意每个block的大小是4096bytes

    - Group 00:       0(0x000000) -   32767(0x007FFF):    0K =  0 * 32K

    - Group 01:   32768(0x008000) -   65535(0x00FFFF):   32K =  1 * 32K

    - Group 02:   65536(0x010000) -   98303(0x017FFF):   64K =  2 * 32K

    - Group 03:   98304(0x018000) -  131071(0x01FFFF):   96K =  3 * 32K

    - Group 04:  131072(0x020000) -  163839(0x027FFF):  128K =  4 * 32K

    …

    - Group 40: 1310720(0x140000) - 1313304(0x147FFF): 1280K = 40 * 32K


    40group一共的大小,是40*32K*4KB = 5GB


4、文件系统结构

    结合上面命令的输出结果,一个分区一般含有多个block group,比如上面看到的40个。而每个block group都有superblockgroup descriptionblock bitmapinode bitmapinode tabledata blocks,比如上面的Backup Superblock占用1block4KB)、Group descriptors占用1block4KB)、Block bitmap占用1block1KB)、Inode bitmap占用1block1KB)、Inode table占用1001block512.5KB)。

    Superblock记录整个partitionblockinode的总量,已使用和未使用的inodeblock的数量,1block1inode的大小,filesystem的挂载时间/最后写入时间/最后检查时间、标示该文件系统是否被挂载的valid bit0标示未挂载,1标示已挂载)。是MBR中的Superblockbackup

    Group descriptors描述由何处开始记录数据,是MBR中的Group descriptorsbackup

    Block bitmap记录哪个block是空闲的。

    Inode bitmap记录哪个inode是空闲的。

    Inode table存放inode数据。

    Data blocks存放block数据。

    如下图:



(注:图取自《鸟哥的Linux私房菜》)


《柳大的Linux游记·基础篇》来自柳大的CSDN博客,转载请注明原文链接:http://blog.csdn.net/poechant/article/details/7214926

-

柳大的Linux讲义·基础篇(3)权限、链接与权限管理

转载请注明来自柳大的CSDN博客,原文链接:http://blog.csdn.net/poechant/article/details/7215038


1Linux的权限管理

   Linux中,每个文件都有一个拥有者(owner),而由于每个用户都有一个所属的用户组,所以连带着让每个文件都有一个拥有组。所以在Linux的权限管理中,首先有对于一个文件的拥有者权限,一个文件的用户组权限,另外还有一个对于其他所有用户的权限。

    drwxrwxrwx中的d表示文件夹,第一组rwx表示拥有者的权限,第二组rwx表示拥有组的权限,第三组rwx表示其他用户的权限。

   如果我们从左到右分别编号为012……9,则0位上可以是“-”表示普通文件(file),“d”表示目录(directory),“l”表示链接(link)、“b”表示区块设备文件(block,比如磁盘)、“c”表示字符设备文件(character,表示一些串行数据接口设备,比如USB设备)、“s”网络接口文件(socket)、“p”表示数据传输文件(pipeFIFO)。

   对于文件,“r”表示可以读取文件的内容,“w”表示可以修改文件的内容,“x”表示可以执行文件。

   对于目录,“r”表示可以查看目录的内容(比如用“ls”命令查看目录内的文件),“w”表示可以修改目录的内容(比如创建、删除、更新目录内的文件),“x”表示可以进入目录。

   Linux系统中,一个文件或目录是否可以被执行,与其名称是没有关系的,而取决于rwx属性,这是与Windows的区别。

   另外注意通过网络(包括互联网和局域网等)传输后,文件的属性是会被改变的,这与网络传输时数据的格式转换和接口设备有关。


2、新建文件或目录的权限

1)默认权限

   当在Linux系统中创建一个文件时,默认其不具有可执行权限的,而默认具有读写权限。所以文件的默认权限是666,即rw-rw-rw-

   当在Linux系统中创建一个目录时,默认其是具有可执行权限的(即访问目录的权限)。所以文件的默认权限是777,即rwxrwxrwx

   但是这还没完,看下面的(2)。

2)初始权限

   上面说的是Linux系统对文件或目录的权限默认值,而在Linux系统中还有umask,它标示着文件或目录在创建之初时被掩盖(mask)掉哪些权限。所以如果umask022,那么创建一个新文件时,初始权限就是666-022=644了,而目录则是755.


3、链接

1)软链接和硬链接

   链接分为软连接(符号链接)和硬链接。

   根据上一篇文章《柳大的Linux游记·基础篇(2Linux文件系统的inode》,我们已经知道了一个目录或文件在Linux文件系统中的inodeblock存储方式。下面以例子说明。

    假设目标文件名为target,其inodei0,第一个blockb0。而其所在的目录dirinodei1,相应的第一个blockb1


2)创建和删除链接的本质

    硬链接

    -创建:为一个目标文件target(设其inodei0,第一个blockb0。而其所在的目录dirinodei1,相应的第一个blockb1)创建一个硬连接h-link时,实际上发生的操作是,在dirb1中创建一个文件条目,该条目中指示i0这个inode

    -删除:删除一个硬链接,就是修改dirb1内容,去掉该硬链接条目。

    符号连接

    -创建:创建一个实在的文件,为其分配一个inode,记作i2,但不分配blockinode中指示的block为目标文件的b0.

    - 删除:回收该inode,修改inode bitmap


3)创建和删除链接的命令

   创建:ln -s <target> <link>,其中参数s表示symbolic,这种方式产生的是软连接,又称为符号链接,相当于Windows中的快捷方式。ln <target> <link>,这种方式产生的是硬链接。两者都是与源文件保持同步的。

   删除:与删除普通的文件的命令一样。


4)软连接和硬链接的区别

   范围:硬链接必须与目标文件在同一个文件系统中,而软连接文件可以跨越文件系统。


5)链接文件的权限

   链接文件的权限,与目标文件保持一致。



4、权限操作

1chownchange owner

   作用:改变文件或目录的所有者,语法:

chown [-R] <user_name> <file_name>

chown [-R] <user_name> <directory_name>

    例:

chown michael example_file

chown -R michael example_directory


2chirpchange group

   作用:改变文件或目录的所有组,语法:

chgrp [-R] <group_name> <file_name>

chgrp [-R] <group_name> <directory_name>

    例:

chgrp admin example_file

chirp -R admin example_directory


3chmodchange mode

   作用:改变文件或目录的权限,语法:

chmod [-R] <XYZ> <file_name>

chmod [-R] <XYZ> <directory_name>

chmod [-R] <u|g|o|a><+|-|=><r|w|x>

    例:

chmod 755 example_file

chmod -R 755 example_directory

chmod u=rwx,g=rx,o=r example_file

chmod u+x,g-w example_directory

chmod a-w example_file


转载请注明来自柳大的CSDN博客,原文链接:http://blog.csdn.net/poechant/article/details/7215038

-



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值