linux 文件和目录的属性 linuxsir_org.htm
来自「linuxSir 网站的精华文章」· HTM 代码 · 共 843 行 · 第 1/5 页
HTM
843 行
href="http://www.linuxsir.org/main/?q=node/196#13">13、参考文档;</A><BR><A
href="http://www.linuxsir.org/main/?q=node/196#14">14、相关文档;</A></P>
<P><FONT
color=blue><B><BR>+++++++++++++++++++++++++++++++++++++++++++<BR>正文<BR>+++++++++++++++++++++++++++++++++++++++++++<BR></B></FONT></P>
<P><FONT id=1 size=4><B><BR>1、 Linux 文件属性概说;<BR></B></FONT></P>
<P>Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容;</P>
<P>
<DIV class=codeblock><CODE>[root@localhost ~]# ls -lih<BR>总计
104K<BR>2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh<BR>2408830
drwxr-xr-x 2 root root 4.0K 04-21 12:46 mkuml-2004.07.17<BR>2408260
drwxr-xr-x 2 root root 4.0K 04-21 22:15 mydir<BR>2408258 lrwxrwxrwx 1 root
root 7 04-21 22:16 sun001.txt -> sun.txt<BR>2408263 -rw-r--r-- 2 root
root 11 04-20 14:17 sun002.txt<BR>2408263 -rw-r--r-- 2 root root 11 04-20
14:17 sun.txt</CODE></DIV>
<P></P>
<P><B>解释:</B><BR><B>第一字段:</B>inode<BR><B>第二字段:</B>文件种类和权限;<BR><B>第三字段:</B>
硬链接个数;<BR><B>第四字段:
</B>属主;<BR><B>第五字段:</B>所归属的组;<BR><B>第六字段:</B>文件或目录的大小;<BR><B>第七字段和第八字段:</B>最后访问或修改时间;<BR><B>第九字段:</B>文件名或目录名</P>
<P><B>我们以lsfile.sh为例:</B></P>
<P>
<DIV class=codeblock><CODE>2408949 -rwxr-xr-x 1 root root 7 04-21 12:47
lsfile.sh</CODE></DIV>
<P></P>
<P><B>inode 的值是:</B>2408949<BR><B>文件类型:</B>文件类型是-,表示这是一个普通文件;
关于文件的类型,请参考:<A href="http://www.linuxsir.org/main/?q=node/191">《Linux
文件类型和文件扩展》</A><BR><B>文件权限:</B>文件权限是rwxr-xr-x
,表示文件属主可读、可写、可执行,文件所归属的用户组可读可执行,其它用户可读可执行;<BR><B>硬链接个数:</B>
lsfile.sh这个文件没有硬链接;因为数值是1,就是他本身;<BR><B>文件属主:</B>也就是这个文件归哪于哪个用户
,它归于root,也就是第一个root;<BR><B>文件属组:</B>也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组;<BR><B>文件大小:</B>文件大小是7个字节;<BR><B>访问可修改时间
:</B>这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的; </P>
<P>当然文档的属性不仅仅包括这些,这些是我们最常用的一些属性。我们把比较重要的说一说,比如文件所归属的种类、权限、硬链接个数 ...
...</P>
<P><FONT id=2 size=4><B><BR>2、 关于inode;<BR></B></FONT></P>
<P>inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ... ...
)被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。</P>
<P>做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode
就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。虽然不太恰当,但还是比较形象。</P>
<P>当我们用ls 查看某个目录或文件时,如果加上-i 参数,就可以看到inode节点了;比如我们前面所说的例子;</P>
<P>
<DIV class=codeblock><CODE>[root@localhost ~]# ls -li lsfile.sh<BR>2408949
-rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh</CODE></DIV>
<P></P>
<P>lsfile.sh 的inode值是 2408949 ; 查看一个文件或目录的inode,要通过ls 命令的的 -i参数。</P>
<P><FONT id=2.10 size=3><B><BR>2.10 inode 相同的文件是硬链接文件;<BR></B></FONT></P>
<P>在Linux
文件系统中,inode值相同的文件是硬链接文件,也就是说,不同的文件名,inode可能是相同的,一个inode值可以对应多个文件。理解链接文件并不难,看看例子就会了。在Linux中,链接文件是通过ln工具来创建的。</P>
<P><FONT id=2.11 size=2><B><BR>2.11 创建硬链接,硬链接和源文件关系;<BR></B></FONT></P>
<P><B>用ln 创建文件硬链接的语法:</B></P>
<P>
<DIV class=codeblock><CODE># ln 源文件 目标文件</CODE></DIV>
<P></P>
<P>下面我们举一个例子,在这个例子中,我们要为sun.txt
创建其硬链接sun002.txt。然后看一下sun.txt和sun002.txt的属性的变化;<BR>
<DIV class=codeblock><CODE>[root@localhost ~]# ls -li sun.txt
注:查看sun.txt的属性;<BR>2408263 -rw-r--r-- 1 root root 29 04-22 21:02 sun.txt
注:这是sun.txt的属性;<BR>[root@localhost ~]# ln sun.txt sun002.txt 注:我们通过ln
来创建sun.txt的硬链接文件sun002.txt <BR>[root@localhost ~]# ls -li sun*
注:我们列一下sun.txt 和sun002.txt<BR>2408263 -rw-r--r-- 2 root root 29 04-22
21:02 sun002.txt<BR>2408263 -rw-r--r-- 2 root root 29 04-22 21:02
sun.txt</CODE></DIV>
<P></P>
<P>我们可以看到sun.txt在没有创建硬链接文件sun002.txt的时候,其链接个数是1(也就是-rw-r--r--后的那个数值),创建了硬链接sun002.txt创建后,这个值变成了2。也就是说,我们每次为sun.txt创建一个新的硬链接文件后,其硬链接个数都会增加1。</P>
<P>inode值相同的文件,他们的关系是互为硬链接的关系。当我们修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化。如果我们删除互为硬链接关系的某个文件时,其它的文件并不受影响。比如我们把sun.txt删除后,我们还是一样能看到sun002.txt的内容,并且sun02.txt仍是存在的。</P>
<P>可以这么理解,互为硬链接关系的文件,他们好象是克隆体,他们的属性几乎是完全一样;</P>
<P>下面的例子,我们把sun.txt删除,然后我们看一下sun002.txt 是不是能看到其内容。</P>
<P>
<DIV class=codeblock><CODE>[root@localhost ~]# rm -rf
sun.txt<BR>[root@localhost ~]# more sun002.txt</CODE></DIV>
<P></P>
<P><B>注意:</B>硬链接不能为目录创建,只有文件才能创建硬链接。</P>
<P><FONT id=2.12 size=2><B><BR>2.12 软链接的创建,及软接与源文件的关系;<BR></B></FONT></P>
<P><B>创建软链接(也被称为符号链接)的语法;</B></P>
<P>
<DIV class=codeblock><CODE># ln -s 源文文件或目录 目标文件或目录</CODE></DIV>
<P></P>
<P>软链接也叫符号链接,他和硬链接有所不同,软链接文件只是其源文件的一个标记。当我们删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但我们却不能查看软链接文件的内容了。</P>
<P>
<DIV class=codeblock><CODE>[root@localhost ~]# ls -li
linuxsir001.txt<BR>2408274 -rw-r--r-- 1 root root 29 04-22 21:53
linuxsir001.txt<BR>[root@localhost ~]# ln -s linuxsir001.txt
linuxsir002.txt<BR>[root@localhost ~]# ls -li linuxsir001.txt
linuxsir002.txt<BR>2408274 -rw-r--r-- 1 root root 29 04-22 21:53
linuxsir001.txt<BR>2408795 lrwxrwxrwx 1 root root 15 04-22 21:54
linuxsir002.txt -> linuxsir001.txt</CODE></DIV>
<P></P>
<P><B>解释</B></P>
<P>上面的例子,首先我们查看 linuxsir001.txt 的属性,比如inode 、所属文件种类、创建或修改时间等...
...我们来对比一下:</P>
<P>首先 对比一下节点:两个文件的节点不同;<BR>其次 两个文件的归属的种类不同
linuxsir001.txt是-,也就是普通文件,而linuxsir002.txt 是l,它是一个链接文件;<BR>第三 两个文件的读写权限不同
linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的读写权限是 rwxrwxrwx<BR>第三
两者的硬链接个数相同;都是1<BR>第四 两文件的属主和所归属的用户组相同;<BR>第五 修改(或访问、创建)时间不同;</P>
<P>我们还注意到了linuxsir002.txt 后面有一个标记
->,这表示linuxsir002.txt 是linuxsir001.txt的软链接文件。</P>
<P><B>值得我们注意的是:</B>当我们修改链接文件的内容时,就意味着我们在修改源文件的内容。当然源文件的属性也会发生改变,链接文件的属性并不会发生变化。当我们把源文件删除后,链接文件只存在一个文件名,因为失去了源文件,所以软链接文件也就不存在了。这一点和硬链接是不同的;</P>
<P>
<DIV class=codeblock><CODE>[root@localhost ~]# rm -rf
linuxsir001.txt 注:删除linuxsir001.txt<BR>[root@localhost ~]# ls -li
linuxsir002.txt 注:查看linuxsir002 的属性;<BR>2408795 lrwxrwxrwx 1 root root 15
04-22 21:54 linuxsir002.txt -> linuxsir001.txt<BR>[root@localhost ~]#
more linuxsir002.txt 注:查看linuxsir002.txt的内容; <BR>linuxsir002.txt:
没有那个文件或目录 注:得到提示,linuxsir002.txt不存在。</CODE></DIV>
<P></P>
<P><B>上面的例子告诉我们,如果一个链接文件失去了源,就意味着他已经不存在了;</B></P>
<P>我们可以看到软链接文件,其实只是源文件的一个标记,当源文件失去时,他也就是存在了。软链接文件只是占用了inode来存储软链接文件属性等信息,但文件存储是指向源文件的。</P>
<P>软件链接,可以为文件或目录都适用。无论是软链接还是硬链接,都可以用rm来删除。rm工具是通用的。</P>
<P><FONT id=3 size=4><B><BR>3、文件类型;<BR></B></FONT></P>
<P>当用ls指令的长格式显示文件或目录的属性时;比如:</P>
<P>
<DIV class=codeblock><CODE>[root@localhost ~]# ls -lih<BR>总计
104K<BR>2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh<BR>2408830
drwxr-xr-x 2 root root 4.0K 04-21 12:46 mkuml-2004.07.17<BR>2408260
drwxr-xr-x 2 root root 4.0K 04-21 22:15 mydir<BR>2408258 lrwxrwxrwx 1 root
root 7 04-21 22:16 sun001.txt -> sun.txt<BR>2408263 -rw-r--r-- 2 root
root 11 04-20 14:17 sun002.txt<BR>2408263 -rw-r--r-- 2 root root 11 04-20
14:17 sun.txt</CODE></DIV>
<P></P>
<P>我们来看一下lsfile.sh这行,其中有这样一个字段 -rwxr-xr-x
。这个字段包括两个信息,一是文件类型,二是文件的权限;文件类型就第一个字符,lsfile.sh的文件所归属的文件种类是- 。同理
mkuml-2004.07.17的这段是drwxr-xr-x,它所归属的文件种类应该是d;sun001.txt文件呢,对应的lrwxrwxrwx,sun001.txt所归属的文件种类应该是-l
。</P>
<P>我们可以知道Linux文件可以分为如普通文件、目录、符号链接文件、字符和块设备文件、套接口文件等。</P>
<P><B>详情请参考 :</B><A href="http://www.linuxsir.org/main/?q=node/191">《Linux
文件类型和文件的扩展名》</A></P>
<P><FONT id=4 size=4><B><BR>4、文件的权限;<BR></B></FONT></P>
<P>Linux文件或目录的权限是和用户和用户组联系在一起的,所以理解这部份内容,您首先得了解一下Linux用户管理方面的知识 。请参考 :<A
href="http://www.linuxsir.org/main/?q=node/91">《Linux
用户(user)和用户组(group)管理概述》</A>。如果您是新手,要把这篇文档的相关文档也了解一下,这对您理解本文真的很重要;</P>
<P><IMG src="Linux 文件和目录的属性 LinuxSir_Org.files/chmodphoto001.jpg"></P>
<P>每个文件或目录都有一组9个权限位,每三位被分为一组,他们分别是属主权限位(占三个位置
)、用户组权限位(占三个位置)、其它用户权限位(占三个位置)。比如rwxr-xr-x
,我们数一下就知道是不是9个位置了,正是这9个权限位来控制文件属主、用户组以及其它用户的权限。</P>
<P><FONT id=4.1 size=3><B><BR>4.1 关于权限位;<BR></B></FONT></P>
<P>Linux文件或目录的权限位是由 9
个权限位来控制,每三位为一组,它们分别是文件属主(Ower)的读、写、执行,用户组(Group)的读、写、执行以及(Other)其它用户的读、写、执行;</P><PRE>文件属主: 读r、写w、执行x
用 户 组 : 读r、写w、执行x
其它用户: 读r、写w、执行x
如果权限位不可读、不可写、不可执行,是用-来表示。
</PRE>
<P><B><BR>对于普通文件的读、写、执行权限可以这样理解:<BR></B></P>
<P>
<DIV
class=codeblock><CODE>可读:意味着我们可以查看阅读;<BR>可写:意味着,可以修改或删除(不过删除或修改的权限受父目录上的权限控制);<BR>可执行:意味着如果文件就可以运行,比如二进制文件(比如命令),或脚本(要用脚本语言解释器来解释运行)。</CODE></DIV>
<P></P>
<P>比如:<BR>
<DIV class=codeblock><CODE>[root@localhost ~]# ls -l
lsfile.sh<BR>-rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh</CODE></DIV>
<P></P>
<P>第一个字段 -rwxr-xr-x中的第一个字符是-,表示lsfile.sh是一个普通文件;</P>
<P>lsfile.sh的权限是
rwxr-xr-x。表示lsfile.sh文件,文件的属主root,拥有rwx(可读、可写、可执行)权限,用户组root,拥有
r-x(可读、可写)权限 ,其它用户拥有 r-x(可读、可写)权限。这9个权限连在一起就是 rwxr-xr-x,也就是说,lsfile.sh
文件,文件属主root拥有可读、可写、可执行权限,用户组root下的所有用户拥有可读可执行权限,其它用户拥有可读可执行权限。</P>
<P>查看文件的属性用 ls -l 文件 ;查看目录的属性是 ls -d 目录。请参考 :</P>
<P><FONT id=4.2 size=3><B><BR>4.2 改变权限的命令 chmod ;<BR></B></FONT></P>
<P>chmod 是用来改变文件或目录权限的命令,但只有文件的属主和超级权限用户root才有这种权限。通过chmod
来改变文件或目录的权限有两种方法,一种是通过八进制的语法,另一种是通过助记语法; </P>
<P><B>举例:</B></P>
<P>
<DIV class=codeblock><CODE>[root@localhost ~]# touch linuxsir007.txt
注:创建linuxsir007.txt文件;<BR>[root@localhost ~]# touch linuxsir008.txt
注:创建linuxsir008.txt 文件;<BR>[root@localhost ~]# ls -lh linuxsir007.txt
linuxsir008.txt 注:查看linuxsir007.txt和linuxsir008.txt文件属性;<BR>-rw-r--r-- 1
root root 0 04-23 20:11 linuxsir007.txt 注:linuxsir007.txt
文件属性;<BR>-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir008.txt
注:linuxsir008.txt 文件属性; <BR>[root@localhost ~]# chmod 755 linuxsir007.txt
注:通过八进制语法来改变linuxsir007.txt的权限;<BR>[root@localhost ~]# chmod u+x,og+x
linuxsir008.txt 注:通过助记语法来改变linuxsir008.txt的权限;<BR>[root@localhost ~]# ls
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?