文件属性信息

news2024/12/23 18:25:09

文件的属性信息

Linux是一个基于文件的操作系统,因此作为文件本身也就有很多属性,如果想要查看某一个文件的属性有两种方式:命令和函数。虽然有两种方式但是它们对应的名字是相同的,叫做stat。另外使用file命令也可以查看文件的一些属性信息。

1. file命令

file 是一个在Linux系统中用于确定文件类型的命令。它通过检查文件的内容、文件系统元数据等信息来推测文件的类型。file 命令的基本语法如下:

file [选项] 文件名

其中,文件名 是要检查的文件的路径。

一些常用的 file 命令选项包括:

  • -b:简化输出,只显示文件类型。
  • -i:显示文件类型和MIME类型。
  • -L:查看软连接文件自身文件属性
  • -F:设置输出字符串的分隔符

在这里插入图片描述

2. stat命令

stat命令显示文件或目录的详细属性信息包括文件系统状态,比ls命令输出的信息更详细。语法格式如下:

# 参数在命令中的位置没有限制
$ stat [参数] 文件或者目录名

一些常用的 stat 命令选项包括:

  • -c:使用指定格式输出信息。
  • -f:显示文件系统状态而不是文件状态。
  • -t:简洁模式,只显示摘要信息, 不显示属性描述
  • -L:对符号链接进行解引用,显示链接目标的信息。
2.1 显示所有属性
$ stat english.txt 
  File: 'english.txt'
  Size: 129567          Blocks: 256        IO Block: 4096   regular file
Device: 801h/2049d      Inode: 526273      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/   robin)   Gid: ( 1001/   robin)
Access: 2021-01-31 00:00:36.791490304 +0800
Modify: 2021-01-31 00:00:36.791490304 +0800
Change: 2021-01-31 00:00:36.791490304 +0800
 Birth: -

在输出的信息中我们可以看到很多属性,

  • File: 文件名
  • Size: 文件大小, 单位是字节
  • Blocks: 文件使用的数据块总数
  • IO Block:IO块大小
  • regular file:文件的实际类型,文件类型不同,该关键字也会变化
  • Device:设备编号
  • Inode:Inode号,操作系统用inode编号来识别不同的文件,找到文件数据所在的block,读出数据。
  • Links:硬链接计数
  • Access:文件所有者+所属组用户+其他人对文件的访问权限
  • Uid: 文件所有者名字和所有者ID
  • Gid:文件所有数组名字已经组ID
  • Access Time:表示文件的访问时间。当文件内容被访问时,这个时间被更新
  • Modify Time:表示文件内容的修改时间,当文件的数据内容被修改时,这个时间被更新
  • Change Time:表示文件的状态时间,当文件的状态被修改时,这个时间被更新,例如:文件的硬链接链接数,大小,权限,Blocks数等。
  • Birth: 文件生成的日期
2.2 显示系统信息 -f

在这里插入图片描述

2.3 软链接文件 -L

使用 stat 查看软链接类型的文件, 默认显示的是这个软链接文件的属性信息, 添加参数 -L就可以查看这个软连接文件关联的文件的属性信息了。

在这里插入图片描述

2.4 简介输出 -t

在这里插入图片描述

2.5 单个属性输出 -c

stat 命令中,-c 参数用于自定义输出格式。通过 -c 参数,你可以指定输出的信息,并使用一些格式控制符来代表文件的各种属性。下面是一些常用的 -c 参数格式控制符:

  • %a:文件权限,八进制表示。
  • %A:文件权限,人类可读表示。
  • %n:文件名。
  • %s:文件大小(以字节为单位)。
  • %b:文件的块数。
  • %B:每块的字节数。
  • %d:设备编号。
  • %i:文件的 inode 号。
  • %U:文件所有者的用户名。
  • %G:文件所属组的组名。
  • %x:文件的最后访问时间。
  • %y:文件的最后修改时间。
  • %z:文件的最后变化时间。

下面是一个使用 -c 参数的 stat 命令的例子:

stat -c "%n Size: %s bytes Owner: %U Group: %G Permissions: %a" filename

在这里插入图片描述

3. stat/lstat函数

