关于 ls -s 输出文件大小的单位问题的讨论(stat 和ls -s的块不一样的,只是名称相同而已)

自己看书正好看到这里,正纳闷呢,上网查了下,发现不是我自己在为这个问题感到困惑。

有个大哥提出一个问题:

问题标题: ls -s的单位到底是什么?

man ls
       -s, --size
              print the allocated size of each file, in blocks

这里说的是以block为单位,系统block size是4096,


man ls-s, --sizeprint the allocated size of each file, in blocks这里说的是以block为单位,系统block size是4096,

不对啊,哪位能说明下?

 以上是问题的全部。

回答1:

什么操作系统?

RHEL6.4,ls -s看见的是block数目!

大哥之后给出回复:
    RHEL 6.2,你用block size * ls -s的结果,算出来的大小是对的?

回答2:

计算了下,结果是按1K为block-size。
猜测:ls -s不指定block-size的情况下,默认以1K为block单位。
指定block-size为4K,计算结果正确!
ls -s --block-size 4k filename

回答3:

看来ls的block-size并不是以你当前文件系统的block size为基准的!它有它自己的道儿……

回答4:感觉应该没这么弱智,谁看的懂源码的翻出来看看

回答5:

这不是弱智吧,这是可扩展性。你想想,在大型系统里,可能有N个不同block-size的文件系统,如果ls每次显示文件分配块都要先去检查文件系统的block size,这样同样大小的文件,不同文件系统的输出不一样。

再说人家已经提供了--block-size参数,随你怎么玩。我觉得这样还是比较合理的!

回答6:


    关键是你加上--block-size这个参数后,影响的不光是ls -s,ls -l显示的字节大小也影响了,那指定一个-s参数还有什么意义呢

回答7:

问题都是有解决办法的。。。。。

尝试如下:
export BLOCKSIZE=4k
ls -ls

看看是不是你想要的。

嫌麻烦?把BLOCKSIZE环境变量加入.bash_profile。

回答8:

到最后我也不知道哪个对?大家怎么看

另一个帖子也说明了类似问题,读完这个帖子后,我豁然开朗了:

c - 使用 stat() 和 ls -s 分配的 block 数不同

        我试图使用 C 获取分配给文件的 block 数。我使用了 stat 结构及其名为 st_blocks 的变量。然而,与 ls -s 相比,这将返回不同数量的 block 。任何人都可以解释造成这种情况的原因以及是否有办法解决这个问题?

最佳答案

没有差异;只是一个误会。这里有两个独立的“ block 大小”。使用 ls -s --block-size=512 也可以为 ls 使用 512 字节的 block 大小。


ls -s命令以用户指定的单位(“ block ”)列出分配给文件的大小,您可以使用 --block-size 选项指定其大小。

struct stat 中的 st_blocks 字段以512字节为单位。

您看到了差异,因为两个“ block 大小” 不相同。他们只是碰巧被称为同一个名字。

这是一个您可以检查此效果的示例。这适用于所有 POSIXy/Unixy 文件系统(支持 sparse file ),但不适用于 FAT/VFAT 等。

首先,让我们创建一个 1 兆字节长的文件,但在开头有一个空洞(它们读取为零,但实际上并未存储在磁盘上),最后只有一个字节(我将使用 'X').

我们通过使用 dd 来跳过文件的前 1048575 个字节(创建一个“洞”,从而在支持此类的文件系统上创建一个稀疏文件):

printf 'X' | dd bs=1 seek=1048575 of=sparse-file count=1

我们可以使用 stat实用程序来检查文件。格式说明符 %s 提供文件的逻辑大小 (1048576),%b block 数 (st_blocks):

stat -c 'st_size=%s st_blocks=%b' sparse-file

在我的系统上,我得到 st_size=1048576 st_blocks=8,因为实际的文件系统 block 大小是 4096 字节(= 8×512),而这个稀疏文件只需要一个文件系统 block 。

但是,使用 ls -s sparse-file 我得到了 4 sparse-file,因为默认的 ls block 大小是 1024 字节。如果我跑

ls --block-size=512 -s sparse-file

然后我看到了 8 sparse-file,如我所料。

关于c - 使用 stat() 和 ls -s 分配的 block 数不同,我们在Stack Overflow上找到一个类似的问题:

