find 命令的 ls 选项输出中的第二个整数字段的含义是什么

find 命令的 ls 选项输出中的第二个整数字段的含义是什么

给出以下 find 命令和输出

21 $ find . -name foo -ls
80960162    0 -rw-rw-r--   1 kimelmab ccV983         29 Nov 29 07:28 ./foo

第一个数字是 i 节点号,第三个数字是链接数。但是第二个数字(即零)代表什么?

答案1

-ls这是块的数量(默认情况下为 1K)。根据texinfo 文档 ( info find -n 'Print File Information')中的描述:

 -- Action: -ls
     True; list the current file in 'ls -dils' format on the standard
     output.  The output looks like this:

          204744   17 -rw-r--r--   1 djm      staff       17337 Nov  2  1992 ./lwall-quotes

     The fields are:

       1. The inode number of the file.  *Note Hard Links::, for how to
          find files based on their inode number.

       2. the number of blocks in the file.  The block counts are of 1K
          blocks, unless the environment variable 'POSIXLY_CORRECT' is
          set, in which case 512-byte blocks are used.  *Note Size::,
          for how to find files based on their size.

       3. The file's type and file mode bits.  The type is shown as a
          dash for a regular file; for other file types, a letter like
          for '-type' is used (*note Type::).  The file mode bits are
          read, write, and execute/search for the file's owner, its
          group, and other users, respectively; a dash means the
          permission is not granted.  *Note File Permissions::, for more
          details about file permissions.  *Note Mode Bits::, for how to
          find files based on their file mode bits.

        ...

答案2

在我看来,输出中的第二列

find -ls

是以千字节为单位的驱动器空间占用,[至少对于文件而言] 对应于 的输出du(默认匹配du -k)。对于目录,它是目录结构本身占用的驱动器空间(不包括目录中文件中的数据,但包括文件的地址,因此当目录中有许多文件时,数字会增加)。

请注意,在当前的 Ubuntu 系统中,分配给文件的最小驱动器空间为 4 kibibytes。

答案3

不,回答第二个字段是什么,特别是因为其他两个答案已经很好地涵盖了这一点@sudodus@steeldriver,而是关于其报告的0块值以及它与第七个字段及其值的关系,29该值是报告的文件大小(以字节为单位),特别是关于文件如何报告为29字节大小,但报告的已用块仍然为0指出@sudodus 的评论)... 因为文件的正常行为是,当文件为空时,磁盘上使用零个块;当文件包含数据时,至少使用一个块,无论数据的大小与块的大小相比有多小(参见更多解释这里):

## Get filesystem info:
$ stat -f .
  File: "."
    ID: ea0dd13726e1c7f1 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 239946508  Free: 140401510  Available: 128194458
Inodes: Total: 61022208   Free: 59882281
$
## Create an empty normal file an examine it with "find"'s action "-ls"
$ touch file1
$
$ find . -name "file1" -ls
 20578311      0 -rw-rw-r--   1 ubuntu   ubuntu          0 Nov 30 11:22 ./file1
$
## Write some data into the file and examine it again
$ printf '%s' "1" >> file1 
$
$ find . -name "file1" -ls
 20578311      4 -rw-rw-r--   1 ubuntu   ubuntu          1 Nov 30 11:26 ./file1

... 对此可能有一些解释如下(这些是其中一些和不是所有可能性):

在 Ubuntu 当前默认文件系统 EXT4 和默认 4K 块大小下

该文件可能是一个文件...(在支持它的文件系统上)这些文件的内容是在运行时读取文件时由文件系统动态生成的:

## Get filesystem info:
$ stat -f .
  File: "."
    ID: ea0dd13726e1c7f1 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 239946508  Free: 140401510  Available: 128194458
Inodes: Total: 61022208   Free: 59882281
$
## Create a sparse file of "29" bytes size and examine:
$ truncate -s 29 file2
$
$ find . -name "file2" -ls
 20578315      0 -rw-rw-r--   1 ubuntu   ubuntu         29 Nov 30 11:30 ./file2
$
## Increase the size of the sparse file and examine again:
$ truncate -s 1G file2
$
$ find . -name "file2" -ls
 20578315      0 -rw-rw-r--   1 ubuntu   ubuntu   1073741824 Nov 30 11:32 ./file2

在其他文件系统下

可能允许在磁盘上分配小于完整块大小的空间...例如 NTFS:

## NTFS filesystem:
$ stat -f .
  File: "."
    ID: 0        Namelen: 255     Type: fuseblk
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 1048575    Free: 1043189    Available: 1043189
Inodes: Total: 4205524    Free: 4205505
$
$
$ touch file
$
$ find . -name "file" -ls
       64      0 -rwxrwxrwx   1 root     root            0 Nov 30 11:59 ./file
$
$ printf '%s' "1" >> file
$
$ find . -name "file" -ls
       64      1 -rwxrwxrwx   1 root     root            1 Nov 30 12:01 ./file
$
$ head -c 29 /dev/zero > file
$
$ find . -name "file" -ls
       64      1 -rwxrwxrwx   1 root     root           29 Nov 30 12:03 ./file
$
$ head -c 1k /dev/zero > file
$
$ find . -name "file" -ls
       64      4 -rwxrwxrwx   1 root     root         1024 Nov 30 12:03 ./file

... 除 NTFS 之外的其它文件系统可能允许比这更少的数据,即少于 1K 所需的find操作-ls来报告为1

相关内容