2.文件属性讲解(类型 时间属性 ls touch stat)

2.文件属性讲解(类型 时间属性 ls touch stat),第1张

2.文件属性讲解(类型 时间属性 ls touch stat)

这一小节会详细讲解文件的部分属性,包括文件类型,时间属性,索引节点,涉及到的 *** 作系统命令包括ls stat touch 几个非常常见的linux命令。

文章目录
  • 一、文件属性
    • 1.stat输出详解
    • 2. ls -lih输出详解
  • 一、索引节点(了解)
  • 二、Linux的文件类型
  • 三、ls命令详解
    • 选项
    • 常见输出
    • 示例
    • 文件大小
  • 四、时间属性
  • 五、touch命令详解
  • 总结


一、文件属性

文件属性可以通过 ls 或者 stat查看,这一小节会重点讲解文件的部分属性,包括inode节点,文件类型,时间属性,其他的属性信息会在后面讲用户 权限等知识点时重点讲解。

1.stat输出详解

通常可以用通过stat命令查看文件的详细属性。

[root@prometheus ~]# stat err
  File: ‘err’
  Size: 32        	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 67161813    links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-10-30 15:38:16.475156988 +0800
Modify: 2021-10-26 21:53:22.801670737 +0800
Change: 2021-10-26 21:53:22.801670737 +0800
 Birth: -

可以看到这个属性包括:

  1. File: 文件名称
  2. Size: 文件的字节数(大小)
  3. Blocks: 文件占用的扇区个数,一个扇区的大小是512字节。
  4. IO Block:逻辑块的大小为4096个字节 。文件占用空间的最小单位。
  5. regular file : 文件类型,普通文件
  6. Device: 设备编号
  7. Inode: 索引节点
  8. Access: 文件权限
  9. 文件拥有者的 User ID uid
  10. 文件的 Group ID gid
  11. 链接数,即有多少文件名指向这个 inode
  12. 文件的时间戳,共有三个:ctime 指 inode 上一次变动的时间,mtime 指文件内容上一次变动的时间,atime 指文件上一次打开的时间。
2. ls -lih输出详解

Llinux系统的文件包括:索引节点、文件类型、文件权限、链接数、所属的用户和用户组、最近修改时间等。

[root@prometheus ~]# ls -l err
-rw-r--r-- 1 root root 32 Oct 26 21:53 err
flags功能第一列inode索引节点编号-系统文件首先通过文件名找到inode,通过它找到文件内容第二列文件类型和权限-10个字符,第一个为文件类型,后9个为文件权限第三列硬链接个数第四列文件所属用户(属主)第五列文件所有用户组(属组)第六列文件的大小第七列文件修改时间,默认月日时分,-access第八列文件名 一、索引节点(了解)

第一列(101122449)就是这个文件的节点编号(inode),inode当中的内容就是记录这个文件的属性信息。

[root@zaishu zaishu]# ls -lih sed2
101122449 -rw-r--r-- 1 root root 80 Nov  2 11:36 sed2

文件系统会将文件的实际内容和属性分开存放:
文件的属性保存在 inode 中(i 节点)中,每个 节点都有自己的编号。每个文件各占用一个 inode。
可以将文件系统是一部数据字典,访问文件的数据内容的时候,需要先通过目录节点找到文件数据的位置。所以node 中记录着文件数据所在 block 块的编号;实际数据保存在 block 中。每个 block 都有属于自己的编号。通常文件可能会占用多个 block 块。

还有一个 super block(超级块)用于记录整个文件系统的整体信息,包括 inode 和 block 的总量、已经使用量和剩余量,以及文件系统的格式和相关信息等。

只要能找到文件 inode 所在的位置,自然就能知道这个文件存放数据的 block 号,从而找到文件的实际数据。整个过程如图 1 所示。

图 1 文件系统的数据存取示意图

图 1 中,文件系统先格式化出 inode 和 block 块,假设某文件的权限和属性信息存放到 inode 4 号位置,这个 inode 记录了实际存储文件数据的 block 号有 4 个,分别为 2、7、13、15,由此, *** 作系统就能快速地找到文件数据的存储位置。

这种管理文件的系统称为索引式文件系统,Linux 文件系统就属于索引式文件系统。
注意,inode 节点并不存储文件的文件名,因为文件名是文件所在目录的数据,所以会保存在上一级目录的 block 块中。后面讲权限命令的时候,要对文件的上一级目录拥有 w 权限,才能删除目录中的文件,就是因为文件名是保存在目录的 block 中的。

