`
tuhaitao
  • 浏览: 375396 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux之文件系统浅析

 
阅读更多

我们首先看一下一个简单的文本文件是怎么保存的:

 

打开vim,编辑一段文本:

[root@localhost ~]# vim hello.txt

编辑内容如下:

 

opencfg.com is best website for java 

用命令:wq保存,然后列出该文件

 

[root@localhost ~]# ls -l
-rw-r--r--  1 root root    37  9月  4 19:03 hello.txt

 

据这个例子的目的,是为了说明Linux系统中文件是由3个部分组成:

 

1.数据-data(编辑内容, opencfg.com is best websire for java)

2.元数据-metadata(当你用ls -l 命令 或者ll命令时,列出的信息就是元数据, 在Linux,Unix系统中,所有与文件相关的元数据都保存在一个被叫做inode的结构中)

3.文件名-directtory entry(也叫做目录项,保存文件名)

 

 

 

一、inode节点

    在Linux、Unix文件系统中的每个文件都有一个相关的inode节点,保存了除文件名、文件内容(data)以外的所有文件信息,其中包括:

1.文件类型

    在Linux、Unix文件系统内的任何东西,包括一般文件和目录、符号连接、设备节点、与进程间通信相关的 命名管道函数,套接字(socket)都是文件类型中的一种,下边列出了可能出现的文件类型:

 

 

Linux文件类型
文件类型 ls缩写 应用范围
常规文件 - 保存数据
目录 d 存放文件名
符号连接 l 指向其他文件
字符设备节点 c 访问设备
块设备节点 b 访问设备
命名管道函数 p 进程间通信
套接字 s 进程间通信

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    这7种文件类型,具有相同的inode节点结构,他们具有相同的属性:所有者的身份、权限、修改时间、当使用命令ls -l 或者命令ll列出文件时,稳健类in个由第一个字符标识,该字符所对应的是上表中的缩写标记.

 

file命令

 

 

除了使用ls -l 与 ll 两个命令外,还可以使用file命令来查看文件的类型:

 

这里再写一个hello.sh:

 

 

#!/bin/sh

echo "hello"

 

 

下边使用file分别查看hello.txt与hello.sh,看看输出结果:

 

 

[root@localhost ~]# file hello.txt 
hello.txt: ASCII text
[root@localhost ~]# file hello.sh 
hello.sh: POSIX shell script text executable
 

 

file命令可以深入文件内容,查看具体的文件类型,给出的描述比较清晰

 

 

2. 所有者的身份与权限

 

    每个常规文件、目录都所有者、组 和 三组访问权限: 读取、写入、执行,当使用ls -l 或者ll命令列出文件时,第一列显示权限(其中第一个字符表示文件类型缩写), 第三列显示用户所有者,第四列显示组。

 

 

[root@localhost ~]# ls -l
-rw-r--r--  1 root root    37  9月  4 19:03 hello.txt
 

 

这里:

第一列是-rw-r--r--, 其中第一个字符是"-",在缩写表中对应常规文件

                            以后的权限是rw-r--r--,表示权限

 

第二列是1              表示连接数,如果有硬连接到这个文件,这里的数值会+1,删除硬连接这里会-1

 

第三列是root         表示文件所有者是root

 

第四列是root         表示文件所有组是root

 

第五列是37           表示文件占用37字节

 

第六列是9月 4 19:03  默认表示文件最后的ctime, change-time

 

第七列是hello.txt   表示文件名

 

基本上除了 权限列,其他列都显而易见, 这里我简单介绍一下linux文件权限:

 

(1).linux文件权限

这个例子中出去第一列中的"-"代表文件类型(常规文件),剩下:

 

rw-r--r--    这里一共有9个字符,每三个分一组

 

rw-     表示用户自己的权限

r--      表示组权限

r--      表示其他人的权限

 

每组都是rwx的顺序,代表可读、可写、可执行,如果不具备改权限,则会显示“-”字符.

 

既然说到这里,再解释一下为什么好多人直接执行chmod 755 start.sh 这样的命令.

 

(2).权限八进制计数法

实际上,这是权限的一种八进制表示方法,我们知道文件对三种不同级别的用户访问(用户user, 组group, 其他other), 具有三种不哦那个的权限,可读、可写、可执行。

 

所以在八进制计数法里, 每个级别的访问以一个数位表示,其中从左向右的第一位 表示:用户user, 第二位表示: 组group, 第三位表示:其他other,而每种权限以一个值表示:可读是4,可写是2,可执行是1, 从而八进制计数法里的数字,是每个权限值的总和, 举个例子:

 

例如一个文件的权限是:     rwxr-xr-x

 

那么从左向右第一个三位:  rwx  =  4 + 2 + 1 = 7    用户user

                  第二个三位:  r-x   =  4 + 0 + 1 = 5    组group

                  第三个三位:  r-x   =  4 + 0 + 1 = 5    其他other

 

所以现在大家会理解熟练的人,会直接使用chmod 755 start.sh 这样的命令了:)

 

3. 更多的inode信息

 

我们可以使用stat命令来查看文件更多的元数据信息:

 

 

[root@localhost ~]# stat hello.sh 
  File: "hello.sh"
  Size: 24              Blocks: 8          IO Block: 4096   普通文件
Device: fd00h/64768d    Inode: 149215      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2011-09-04 20:41:02.153122391 +0800
Modify: 2011-09-04 20:40:59.160742070 +0800
Change: 2011-09-04 20:40:59.178744361 +0800

 

 

stat命令列出了更多的元数据信息:

 

size   表示文件的理论长度,单位是字节

Block 与 IO Block 的乘积是文件所占的实际大小,在linux下文件所占的空间分配,最小的单位是块(Bolck),而块的大小与块的数量,决定了文件实际占用的磁盘空间.

 

Device 表示内核对该设备的编号

Inode  是内核为每一个文件分配的标志

Links   表示文件名指向的inode节点的数量

Access:(0755/-rwxr-xr-x) 表示了访问权限,以及文件类型

uid:     表示了文件所有者,包括了系统为所有者分配的数值id

gid:     表示了文件组,包括了系统为组分配的数值id

 

接下来有三个时间通常被叫做文件的atime, ctime, mtime:

 

 

文件时间信息
缩写 全称 名称 描述
atime access time 访问时间 文件数据每次被阅读后所记录的时间
ctime change time 改变时间 文件的inode节点信息被改变后记录的时间
mtime modify time 修改时间 文件内容数据被修改后记录的时间

 

 

 

 

 

 

 

 

 

很多人误会ctime就是linux下文件的创建时间,以为是create time, 其实是错误的,linux说起来很神奇,丫居然愣是没记录文件的创建时间,Unix也是如此,这单确实很坑爹,累了,休息,改天有时间再写写软链接与硬连接 :) 

 

 

2
5
分享到:
评论
2 楼 shiren1118 2011-09-05  
很不错,inodetable和aix是一样的
1 楼 viekie 2011-09-05  
不错, 希望看到下文,能有深层次剖析!

相关推荐

    浅析Linux文件系统管理.pdf

    浅析Linux文件系统管理.pdf

    linux文件系统实现浅析

    linux文件系统实现浅析 读写文件的时候,文件的读写位置怎么对应到实际的磁盘块呢?这是由具体的文件系统来实现的;再比如,寻找一个文件路径的时候,怎么知道XXX目录下是否有YYY文件存在呢?这也是由具体的文件系统...

    浅析Linux的文件系统和磁盘管理.pdf

    浅析Linux的文件系统和磁盘管理.pdf

    Linux下文件系统实现浅析.pdf

    Linux下文件系统实现浅析.pdf

    浅析Linux文件系统.pdf

    浅析Linux文件系统.pdf

    浅析Linux下的链接文件.pdf

    浅析Linux下的链接文件.pdf

    浅析Linux文件系统

    由上而下主要分为用户层、VFS层、文件系统层、缓存层、块设备层、磁盘驱动层、磁盘物理层最上面用户层就是我们日常使用的各种程序,需要的接口主要是文件的创建、删除、打开、关闭、写、读等。我们知道Linux分为用户...

    Linux内核Makefile浅析

    多的资料(《嵌入式Linux应用开发完全手册》、Documentation/kbuild/makefiles.txt)已经向我们展示了一个初级Linux用户者应该懂得的知识--怎样添加需要编译的文件、添加编译的规则、多个源文件构成一个目标文件的...

    浅析Linux环境下文件I_O操作.pdf

    浅析Linux环境下文件I_O操作.pdf

    实用全面的linux教程大全

    Bash命令全集.docx htop--linux下最强大的进程监视器.docx Linux_系统维护命令小结.ppt Linux下的CPU利用率计算原理详解.docx Linux操作系统中内存buffer和cache的区别.docx ...浅析Linux下的常用配置文件.docx

    嵌入式Linux系统开发技术详解--基于ARM(完整版).pdf

    华清远见嵌入式培训专用教材 内容涵盖嵌入式系统概述.arm处理器介绍.linux编程环境....制作linux根文件系统.充分利用开源软件.系统集成测试.部署linux系统.系统设计开发实例等等内容,是进入嵌入式学习的不二门槛,

    【精品】我收藏的Linux资料全集

    浅析Linux系统中添加硬盘,分区,格式化 练成Linux系统高手教程 练成Linux高手(和上一本不同) 红联Linux培训系列 从Windows转向Linux教程V2 从Windows转向Linux教程E3000基础学习 UbuntuManual中文版 Ubuntu-...

    嵌入式Linux系统开发技术手册,ARM完整版 PDF.rar

    嵌入式Linux系统开发技术详解,ARM完整版 PDF,讲述的内容主要有:Linux的历史以及系统开发要点、ARM处理器、Linux编程环境、Linux交叉开发环境、Bootloader、配置编译内核、内核移植浅析、制作Linux 根文件系统、...

    嵌入式系统学习基础知识浅析.pdf

    安装Linux操作系统:Linux文件系统 ,Linux常用命令,Linux启动过程详解,熟悉Linux服务能够独立安装Linux操作系统,能够熟练使用

    浅析Linux打包压缩解压缩命令大全(收藏)

    下面是小编日常收集整理的关于linux打包压缩解压缩命令大全,具体内容如下所述: tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip -d ...

    linux 应用程序中的open 操作与硬件驱动之间的联系浅析

    对于linux 下所有的系统调用函数,均可找到与其对应的内核函数sys_xxx().比如此处的open函数,对应内核函数就是sys_open。只不过,在此内核版本中,它的定义是如下这种形式 SYSCALL_DEFINE3(open, const char __user...

    嵌入式Linux系统开发技术详解—基于ARM

    目 录 第0章前言 第1章概述 第2章 ARM处理器 第3章Linux编程环境 ...第10章制作 Linux根文件系统 第11章充分利用开源软件 第12章系统集成测试 第13章部署 Linux系统 第14章系统设计开发实例

    浅析linux权限管理

    “一切皆是文件”是Unix/Linux的基本哲学之一,目录、字符设备、块设备、套接字等在Unix/Linux都是以文件的形式存在。面对众多的文件,如何理解和管理他们的读、写、执行权限呢?  在Windows下,可以通过鼠标...

    浅析Linux中的时间编程和实现原理

    我们都生活在时间中,但却无法去思考它。什么是时间呢?似乎这是一个永远也不能被回答的问题。然而作为一个程序员,在工作中,总有那么几次我必须思考...因此我打算讨论一下有关时间的话题,尝试着深入理解Linux系统中

Global site tag (gtag.js) - Google Analytics