当前位置:K88软件开发文章中心网站服务器框架Shell → 文章内容

Shell 文件系统操作

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 14:39:37

。对于硬盘,这样可以处理硬盘内部的不同分区。就内核而言,它仅仅需要通过第 5 列的设备号就可以找到对应的硬件设备,但是对于驱动模块来说,它还需要知道如何处理不同的分区,于是就多了一个辅设备号,即第 6 列对应的内容。这样一个设备就有了主设备号(第 5 列)和辅设备号(第 6 列),从而方便地实现对各种硬件设备的管理。因为设备文件和硬件是对应的,这样可以直接从 /dev/sda (如果是 IDE 的硬盘,那么对应的设备就是 /dev/hda 啦)设备中读出硬盘的信息,例如:范例:访问设备文件用 dd 命令复制出硬盘的前 512 个字节,要 Root 用户$ sudo dd if=/dev/sda of=mbr.bin bs=512 count=1用 file 命令查看相应的信息$ file mbr.binmbr.bin: x86 boot sector, LInux i386 boot LOader; partition 3: ID=0x82, starthead 254, startsector 19535040, 1959930 sectors; partition 4: ID=0x5, starthead 254, startsector 21494970, 56661255 sectors, code offset 0x48也可以用 od 命令以 16 进制的形式读取并进行分析$ od -x mbr.binbs 是块的大小(以字节 bytes 为单位),count 是块数因为这些信息并不直观(而且下面会进一步深入分析),那么先来看看另外一个设备文件,将可以非常直观地演示设备文件和硬件的对应关系。还是以鼠标为例吧,下面来读取鼠标对应的设备文件的信息。$ sudo -s# cat /dev/input/mouse1 | od -x你的鼠标驱动可能不太一样,所以设备文件可能是其他的,但是都会在 /dev/input 下。移动鼠标看看,是不是发现有不同信息输出。基于这一原理,我们经常通过在一端读取设备文件 /dev/ttyS0 中的内容,而在另一端往设备文件 /dev/ttyS0 中写入内容来检查串口线是否被损坏。到这里,对设备驱动、设备文件和硬件设备之间的关联应该是印象更深刻了。如果想深入了解设备驱动的工作原理和设备驱动的编写,那么看看下面列出的相关资料,开始设备驱动的编写历程吧。参考资料:Compile linux kernel 2.6Linux 系统的硬件驱动程序编写原理Linux 下 USB设备的原理、配置、常见问题The Linux Kernel Module Programming GuideLinux 设备驱动开发理解、查看磁盘分区实际上内存、u 盘等都可以作为文件系统底层的“存储”设备,但是这里仅用硬盘作为实例来介绍磁盘和分区的关系。目前 Linux 的分区依然采用第一台PC硬盘所使用的分区原理,下面逐步分析和演示这一分区原理。磁盘分区基本原理先来看看几个概念:设备管理和分区Linux 下,每一个存储设备对应一个系统的设备文件,对于硬盘等 IDE 和 SCSI 设备,在系统的 /dev 目录下可以找到对应的包含字符 hd 和 sd 的设备文件。而根据硬盘连接的主板设备接口和数据线接口的不同,在 hd 或者 sd 字符后面可以添加一个从 a 到 z 的字符,例如 hda,hdb,hdc 和 sda,sdb,sdc 等,另外为了区别同一个硬件设备的不同分区,在后面还可以添加了一个数字,例如 hda1,hda2,hda3 和 sda1,sda2,sda3,所以在 /dev 目录下,可以看到很多类似的设备文件。各分区的作用在分区时常遇到主分区和逻辑分区的问题,这实际上是为了方便扩展分区,正如后面的逻辑卷的引入是为了更好地管理多个硬盘一样,引入主分区和逻辑分区可以方便地进行分区的管理。Linux 系统中每一个硬盘设备最多由 4 个主分区(包括扩展分区)构成。主分区的作用是计算机用来进行启动操作系统的,因此每一个操作系统的启动程序或者称作是引导程序,都应该存放在主分区上。 Linux 规定主分区(或者扩展分区)占用分区编号中的前 4 个。所以会看到主分区对应的设备文件为 /dev/hda1-4 或者 /dev/sda1-4,而不会是 hda5 或者 sda5 。扩展分区则是为了扩展更多的逻辑分区的,在 Linux 下,逻辑分区占用了 hda5-16 或者 sda5-16 等 12 个编号。分区类型它规定了这个分区上的文件系统的类型。Linux支持诸如msdoc,vfat,ext2,ext3等诸多的文件系统类型,更多信息在下一小节进行进一步的介绍。通过分析 MBR 来理解分区原理下面通过分析硬盘的前 512 个字节(即 MBR)来分析和理解分区。先来看看这张图:它用来描述 MBR 的结构。 MBR 包括引导部分、分区表、以及结束标记 `(55AAH),分别占用了 512 字节中 446 字节、 64 字节和 2 字节。这里仅仅关注分区表部分,即中间的 64 字节以及图中左边的部分。由于我用的是 SCSI 的硬盘,下面从 /dev/sda 设备中把硬盘的前 512 个字节拷贝到文件 mbr.bin 中。$ sudo -s# dd if=/dev/sda of=mbr.bin bs=512 count=1下面用 file,od,fdisk 等命令来分析这段 MBR 的数据,并对照上图以便加深理解。$ file mbr.binmbr.bin: x86 boot sector, LInux i386 boot LOader; partition 3: ID=0x82, starthead 254, startsector 19535040, 1959930 sectors; partition 4: ID=0x5, starthead 254, startsector 21494970, 56661255 sectors, code offset 0x48$ od -x mbr.bin | tail -6 #仅关注中间的64字节,所以截取了结果中后6行0000660 0000 0000 0000 0000 a666 a666 0000 01800000700 0001 fe83 ffff 003f 0000 1481 012a 00000000720 0000 0000 0000 0000 0000 0000 0000 fe000000740 ffff fe82 ffff 14c0 012a e7fa 001d fe000000760 ffff fe05 ffff fcba 0147 9507 0360 aa55$ sudo -s# fdisk -l | grep ^/ #仅分析MBR相关的部分,不分析逻辑分区部分/dev/sda1 * 1 1216 9767488+ 83 Linux/dev/sda3 1217 1338 979965 82 Linux swap / Solaris/dev/sda4 1339 4865 28330627+ 5 Extendedfile 命令的结果显示,刚拷贝的 512 字节是启动扇区,用分号分开的几个部分分别是 bootloader,分区 3 和分区 4 。分区 3 的类型是 82,即 swap 分区(可以通过 fdisk 命令的 l 命令列出相关信息),它对应 fdisk 的结果中 /dev/sda3 所在行的第 5 列,分区 3 的扇区数是 1959930,转换成字节数是 1959930\*512 (目前,硬盘的默认扇区大小是 512 字节),而 swap 分区的默认块大小是 1024 字节,这样块数就是 :$ echo 1959930*512/1024 | bc979965正好是 fdisk 结果中 /dev/sda3 所在行的第四列对应的块数,同样地,可以对照 fdisk 和 file 的结果分析分区 4 。再来

上一页  [1] [2] [3] [4]  下一页


Shell 文件系统操作