'ls -lh'和'ls -si'之间有什么区别?

时间:2015-09-30 14:59:53

标签: linux shell

我已经执行了两个注释,但两个输出中的大小似乎都不同。

ls -lh
total 147M
-rw------- 1 root root 3.4K Sep 30 14:58 anaconda-ks.cfg
-rw-r--r-- 1 root root  247 Sep 30 14:58 install.post.log
-rw-r--r-- 1 root root   54 Sep 30 14:58 install.postnochroot.log
-rw-r--r-- 1 root root 147M Sep 30 14:58 jdk-7u79-linux-x64.gz

ls -l --si
total 154M
-rw------- 1 root root 3.5k Sep 30 14:58 anaconda-ks.cfg
-rw-r--r-- 1 root root  247 Sep 30 14:58 install.post.log
-rw-r--r-- 1 root root   54 Sep 30 14:58 install.postnochroot.log
-rw-r--r-- 1 root root 154M Sep 30 14:58 jdk-7u79-linux-x64.gz

2 个答案:

答案 0 :(得分:0)

如果您使用命令man ls检查了ls的联机帮助页,您会看到以下内容:

   -l     use a long listing format
   -h, --human-readable
          with -l and/or -s, print human readable sizes (e.g., 1K 234M
          2G)
   -i, --inode
          print the index number of each file
   -s, --size
          print the allocated size of each file, in blocks

所以你看,每个参数只定义了什么以及如何将信息放到屏幕上。您看到的(大小差异)是-h--human-readable命令,它将输出更多可读文件大小而不是始终打印字节。使用-s将在HDD上的blocks中打印文件大小,这取决于文件系统的块大小。根据提供的信息,我会说你的文件系统有1kb块大小。因此,该文件的实际内容为3.4kb,但必须填写块,因此在您的磁盘上该文件需要4kb4 blocks空间。

答案 1 :(得分:0)

手册页说-s表示"在块"中打印每个文件的分配大小。所以假设你有1KB的块大小,你的文件是3.4K。该文件需要4个块,而小于1KB的任何块仍需要一个1KB块。

但是,让我们说你的块大小是4KB ......在这种情况下,任何小于4KB的东西仍然需要一个4KB的块。这可能就是你在这里看到的。

您可以使用tune2fs工具进行检查。例如:

# tune2fs -l /dev/tank/root | grep -i 'block size'
Block size:               4096

这显示了4096字节(例如,4KB)的块大小,这可能是默认值,因为我在创建该文件系统时没有指定任何自定义参数。