之前使用虚拟机体验Linux操作系统的使用,一般使用默认的磁盘分区设置,也很少涉及磁盘管理操作,且总有删除重装作为后盾。在安装Ubuntu双系统后,在使用过程中遇到了磁盘分区不合理导致的/boot分区空间不足、磁盘空间需要进行管理等问题,而使用简单粗暴的重装操作则失去了性价比,转而需要通过Linux系统自带的强大的磁盘和文件系统的管理功能来进行实际操作,这里记录平常使用过程中常用的相关的磁盘和文件系统管理所需要的命令和操作。

设备文件命名规则

  在Linux系统环境下,设备均被视为文件,一般处于/dev文件夹下,对不同的设备类型,其对应的文件名不相同。

设备 设备对应的Linux文件名
IDE硬盘 /dev/hd[ a - d ]
SCSI/SATA/USB硬盘 /dev/sd[ a - p ]
软盘 /dev/floppy

  其中,IDE硬盘根据其插入的接口不同,分为/dev/hda - /dev/hdd四个名字,而SCSI/SATA硬盘则根据系统检测到的硬盘的顺序分为 /dev/sda - /dev/sdp 等名称。

  不同的硬件设备会根据其接入情况拥有不同的文件名,进一步的,同一硬件设备中可能存在多个不同的分区,系统通过在设备文件名之后加入数字后缀来进行区分(在后续表述中,一般认为一个分区对应一个文件系统)。以SCSI硬盘为例,其主分区的命名为 /dev/sda1 - /dev/sda4(注意这四个编号只能被主分区和拓展分区使用),而逻辑分区的命名为 /dev/sda5 - /dev/sda15.

  关于设备的命名规则,可以参考文档 Linux allocated devices

文件系统的使用情况查看

  可通过Linux命令 df 和 du 来获得当前系统使用情况的信息。

df   

  报告文件系统对磁盘空间的使用情况

df  [Options] filename
.显示包含有参数文件名的文件系统的空间使用情况;
.不指定文件名时,则显示当前挂载的所有文件系统的磁盘使用情况
.直接指定对应的文件系统名显示相应的信息
Options:
-a 显示所有相关的文件系统的信息
-Bx 以 x 指定的单位来表示空间大小,x 可为整数+单位 的格式,如10K\M\G\T等
-h 以易读的方式显示空间,即以1024作为单位
-T 输出文件系统类型

  使用 df -Th命令,显示情况如下

  

du  

  估计文件系统的使用情况

