码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 文件系统初步

时间:2014-10-07 23:14:44      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:文件系统   linux   shell   unix   c   

     在Linux系统中,如果我们想要知道一个文件的具体信息,那么最简便的方法自然就是ls命令了。如下图所示:当在shell输入命令"ls -l old"时,在下方就会显示出关于文件old的一些

信息.下面就从左到右逐步分析每部分输出所代表的具体含义。其中输出的第一部分包含十个字符,其中第一个字符用于表示文件的类型。那么我们就先来说说在UNIX/Linux系统中的文件类型好了。

bubuko.com,布布扣


文件类型:

      其实在Linux系统中主要就是两种文件,一种是常规文件(regular file),另一种就是目录(directory)。开始可能觉得很奇怪,目录怎么会是文件呢?其实目录只是存储了该目录下的文件或子目录的名称和对应i-node(包含了基本上关于对应文件所有信息的结构)的编号的一个特殊文件而已。当然,除了上述的两种文件类型,还有:块设备文件(Block special device),字符设备文件(character special device),FIFO(管道),Socket(套接字),Symbolic link(符号链接)这几种文件类型。具体的在这里就不展开了。如在上图中第一位为‘-’,则表示该文件为常规文件,其他类型的文件通过该位显示的字符应该也很容易判断出来。

文件权限:

   下面我们就来看看后9位字符代表的意思。说是9位,其实我们把它们分成3组,每组代表的意思是差不多的。我们都知道Linux系统是一个多用户的系统,所以对于一个文件而言,可能有除创建者以外的其他人想要对文件进行操作。这时我们就有必要对文件的操作权限进行设置了。这三组字符从左到右针对的对象依次是文件的创建者(user),文件创建者的同组成员(group),除以上二者以外的其他用户(others)。而每组的3个字符,从左到右依次显示为  rwx  其中r代表读的权限,w代表写的权限,x代表可执行的权限。如下图所示,我想读一个名字叫new的文件,但是它的所有权限都被屏蔽了。当我输入命令: more new的时候,shell就会提示权限不足。对于其他操作也可类推获得。但是在Linux中有一个神一般存在的用户,就是传说中的root或者叫超级用户(superuser)。它有对系统的一切权限,可以对任意文件进行操作,所以之前提到的那些限制对它是没有效果的。

bubuko.com,布布扣

链接数:

        再往右显示的数字1代表的是,该文件有1个链接。其中链接又分硬链接(hard link)和符号链接(symbolic link)两种类型。此处显示的应为硬链接数。其中硬链接是直接执行文件对应的inode的,而符号链接则没有,它只是包含了所链接文件的位置信息,类似于windows中的快捷方式。需要注意的是,很多时候,你所谓的删除一个文件,只是删除了该文件的一个链接。想要真正删除一个文件的内容,必须满足两个条件:1.文件的链接数为0。2.没有进程打开该文件。

UID和GID:

       前面已经说过了,一个文件肯定是由一个用户创建的。那么自然在文件信息中需要保存,该文件的创建者,也就是user-ID简称UID,同时还有该创建者所在组的ID,group-ID,简称GID。所以接下来显示的monster monster就分别对应了文件创建者monster和monster所在的组。

文件大小:

      然后显示的就是对应文件的大小了,例子中的文件大小显示的是0,单位是字节。需要注意的是:如果文件的类型是字符链接,那么它的大小就是它所执行的文件的文件名的字符数。

文件时间:

    接下来显示的就是文件时间了。对于一个文件,一般保存了3个时间:1.st_mtime,上一次文件修改的时间(modification time),2.st_atime,上一次文件打开的时间(access time)3.st_ctime,上一次文件状态改变的时间(changed status time)。其中最令人困惑的肯定是st_mtime和st_ctime,文件修改了,那状态不就改变了么?状态改变,那肯定就是文件修改了啊?其实不是这样的,第一个st_mtime指的是文件内容的修改,而st_ctime的状态指的是文件对应的inode中存储的 信息的改变,例如各种权限啊,UID,GID等等。所以说是完全不一样的。

文件名:

      显示在最后的自然就是文件名,对于文件名想说的是,它并不保存在文件对应的inode当中,而是保存在对应的目录文件中。这就引发了一个非常有意思的现象,就是我们想要删除一个文件的时候,我们并不需要该文件的任何权限,而是需要该文件所在目录的写权限和执行权限。因为我们删除一个文件就是要将减少该文件对应inode的链接数,并将文件名从对应的目录文件中去掉。



PS:以上就是通过命令 ls -l filename所引申出来的关于Linux文件系统的一些基本知识了。当然还有很多的细节是没有涉及的,文件系统也远远没有那么简单。如果有什么错误,请大家及时指出来,可以让我改正。想讨论的同学也可以评论留言。(*^__^*) 嘻嘻……

参考数目:《UNIX环境高级编程》

Linux 文件系统初步

标签:文件系统   linux   shell   unix   c   

原文地址:http://blog.csdn.net/u011915301/article/details/39856527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!