当前位置: 首页 > news >正文

关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf

一、关于linux里的df命令以及inode、数据块-stat链接数

    Linux中df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计,平常这个命令也用得很多,但一般就是使用df -h查看各个分区的空间使用情况,除此外也可以使用df查看当前linux系统上的文件系统,可使用-T选项,: --print-type print file system type结合-a查看所有的分区的文件系统,可以看到当前阿里云的分区使用的是ext4文件系统,其它还有例如proc, sysfs, tmpfs等文件系统。如下:

#使用 df -aT查看所有的分区的文件系统
[root@007 ~]# df -aT
Filesystem     Type        1K-blocks     Used Available Use% Mounted on
/dev/vda1      ext4         20510332 16449048   3012760  85% /
proc           proc                0        0         0    - /proc
sysfs          sysfs               0        0         0    - /sys
devpts         devpts              0        0         0    - /dev/pts
tmpfs          tmpfs          510004        0    510004   0% /dev/shm
none           binfmt_misc         0        0         0    - /proc/sys/fs/binfmt_misc
#使用 df -i通过inode数量来查看系统空间占用
[root@04007 ~]# df -i
Filesystem      Inodes  IUsed  IFree IUse% Mounted on
/dev/vda1      1310720 383303 927417   30% /
tmpfs           127501      1 127500    1% /dev/shm

    关于inode可以理解为整个磁盘的索引节点,linux上扇区(Sector)是磁盘的最小存储单位。每个扇区储存512字节(即0.5kb)。系统读取硬盘时,比如MYSQL通过索引查找到数据存储位置后会一次性读取多个扇区(即多个block数据块)上的数据。这种由多个扇区组成的块,是文件存取的最小单位。block块的大小,最常见的是4KB,即连续八个sector组成一个block。块大小在系统文件格式化的时候可以设置,也可设置为1Kb, 2Kb。可以通过dumpe2fs 分区 来查看分区分件系统的相关信息,包括总共有多少个Inode,多少空间Inode等等,如下:

[root@007 ~]# dumpe2fs /dev/vda1 | more 
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          94e4e384-0ace-437f-bc96-057dd64f42ee
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1310720
Block count:              5242624
Reserved block count:     262131
Free blocks:              2009428
Free inodes:              1016904
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1022
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Thu Aug 14 21:16:07 2014
Last mount time:          Sun Apr  8 06:20:13 2018
Last write time:          Sun Apr  8 06:18:55 2018
Mount count:              12
Maximum mount count:      -1
Last checked:             Thu Aug 14 21:16:07 2014
Check interval:           0 (<none>)
Lifetime writes:          4464 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       1064918
Default directory hash:   half_md4
Directory Hash Seed:      d5c54a86-d535-4c9b-9dea-e1b8e8088761
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             128M
Journal length:           32768
Journal sequence:         0x021b30cb
Journal start:            2774Group 0: (Blocks 0-32767) [ITABLE_ZEROED]Checksum 0xa8dc, unused inodes 0Primary superblock at 0, Group descriptors at 1-2Reserved GDT blocks at 3-1024Block bitmap at 1025 (+1025), Inode bitmap at 1041 (+1041)Inode table at 1057-1568 (+1057)

    操作系统用inode号码来识别不同的文件和目录,每一个目录、文件都有对应的inode,linux系统内部并不使用文件名,而是使用inode号码来识别文件。对系统来说,文件名只是inode号码便于识别的别称。用户通过一个路径获取一个文件的数据,系统内部都是重复去查找目录的inode信息获取其子目录上的inode最后找到文件的inode从而取到文件文件数据所在的block读出数据。所以inode上存储的就是这些数据块上所存数据(文件或目录)的元信息,里面包含了与该文件有关的一些信息。具体inode包含文件的元信息详细列出如下:

* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置

    可以使用stat查看目录或文件的inode信息,记得以前写过篇文章中也涉及到在进行文件删除时,如果文件名称中有一些特殊字符不好在命令中输入时,可以ls -i列出文件的inode值从而通过inode删除文件。

