admin管理员组文章数量:1516870
文件的属性信息
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函数
stat
和
lstat
是在C语言中用于获取文件或文件系统信息的函数,通常用于检查文件的属性、权限、时间戳等。
stat函数:#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>intstat(constchar*path,structstat*buf);path是文件或目录的路径。buf是一个指向struct stat结构体的指针,用于存储获取到的文件信息。
stat函数返回 0 表示成功,-1 表示失败。获取的文件信息存储在struct stat结构体中,该结构体的定义如下:structstat{dev_t st_dev;// 设备IDino_t st_ino;// 文件的inodemode_t st_mode;// 文件的类型和权限nlink_t st_nlink;// 连接到该文件的硬链接数目uid_t st_uid;// 文件所有者的用户IDgid_t st_gid;// 文件所有者的组IDdev_t st_rdev;// 如果是设备文件,表示设备的IDoff_t st_size;// 文件的大小(字节数)blksize_t st_blksize;// 文件系统的块大小blkcnt_t st_blocks;// 文件占用的块数time_t st_atime;// 文件的最后访问时间time_t st_mtime;// 文件的最后修改时间time_t st_ctime;// 文件的最后状态变更时间};lstat函数:lstat函数与stat函数相似,但是当文件是符号链接时,lstat返回符号链接本身的信息,而不是它指向的文件的信息。#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>intlstat(constchar*path,structstat*buf);参数和返回值与
stat函数相同。
下面是一个简单的示例,演示如何使用
stat
函数获取文件信息:
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>intmain(){constchar*filename ="example.txt";structstat 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");}return0;}
这个示例使用
stat
函数获取了文件的大小、所有者 UID、所属组 GID 以及文件权限信息。
版权声明:本文标题:Linux新手必学:stat和file命令帮你查看文件属性 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1773205706a3276852.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论