如何在linux上使用stat命令

linuxstat命令显示的细节比ls多得多。通过这个信息丰富且可配置的实用程序,您可以在幕后一瞥。我们会教你怎么使用它。...

linuxstat命令显示的细节比ls多得多。通过这个信息丰富且可配置的实用程序,您可以在幕后一瞥。我们会教你怎么使用它。

stat带你到幕后

ls命令在做什么方面做得很好,而且做得很多,但是对于Linux,似乎总有一种方法可以更深入地了解表面之下的内容。通常,这不仅仅是一个掀开地毯边缘的例子。你可以把地板撕开,然后挖个洞。你可以像剥洋葱一样剥Linux。

ls将向您显示有关文件的大量信息,例如对其设置了哪些权限、文件的大小以及文件是文件还是符号链接。为了显示这个信息,ls从一个叫做inode的文件系统结构中读取它。

每个文件和目录都有一个inode。inode保存有关文件的元数据,例如它占用的文件系统块,以及与文件关联的日期戳。inode就像文件的借书卡。但我只会告诉你一些信息。要查看所有内容,我们需要使用stat命令。

像ls一样,stat命令有很多选项。这使它成为使用别名的最佳候选。一旦您发现了一组特定的选项,使得stat可以提供您想要的输出,就可以将其包装到别名或shell函数中。这使得它的使用更加方便,而且您不必记住一组晦涩难懂的命令行选项。

相关:如何使用ls命令列出Linux上的文件和目录

快速比较

让我们使用ls给出一个长列表(-l选项),其中包含人类可读的文件大小(-h选项):

ls -lh ana.h

如何在linux上使用stat命令

从左到右,ls提供的信息是:

  • 第一个字符是连字符“-”,它告诉我们文件是一个常规文件,而不是套接字、符号链接或其他类型的对象。
  • 所有者、组和其他权限以八进制格式列出。
  • 指向此文件的硬链接数。在这种情况下,在大多数情况下,它将是一个。
  • 文件所有者是戴夫。
  • 群的所有者是戴夫。
  • 文件大小为802字节。
  • 文件最后一次修改是在2015年12月13日,星期五。
  • 文件名是ana.c。

让我们看看统计:

stat ana.h

如何在linux上使用stat命令

我们从stat得到的信息是:

  • 文件:文件的名称。通常,它与我们在命令行上传递给stat的名称相同,但是如果我们查看符号链接,它可能会不同。
  • 大小:以字节为单位的文件大小。
  • Blocks:文件存储在硬盘上所需的文件系统块数。
  • IO块:文件系统块的大小。
  • 文件类型:元数据描述的对象的类型。最常见的类型是文件和目录,但也可以是链接、套接字或命名管道。
  • 设备:十六进制和十进制的设备编号。这是存储文件的硬盘的ID。
  • Inode:Inode编号。也就是这个inode的ID号。inode编号和设备编号共同唯一地标识一个文件。
  • 链接:这个数字表示有多少硬链接指向这个文件。每个硬链接都有自己的inode。所以另一种思考这个数字的方法是有多少inode指向这个文件。每次创建或删除硬链接时,此数字都会上下调整。当它达到零时,文件本身就被删除了,inode也被删除了。如果对目录使用stat,则此数字表示目录中的文件数,包括当前目录的“.”项和父目录的“.”项。
  • 访问:文件权限以八进制和传统的rwx(读、写、执行格式)显示。
  • Uid:所有者的用户名和帐户名。
  • Gid:所有者的组ID和帐户名。
  • 访问:访问时间戳。不像看上去那么直截了当。现代Linux发行版使用一种称为relatime的方案,它试图优化更新访问时间所需的硬盘写入。简单地说,如果访问时间早于修改后的时间,则会更新访问时间。
  • 修改:修改时间戳。这是上次修改文件内容的时间。(幸运的是,这个文件的内容最后一次更改是在四年前的今天。)
  • 更改:更改时间戳。这是上次更改文件属性或内容的时间。如果通过设置新的文件权限来修改文件,则会更新更改时间戳(因为文件属性已更改),但不会更新修改的时间戳(因为文件内容未更改)。
  • 出生:保留以显示文件的原始创建日期,但这在Linux中没有实现。

了解时间戳

时间戳对时区敏感。每行末尾的-0500表示此文件是在协调世界时(UTC)时区的计算机上创建的,该时区比当前计算机的时区早5小时。所以这台电脑比创建这个文件的电脑晚了五个小时。事实上,这个文件是在一台英国时区的计算机上创建的,我们正在美国东部标准时区的计算机上查看它。

