关于 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 或注…

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…

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

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

二叉树OJ题目——C语言

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

CSS浅谈动画性能

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

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

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

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

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

C++跨目录include问题

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

1.0 十大经典排序算法

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

物流单管理系统软件物流单打印,物流单打印模板,佳易王物流快运单管理软件下载

物流单管理系统软件物流单打印,物流单打印模板,佳易王物流快运单管理软件下载 软件试用版下载或技术支持可以点击最下方官网卡片 上图:在物流开单时,可以先输入电话,如果之前存在该托运人信息,则可以一键…

Motion 5 for Mac,释放创意,打造精彩视频特效!

Motion 5 for Mac是一款强大的视频后期特效处理软件,为Mac用户提供了无限的创意可能性。无论你是专业的影视制作人,还是想为个人视频添加独特特效的爱好者,Motion 5都能满足你的需求,让你的视频脱颖而出。 Motion 5提供了丰富多样…

【滑动窗口】将X减到0的最小操作数

将X减到0的最小操作数 1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode) 文章目录 将X减到0的最小操作数题目描述算法原理代码编写Java代码编写C代码编写 题目描述 给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 num…

【HarmonyOS开发】ArkTs编译为SO包的流程记录

1、创建一个Static Library的静态模块 2、编写我们的SO控件 2.1 编译配置 {"apiType": "stageMode","buildOption": {"artifactType": "obfuscation"},"targets": [{"name": "default",&qu…

Linux:查看端口占用的进程

命令 netstat -tunlp可以从图中看到,端口被那个进程占用,对应进程的pid是多少。

dart语言多线程遇到的问题:Isolate.spawnUri(),在真机调试中无法生成隔离

报错原因 [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: IsolateSpawnException: Unable to spawn isolate: Unsupported isolate URI: 未处理的异常:IsolateSpawnException:无法生成隔离:不支持隔离 URI&…

递归实例化导致的栈溢出问题【简直蠢得出奇】

问题描述 今天在练习数据库增删改查,体验三层架构思想时,随便写了点DAO层代码,但服务器运行时竟然爆出了栈溢出的问题,说实话,空指针问题我还能放着耐心去代码里找找问题,但这个栈溢出,我之前就…

Jetson Nano部署YOLOv5与Tensorrtx加速

一、烧录镜像 1、Jetson Nano烧写系统镜像 Jetson Nano是一款形状、外接口类似于树莓派的嵌入式主板,搭载了四核Cortex-A57处理器,GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,内存为4GB的LPDDR4,存储则为16GB eM…

入侵redis之准备---VMware上面安装部署centos7镜像系统【详细含云盘镜像】

入侵redis之准备—VMware上面安装部署centos7镜像系统【详细含云盘镜像 其他文章: 入侵redis并实现反弹shell控制【实战一】 学习大概步骤如下 第一步:先学习怎么安装部署kail系统服务器 入侵redis之准备—VMware安装部署kail镜像服务器【详细包含云盘镜像】 第二…