Linux下的文件系统以及磁盘操作-程序员宅基地

技术标签: 运维  操作系统  

在文件系统方面,Linux可以算得上操作系统中的 “瑞士军刀”。Linux 支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统,而“什么是文件系统”?文件系统是对一个存储设备上的数据和元数据进行组织的机制。
常见的文件系统:ext2、ext3、ext4、xfs、jfs、reiserfs、iso9660、swap、VFAT、

VFS等
例如:EXT2 XFS JFS REISERF3等都是单个文件系统使用
说到文件系统,就要说一下硬盘,硬盘出厂后的第一次格式化叫做低级格式化,其作用主要是为了创建磁道,同一个编号的磁道形成一个柱面,分区时则是按照柱面进行分区,从外到里从低到高进行划分。每一个分区可以独立的创建一个文件系统。
Linux 以一组通用对象的角度看待所有文件系统。这些对象是超级块(superblock)、inode、dentry 和文件。超级块在每个文件系统的根上,超级块描述和维护文件系统的状态。文件系统中管理的每个对象(文件或目录)在 Linux 中表示为一个 inode。

inode 包含管理文件系统中的对象所需的所有元数据(包括可以在对象上执行的操作)。另一组结构称为 dentry,它们用来实现名称和 inode 之间的映射,有一个目录缓存用来保存最近使用的 dentry。dentry 还维护目录和文件之间的关系,从而支持在文件系统中移动。最后,VFS 文件表示一个打开的文件;注:inode:用于存放权限,属主属组,大小,类型,磁盘块的指向;目录:每一个目录需要一个inode,存放文件名;位图:索引inode 非为0/1;磁盘块位图:标志磁盘块有没有被使用。
和文件系统有联系的命令:
1、ln:
格式:ln [options] SRC DST 默认创建的是硬链接(不能跨分区),从文件系统的实现上来说,硬链接其实就是将一个文件的的的inode号多次利用,具有不同的指针,只要结点的连接数不是0,文件就一直存在,不管你删除的是源文件还是连接的文件。
常用参数:-s:创建软连接,是一个独立的文件,使用了一个新的inode号,引用的路径,而且可以为目录创建,并且可以跨分区。
因此在对某些文件进行复制,剪切和删除时其实质分别是:复制:将存有的数据所在的磁盘块进行复制一份,并使用新的inode号,建立相应的映射,而剪切则不动数据块,只是将inode号中的文件路径映射修改了,这就是为什么有时候我们在同一个分区上移动一个很大的文件时,也能迅速完成的原因,而删除则是将inode号标识为0,清除其信息,然后将磁盘块标识为未使用,当有新的数据存入时就将原来的数据覆盖,由此当误删了一些数据时只要还未向原有位置写入新的数据时,那些被误删的数据均是可以找回的,像一些软件上的粉碎功能则是想原文件数据存储的位置重新写入01代码,从而达到删除原数据的目的。
2、文件管理
(1).du:用于估算目录和文件的使用量
参数:
-h:单位换算,使大小以M单位显示
-s:显示目录以及目录中所有文件的大小
例如:#du -sh /etc

(2).df:用于显示当前系统磁盘的使用情况
-h:单位换算
-i:显示inode的使用情况
例如:#df -ih

(3).fdisk:磁盘管理
-l:列出当前系统的每一个磁盘及其当前分区的情况
例如:#fdisk -l

(4).压缩工具gzip/bzip2/zip/compress/xz/7z
[1]gzip:压缩文件-->gunzip:解压文件
例如:#gzip FILENAME 
#gunzip FILEMAME
参数:
-d:解压缩
-c:gzip -c messages > messages.gz 压缩后保留源文件
-t:测试压缩文件压缩以后是否完整
-#:(1-9)指定压缩比,默认是6.
zcat:在不解压的情况下查看文件

[3]zip:可以压缩目录
格式:zip [选项] 压缩后的文件名.zip 需要压缩的文件
例如:#zip message.zip message
例如:#zip myfilezip.zip message inittab 压缩多个文件
unzip:解压缩

[4]tar:文件的归档工具
tar tarfile.tar 文件或目录
-c:创建归档
-x:展开归档
-f:归档后文件名
-t:不展开查看归档中的文件
-v:显示整个归档回展开的过程
-z:在创建直接压缩 gzip
-j:在创建直接压缩 bzip2
-C:指定展开之后存放路径
例如:#tar -cf mytar.tar message inittab 创建归档
例如:#tar -xf mytar.tar
例如:#tar -tf mytar.tar
例如:#tar -zcf 
例如:#tar -zxf
例如:#tar xf mytar.tar.gz -C /tmp/test

3、分区:在硬盘的0扇区0磁道存放的是MBR其大小是512个字节,其中前446哥字节是引导扇区俗称“BootLoader”,存放的是系统启动的引导,其中的64个字节是FAT分区列表,每16个字节可以引导一个主分区,而这就是我们通常所说的一块硬盘,只能创建最多4个主分区,或者3主一扩展,剩下的2哥字节是封装码占用。
当分区表出现错误或者被破坏的时候,就无法正常进入系统,所以要对系统的分区表进行备份.
命令:
sfdisk:保存备份分区表信息
-d:#sfdisk -d /dev/sdb > /root/sdb.part.bak   将某个磁盘的分区表保存
#sfdisk /dev/sdb < /root/sdb.part.bak

