符号链接的“大小”在ls输出中代表什么?


11

我将从示例开始:

$ ls -l dir1
total 4
-rw-r--r-- 4 maythux maythux 1650 2008-01-10 16:33 file
lrwxrwxrwx 1 maythux maythux  7 2008-01-15 15:17 symfile -> file

symfile 是文件的符号链接 file

而且据我所知1650,文件的大小file是多少,但是7在size列下放置的数字是多少?

编辑:运行du

$ du -sh symfile
0   symfile

那么,如何证明符号链接大小为7 ?!


更新:

尝试这个

$ touch file
$ du -sh file
0 file
$ ls -l file
-rw-rw-r-- 1 maythux maythux 0 Jun  1 19:42 file

请注意,这里的大小也为0。

现在:

$ ln -s file sym
$ du -sh sym
0 sym
$ ls -l sym
lrwxrwxrwx 1 maythux maythux 4 Jun  1 19:44 sym -> file

所以,我想这不仅是尺寸


2
7依赖于文件系统(以及可能的其它参数)。在ext4上为7,但在btrfs上为13,在tmpfs上为3。
muru 2015年

1
它是一个大小,但是大小取决于文件系统(btrfs可能存储的元数据比ext4多,而ext4的存储量比tmpfs多)。您可以使用链接填充磁盘。我只是说,如果您在不同的文件系统上看到不同的数字,请不要感到惊讶。
muru 2015年


1
目录条目的最小大小大于所需大小。输入足够的条目,目录的大小将增加。检查:mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo
muru 2015年

Answers:


13

符号链接占用了存储名称和目标所需的空间,以及一些用于其他元数据的字节。

这就是符号链接的大小。

关于从尺寸du -shdu 只看块多少个分配的,因此可能会显示为0 stat,并ls -l在显示在这方面的大小更好。


那为什么du -sh symfile给0呢?–
Maythux 2015年

du仅查看分配了多少块,因此可能显示0。stat和ls -l更智能。
Rinzwind

请阅读更新
Maythux 2015年

看到我的答案:它是名称,目标和一些元数据。总共占7个字节。其他操作系统存储其他元数据,因此将具有不同的大小。
Rinzwind 2015年

问题是“您如何证明它?”
6

5

它是符号链接的大小(以字节为单位)。

某些文件系统在目录条目内部留有一个很小的区域,用于文件的开头,这大大加快了符号链接和较小读取(思考file)的处理,但代价是较大的目录条目。

如果整个符号链接内容适合目录条目,则不会分配任何数据块,并且du大小显示为零。如果符号链接不合适,则会正常分配空间(因此您将获得单个块分配),这可以通过文件系统使用尾部合并来优化(但没有API du可以知道)。

ext4文件系统执行此优化的符号链接而已,标准的功能发现ext4_inode_is_fast_symlink


某些文件系统... ”-如果列出具有此功能的常见文件系统(以及没有此功能的任何常见文件系统),您的答案将会得到改善。
RM

1

这是符号链接文件的大小,以字节为单位。

Symlink文件是一个普通文件,用于存储有关其指向的文件的数据。在ext 4中,它是7个字节。


尺寸在什么?是字节还是位还是什么?
Maythux 2015年

大小以字节为单位
。–

1
那为什么du -sh symfile给0呢?
Maythux 2015年

du不能使用很小的文件进行预大小设置。尝试在99字节的文件上使用du。它将显示4.0K。
6

那也是我的意思,因此它应该至少显示4k的符号链接,因为在OS概念中,它为该文件
重新
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.