stat 查看inode 信息
可以stat使用inode查看节点信息,也就是属性信息。

[root@zaishu zaishu]# stat sed2
  File: ‘sed2’
  Size: 80        	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 101122449   links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-02 11:36:38.719911259 +0800
Modify: 2021-11-02 11:36:35.265911334 +0800
Change: 2021-11-02 11:36:35.265911334 +0800
 Birth: -
二、Linux的文件类型

在linux系统中,可以说一切设备(包括目录、普通文件等)皆文件。文件类型包含有普通文件、目录、字符设备文件、块设备文件、符号链接文件、管道文件等等
  
1、 d(directory)表示目录

[root@yidong spool]# ls -l . |grep ^d
drwxr-xr-x.  2 root root  63 Aug  9  2019 anacron
drwx------.  2 root root   6 Aug  9  2019 cron
drwxr-xr-x.  2 root root   6 Apr 11  2018 lpd
drwxrwxr-x.  2 root mail  30 Oct 18  2019 mail
drwxr-xr-x.  2 root root  22 Aug  8  2019 plymouth
drwxr-xr-x. 16 root root 201 Oct 16  2019 postfix

2、 -(regular file) 普通文件
(1)、纯文本文件(ascll)文件内容可以直接读到的数据,例如:字母、数字、特殊字条串等,可以用cat命令读取的文,比如配置文件几乎都是这种类型。

[root@yidong test]# file 2
2: ASCII text

(2)、二进制文件(binary)linux中的命令程序就属于这个格式。例如ls 命令就是一个二进制文件。

[root@yidong test]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped

(3)、数据格式文件(data)有些程序运行过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件。例如:linux 在用户登录时都会将登录数据记录在/var/log/wtmp 那个文件内,该文件是一个数据文件,通过last命令读出来。/var/log/lastlog也是一个数据文件,可以使用lastlog命令读出来。cat命令读取会是乱码,因为他属于特殊格式的文件。file 命令也可以查看文件类型

[root@yidong test]# file /var/log/wtmp 
/var/log/wtmp: data

3、l (link)链接文件(一般指得是软链接文件或符号链接)

[root@yidong test]# ls -lih /lib
80 lrwxrwxrwx. 1 root root 7 Oct 16  2019 /lib -> usr/lib

4、b(block)块设备和其它外围设备,是特殊类型的文件

[root@yidong test]# find /dev/ -type b | xargs ls -l | head -3
brw-rw---- 1 root disk   2, 0 Jun 15 14:26 /dev/fd0
brw-rw---- 1 root disk   8, 0 Jun 15 14:26 /dev/sda
brw-rw---- 1 root disk   8, 1 Jun 15 14:26 /dev/sda1

5、c(character)字符设备文件(一般是指串设备或终端设备等)

[root@yidong test]# find /dev/ -type c | xargs ls -l | head -3
crw-rw---- 1 root video    10, 175 Jun 15 14:26 /dev/agpgart
crw------- 1 root root     10, 235 Jun 15 14:26 /dev/autofs
crw------- 1 root root    248,   0 Jun 15 14:26 /dev/bsg/0:0:0:0

6、s(socket)套接字文件
当多个应用程序进程必须通过同一个 TCP协议端口传输数据,为了区别不同的应用程序进程和连接,许多计算机 *** 作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。

[root@yidong test]# find /dev/ -type s | xargs ls -l | head -3
srw-rw-rw- 1 root root 0 Jun 15 14:26 /dev/log

7、p(named pipe)管道文件
ps -elf //查看系统进程
管道,半双工,一端写一端读

[root@yidong spool]# mkfifo 1.pipe
[root@yidong spool]# ls -l 
total 0
prw-r--r--   1 root root   0 Jun 15 15:06 1.pipe
三、ls命令详解

ls 命令,是最常见的目录 *** 作命令,其主要功能是显示当前目录下的内容。此命令的基本格式为:
Llinux系统的文件包括:索引节点、文件类型、文件权限、链接数、所属的用户和用户组、最近修改时间等。、