Linux识别磁盘设备规则:IDE或者ATA设备被识别为hd;SATA、SCSI、USB等设备被识别为sd; 多块磁盘设备时用a,b,c等字母加以区别,形如:/dev/hda  /dev/hdb   /dev/sda   /dev/sdb

创建分区:fdisk /dev/sda
其中的子命令:
w:保存修改并退出
p:显示磁盘列表
n:添加一个新的分区
d:删除一个分区
q:放弃修改并退出
在分区创建完成之后,并不是立即生效,需要使用命令:
partprobe /dev/sda    通知内核重新扫描磁盘sda信息,后若不跟磁盘名,则会扫描所有的磁盘

4、格式化:这次的格式化被称为高级格式化
在linux下任何的磁盘或分区没有进行格式化是不能使用的
mkfs -t TYPE DEVICE
例如:#mkfs -t ext3 /dev/sdb1 
-L:指定卷标
例如:#e2label /dev/sdb1显示其卷标
例如:#e2label /dev/sdb1 HELLO 设置卷标

mke2fs /dev/sdb2
-j:把对应的磁盘分区创建为ext3类型
-L:指定卷标
-b:指定块大小{1024|2048|4096}  
-c:创建文件系统时是否要检查磁盘是否有坏道
-i:指定一个比例,每多少个字节使用一个inode号{128默认|256}
-N:直接指定inode的个数
-m:指定预留给管理员的磁盘百分比

5、挂载
在Linux下任何一个存储设备想要被访问,必须将这个设备与根下的一个目录相关联起来,作为一个访问接口,而这个过程叫做挂载,去除关联关系就叫做卸载。
格式:mount 设备 挂载点
例如#mount 显示当前所有已经挂载的文件系统
#mount /dev/cdrom /media 将dev下的cdrom磁盘挂载到media
参数格式:mount [-t fstype] [option] 设备 挂载点
-a:挂载所有的文件系统 /etc/fstab  #mount -a
-n:挂载时不更新/etc/mtab文件
-r:只读挂载
-w:读写挂载
-L label:指定卷标进行挂载
-U:指定uuid进行挂载
-o:明确指定挂载选项
    async:异步写入
    atime:当访问时自动更新时间
    auto:可以自动挂载
    exec:允许具有执行权限的文件执行
    nouser:禁止普通用户挂载此设备
    remount:重新挂载(某个属性没打开,需要打开时使用此项)
    ro:只读
    rw:只写
例如:#mount -o ro /dev/sdb1 /mnt 以只读方式将dev下的sdb1分区挂载到/mnt
例如:#mount -o remount,rw /mnt 
loop:挂载一个本地设备
例如:#mount -o loop rhci.iso /mnt    挂载一个iso

6、umount:设备卸载
umount 挂载点/挂载的设备
例如:#umount /dev/sdb2
blkid DEV:查看设备的文件类型

7、检查文件系统
(1).fsck检查文件系统的不一致(具体检查inode与文件不一致)
参数:-t FILETYPE:指定检测的文件系统的类型
例如:#fsck -e ext3
efsck:用来专门检测ext类的文件系统
参数:-f:强行进行检测
-p:自动修复文件系统的不一致
-B:指定磁盘块的大小

(2).dumpe2fs:详细的显示ext2 ext3文件系统的信息
参数:-f:即使文件系统不一致也要详细显示其信息
-h:只显示超级块的详细信息
例如:#dumpe2fs /dev/sda
tune2fs:修改ext类的文件系统的属性
参数:-j:将ext2文件类型升级为ext3(不影响磁盘上的数据)
-m:修改保留给root用户的磁盘块与inode的百分比
-r:直接指定块的个数
-L:设定卷标
-l:显示超级快的信息
-c:修改每隔多少次挂载后进行自检 
-i:设定每隔多少天进行一次自检,默认单位是天
-u:指定使用者
-o:指定默认的挂载功能

(3).交换分区swap(必须是一个独立的分区,其作用相当与windows中的虚拟内存,当物理内存即将用完或者不够使用时才会使用到交换分区)
free -m:以M为单位显示内存信息
格式化:mkswap
参数:-L:指定卷标
启用交换分区:swapon DEV
关闭交换分区:swapoff DEV
启动全部:swapon -a
检查其状态:swapon -s

(4).创建一个本地回环文件,也可以理解为复制,可以说是直接复制磁盘块
格式:dd if=FILE of=FILE bs=NU count=NU
if=FILE:要复制的文件
of=FILE:目标
bs:一次复制的单位多大,默认单位字节
count:复制多少个块
#dd if=/etc/issue of=/tmp/abc
#dd if=/dev/sda of=/root/mbr.bak bs=512 count=1 备份mbr Mater Boot Record
#dd if=/dev/zero of=/var/swapfile bs=1M count=1 建一个1M本地回环文件

/dev/null
/dev/zero 用于初始化一个分区

(5)./ect/fstab 开机自动挂载的文件系统 
6个字段:
DEV-name | DEV-label | DEV-uuid
挂载点:
文件系统类型:
挂载选项(defaults);
转储频率:备份{0,1,2}{从不备份,一天一次,两天一次}
自检次序:{0,1,2}{从不,第一,第二},第一只能为根








本文转自 向阳草米奇 51CTO博客,原文链接:http://blog.51cto.com/grass51/785156,如需转载请自行联系原作者
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34194359/article/details/89902231

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签