[root@007 ~]# stat htpasswd File: `htpasswd'Size: 20              Blocks: 8          IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 1086541     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-10-11 18:22:35.172274217 +0800
Modify: 2019-04-11 10:13:59.226543338 +0800
Change: 2019-04-11 10:13:59.226543338 +0800

    上面通过stat查看到的链接数这项信息,就是通过ls命令查看文件列表时的第三项的值。其和php里面的变量引用有类似功能,天下虽有万象,但很多都是一样的原理。linux系统中通过ln创建链接时有软链接和硬链接,当然一般用的软链接居多。通常情况文件名或目录和inode号码是一一对应的,每个inode号码但可以通过创建硬链接来使用一个数据块可以有多个文件名字,这时如果删除一个文件名,不影响另一个文件名的访问。如下:

[root@007 shell]# ln -P s.txt hard-s.txt 
[root@007 shell]# ll
total 20
-rwxr-xr-x 1 root root  40 Sep 24 20:23 a.sh
-rw-r--r-- 1 root root 240 Sep 24 19:15 a.txt
-rwxr-xr-x 1 root root  62 Oct  8 17:23 do.sed
-rw-r--r-- 2 root root 155 Oct 11 18:52 hard-s.txt
-rw-r--r-- 2 root root 155 Oct 11 18:52 s.txt
[root@007 shell]# ls -il
total 20
1087988 -rwxr-xr-x 1 root root  40 Sep 24 20:23 a.sh
1087933 -rw-r--r-- 1 root root 240 Sep 24 19:15 a.txt
1088279 -rwxr-xr-x 1 root root  62 Oct  8 17:23 do.sed
1088275 -rw-r--r-- 2 root root 155 Oct 11 18:52 hard-s.txt
1088275 -rw-r--r-- 2 root root 155 Oct 11 18:52 s.txt
[root@007 shell]# rm -f s.txt 
[root@007 shell]# stat hard-s.txt File: `hard-s.txt'Size: 155             Blocks: 8          IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 1088275     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-10-11 18:52:12.079865836 +0800
Modify: 2019-10-11 18:52:10.391907111 +0800
Change: 2019-10-12 15:03:16.935725573 +0800

二、关于awk文本处理命令中内置函数sub、gsub、sprintf

    awk是常用的日志统计命令,之前有篇文章也有详细的介绍:linux文本分析利器awk命令使用详解、详细示例及linux服务器上手动释放内存和交换内存的详细介绍应用_linux的awk文本分析-CSDN博客 不过我一直很少使用sub命令。sub就英文单词substitute的简写,意思就是替代、替换、代替。 除sub命令外,awk里面还有一个gsub命令,其实名称中相差的这个g字符串已经说明了它们的区别了。我们知道在vim或者使用sed进行字符替换的时候,最后可以通过加上一个g选项来指定替换全局,如果不加上这个g,那么每行的替换只会进行一次。sed示例如下:

[root@007 shell]# cat s.txt 
what is you name, yes 890?aaz123
bettertest, dont konw this char
--hello--1234567890
hellowolrd, some times this is good;
yes 890,the end is 1234567890.
[root@007 shell]# sed -n 's/890/===/p' s.txt 
what is you name, yes ===?aaz123
1234567===
yes ===,the end is 1234567890.
[root@007 shell]# sed -n 's/890/===/gp' s.txt 
what is you name, yes ===?aaz123
1234567===
yes ===,the end is 1234567===.

而sub和gsub的区别正在于此,使用gsub直接进行全局替换,使用sub则只替换一次。

[root@007 shell]# awk '{sub("890", "==="); print $0;}' s.txt             
what is you name, yes ===?aaz123
bettertest, dont konw this char
--hello--1234567===
hellowolrd, some times this is good;
yes ===,the end is 1234567890.
[root@007 shell]# awk '{gsub("890", "==="); print $0;}' s.txt  
what is you name, yes ===?aaz123
bettertest, dont konw this char
--hello--1234567===
hellowolrd, some times this is good;
yes ===,the end is 1234567===.

    awk还有一个sprintf函数可以数字进行处理,根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。如下使用%3.2f指定保留2位小数。

[root@007 shell]#   awk '{if(NF) print NR,length($0)/NF}' s.txt 
1 5.33333
2 6.2
3 9
5 10
6 6
7 6
[root@007 shell]#   awk '{if(NF) print NR,sprintf("%3.2f",length($0)/NF)}' s.txt 
1 5.33
2 6.20
3 9.00
5 10.00
6 6.00
7 6.00

    另外sprintf函数除了使用%3.2f格式外,还能使用%d、%i参数,另外也可以使用printf命令,使用此命令不会换行。示例如下:

[root@007 shell]#   awk '{print sprintf("%4d%4i", NR,length($0),NF)}' s.txt     1  322  313   94   05  106  367  30
[root@007 shell]#   awk '{print sprintf("%4-d%4-i", NR,length($0),NF)}' s.txt 
1   32  
2   31  
3   9   
4   0   
5   10  
6   36  
7   30 
[root@007 shell]#   awk '{printf("%4-d%4-i", NR,length($0),NF)}' s.txt 
1   32  2   31  3   9   4   0   5   10  6   36  7   30  
[root@007 shell]#

printf修饰符和格式明细如下:printf的格式说明符

格式说明符	功能
%c	打印单个ASCII 字符,printf("The character is %c\n",x),输出: The character is A
%d	打印一个十进制数,printf("The boy is %d years old\n",y),输出:The boy is 15 years old
%e	打印数字的e 记数法形式,printf("z is %e\n",z) 打印: z is 2.3e+0 1,%f	打印一个浮点数printf("z is %f\n", 2.3 * 2),输出: z is 4.600000,%o	打印数字的八进制printf("y is %o\n",y),输出:z is 17
%s	打印一个字符串,print("The name of the culprit is %s\n",$1),输出:The name of the culprit is Bob Smith
%x	打印数字的十六进制值,printf("y is %x\n",y),输出:x is f

    关于printf的格式化可以参见这两篇更详细的文章:https://www.cnblogs.com/thefirstfeeling/p/5667053.html  和 https://blog.csdn.net/augusdi/article/details/41128911 。除了这些内置函数外,awk还能使用一些内置数值函数,比如int, sqrt, exp, log,  sin, cos, rand等。 

相关文章:

关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf

一、关于linux里的df命令以及inode、数据块-stat链接数 Linux中df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计&#xff0c;平常这个命令也用得很多&#xff0c;但一般就是使用df -h查看各个分区的空间使用情况&#xff0c;除此外也可以使用df查看当前linux系统…...

如何本地搭建Whisper语音识别模型

要在本地搭建Whisper语音识别模型&#xff0c;您需要以下几个步骤&#xff1a; 步骤一&#xff1a;系统准备 操作系统: 建议使用Ubuntu 20.04或以上版本&#xff0c;确保系统足够稳定和兼容。硬件配置: 最好有一个强大的GPU&#xff0c;因为语音识别涉及大量的计算工作。推荐…...

微信小程序仿微信聊天界面

界面结构: 消息列表: 使用 scroll-view 实现滚动&#xff0c;每条消息使用 view 组件包裹&#xff0c;根据消息类型 (文本、图片、文件) 显示不同内容。输入框区域: 包含输入框 (textarea)、发送按钮 (button) 和上传文件按钮 (view 组件模拟)。头像: 使用 image 组件展示。 …...

文件用电脑生成的在线技巧,能够轻松将多种类型文件转二维码

现在为了能够更加快捷将文件分享给其他人查看&#xff0c;很多人会通过制作二维码的方式来存储文件&#xff0c;这样可以减少文件对内存的占用&#xff0c;而且用户扫码获取内容也更加的方便快捷。二维码能够随时更新内容&#xff0c;可以长期通过一个二维码来提供个不同的内容…...

QT实现TCP/UDP通信

服务器端&#xff1a; 客户端&#xff1a; 服务器&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug&…...

流程自动化变革:看低代码开发如何赋能企业创新转型

在数字化转型的浪潮中&#xff0c;企业面临着前所未有的挑战和机遇。为了保持竞争力&#xff0c;企业必须快速适应市场变化&#xff0c;创新业务模式&#xff0c;并提高运营效率。流程自动化成为企业转型的关键&#xff0c;而低代码开发平台如JNPF&#xff0c;正成为推动这一变…...

可提示 3D 分割研究里程碑!SAM2Point:SAM2加持泛化任意3D场景、任意提示!

郑重声明&#xff1a;本解读已获得论文作者的原创解读授权 文章链接&#xff1a;https://arxiv.org/pdf/2408.16768 在线demo: https://huggingface.co/spaces/ZiyuG/SAM2Point code链接&#xff1a;https://github.com/ZiyuGuo99/SAM2Point 亮点直击 无投影 3D 分割&#xff1…...

Rabbitmq中得RPC调用代码详解