选项 选项功能-a显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。-A显示全部的文件,连同隐藏文件,但不包括 . 与 … 这两个目录。-d仅列出目录本身,而不是列出目录内的文件数据。-fls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序。-F在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket 文件,-h以人们易读的方式显示文件或目录大小,如 1KB、234MB、2GB 等。-i显示 inode 节点信息。-l使用长格式列出文件和目录信息。-n以 UID 和 GID 分别代替文件用户名和群组名显示出来。-r将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。-R连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。-S以文件容量大小排序,而不是以文件名排序。-t以时间排序,而不是以文件名排序。–color=nevernever 表示不依据文件特性给予颜色显示。–color=alwaysalways 表示显示颜色,ls 默认采用这种方式。–color=autoauto 表示让系统自行依据配置来判断是否给予颜色。–full-time以完整时间模式 (包含年、月、日、时、分)输出–time-style=long-iso以格式化输出时间进行输出,yyyy-mm-dd hh24:mi–time={atime,ctime,mtime}输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间。 常见输出

示例

-a

[root@zaishu ~]# ls -a(包含隐藏文件.开头的文件,当前目录和上级目录)
.   anaconda-ks.cfg  .bash_logout   .bashrc  lamp-master      .mysql_history  sdcms_php_ee_2.4.2.zip  web
..  .bash_history    .bash_profile  .cshrc   lamp-master.zip  .pki            .tcshrc

-A

[root@zaishu ~]# ls -A(包含隐藏文件但不包括当前目录和上级目录)
anaconda-ks.cfg  .bash_logout   .bashrc  lamp-master      .mysql_history  sdcms_php_ee_2.4.2.zip  web
.bash_history    .bash_profile  .cshrc   lamp-master.zip  .pki            .tcshrc

-d

[root@zaishu ~]# ls -d lamp-master(仅列出目录,不列出目录下的文件信息)
lamp-master

-f

[root@zaishu ~]# ls -f(不按名称进行排序,简而言之就是不排序)
.   .bash_logout   .bashrc  .tcshrc          .bash_history    lamp-master  sdcms_php_ee_2.4.2.zip  web
..  .bash_profile  .cshrc   anaconda-ks.cfg  lamp-master.zip  .pki         .mysql_history

-F

[root@zaishu ~]# ls -F(展示文件名的时候,带有展示符)
anaconda-ks.cfg  ip.sh*  lamp-master/  lamp-master.zip  sdcms_php_ee_2.4.2.zip  web/

-lh

[root@zaishu ~]# ls -lh(以K KB GB TB单位展示文件大小)
total 4.5M
-rw-------. 1 root root 1.4K Oct  8  2020 anaconda-ks.cfg
-rwxr-xr-x  1 root root    0 Oct 21 15:31 ip.sh
drwxr-xr-x. 6 root root  194 Oct 14 17:22 lamp-master
-rw-r--r--. 1 root root 220K Oct 14 15:41 lamp-master.zip
-rw-r--r--. 1 root root 4.3M Oct 14 16:47 sdcms_php_ee_2.4.2.zip
drwxr-xr-x. 2 root root    6 Oct 14 17:52 web

等其他例子,可以参照列表给的含义展示。

文件大小

当用文件属性查看文件大小的时候,可能跟实际占用磁盘空间的大小不一致
对于目录
目录的大小不要通过ls来查看,通常只显示8

实际目录占用磁盘空间是2.1G
[root@zaishu ~]# du -sh /usr/
2.1G	/usr/
但如果用 ls 查看这个目录的时候,可以看到对于目录。空间提示的大小都是8。
[root@zaishu zaishu]# ls -lihd /usr/
67192091 drwxr-xr-x. 13 root root 155 Oct  8  2020 /usr/

对于文件

查看文件
 [root@zaishu zaishu]# cat test
ab
文件实际占用磁盘空间大小。一个文件即使只有几个字节,也会占用一个文件块(Block size)大小,通常是4096bytes。 
[root@zaishu zaishu]# du -sh test
4.0K	test
属性中的文件大小,可以看到只有3个字节
[root@zaishu zaishu]# ls -lbi test
104148230 -rw-r--r-- 1 root root 3 Nov  9 14:04 test
四、时间属性

文件属性当中,包含三个文件时间

  1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
  2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
  3. Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

atime:访问时间,读取文件或者执行文件时会更改,命令如cat,vi
mtime:修改时间,文件的内容被改变时,就会更改,如vi
ctime:改变时间,文件的标签如属性、用户、用户组、权限、内容等被改变时,就会更改,如chmod,chown,vi