du [Options] FILE
总结FILE指定的文件集合的空间占用情况,若指定文件集合位目录,则会进行递归计算
-a 显示结果包括文件的空间占用情况,默认值只显示所有目录的空间占用情况
-Bx 以x指定的单元作为单位计算空间占用情况,如-BM,则以1M为单位进行显示
-c 结尾输出总空间占用量
-h 以人类易读的方式输出结果
-s 显示每个参数的总空间占用量

  以命令 du -sc -BM ~/*运行的结果如下

 

磁盘管理

  可借助Linux命令完成磁盘分区与格式化,磁盘的挂载等操作。

fdisk

  磁盘的分区与管理等功能

fdisk [-i] 设备名称
.-l 选项会将设备名称对应的设备的所有分区信息显示后退出,不指定设备时显示系统能够识别的所有设备
.不使用参数时,则进入fdisk命令的交互界面,可按提示进行操作

  注意,fdisk以设备名称作为参数,而不是文件系统名称,故而参数应该为/dev/sd[a - p]和/dev/hd[a - d]的形式。可通过df命令获取对应的设备名称的信息,如某文件系统名为/dev/sda8,则其所在的设备的名称为/dev/sda.

  进入fdisk的交互界面后可根据提示完成获取磁盘信息、新增/删除一个分区等操作。对磁盘的操作首先位于内存中,只有通过 w 退出时才会将修改真正执行,相应的使用 q 退出则不会做修改。请确定操作无误后再执行

  通过fdisk输出设备/dev/sda的分区信息如下

  

  其中,start和end分别表示对应特定分区的起始柱面号。

mkfs

  完成系统的格式化操作

mkfs -t 格式名 设备文件名
mkfs命令会根据其参数调用实际执行的格式化工具,将文件系统格式化

  在键入 mkfs 后按两下[tab]键,可以看到系统支持的格式化的类型。

  

mount  

  磁盘的挂载

mount
将磁盘分区与固定的目录建立联系,使得该目录成为进入该分区的入口
-a 将记录在/etc/fstab中而未挂载的磁盘进行挂载
-l 显示目前的挂载信息,只输入命令mount效果一样
-t 指定文件系统类型,包括 ext2/3、vfat、iso9660(光盘格式)、nfs、cifs等
-L "xx" 使用文件系统卷标名而不是文件系统名(如/dev/sda1)进行挂载,好处在于文件系统名可能随接入系统的接口的变化而改变
--bind 将一个目录挂载到另一个目录上,实现的效果类似于符号连接
-o 可接一些挂载时的一些参数
-o loop 直接将当前文件系统上的文件以loop设备进行挂载,如下载的iso镜像文件,不需要先刻录,直接通过 -o loop xx.iso 将其挂载,即可对其进行操作

  笔者对于挂载的理解是将一个访问入口与一个对应的文件系统联系起来。Linux系统为系统软件,而文件系统实际存储在硬件设备中,挂载所做的就是将某个目录与文件系统关联(挂载),之后即可通过该目录来访问该文件系统。相应的,对于一个与文件系统A挂载的目录,将其与另一个文件系统B挂载,则其中的内容就变为文件系统B的内容,原文件系统A的内容不会改变,但只有经过挂载后才能再进行访问。一般建议挂载的目录为空目录,单个文件系统不要重复挂载。

  事实上,Linux系统的挂载在开机阶段就有发生。在这一阶段,系统根据配置文件/etc/fstab中的设置将系统必需的根目录 / 等进行挂载。该配置文件中包含有文件系统、对应的挂载点、系统类型等信息。而在后续的系统使用过程中,系统的实际挂载情况则被写入/etc/mtab中(也可通过mount的 -n 选项使得挂载情况不被写入该文件)。

  可通过 mount /dev/sdax ~/test 进行简单的挂载,系统会自动识别文件系统的类型,故而一般不需要通过 -t 选项指定。

  对应的文件系统的卸载可以通过umount命令,其参数可以为文件系统名(/dev/sdax)、挂载点名(~/test)等,均可完成卸载操作。

磁盘二进制内容查看

  xxd命令

    xxd             //可用于显示磁盘原始的二进制数据
-u //十六进制内容以大写内容显示
-g x //结果中每 x Bytes使用空格键隔开
-c n //结果中每行包含n个字节的内容
-l n //结果显示总共n个字节的内容
-s -/+n  //+n表示自目标对象开始n字节处开始显示结果
         //-n表示自目标对象结束处前n字节处开始显示结果

  使用示例:

  根据磁盘的第一个扇区应该为MBR(使用GPT格式的磁盘第一个扇区为类MBR结构),使用xxd命令查看其最后66字节:

  sudo xxd -g 1 -l 64 -s +446 /dev/sda

     

  命令表示将每个字节内容(两位十六进制数)使用空格隔开,在距文件开始偏移为446的位置开始,显示连续的66字节的内容,从而可以看到图示中原本属于分区表的内容和最后的结束标志0x55aa。

  关于硬件设备文件的命名可参考:鸟叔的Linux私房菜-Linux主机规划与磁盘分区

  关于Linux磁盘与文件系统管理可参考:鸟叔的Linux私房菜-Linux磁盘与文件系统管理

Linux系统下常用的磁盘管理命令——du / df / fdisk / mount / xxd的更多相关文章

  1. Linux系统下文件压缩与打包命令

    Linux系统下文件压缩与打包命令 常用的压缩文件拓展名 * .Z * .zip * .gz * .bz2 * .xz * .tar * .tar.gz * .tar.bz2 * .tar.xz 压缩 ...

  2. Linux系统下远程文件拷贝scp命令

    在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...

  3. Linux命令(二十四) 磁盘管理命令(二) mkfs,mount

    一.格式化文件系统 mkfs 当完成硬盘分区以后要进行硬盘的格式化,mkfs系列对应的命令用于将硬盘格式化为指定格式的文件系统.mkfs 本身并不执行建立文件系统的工作,而是去调用相关的程序来执行.例 ...

  4. Linux系统下如何监测磁盘的使用空间

    不管是我们在安装软件还是监测软件的使用性能,我们都要随时掌握系统磁盘的使用情况. 使用df命令 df df命令用于显示磁盘分区上的可使用的磁盘空间.默认显示单位为KB.可以利用该命令来获取硬盘被占用了 ...

  5. windows和linux系统下测试端口连通性的命令

    0. ping 1. telnet 2. ssh 3. curl 4. wget 5. tcping 6. 总结 本文地址: https://www.cnblogs.com/hchengmx/p/12 ...

  6. 浅析Linux系统下用户与权限管理

    Linux作为一种多用户多任务操作系统,在日常的使用中不可避免地要划分出一个角色的概念来管理和使用计算机,这个角色与每一个计算机使用者关联,在Linux中称这种角色为用户.而在每一个用户使用计算机的过 ...

  7. linux系统下常用的打包/解压缩包命令

    此处大概列了常用的解压和打包命令,详细信息需要百度一一对比他们的区别,比如我们在下载软件时就是最好的实践. 用zip举例说明,使用命令压缩时有点是,压缩文件.目录会非常快:如图,我压缩了一个progr ...

  8. linux系统下常用的命令(吐血自己整理,且用且珍惜)

    1)linux命令太多,有时候记不起来是哪个,为了方便大家查询,自己吐血整理了以下这些,转载时请标明出处,珍惜原创成果 吐血自己整理,且用且珍惜) 吐血自己整理,且用且珍惜) 吐血自己整理,且用且珍惜 ...

  9. Linux系统下常用命令

    yum [options] [command] [package ...] options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装 ...

随机推荐

  1. php 截取中文字符串方法

    /** * 截取中文字符串函数 * @param $str 需要截取的字串 * @param $start 开始截取的位置 * @param $length 截取的长度 * @return 此函数返回 ...

  2. C#中的分部类和分部方法:partial

    这篇文章主要介绍了C#中的分部类和分部方法,讲解了类的拆分和方法的定义的拆分,需要的朋友可以参考下可以将类或结构.接口或方法的定义拆分到两个或多个源文件中.每个源文件包含类型或方法定义的一部分,编译应 ...

  3. [转] SQL函数说明大全

    from http://www.cnblogs.com/moss_tan_jun/archive/2010/08/23/1806861.html 一旦成功地从表中检索出数据,就需要进一步操纵这些数据, ...

  4. 第6天:数据Array

    数组Array every() 方法测试数组的所有元素是否都通过了指定函数的测试. array.every callback[, thisArg] callback 被调用时传入三个参数:元素值,元素 ...

  5. Java集成groovy之GroovyShell、GroovyScriptEngine、GroovyClassLoader

    GroovyClassLoader 用 Groovy 的 GroovyClassLoader ,动态地加载一个脚本并执行它的行为.GroovyClassLoader是一个定制的类装载器,负责解释加载J ...

  6. 设计模式入门,适配器模式,c++代码实现

    // test07.cpp : Defines the entry point for the console application.// #include "stdafx.h" ...

  7. jquery replace方法去空格

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. HDU3629:Convex

    传送门 求凸四边形的个数 转化成总数减去凹四边形的个数 凹四边形一定是一个三角形中间包含的另外一个点 那么枚举被包含的点,其它的对于这个点极角排序 被包含不好算,算总数减去不被包含的 枚举三角形的一个 ...

  9. web第一章(html)

    HTML介绍 HyperText(超文本) Markup(标记) Language(语音) 类似于XML都是由标签组成 xml:是可扩展标记语言,标签可以任意自定义 HTML:不可以使用任意标签,学习 ...

  10. 用CSS3/JS绘制自己想要的按钮

    我认为按钮的绘制分以下三个步骤 第一步,绘制按钮的轮廓 选择合适的html标签,设置轮廓的CSS /* html代码 */ <a href="#" class="b ...