statlstat 是在C语言中用于获取文件或文件系统信息的函数,通常用于检查文件的属性、权限、时间戳等。

  1. stat 函数:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    int stat(const char *path, struct stat *buf);
    
    • path 是文件或目录的路径。
    • buf 是一个指向 struct stat 结构体的指针,用于存储获取到的文件信息。

    stat 函数返回 0 表示成功,-1 表示失败。获取的文件信息存储在 struct stat 结构体中,该结构体的定义如下:

    struct stat {
        dev_t         st_dev;      // 设备ID
        ino_t         st_ino;      // 文件的inode
        mode_t        st_mode;     // 文件的类型和权限
        nlink_t       st_nlink;    // 连接到该文件的硬链接数目
        uid_t         st_uid;      // 文件所有者的用户ID
        gid_t         st_gid;      // 文件所有者的组ID
        dev_t         st_rdev;     // 如果是设备文件,表示设备的ID
        off_t         st_size;     // 文件的大小(字节数)
        blksize_t     st_blksize;  // 文件系统的块大小
        blkcnt_t      st_blocks;   // 文件占用的块数
        time_t        st_atime;    // 文件的最后访问时间
        time_t        st_mtime;    // 文件的最后修改时间
        time_t        st_ctime;    // 文件的最后状态变更时间
    };
    
  2. lstat 函数: lstat 函数与 stat 函数相似,但是当文件是符号链接时,lstat 返回符号链接本身的信息,而不是它指向的文件的信息。

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    int lstat(const char *path, struct stat *buf);
    

    参数和返回值与 stat 函数相同。

下面是一个简单的示例,演示如何使用 stat 函数获取文件信息:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main() {
    const char *filename = "example.txt";
    struct stat file_info;

    if (stat(filename, &file_info) == 0) {
        printf("File Size: %ld bytes\n", file_info.st_size);
        printf("Owner UID: %d\n", file_info.st_uid);
        printf("Group GID: %d\n", file_info.st_gid);
        printf("Permissions: %o\n", file_info.st_mode & 0777);
    } else {
        perror("stat");
    }

    return 0;
}

这个示例使用 stat 函数获取了文件的大小、所有者 UID、所属组 GID 以及文件权限信息。

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

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

相关文章

从fuzz视角看CTF堆题--qwb2023_chatting

前言 这个题目是一个c的堆题&#xff0c;而我自己对于c的一些内存分配不太了解&#xff0c;同时也不太会c的逆向&#xff0c;硬看是没有办法了&#xff0c;所以就想能不能通过fuzz的角度去进行利用 fuzz 大概思路 函数选择 可以看到有add delete switch read listuser mes…

大创项目推荐 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

小红书如何高效引流?

近年来&#xff0c;公域流量价格不断上涨&#xff0c;私域流量的优势逐渐凸显。企业正花费大量资源和成本来获取新流量&#xff0c;但与其如此&#xff0c;不如将精力放在留存和复购上&#xff0c;从而实现业绩的新增长。其中关键在于如何有效地将公域流量转化为私域流量。 然而…

html5实现好看的个人博客模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的文章界面1.4 我的模板界面1.5 文章内容界面 2.结构和源码2.1 目录结构2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/135368653 html5实现好看…

ExecutorCompletionService详解

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 文章目录 摘要ExecutorCompletionService适用场景ExecutorCompletionService使用ExecutorCompletionService原理解析注意事项总结 摘要 ExecutorCompletionService 是Jav…

LeetCode做题总结 15. 三数之和(未完)

不会做&#xff0c;参考了代码随想录和力扣官方题解&#xff0c;对此题进行整理。 代码思路 思想&#xff1a;利用双指针法&#xff0c;对数组从小到大排序。先固定一个数&#xff0c;找到其他两个。 &#xff08;1&#xff09;首先对数组从小到大排序。 &#xff08;2&…

【网络技术】【Kali Linux】Wireshark嗅探(四)域名系统(DNS)

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解域名系统&#xff08;DNS&#xff09;的工作原理。 二、域名系统概述 简单来说&#xff0c;域名系统&#xff08;Domain Name System, DNS&#xff09;将域名&#xff08;可以理解为“网址”…

为什么要用扫码出入库?