相信大家也和我一样开朗了把?

最后我自己也有自己的一个问题:

[root@localhost 下载]# ls -l
总用量 402004
-rw-rw-r--. 1 alice alice 411651587 11月 26 05:02 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# stat *文件:wps-office-11.1.0.11711-1.x86_64.rpm大小:411651587 	块:804008     IO 块:4096   普通文件
设备:fd02h/64770d	Inode:268682688   硬链接:1
权限:(0664/-rw-rw-r--)  Uid:( 1001/   alice)   Gid:( 1001/   alice)
环境:unconfined_u:object_r:user_home_t:s0
最近访问:2023-11-26 05:03:10.828090477 -0500
最近更改:2023-11-26 05:02:23.890821053 -0500
最近改动:2023-11-26 05:02:38.910227255 -0500
创建时间:-
[root@localhost 下载]# ls -lh 
总用量 393M
-rw-rw-r--. 1 alice alice 393M 11月 26 05:02 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# ls -s 
总用量 402004
402004 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# du *
402004	wps-office-11.1.0.11711-1.x86_64.rpm

首先:看ls -l输出的大小:411651587,我自己用手机计算器算了下:411651587/1024/1024=392.58154...。再结合ls -lh的输出大小:393M,可推算之411651587的单位是字节,而不是网上说的ls 的文件大小输出单位是千字节,所以自己的情况,可能和网上说的情况是不一样的。

        继续推算,可以得出:

        stat命令的块大小是512byte。正好等于一个扇区的大小。

        ls -s输出的一个块大小是1024byte。

        du输出的块大小是,1024byte。

        结论,ls -s 和stat中块的大小单位是不一样的,只不过就是使用过了同样的名称:块。

        人家ls -s 提供了--block-size=参数,可以自己设置查询时候的块大小,例如:

[root@localhost 下载]# ls -s --block-size=1k
总用量 402004
402004 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# ls -s --block-size=2k
总用量 201002
201002 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# ls -s --block-size=4k
总用量 100501
100501 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# ls -s --block-size=1m
总用量 393
393 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# ls -s --block-size=1g
总用量 1
1 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# ls -s --block-size=10g
总用量 1
1 wps-office-11.1.0.11711-1.x86_64.rpm
[root@localhost 下载]# ls -s --block-size=1m
总用量 393
393 wps-office-11.1.0.11711-1.x86_64.rpm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis的创建,简单易懂的一篇blog

文章目录 一、MyBatis是什么二、操作流程三.配置resource总结 一、MyBatis是什么 MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注…

python zmq客户端和服务端router socket类型

import zmq import threading import timeclass ZMQClient(threading.Thread):def __init__(self):super(ZMQClient, self).__init__()self._context zmq.Context()self._client_socket self._context.socket(zmq.ROUTER)# 客户端标识,服务端接收数据后&#xff0…

kali常用命令

1.常用命令 passwd 修改密码 passwd root 修改root用户密码 date 显示系统日期 sudo 后面加命令 就可以调用管理权限 apt-get update 更新软件列表 这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。我们在新立得软件包…

Azure Machine Learning - 使用 REST API 创建 Azure AI 搜索索引

本文介绍如何使用 Azure AI 搜索 REST AP和用于发送和接收请求的 REST 客户端以交互方式构建请求。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员&…

【计算机网络】14、DHCP

文章目录 一、概述1.1 好处 二、概念2.1 分配 IP2.2 控制租赁时间2.3 DHCP 的其他网络功能2.4 IP地址范围和用户类别2.5 安全 三、DHCP 消息3.1 DHCP discover message3.2 DHCP offers a message 如果没有 DHCP,IT管理者必须手动选出可用的 ip,这太耗时了…

TA-Lib学习研究笔记——Price Transform (五)

