当前位置: 首页 > 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;它极大…...

Python Flask简介

简介 Flask 有两个主要依赖&#xff1a;路由、调试和 Web 服务器网关接口&#xff08;Web Server Gateway Interface&#xff0c;WSGI&#xff09; 子系统由&#xff1a;Werkzeug 提供模板系统由&#xff1a;Jinja2提供Werkzeug 和 Jinjia2 都是由 Flask 的核心开发者开发而成…...

视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践

随着科技的飞速发展&#xff0c;视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台&#xff0c;不仅依赖于先进的硬件设备&#xff0c;更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术&#xff0c;…...

欧拉下搭建第三方软件仓库—docker

1.创建新的文件内容 切换目录到etc底下的yum.repos.d目录&#xff0c;创建docker-ce.repo文件 [rootlocalhost yum.repos.d]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# vim docker-ce.repo 编辑文件,使用阿里源镜像源&#xff0c;镜像源在编辑中需要单独复制 h…...

pcs升压变流一体机

在当今全球积极推进能源转型的大背景下&#xff0c;新能源技术的发展日新月异。其中&#xff0c;PCS 升压变流一体机作为一种关键的能源转换设备&#xff0c;正发挥着越来越重要的作用。它一般可分为10KV与35KV等级的。 PCS 升压变流一体机&#xff0c;全称为 Power Conversion…...

上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例

背景&#xff1a; 地铁&#xff0c;作为城市的活力脉搏&#xff0c;不仅是衔接城市生活的关键纽带&#xff0c;更是现代城市交通体系中不可或缺的核心组成部分。因此&#xff0c;确保地铁的稳定运行对任何一座城市都至关重要。 上海泗博自动化&#xff0c;作为与成都地铁项目合…...

猫鼠游戏: KaijiK病毒入侵溯源分析

1. 事件背景 近期&#xff0c;网宿平台某客户在使用云主机工作的时候突然出现主机卡顿&#xff0c;连接不稳定&#xff0c;网络断开的情况&#xff0c;并且收到了网宿主机入侵检测产品的告警信息。由于客户没有专职的安全人员&#xff0c;由运维人员兼任安全运营工作&#xff…...

【Hot100算法刷题集】双指针-02-盛水最多的容器(含暴力枚举、双指针法及其合理性证明)

&#x1f3e0;关于专栏&#xff1a;专栏用于记录LeetCode中Hot100专题的所有题目 &#x1f3af;每日努力一点点&#xff0c;技术变化看得见 题目转载 题目描述 &#x1f512;link->题目跳转链接 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的…...

Spring和Spring FrameWork有什么关系?两者是同一个东西吗?

Spring和Spring Framework之间的关系可以归结为以下几点&#xff1a; 广义与狭义的理解 广义上的Spring&#xff1a; 广义上的Spring泛指以Spring Framework为基础的整个Spring技术栈。Spring已经发展成为一个由多个不同子项目&#xff08;模块&#xff09;组成的成熟技术体系…...

windows10 python 解决鼠标右键菜单中没有Edit with IDLE(不使用注册表编辑器)

随便选择一个py文件&#xff0c;右击打开属性。 打开方式&#xff1a;点击更改。 最下面&#xff1a;点击更多应用&#xff0c;点击在这台电脑上查找应用 搜索找到你自己按照的python路径下 Python39\Lib\idlelib\idle.bat 文件 点击打开&#xff0c;结束。...

一些深度学习相关指令

// 服务器上查看所有的环境版本 conda env list// 删除某一个环境 conda remove -n 环境名 --all终端输入命令&#xff1a;nvidia-smi&#xff0c;可以看显卡的使用情况指定使用哪张显卡&#xff1a; os.environ["CUDA_VISIBLE_DEVICES"] 2查看服务器的cuda版本&am…...