RHCE 学习笔记(14)- 文件系统 (1)

这一节学习了RHEL的文件管理系统,主要包括了文件系统的查看,设备的挂载,创建链接和文件定位4个方面的知识点。

首先来看看文件系统

我们可以在/proc/partitions这个文件查看当前的分区

通过df -h查看已经挂载了的设备

-hT可以显示设备的文件系统类型

有的挂载点路径比较长,自动分2行显示,可以-P强制一行显示

如同进程有pid,用户有uid,每个文件系统也有自己的id,称为uuid,可以通过 blkid(block id)来查看。注意uuid标记的是文件系统,而不是分区。uuid的好处在于可以通过uuid这个唯一值来挂载系统,这样可以避免因为删除硬盘造成的错位,sda6变成了sda5等等

在目录里面可以通过 ls -ld查看目录的属性,ls -la查看内容的属性,但是-ld显示的目录大小只有4K,这仅仅是目录本身的大小,如何查看目录和其内容的整个大小呢?

可以通过du来查看,如果只想看最终结果,使用-s(summary)就行了

接下来,看看如何创建新的硬盘分区,并加载该设备

我新添加一个10G的硬盘

在Disk工具里面可以看见该磁盘了,但是Content是Unknown,这是因为我们还没有格式化文件系统

自定义格式化,选择文件系统格式为xfs

格式化

格式化以后就可以看见Cotents变成XFS了,但是还没有加载

我们可以通过fdisk 或者 blkid来查看当前的磁盘,也可以通过df -h来查看当前的磁盘是否都已经加载了

加载的语法很简单 mount -o 选项 外部设备 挂载点目录

比如 我创建一个目录,然后mount加载,umount卸载

有的时候,我们会遇见无法卸载设备的情况,比如用户正在使用中。

例如,另外开一个进程,进入这个目录

这个时候因为正在使用中,所以我无法卸载

如果判断哪一个进程和用户正在使用这个文件系统的话,我们可以强行终止掉这个进程。

我们通过fuser来进行判断,语法如下

显示进程5751,用户beanxyz正在访问这个目录(文件系统)

kill -9 强行终止进程之后就可以卸载了

-o的选项还可以设定权限读写执行的权限

例如,挂载的时候设为只读权限

这样我是无法写入内容的

可以通过remount来更改权限,比如改为读写权限,我就可以创建新文档了

再试试看执行的权限,创建一个简单sh脚本,输出一行语句

更改权限为不可执行之后,即使是root执行脚本也会被拒绝,更改为exec之后就没问题了

前面说了uuid也可以用来挂载,直接把设备名改成UUID="XXXXX"的格式就行了

前面的这些挂载操作都是临时性的,一旦重启计算机,就会丢失。我们可以修改/etc/fstab文件来实现开机的自动挂载

格式有6列,分别代表以下几个含义

设备名/uuid  挂载点  文件系统 defaults dump 开机自检

设备名,挂载点和文件系统一目了然,defaults是指系统默认的各种权限设定, dump和开机自检都设成0(关掉)即可

可以直接用mount -a来挂载所有在fstab里面已经配置了设备

第三部分 链接的创建

RHEL里面,一个硬盘分区一般包括两大部分,inode 区和数据区,数据区是由很多的block(块)组成的,一个块默认大小是4k,一个块最多只能存放一个文件,因此1个12k的文件需要占据3个块,而一个1k的文件只会使用1个块,而且这个块里面有3k的空间都会浪费掉。因此对于大量的小文件,适合较小的块,少而大的文件适合比较大的块来分区; inode区里面有很多的inode节点,每一个inode对应一个文件的元信息,比如大小,创建时间,block的位置,连接数目等等;当我们访问一个文件或者目录的时候,系统会找到文件名匹配的inode号码,然后找到inode的相关信息,然后访问记录文件目录的block。

知道了inode的基本概念,现在了看看如何使用

在RHEL里面,可以通过ls -i来查看inode。

如果我创建了一个mm文件,然后拷贝一个副本nn,这两个文件是独立的,因此拥有不同的inode编号

我们可以通过ln来创建硬连接,一个硬链接类似于Windows的Junction Point,或者理解为别名。我创建了mm的硬链接nn,mm和nn其实都是指向同一个inode,因此他们访问的其实是同一个文件,对其中任何一个做修改,另外一个其实也被修改了;如果删除其中一个,那么inode的连接数减少1,其余的任然可以访问inode,当全部删掉以后,系统就会回收这个inode号码和对应的block。

这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)

硬链接的缺点在于他不能跨分区,例如以下报错

除了硬链接 我们还可以创建软连接,这个类似Windows的快捷方式,他指向的是文件名而不是inode,因此是两个独立的文件(不同的inode),A依赖B而存在,如果删除了B,那么A会报错