TA-Lib学习研究笔记——Price Transform (五) 1.AVGPRICE Average Price 函数名:AVGPRICE 名称:平均价格函数 语法: real AVGPRICE(open, high, low, close) df[AVGPRICE] tlb.AVGPRICE(df[open],df[high],df[low…

【Python基础】内存管理机制

1. Python的内存分配 何时分配内存 使用对象时自动分配,查看对象内存所占大小,可以使用sys.getsizeof() 何时释放内存 不再使用对象时自动释放,释放时机由解释器内部策略控制 对象内存使用划分 一部分用于存储对象的数据一部分用于存储对象…

php 中生成订单号

字母日期。。。。。。。 function setOrderNo($year 2011) {$yCode array(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z);$orderSn $yCode[intval(date(Y)) - $year] . strtoupper(dechex(date(m))) . date(d) . substr(time(), -5) . s…

电子印章管理系统:是什么、3个平台推荐

说到印章,相信看过近现代电视剧的人都见过,一般在订立合约时最常用到,双方在合约上加盖印鉴,即代表着合约的成立。 我小时候还见过我父亲的印章,只是随着时代的发展,印章因为不易携带,容易被盗…

Java 使用zxing生成二维码

POM文件&#xff0c;引用 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.1.0</version></dependency><dependency><groupId>com.google.zxing</groupId><ar…

java 猜数字游戏

package com.gaoce;import java.util.Random; import java.util.Scanner;/*** ClassName: GuessNumber* Package: com.org* Description: 猜数字游戏* Author: H* Create: 2023/12/1 16:26* Version: 1.0*/public class GuessNumber {Random random new Random();public int r…

C++标准库类型string基本成员函数用法

标准库类型string&#xff0c;基本函数成员用法详细讲解 文章目录 标准库类型string&#xff0c;基本函数成员用法详细讲解一、头文件二、string构造函数三、string赋值函数assign四、string拼接函数append五、string查找函数 find和 rfind六、string替换函数 replace七、strin…

二叉树OJ题目——C语言

LeetCode 104.二叉树的最大深度 1. 题目描述&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例…

CSS浅谈动画性能

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目的一、举个栗子二、性能分析1.从图层分析2.性能分析 总结 目的 为了探究使用动画时&#xff0c;『transform』和『width、height、margin等』的差异 一、举个栗子…

【1】基于多设计模式下的同步异步日志系统

1. 项目介绍 本项⽬主要实现⼀个⽇志系统&#xff0c; 其主要⽀持以下功能: • ⽀持多级别⽇志消息 • ⽀持同步⽇志和异步⽇志 • ⽀持可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中 • ⽀持多线程程序并发写⽇志 • ⽀持扩展不同的⽇志落地⽬标地 2. 开发环境 • CentOS 7 • vs…

Prism.js实现代码高亮并添加行号

先上效果: Prism.js Prism 是一款轻量、可扩展的代码语法高亮库&#xff0c;使用现代化的 Web 标准构建。 使用 Prismjs 可以快速为网站添加代码高亮功能&#xff0c;支持超过113中编程语言&#xff0c;还支持多种插件&#xff0c;是简洁、高效的代码高亮解决方案。 为什么选…

C++跨目录include问题

不同文件夹下使用预处理器指示符#include 使用举例 假设我们有如下一个工程&#xff0c;其中包含了几个源代码和头文件&#xff0c;其中main.cpp是主源代码文件&#xff0c;里面含有main函数&#xff1a; 在foldder main中包含&#xff1a;func4.hpp&#xff0c;func4.cpp&am…

1.0 十大经典排序算法

分类 算法 本系列算法整理自&#xff1a;https://github.com/hustcc/JS-Sorting-Algorithm 同时也参考了维基百科做了一些补充。 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#…

Python遥感开发之批量镶嵌

Python遥感开发之批量镶嵌 0.ArcGis镶嵌1.Arcpy实现镶嵌1.1 Arcpy实现单个镶嵌1.2 Arcpy实现批量镶嵌 2.GDAL实现镶嵌 前言&#xff1a;主要介绍了遥感数据的镶嵌&#xff0c;其中包括使用ArcGis如何完成镶嵌&#xff0c;如何使用Arcpy和GDAL完成镶嵌。 0.ArcGis镶嵌 是ArcGis…

PyLMKit(2):快速开始大模型应用开发

快速开始 GitHub&#xff1a;https://github.com/52phm/pylmkitPyLMKit 官方教程 PyLMKit应用&#xff08;online application&#xff09;English document中文文档 0.下载安装 pip install -U pylmkit --user1.设置 API KEY 一个方便的方法是创建一个新的.env文件&#…