一、什么是扫码出入库管理系统 传统的仓库管理模式存在很多问题&#xff0c;如&#xff1a;货物积压、过期、丢失等。这些问题不仅影响了企业的正常运营&#xff0c;还给企业带来了经济损失。为了解决这些问题&#xff0c;扫码出入库管理系统应运而生。该系统采用先进的二维码…

Apache的配置与应用

目录 1、Apache简介 2、Apache连接保持 3、Apache的访问控制 3.1、客户机地址限制 3.2、用户授权限制 &#xff08;1&#xff09;创建用户认证数据文件 &#xff08;2&#xff09;添加用户授权配置 &#xff08;3&#xff09;验证用户访问授权 4、Apache日志分割 4…

Vivado JESD204B与AD9162建立通信实战总结

一、FPGA与AD9162的JESD204B接口 FPGA作为JESD204B接口的发送端&#xff0c;AD9162作为JESD204B接口的接收端。FPGA和AD9162的device clk、SYSREF由同源时钟芯片产生。其中&#xff0c;FPGA和AD9162的divice clk时钟不同&#xff0c;并且FPGA的decive clk等同于JESD204B IP的co…

【UnityShader入门精要学习笔记】(3)章节答疑

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 复习&#xff08;阶段性总结…

数据分析案例-外国电影票房数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

k8s 1.23.5版本安装ingress1.6.4

1、背景 网上找了好几个ingress 文件&#xff0c;可能是版本没对&#xff0c;ingress都没有安装成功&#xff0c;最后查了相关资料&#xff0c;手动安装了。 下面是版本的匹配列表 github中ingress 地址&#xff1a;https://github.com/kubernetes/ingress-nginx 1.23.5版本支…

MySQL的安装网络配置

目录 一. MySQL5.7的安装 二. MySQL8.0的安装 三. 配置网络访问 思维导图 一. MySQL5.7的安装 1. 解压 2. 将my.ini文件放入到解压文件中 3. 编辑my.ini文件&#xff0c;将路径改为当前路径 4. 进到bin目录下&#xff0c;以管理员身份打开cmd命令窗口 5. 安装MySQL服务 my…

HarmonyOS调研分享

经过十多年的发展&#xff0c;传统移动互联网的增长红利已渐见顶。万物互联时代正在开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年&#xff0c;全球物联网终端连接数量将达 246 亿个&#xff0c;其中消费物联网终端连接数量将达 11…

chatGPT带你学习设计模式 (二)抽象工厂模式(创建型模式) GURU

深入理解抽象工厂模式 引言 在面向对象编程中&#xff0c;对象的创建是一个常见且关键的挑战。尤其在需要管理一系列相关对象的创建时&#xff0c;传统的对象创建方法&#xff08;如直接使用 new 关键字&#xff09;可能导致代码的高耦合和低灵活性。这时&#xff0c;抽象工厂…

5+共病+WGCNA+机器学习+免疫浸润,经典共病生信思路,轻松拿5+

今天给同学们分享一篇生信文章“Identification of biomarkers for the diagnosis of chronic kidney disease (CKD) with non-alcoholic fatty liver disease (NAFLD) by bioinformatics analysis and machine learning”&#xff0c;这篇文章发表在Front Endocrinol (Lausann…

Spring-Retry 重试框架使用

一、Spring-Retry Spring-Retry框架是Spring自带的功能&#xff0c;具备间隔重试、包含异常、排除异常、控制重试频率等特点&#xff0c;是项目开发中很实用的一种框架。 支持手动调用方式和注解方式。 使用需引入下面依赖&#xff1a; <dependency><groupId>o…

Vue:脚手架Vue-CLI的使用

一、环境准备 vue脚手架&#xff08;vue-CLI&#xff09;的使用是基于nodejs环境下的。 你可以简单理解为&#xff0c;Java项目需要再jvm虚拟机上才能编译运行 nodejs的作用就是将vue文件编译成html、css、js代码文件。 如何安装nodejs 参考&#xff1a;https://blog.csdn.net…

Uibot (RPA设计软件)培训前期准备指南————课前材料

紧接着小北的上一篇博客&#xff0c;友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#xff09;-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135348488?spm1001.2014.3001.5502 课程安排如下&#xff1a; 序号 日期 内容 视…