Linux文件系统及文件属性
一、Linux文件系统
1、穿件文件系统
Linux中当磁盘格式化创建文件系统时,会创建一定数量的节点索引Inode以及一定数量的块block,其中inode具有存储文件属性以及指向文件实体block的指针的功能,而block则具有存放文件内容的功能,CentOS6.X系统中非启动分区的默认Inode大小为256字节,启动分区的inode默认大小为128字节。Linux读取文件的过程是先通过文件名找到对应的inode,再通过inode访问其指向的block,最后从block中读取文件内容输出到屏幕上。
2、删除文件的原理
Linux删除文件的依据是检查文件的i_link和i_count是否都为0,其中i_count指的是文件的硬链接数,而i_link指的是调用文件的进程数,当源文件和所有硬链接被删除且没有进程调用该文件时,该文件的磁盘空间将会在存储新数据时被占用或在磁盘fsck检查时被系统回收。
二、文件属性
Linux系统中我们使用ls -lhi命令可以查看到目录下所有文件以及文件对应的属性,每个文件共有十列数据,除了最后一列的文件名外都是文件的属性,因此文件名不存储在inode中而是存储在目录的block中。所有十列数据的具体含义如下:
第一列:Inode编号
1、inode称为索引节点,它的作用时存放文件的属性信息以及作为文件的索引
2、inode是磁盘上的一块存储空间,CentOS非启动分区默认256字节,启动分区默认128字节
3、inode的表现形式是一串数字,不同的文件对应的inode在文件系统中是唯一的
4、inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
5、ext3/ext4文件系统下,一般情况一个文件被创建后占用一个inode和至少一个block
6、block的大小一般有1K,2K,4K几种,其中引导分区等为1K,其他普通分区为4K
7、如果一个文件很大,可能占多个block,如果文件很小,至少占用一个并且剩余空间浪费了
8、查看inode以及block的大小和总量 dumpe2fs /dev/sda3|grep -iE 'inode size|block size' dumpe2fs /dev/sda3|grep -iE 'inode count|block count'
9、查看inode总量以及使用量 df -i
10、查看文件inode信息 ls -li stat 文件名
11、格式化时指定inode以及block的大小 mkfs.ext4 -l 256 -b 2048 /dev/sda5
12、Inode编号在系统中是唯一的
与inode关联的block知识总结如下:
1、磁盘读取数据是按block为单位读取的
2、一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O
3、如果要提升磁盘I/O性能,那么就要尽可能一次性读取数据尽量多
4、一个block只能存放一个文件的内容,无论文件有多小。
5、block并非越大越好,block太大对于小文件存放就会浪费磁盘空间
6、大文件(大于16K)一般设置block大一点,小文件(小于1K)一般设置block小一点
7、如果文件都是小文件而block太大就会浪费磁盘空间
8、如果文件都是大文件而block太小就会浪费磁盘I/O、
9、文件较大时,block设置大一些会提升磁盘访问效率
10、ext3/ext4文件一般设置为4K
11、block大小在格式化时设置
第二列:文件类型及文件权限
第一位代表的是文件类型
Linux系统不像Windows系统一样以扩展名区别文件类型,Linux文件类型在文件创建时就已经确定了,无法修改。
Linux系统中常用的文件类型有普通文件以“-”表示、目录以“d”表示、符号链接以“l”表示、块设备以"b"表示,除此之外还有字符设备以“c”表示、套接字文件以“s”表示和管道文件以“c”表示
Linux系统中普通文件大致分为文本文件、二进制文件比如系统命令文件、数据格式文件,数据格式文件只能用命令读取比如/var/log/wtmp文件只能用last命令读取
第二到四位代表的是文件属主的权限
第五到七位代表的是文件属组的权限
第八到十位代表的是其他用户的权限
文件权限的设置通过chmod命令
文件的默认权限通过umask命令,目录的默认权限是777-umask的值,文件的默认权限是666-umask的值
文件权限分为普通权限和特殊权限,普通权限有r读取权限数字表示为4、w写入权限数字表示为2、x执行权限数字表示为1,特殊权限有suid、sgid、t
数字方式设置权限,将三个位置各自的权限转为数字然后相加得出一组三位数字或四位数字,如rw-r--r--的数字表示就是42-4--4--,所以设置权限就是chmod 644
字符方式设置权限,字符方式设置权限时用u代表文件属主的权限,g代表文件属组的权限,o代表其他用户的权限,+代表增加权限,-代表取消权限,=代表修改权限,于是rw-r--r--的权限设置就是chmod u=rw,g=r,o=r
目录的普通权限r代表可以浏览目录的内容,没有x权限时会提示不能访问目录下的文件和子目录但仍可以看到文件名和目录名,w代表增加,删除,修改目录下文件名,需要有x权限才能实际操作,x代表可以进入目录
suid显示在文件属主的x权限位上,当没有x权限时显示为S,否则显示为s,该权限只对命令和二进制程序文件有效,让非root用户可以以root身份运行只有root才能使用的命令
被设置suid的命令在运行时,用户具有root对该命令的所有权限
sgid与suid不同,不仅可以对文件设置,也可以对目录设置,对目录设置时可以让其他用户在该目录下创建的文件和目录具有和该目录相同的组设置
suid与sgid是一把双刃剑,对系统安全有一定威胁,应该取消不必要的系统默认suid和sgid命令,通过find命令的perm参数可以找出suid和sgid命令
t权限让其他用户不能删除文件
特殊权限还有i不可修改权限和a只追加权限,需要通过chattr设置,lsattr查看,i权限让任何人不可以修改文件,a权限让文件只能被动追加不能认为主动追加内容
第三列:文件硬链接数
创建链接的方式 ln -s 源文件名 链接文件名 -s 创建软链接
硬链接知识点:
1、具有相同Inode节点号的多个文件互为硬链接文件
2、删除硬链接文件或源文件任意之一,文件实体并未被删除
3、只有删除源文件与所有硬链接文件,文件实体才会被删除
4、当所有硬链接文件及源文件被删除后,在存放新数据时会占用该文件空间或者磁盘fsck检查时空间被系统回收
5、硬链接文件就是文件的另一个入口
6、可以通过创建硬链接来防止重要文件被误删
7、通过命令ln 源文件名 链接文件名 来创建硬链接
8、硬链接文件可以用rm命令删除
9、对于没有进程调用的文件,硬链接数为0,文件就会被删除
软链接知识点:
1、软连接类似Windows的快捷方式(可以用readlink命令查看其指向)
2、软连接类似一个文本文件,里面存放的时源文件的路径,指向源文件实体
3、删除源文件,软连接文件依然存在,但是无法访问指向的源文件路径内容了
4、失效的时候一般是白字红底闪烁提示
5、软连接文件可以用命令ln -s 源文件名 链接文件名 来创建
6、软连接和源文件是不同类型的文件,也是不同的文件,inode号不相同
7、删除软连接文件可以用rm命令
文件链接结论:
1、删除软连接文件对源文件和硬链接文件无任何影响
2、删除硬链接文件对源文件和软连接文件无任何影响
3、删除源文件对硬链接文件无影响,但是软连接文件会失效
4、同时删除源文件和硬链接文件会使文件真正被删除
5、很对硬件设备的快照功能就是利用了硬链接的原理
6、源文件和硬链接文件具有相同的inode节点号,可以认为是一个文件或一个文件的多个入口
7、源文件和软连接文件inode节点号不相同,是不同的文件,软连接相当于源文件的快捷方式,含有源文件的位置指向
目录链接结论:
1、目录不能创建硬链接但是可以创建软连接
2、目录的软连接是运维中的常用技巧,可以生成一个固定的访问路径又不影响软件升级
3、目录的硬链接不能跨越文件系统
4、每个目录都有一个硬链接"."号,以及对应上级目录的硬链接".."
5、在父目录里创建子目录,父目录的连接数加一,但是在父目录创建文件,父目录的链接数不会增加
第四列:文件属主
第五列:文件属组
useradd命令创建用户,会修改passwd,shadow,group,gshadow四个文件
groupadd命令创建组
chown命令修改文件属主,也可以修改属组
chgrp命令修改文件属组
Linux角色通过UID和GID区分
在Linux中UID为0的用户即为超级用户
Linux用户分为超级用户,普通用户和虚拟用户
超级用户UID为0,GID也为0
虚拟用户UID为1~499,GID也为1~499
普通用户UID为500~65535,GID也为500~65535
/etc/passwd文件即用户账号信息文件,必须了解,文件中每行以冒号分隔共有七列
第一列为账号名称
第二列为账号密码
第三列为账号UID
第四列为账号GID
第五列为用户说明
第六列为用户家目录
第七列为shell解释器
/etc/shadow文件即用户密码文件,文件中每行以冒号分隔共有九列
第一列账号名称
第二列账号密码
第三列最近更改密码的时间
第四列禁止修改密码的天数
第五列用户必须更改密码的天数
第六列警告更改密码的期限
第七列不活动时间
第八列失效时间
第九列标志
/etc/group文件即组信息文件,文件中每行以冒号分隔共四列
第一列组名
第二列组密码
第三列GID
第四列组成员
/etc/gshadow文件即组密码文件,文件中每行以冒号分隔共四列
第一列组名
第二列组密码
第三列组管理员账号
第四列组成员
第六列:文件大小
第七、八、九列:文件修改时间
stat命令查看文件详细属性
文件访问时间:文件内容被访问就改变
文件修改时间:文件内容被修改就改变
文件改变时间:文件属性改变时就改变
第十列:文件名
三、相关面试题
1、软链接和硬链接的区别,答题思路从以下四方面回答:
1)软硬链接的概念
2)软硬链接的创建方式
3)软硬链接对于文件的区别
4)软硬链接对于目录的区别
2、一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写多少个
假设block为4K的情况下,写入1K的文件分两种情况
inode足够,那么写入文件数量就是block的数量,浪费3/4的容量
inode数量小于block数量,那么写入文件数量就是inode的数量,浪费3/4的容量
写入1M的文件的数量等于总的block数量/(1M/block大小),基本可以写入250个1M的文件
3、如果向磁盘写入数据提示如下错误:No sapce left on device,通过df -h查看磁盘空间发现没有满,可能是什么原因,发生这种情况的原因是什么
磁盘空间满了有两种情况,一是inode消耗完了,二是block消耗完了,根据df -h结果可知block没有消耗完,那么可能就是inode消耗完了,产生的原因可能是系统临时邮件目录生成了太多小文件
Linux文件系统及文件属性的更多相关文章
- linux 文件系统简介
linux文件系统简介 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基 ...
- linux文件系统节点详解
linux文件系统有两层结构,逻辑结构和物理结构.也就是inode和block. 每个文件都有一个inode, 记录文件属性:权限,时间还有最重要的block号码. block是实际存放文件内容的地方 ...
- 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]
1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...
- linux文件系统简介
文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接 ...
- Linux文件系统 (Ubunt)
Linux 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储 ...
- linux 文件系统(inode和block)
linux文件系统(inode block superblock) 先说一下格式化:每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区格式化,以成为操作系统能 ...
- linux源代码阅读笔记 linux文件系统(转)
linux文件系统: 操作系统的文件数据除了文件实际内容外,还有非常多的属性,如文件权限(rwx)与文件属性(所有者.群组.时间参数等). 文件系统通常将这两部分数据存放在不同的块.权限属性放 ...
- 24小时学通Linux内核之有关Linux文件系统实现的问题
有时间睡懒觉了,却还是五点多醒了,不过一直躺倒九点多才算起来,昨晚一直在弄飞凌的嵌入式开发板,有些问题没解决,自己电脑系统的问题,虽然Win10发布了,,但我还是好喜欢XP呀,好想回家用用家里的XP来 ...
- 十天学Linux内核之第五天---有关Linux文件系统实现的问题
原文:十天学Linux内核之第五天---有关Linux文件系统实现的问题 有时间睡懒觉了,却还是五点多醒了,不过一直躺倒九点多才算起来,昨晚一直在弄飞凌的嵌入式开发板,有些问题没解决,自己电脑系统的问 ...
随机推荐
- 关于浏览器cookie的小知识
浏览器对于总的cookie数量是没有限制的,但是对于每个域名的cookie数量是有限制的. 一,不同的浏览器,对于一个域名的cookie数量限制上限是不同的: 1,IE6以下版本,最多20个.IE7以 ...
- 基于继承的 MethodInterceptor 动态代理(换种写法)
net.sf.cglib.proxy.Enhancer Generates dynamic subclasses to enable method interception. This class s ...
- JDBC数据库
JDBC是Java程序连接和存取数据库的应用程序接口(API),包括两个包:java.sql和javax.sql. 用JDBC访问数据库的一般步骤: 1.建立数据源 2.装入JDBC驱动程序:使用Cl ...
- vector作为二维数组
vector本来就是可以用来代替一维数组的,vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小. 这里只介绍用它来代替二维的数组,二维以上的可以依此类推. ...
- display:inline-block; 在css中是什么意思?
inline-block主要的用处是用来处理行内非替换元素的高宽问题的!行内非替换元素,比如span.a等标签,正常情况下士不能设置宽高的,加上该属性之后,就可以触发让这类标签表现得如块级元素一样,可 ...
- 笔记本安装win10之后,无线网有问题
开机后,连接无线网络,过一段时间,就掉线了,然后再连接也连接不上,必须重启电脑才可以. 解决办法如下: 右键无线网络连接,状态,无线属性,安全,高级设置,勾上为此网络启用联邦信息标准兼容.
- DICOM医学图像处理:WEB PACS初谈四,PHP DICOM Class
背景: 预告了好久的几篇专栏博文一直没有整理好,主要原因是早前希望搭建的WML服务器计划遇到了问题.起初以为参照DCMTK的官方文档wwwapp.txt结合前两天搭建的WAMP服务器可以顺利的实现WM ...
- 【分布式缓存系列】集群环境下Redis分布式锁的正确姿势
一.前言 在上一篇文章中,已经介绍了基于Redis实现分布式锁的正确姿势,但是上篇文章存在一定的缺陷——它加锁只作用在一个Redis节点上,如果通过sentinel保证高可用,如果master节点由于 ...
- Android插件化的兼容性(下):突破Android P中灰黑名单的限制
在Android P系统中,加入了访问私有API接口的限制.
- eclipse中如何自动生成构造函数
eclipse中如何自动生成构造函数 eclipse是一个非常好的IDE,我在写java程序的时候使用eclipse感觉开发效率很高.而且有很多的快捷和简便方式供大家使用,并且能直接生成class文件 ...