修改和更改时间戳可能会引起混淆,因为对于未初始化的人来说,它们的名称听起来好像是同一个意思。

让我们使用chmod来修改名为ana.c的文件的文件权限。我们将使每个人都可以写它。这不会影响文件的内容,但会影响文件的属性。

chmod +w ana.c

然后我们将使用stat查看时间戳:

stat ana.c

如何在linux上使用stat命令

更改时间戳已更新,但修改的时间戳尚未更新。

修改后的时间戳只有在文件内容更改时才会更新。内容更改和属性更改的更改时间戳都会更新。

对多个文件使用stat

要同时对多个文件进行stat报告,请在命令行上将文件名传递给stat:

stat ana.h ana.o

如何在linux上使用stat命令

要对一组文件使用stat,请使用模式匹配。“问号”?表示任何单个字符,星号“*”表示任何字符串。我们可以告诉stat报告任何一个扩展名为“ana”的文件,使用以下命令:

stat ana.?

如何在linux上使用stat命令

使用stat报告文件系统

stat可以报告文件系统的状态以及文件的状态。f(filesystem)选项告诉stat报告文件所在的文件系统。注意,我们还可以将诸如“/”之类的目录传递给stat,而不是文件名。

stat -f ana.c

如何在linux上使用stat命令

stat给我们的信息是:

  • 文件:文件的名称。
  • ID:以十六进制表示的文件系统ID。
  • Namelen:文件名允许的最大长度。
  • 类型:文件系统的类型。
  • 块大小:为获得最佳数据传输速率而请求读取请求的数据量。
  • 基本块大小:每个文件系统块的大小。

阻碍:

  • Total:文件系统中所有块的总数。
  • Free:文件系统中空闲块的数量。
  • 可用:常规(非根)用户可用的可用块数。

索引节点:

  • Total:文件系统中inode的总数。
  • Free:文件系统中空闲inode的数目。

取消对符号链接的引用

如果您对一个实际是符号链接的文件使用stat,它将报告该链接。如果希望stat报告链接指向的文件,请使用-L(取消引用)选项。文件code.c是指向ana.c的符号链接。让我们看看没有-L选项的情况:

stat code.c

如何在linux上使用stat命令

文件名显示code.c指向(->)ana.c。文件大小只有11个字节。没有专门用于存储此链接的块。文件类型列为符号链接。

很明显,我们这里没有查看实际的文件。我们再来一次并添加-L选项:

stat -L code.c

如何在linux上使用stat命令

现在显示符号链接指向的文件的文件详细信息。但是请注意,文件名仍然以code.c的形式给出。这是链接的名称,而不是目标文件。这是因为这是我们在命令行上传递给stat的名称。

简洁的报告

-t(简洁)选项使stat提供一个简明的摘要:

stat -t ana.c

如何在linux上使用stat命令

没有提供任何线索。为了理解它,直到你记住了字段序列,你需要交叉引用这个输出到一个完整的stat输出。

自定义输出格式

从stat获取不同数据集的更好方法是使用自定义格式。有一长串的标记称为格式序列。每一个都代表一个数据元素。选择要包含在输出中的内容并创建格式字符串。当我们调用stat并将格式字符串传递给它时,输出将只包含我们请求的数据元素。

文件和文件系统有不同的格式序列集。文件列表为:

  • %a:八进制的访问权限。
  • %答:人类可读形式的访问权(rwx)。
  • %b:分配的块数。
  • %B:每个块的字节大小。
  • %d:十进制的设备编号。
  • %D:十六进制的设备编号。
  • %f:十六进制的原始模式。
  • %文件类型。
  • %g:所有者的组ID。
  • %G:所有者的组名。
  • %h:硬链接的数量。
  • %i:索引节点号。
  • %m:挂载点。
  • %n:文件名。
  • %N:引用的文件名,如果是符号链接,则包含取消引用的文件名。
  • %o:最佳I/o传输大小提示。
  • %总大小,以字节为单位。
  • %t:十六进制的主要设备类型,用于字符/块设备特殊文件。
  • %T:以十六进制表示的次要设备类型,用于字符/块设备特殊文件。
  • %u:所有者的用户ID。
  • %U:所有者的用户名。
  • %w:文件出生的时间,人类可读,如果不知道,用连字符“-”表示。
  • %W:文件诞生的时间,从Epoch开始的秒数;如果未知,则为0。
  • %x:最后一次访问的时间,人类可读。
  • %X:上次访问的时间,自Epoch以来的秒数。
  • %y:上次修改数据的时间,可读。
  • %Y:上次数据修改的时间,从Epoch开始的秒数。
  • %z:上次状态更改的时间,人类可读。
  • %Z:上次状态更改的时间,从新纪元开始的秒数。