时间: 2024-10-13 18:45:15

RHCE 学习笔记(14)- 文件系统 (1)的相关文章

python 学习笔记 14 -- 常用的时间模块之datetime

书接上文,前面我们讲到<常用的时间模块之time>,这次我们学习datetime -- 日期和时间值管理模块 使用apihelper 查看datetime 模块,我们可以看到简单的几项: date       ---  日期对象,结构为date(year, month, day) time       ---  时间值对象,结构为 time([hour[, minute[, second[, microsecond[, tzinfo]]]]]).时间对象所有的参数都是可选的.tzinfo 可以

EasyARM i.mx28学习笔记——根文件系统rootfs修改和烧写

0 前言 本文详细说明如何修改和制作根文件系统,包括修改根文件系统中的配置文件:在根文件系统中加入可执行文件,最后通过uboot tftp方式烧录根文件系统和镜像. [相关博文] [EasyARM i.mx28学习笔记--文件IO方式操作GPIO] [EasyARM i.mx28学习笔记--安装和使用tftp] [EasyARM i.mx28学习笔记--minicom配置和使用] [EasyARM i.mx28学习笔记--通过modbus tcp控制GPIO] 1 准备 若使用uboot tft

Swift学习笔记(14)--方法

1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方法的func关键字之前加上关键字class:声明结构体和枚举的类型方法,在方法的func关键字之前加上关键字static. 方法的参数名参见学习笔记的函数章节 2.在实例方法中修改值类型和self 结构体和枚举是值类型.一般情况下,值类型的属性不能在它的实例方法中被修改. 但是,如果你确实需要在某个

python基础教程_学习笔记14:标准库:一些最爱——re

标准库:一些最爱 re re模块包含对正则表达式的支持,因为曾经系统学习过正则表达式,所以基础内容略过,直接看python对于正则表达式的支持. 正则表达式的学习,见<Mastering Regular Expressions>(精通正则表达式) re模块的内容 最重要的一些函数 函数 描述 compile(pattern[,flags]) 根据包含正则表达式的字符串创建模式对象 search(pattern,string[,flags]) 在字符串中寻找模式 match(pattern,st

【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计

[转] C#学习笔记14--Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计   .NET Framework 命名空间 System.Diagnostics 包含用于跟踪执行流程的 Trace.Debug 和 TraceSource 类,以及用于分析代码的 Process.EventLog 和 PerformanceCounter 类. 跟踪是一种在应用程序运行时监视其执行情况的方式.当开发 .NET Frame

springmvc学习笔记(14)-springmvc校验

springmvc学习笔记(14)-springmvc校验 springmvc学习笔记14-springmvc校验 校验理解 springmvc校验需求 环境准备 配置校验器 在pojo中添加校验规则 捕获和显示校验错误信息 分组校验 本文主要介绍springmvc校验,包括环境准备,校验器配置,pojo张添加校验规则,捕获和显示检验错误信息以及分组校验简单示例. 校验理解 项目中,通常使用较多是前端的校验,比如页面中js校验.对于安全要求较高点建议在服务端进行校验. 服务端校验: 控制层con

Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法

Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在GridPanel中添加一行配置节点: <Features> <ext:GridFilters ID="GridFilters1" runat="server" Local="true"> <Filters> <ex

mybatis学习笔记(14)-mybatis整合ehcache

mybatis学习笔记(14)-mybatis整合ehcache mybatis学习笔记14-mybatis整合ehcache 分布缓存 整合方法掌握 整合ehcache 加入ehcache的配置文件 ehcache是一个分布式缓存框架 分布缓存 我们系统为了提高系统并发,性能.一般对系统进行分布式部署(集群部署方式) 不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发.所以要使用分布式缓存对缓存数据进行集中管理. mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合.

mybatis学习笔记(14)-spring和mybatis整合

mybatis学习笔记(14)-spring和mybatis整合 mybatis学习笔记14-spring和mybatis整合 整合思路 整合环境 sqlSessionFactory 原始dao开发和spring整合后 mapper代理开发 遇到的问题 本文主要将如何将spring和mybatis整合,只是作简单的示例,没有使用Maven构建.并展示mybatis与spring整合后如何进行原始dao开发和mapper代理开发. 整合思路 需要spring通过单例方式管理SqlSessionFa

mybatis学习笔记(14)-查询缓存之中的一个级缓存

mybatis学习笔记(14)-查询缓存之中的一个级缓存 mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 本文主要讲mybatis的一级缓存.一级缓存是SqlSession级别的缓存. 查询缓存 mybatis提供查询缓存.用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时须要构造sqlSession对象,在对象中有一个数据结构(HashMa