• Linux 文件系统初步


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

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


    文件类型:

          事实上在Linux系统中主要就是两种文件,一种是常规文件(regular file),还有一种就是文件夹(directory)。

    開始可能认为非常奇怪。文件夹怎么会是文件呢?事实上文件夹仅仅是存储了该文件夹下的文件或子文件夹的名称和相应i-node(包括了基本上关于相应文件全部信息的结构)的编号的一个特殊文件而已。

    当然,除了上述的两种文件类型,还有:块设备文件(Block special device)。字符设备文件(character special device),FIFO(管道)。Socket(套接字),Symbolic link(符号链接)这几种文件类型。

    详细的在这里就不展开了。

    如在上图中第一位为‘-’。则表示该文件为常规文件。其它类型的文件通过该位显示的字符应该也非常easy推断出来。

    文件权限:

       以下我们就来看看后9位字符代表的意思。

    说是9位,事实上我们把它们分成3组,每组代表的意思是几乎相同的。我们都知道Linux系统是一个多用户的系统,所以对于一个文件而言,可能有除创建者以外的其它人想要对文件进行操作。

    这时我们就有必要对文件的操作权限进行设置了。

    这三组字符从左到右针对的对象依次是文件的创建者(user),文件创建者的同组成员(group)。除以上二者以外的其它用户(others)。而每组的3个字符,从左到右依次显示为  rwx  当中r代表读的权限,w代表写的权限,x代表可运行的权限。例如以下图所看到的,我想读一个名字叫new的文件。可是它的全部权限都被屏蔽了。当我输入命令: more new的时候,shell就会提示权限不足。

    对于其它操作也可类推获得。

    可是在Linux中有一个神一般存在的用户,就是传说中的root或者叫超级用户(superuser)。

    它有对系统的一切权限。能够对随意文件进行操作。所以之前提到的那些限制对它是没有效果的。


    链接数:

            再往右显示的数字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环境高级编程》

  • 相关阅读:
    Jenkins可用环境变量列表以及环境变量的使用(Shell/Command/Maven/Ant)
    CreateJS结合Falsh工具生成Canvas动画(加密字符串的由来)
    Linux下使用mv重命名文件或者移动文件(增强版的工具为rename)
    Windows7/8/10中无法识别USB设备的问题解决
    Eclipse工程中Java Build Path中的JDK版本和Java Compiler Compiler compliance level的区别(转)
    使用Docker部署Spring boot项目
    豆瓣API
    scrapy
    elasticsearch x-pack
    Document
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7043964.html
Copyright © 2020-2023  润新知