文章目录 1.RPC客户端2.RabbitMQ连接信息实体类3.XML工具类 本文档只是为了留档方便以后工作运维&#xff0c;或者给同事分享文档内容比较简陋命令也不是特别全&#xff0c;不适合小白观看&#xff0c;如有不懂可以私信&#xff0c;上班期间都是在得 直接上代码了 1.RPC客户端 …...

ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】

此系列是本人阅读论文过程中的简单笔记&#xff0c;比较随意且具有严重的偏向性&#xff08;偏向自己研究方向和感兴趣的&#xff09;&#xff0c;随缘分享&#xff0c;共同进步~ Integrated Sensing and Communications: Toward Dual-Functional Wireless Networks for 6G and…...

split 分割字符串方法解析,substring 截取字符串方法解析;二者的作用和区别?使用时需要注意什么?附代码和运行图

目录 一. 摘要 二. split 方法 2.1 String[] split(String regix) 2.2 String[] split(String regix&#xff0c;int limit) 2.3.1 当 int < 0时&#xff0c;会按照最大数量切割字符串 2.3.2 当 int 0时&#xff0c;此时就和第一个方法一样了&#xff0c;等于没有传入…...

HTTP 协议的基本格式

HTTP协议("超文本传输协议")&#xff0c;是一个被广泛使用应用层协议&#xff0c;自1991年正式发布HTTP协议以来&#xff0c;HTTP协议就一直在更新&#xff0c;目前已经更新到3.0版本&#xff0c;但是目前主流的依旧是1.1版本&#xff0c;但依旧是一个最主流使用的应…...

STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设&#xff08;中断、I2C、USART、SPI等配置&#xff09;在STM32CubeMX中的设置为主&#xff0c;对驱动代码编写不做记录&#xff0c;所以阅读本文最好有标准库开发经验。除第2节外&#xff0c;使用的都是韦东山…...

vue3-print打印eletable某一行的数据

主页面的表格 <template><el-table :data"list"><el-table-column label"操作" align"center"><template #default"scope"><el-buttonlinktype"primary"click"handleType(scope.row)"…...

【Vue】pnpm创建Vue3+Vite项目

初始化项目 &#xff08;1&#xff09;cmd切换到指定工作目录&#xff0c;运行pnpm create vue命令&#xff0c;输入项目名称后按需安装组件 &#xff08;2&#xff09;使用vs code打开所创建的项目目录&#xff0c;Ctrl~快捷键打开终端&#xff0c;输入pnpm install下载项目…...

springboot配置多数据源

springboot配置多数据源 学习新技术&#xff0c;争做新青年&#xff0c;欢迎围观&#xff0c;河南老乡在上海请&#xff0c;加&#xff0c;微&#xff0c;andyfau2022&#xff0c; ----获取数据源&#xff1a;null&#xff0c;数据源为null时默认使用主数据源的。 1-yml文件…...

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题&#xff1a;墙体两侧特征混淆误匹配&#xff0c;导致建图和定位偏差&#xff0c;表现为过门跳变、外月台走歪等 解决思路&#xff1a;预期的根治方案IGICP需要较长时间完成上线&#xff0c;先使用切分地图的工程化方案&#xff0c;即墙体两侧切…...

ChatGPT+Simple Mind Map生成思维导图:快速提升学习效率

一、告别杂乱笔记&#xff0c;一键生成清晰思维导图&#xff01; 最近开始学习网络安全&#xff0c;一头扎进了各种协议、漏洞、防御机制的海洋中。信息量巨大&#xff0c;知识点零散&#xff0c;让我很快便陷入了“知识焦虑”——笔记越记越多&#xff0c;却越来越混乱&#…...

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式&#xff1a;3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制&#xff1a;Maven & SpringBoot 多环境兼容 配置文件分类&#xff1a;4种 整合…...

Wordpress右下角表单弹出插件

Ultimate Sticky Popup & Widgets Charcoal Making Machine | Equipment for Sale - Kingtiger...

影刀RPA实战:自动化批量生成条形码完整指南

今天我们聊聊使用影刀来实现批量生成条形码&#xff0c;条形码在零售行业运用非常广泛&#xff0c;主要作用表现在产品识别&#xff0c;库存管理&#xff0c;销售管理&#xff0c;防伪保护等&#xff0c;这些作用使其成为现代商业和工业环境中不可或缺的工具&#xff0c;它极大…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...