创建空文件的时候,三个属性值一样

[root@zaishu ~]# touch timetest  
[root@zaishu ~]# stat timetest 
  File: ‘timetest’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 68114955    links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-11 11:40:27.078052421 +0800
Modify: 2021-11-11 11:40:27.078052421 +0800
Change: 2021-11-11 11:40:27.078052421 +0800
 Birth: -

当通过vi修改文件的时候,访问时间和修改时间变更,改变时间不会

[root@zaishu ~]# vi timetest 
[root@zaishu ~]# stat timetest
  File: ‘timetest’
  Size: 6         	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 68114958    links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-11 11:43:42.797053622 +0800
Modify: 2021-11-11 11:43:42.797053622 +0800
Change: 2021-11-11 11:43:42.800053622 +0800
 Birth: -

当查看文本内容的时候,只有访问时间会变更

[root@zaishu ~]# cat timetest 
nihao
[root@zaishu ~]# stat timetest
  File: ‘timetest’
  Size: 6         	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 68114958    links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-11 11:44:45.855054009 +0800
Modify: 2021-11-11 11:43:42.797053622 +0800
Change: 2021-11-11 11:43:42.800053622 +0800
 Birth: -

更改权限的时候只有,改变时间会变更

[root@zaishu ~]# chmod 444 timetest
[root@zaishu ~]# stat timetest 
  File: ‘timetest’
  Size: 6         	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 68114958    links: 1
Access: (0444/-r--r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-11 11:44:45.855054009 +0800
Modify: 2021-11-11 11:43:42.797053622 +0800
Change: 2021-11-11 11:45:28.814054272 +0800
 Birth: -
五、touch命令详解

touch命令用于创建文件和修改文件时间戳

[root@localhost ~]# touch [选项] 文件名
选项:
-a:只修改文件的访问时间;
-c:仅修改文件的时间属性(3 个时间属性都改变),如果文件不存在,则不建立新文件。
-d:后面指定时间,把文件的 atime 和 mtime 时间改为指定的时间。
-m:只修改文件的数据修改时间。
-t:后面指定时间,时间书写格式为 YYMMDDhhmm,把文件的 atime 和 mtime 时间改为指定的时间。

touch 命令可以只修改文件访问时间(atime),也可以只修改文件修改时间(mtime),但不能只修改文件改变时间(ctime)。因为,不论是修改访问时间,还是修改文件的数据时间,对文件来讲,状态都会发生改变。

【例 1】 touch 命令创建文件。

[root@zaishu zaishu]# touch test
[root@zaishu zaishu]# stat test
  File: ‘test’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 101085613   links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-11 13:56:47.273009222 +0800
Modify: 2021-11-11 13:56:47.273009222 +0800
Change: 2021-11-11 13:56:47.273009222 +0800
 Birth: -

【例 2】 更改文件时间为当前时间。
如果文件已经存在,这个使用用touch这个文本,修改文件的时间属性全部为当前时间。

[root@zaishu zaishu]# touch test
[root@zaishu zaishu]# ll --time=atime test
-rw-r--r-- 1 root root 0 Nov 11 13:58 test
[root@zaishu zaishu]# stat test
  File: ‘test’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 101085613   links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-11-11 13:58:28.922009846 +0800
Modify: 2021-11-11 13:58:28.922009846 +0800
Change: 2021-11-11 13:58:28.922009846 +0800

【例 3】 更改文件的 atime 和 mtime 为指定时间
注意: ctime也会变更,但不会变为设定时间,更新为当前服务器的时间。

[root@zaishu zaishu]# touch -d 2020-01-01 12:12:12 test 
[root@zaishu zaishu]# stat test 
  File: ‘test’
  Size: 3         	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 101800237   links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-01-01 00:00:00.000000000 +0800
Modify: 2020-01-01 00:00:00.000000000 +0800
Change: 2021-11-11 14:01:06.421010812 +0800
 Birth: -
[root@zaishu zaishu]# ll --time=atime test; ll --time=ctime test
-rw-r--r-- 1 root root 3 Jan  1  2020 test
-rw-r--r-- 1 root root 3 Nov 11 14:01 test

总结

这一小节会详细讲解文件的部分属性,包括文件类型,时间属性,索引节点,涉及到的 *** 作系统命令包括ls stat touch 几个非常常见的linux命令。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5436226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存