“epoch”是Unix epoch,发生在1970-01-01 00:00:00+0000(UTC)。

对于文件系统,格式序列为:

  • %a:常规(非根)用户可用的空闲块数。
  • %b:文件系统中的总数据块。
  • %c:文件系统中的索引节点总数。
  • %文件系统中空闲inode的数量。
  • %f:文件系统中空闲块的数量。
  • %i:十六进制的文件系统ID。
  • %l:文件名的最大长度。
  • %n:文件名。
  • %s:块大小(最佳写入大小)。
  • %S:文件系统块的大小(用于块计数)。
  • %t:十六进制的文件系统类型。
  • %T:人类可读形式的文件系统类型。

有两个选项接受格式序列的字符串。它们是--format和--printf。它们之间的区别是——printf解释C样式的转义序列,例如换行符和制表符,并且不会自动向其输出中添加换行符。

我们创建一个格式字符串并将其传递给stat。要使用的格式序列是%n表示文件名,%s表示文件大小,%F表示文件类型。我们将在字符串的结尾添加转义序列,\n以确保在新行中处理每个文件。我们的格式字符串如下所示:

"File %n is %s bytes, and is a %F\n"

我们将使用--printf选项将其传递给stat。我们将要求stat报告一个名为code.c的文件和一组与ana匹配的文件。?。这是完整的命令。注意--printf和格式字符串之间的等号“=”:

stat --printf="File %n is %s bytes, and is a %F\n" code.c ana/ana.?

如何在linux上使用stat命令

每个文件的报告都列在新行中,这是我们要求的。我们提供了文件名、文件大小和文件类型。

自定义格式允许您访问比标准stat输出中包含的数据元素更多的数据元素。

细粒度控制

如您所见,提取您感兴趣的特定数据元素有很大的空间。你也许也能理解为什么我们建议对更长更复杂的咒语使用别名。

  • 发表于 2021-04-02 19:25
  • 阅读 ( 162 )
  • 分类:互联网

你可能感兴趣的文章

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 303 )

如何在android和termux上使用linux命令行

...许您在Android设备上安装诚实善良的Linux应用程序。下面是如何使用Termux应用程序。 ...

  • 发布于 2021-03-18 07:26
  • 阅读 ( 367 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 282 )

linux下如何重命名文件

要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...

  • 发布于 2021-03-22 02:48
  • 阅读 ( 269 )

如何在linux上使用groupadd管理用户组

... 相关:如何在Linux中更改密码 ...

  • 发布于 2021-03-26 17:15
  • 阅读 ( 183 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 331 )

如何在linux上使用dig命令

...想知道,当我们在浏览器中键入网站名称时,这种神奇是如何发生的。通过dig,你可以探索网络变戏法的过程。

  • 发布于 2021-04-02 10:09
  • 阅读 ( 210 )

linux文件时间戳:atime、mtime和ctime

...们谈论Linux文件时间戳时。在本指南中,我们将解释系统如何更新它们,以及如何自己修改它们。 atime、mtime和ctime的区别 每个Linux文件都有三个时间戳:访问时间戳(atime)、修改时间戳(mtime)和更改时间戳(ctime)。 访问时...

  • 发布于 2021-04-02 16:01
  • 阅读 ( 337 )

你想知道的关于linux上inodes的一切

...上是指向现有文件或目录的快捷方式。让我们看看他们是如何管理的,以及如何使用这三个元素来实现这一点。 假设我们有一个包含两个文件的目录:一个是脚本,另一个是应用程序,如下所示。 我们可以使用ln命令和-s(符...

  • 发布于 2021-04-02 18:04
  • 阅读 ( 163 )

linux下如何使用rclone备份google驱动

googledrive仍然没有正式的Linux客户端,但是您可以直接从命令行使用rclone实用程序备份到googledrive。我们教你怎么做。 linux上的google drive在哪里? 尽管2012年承诺Linux支持“很快就会到来”,但没有迹象表明Google会为GoogleDrive生产...

  • 发布于 2021-04-02 18:51
  • 阅读 ( 172 )
drnsmfjgyzg
drnsmfjgyzg

0 篇文章

相关推荐