linux stat函数讲解
linuxstat命令详解

linux stat命令详解linux stat命令是linux下的一个命令,那么它的基本用法是怎样的呢?下面由店铺为大家整理了linux stat命令命令的相关知识,希望对大家有帮助。
linux stat命令功能说明显示inode内容。
linux stat命令语法stat [文件或目录]补充说明stat以文字的格式来显示inode的内容。
ls 命令及其许多参数提供了一些非常有用的文件信息。
另一个不太为人所熟知的命令 stat 提供了一些更为有用的信息。
下面演示了如何对可执行文件“oracle”(位于$ORACLE_HOME/bin 目录下)使用此命令。
# cd $ORACLE_HOME/bin# stat oracleFile: `oracle'Size: 93300148 Blocks:182424 IO Block:4096 Regular FileDevice: 343h/835d Inode: 12009652 Links: 1Access: (6751/-rwsr-s--x) Uid:( 500/ oracle) Gid:( 500/ dba) Access: 2006-08-04 04:30:52.000000000 -0400Modify: 2005-11-02 11:49:47.000000000 -0500Change: 2005-11-02 11:55:24.000000000 -0500注意使用该命令获得的信息:除了通常的文件大小(也可以使用ls -l 命令获得)以外,您还获得了该文件占用的块数。
通常的 Linux 块大小为512 字节,因此一个大小为93,300,148 字节的文件将占用(93300148/512=) 182226.85 个块。
由于块都是完整占用,因此该文件使用了一些整数个数的块。
无需猜测就可以获得确切的块数。
您还可以从以上输出中获得文件所有权的 GID 和 UID,以及权限的八进制表示形式(6751)。
linux stat替换方法

linux stat替换方法Linux stat命令是一个用于查看文件或文件系统状态的命令。
它提供了关于文件的详细信息,如文件类型、权限、大小、时间戳等。
但在某些情况下,可能需要使用替代方法来获取文件的状态。
下面我们将介绍一些可以替代Linux stat命令的方法。
方法一:使用ls命令ls命令是Linux上一个非常常用的命令,它可以列出目录中的文件和子目录。
通过使用ls命令的不同参数,可以获取文件的详细信息,如权限、所有者、组等。
使用ls命令查看文件的详细信息的格式如下:```ls -l文件名```该命令将显示文件名、权限、所有者、组、文件大小、修改时间等信息。
方法二:使用file命令file命令可以用来查看文件的类型,它能够识别不同类型的文件,如文本文件、二进制文件、可执行文件等。
使用file命令查看文件类型的格式如下:```file文件名```该命令将显示文件类型以及其他相关信息。
方法三:使用du命令du命令用于估算文件或目录的磁盘使用情况。
通过使用不同的参数,可以获取文件或目录的大小。
使用du命令查看文件大小的格式如下:```du -h文件名```该命令将以人类可读的方式显示文件大小。
方法四:使用lsattr命令lsattr命令用于列出文件的扩展属性。
通过使用该命令,可以获取文件的属性信息,如是否可读、是否可写等。
使用lsattr命令查看文件属性的格式如下:```lsattr文件名```该命令将显示文件的属性信息。
方法五:使用find命令find命令用于在文件系统中搜索文件和目录。
通过使用find命令的不同参数,可以获取文件的详细信息,如文件类型、权限、所有者、组等。
使用find命令查看文件详细信息的格式如下:```find文件名-type f -exec ls -l {} \;```该命令将显示文件名、权限、所有者、组、文件大小、修改时间等信息。
除了上述方法,还可以使用其他一些类似的命令和工具来获取文件的状态信息,如grep、sed、awk等。
【linux】ps命令输出结果中STAT段的含义

【linux】ps命令输出结果中STAT段的含义一般R表示正在运行,S表示休眠,但还有如Ss,S+等是什么意思呢?其实man帮助中已经给出解释了!在新系统上,如我的ubuntu 12.04可以通过如下命令查看结果:man ps|grep -A 20 'output specifiersrebi@freedom:~$ man ps|grep -A20 "output specifiers"Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:D uninterruptible sleep (usually IO)R running or runnable (on run queue)S interruptible sleep (waiting for an event to complete) T stopped, either by a job control signal or because it is being traced.W paging (not valid since the 2.6.xx kernel)X dead (should never be seen)Z defunct ("zombie") process, terminated but not reaped by its parent.For BSD formats and when the stat keyword is used, additional characters may be displayed:< high-priority (not nice to other users)N low-priority (nice to other users)L has pages locked into memory (for real-time and custom IO)s is a session leaderl is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ is in the foreground process group.OBSOLETE SORT KEYSThese keys are used by the BSD O option (when it is used for sorting). The GNU --sort option doesn't use these keys, but the specifiers described below in the STANDARD FORMAT SPECIFIERS section. Note that the values used rebi@freedom:~$。
Linux中stat函数和stat命令使用详解

Linux中stat函数和stat命令使⽤详解stat函数和stat命令linux⽂件⾥的【inode = index node】解释:要理解inode必须了解磁盘和【⽬录项】,inode实际是连接【⽬录项】和磁盘的中间物质。
图⾥的⼤圈代表硬件的磁盘,⾥⾯的⼩圈代表某个⽂件存储在磁盘上了。
【inode = index node】的node(承载node信息的结构体是:stat,stat的定义在后⾯)⾥⾯有:1. ⽂件⼤⼩2. ⽂件的最后修改时间3. ⽂件的所属⽤户4. ⽂件的权限5. 硬链接计数(ls -l 显⽰出来的数字)6. 块位置:指定⽂件存储在磁盘的具体位置。
下图中的hello是个普通⽂件,hello.hard是hello的硬链接⽂件夹⾥放的就是每个⽂件的【⽬录项】如下图,【⽬录项】⾥有:1. ⽂件名2. 该⽬录项的⼤⼩3. ⽂件的类型4. inode如何查看⽂件的【inode】呢?使⽤【-i】选项ls -li ⽂件名执⾏结果:ys@ys-VirtualBox:~/lianxi1$ ls -li hello hello.hard3801352 -rw-rw-r-- 2 ys ys 0 4⽉ 24 11:01 hello3801352 -rw-rw-r-- 2 ys ys 0 4⽉ 24 11:01 hello.hard发现hello和hello.hard的inode(3801352)是相同的,也就说明了,只在磁盘上存了⼀份。
如何查看⽬录项呢?⽤emacs或者vim打开⽬录(lianxi1),截图如下。
但是看不到⽂件的【inode】。
1,stat函数:取得指定⽂件的⽂件属性,⽂件属性存储在结构体stat⾥。
#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);int fstat(int fd, struct stat *statbuf);int lstat(const char *pathname, struct stat *statbuf);struct stat 结构体:struct stat {dev_t st_dev; /* ID of device containing file */ino_t st_ino; /* Inode number */mode_t st_mode; /* File type and mode */nlink_t st_nlink; /* Number of hard links */uid_t st_uid; /* User ID of owner */gid_t st_gid; /* Group ID of owner */dev_t st_rdev; /* Device ID (if special file) */off_t st_size; /* Total size, in bytes */blksize_t st_blksize; /* Block size for filesystem I/O */blkcnt_t st_blocks; /* Number of 512B blocks allocated *//* Since Linux 2.6, the kernel supports nanosecondprecision for the following timestamp fields.For the details before Linux 2.6, see NOTES. */struct timespec st_atim; /* Time of last access */struct timespec st_mtim; /* Time of last modification */struct timespec st_ctim; /* Time of last status change */#define st_atime st__sec /* Backward compatibility */#define st_mtime st__sec#define st_ctime st__sec};st_dev:设备ID,不太常⽤st_ino:【inode】,【inode】是啥?不知道就看上⾯关于【inode】的解释st_mode:⽂件的类型和权限,共16位,如下图。
Linux stat函数讲解

连接文件
三个函数的返回:若成功则为0,若出错则为-1
给定一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
dev_t st_rdev; /*device number for special files*/
nlink_t st_nlink; /*number of links*/
uid_t st_uid; /*user id of owner*/
gid_t st_gid; /*group ID of owner*/
提供文件名字,获取文件对应属性。
int fstat(int filedes, struct stat *buf);
通过文件描述符获取文件对应的属性。
int lstat(const char *restrict pathname, struct stat *restrict buf);
连接文件描述命,获取文件属性。
S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
stat函数详解

STAT和STAT64函数详解stat函数讲解表头文件: #include <sys/stat.h>#include <unistd.h>定义函数: int stat(const char *file_name, struct stat *buf);函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值: 执行成功则返回0,失败返回-1,错误代码存于errno错误代码:ENOENT 参数file_name指定的文件不存在ENOTDIR 路径中的目录存在但却非真正的目录ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接EFAULT 参数buf为无效指针,指向无法存在的内存空间EACCESS 存取文件时被拒绝ENOMEM 核心内存不足ENAMETOOLONG 参数file_name的路径名称太长#include <sys/stat.h>#include <unistd.h>#include <stdio.h>int main() {struct stat buf;stat("/etc/hosts", &buf);printf("/etc/hosts file size = %d\n", buf.st_size);}-----------------------------------------------------struct stat {dev_t st_dev; //文件的设备编号ino_t st_ino; //节点mode_t st_mode; //文件的类型和存取的权限nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1uid_t st_uid; //用户IDgid_t st_gid; //组IDdev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号off_t st_size; //文件字节数(文件大小)unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)unsigned long st_blocks; //块数time_t st_atime; //最后一次访问时间time_t st_mtime; //最后一次修改时间time_t st_ctime; //最后一次改变时间(指属性)};先前所描述的st_mode 则定义了下列数种情况:S_IFMT 0170000 文件类型的位遮罩S_IFSOCK 0140000 scoketS_IFLNK 0120000 符号连接S_IFREG 0100000 一般文件S_IFBLK 0060000 区块装置S_IFDIR 0040000 目录S_IFCHR 0020000 字符装置S_IFIFO 0010000 先进先出S_ISUID 04000 文件的(set user-id on execution)位S_ISGID 02000 文件的(set group-id on execution)位S_ISVTX 01000 文件的sticky位S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限S_IRGRP 00040 用户组具可读取权限S_IWGRP 00020 用户组具可写入权限S_IXGRP 00010 用户组具可执行权限S_IROTH 00004 其他用户具可读取权限S_IWOTH 00002 其他用户具可写入权限S_IXOTH 00001 其他用户具可执行权限上述的文件类型在POSIX中定义了检查这些类型的宏定义:S_ISLNK (st_mode) 判断是否为符号连接S_ISREG (st_mode) 是否为一般文件S_ISDIR (st_mode) 是否为目录S_ISCHR (st_mode) 是否为字符装置文件S_ISBLK (s3e) 是否为先进先出S_ISSOCK (st_mode) 是否为socket若一目录具有sticky位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。
stat函数

stat函数⼀、stat 函数,获取⽂件元数据 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf);⼆、stat结构体字段详情如下:struct stat{dev_t st_dev; //设备号,⽂件所在磁盘位置。
⾼8位主,低8位次ino_t st_ino; //inode num ls -i 可查看i节点号mode_t st_mode;//⽂件的类型和存取的权限. (st_mode & S_IFMT)得到⽂件类型,(st_mode & 07777) 获取权限,并以8进制输出。
nlink_t st_nlink;//链向此⽂件的连接数(硬连接)uid_t st_uid; //⽂件所属⽤户gid_t st_gid; //⽂件所属组dev_t st_rdev;//设备号,针对设备⽂件off_t st_size;//⽂件⼤⼩,字节为单位blksize_t st_blksize;//系统块的⼤⼩blkcnt_t st_blocks;//⽂件所占块数time_t st_atime;//最近存取时间(访问时间)time_t st_mtime;//最近修改时间 ---实现ls中的时间time_t st_ctime;//最近状态改变时间}/**********************实现ls -l 功能1、第⼀栏:⽂件的属性2、第⼆栏:表⽰⽂件个数。
如果是⽂件的话,那个数是1;如果是⽬录,那数⽬就是该⽬录中的⽂件个数。
3、第三栏:该⽂件或⽬录的拥有者。
4、第四栏:表⽰所属的组(group)。
5、第五栏:表⽰⽂件⼤⼩。
⽂件⼤⼩⽤byte来表⽰。
6、第六栏:表⽰创建⽇期。
以“⽉,⽇,时间”的格式表⽰。
linux下遍历目录树方法总结

linux下遍历目录树方法总结linux下遍历目录树方法总结转自:/anxuegang/article/details/6443737前几天需要实现对整个目录树的遍历,查阅了相关的一些资料。
开始找到的原始的方法是使用readdir()与lstat()函数实现递归遍历,后来发现linux对于目录遍历这种最常用的操作已经提供了很完善的接口:ftw()与nftw()。
下面就这两种方法具体说明一下。
1、手动实现递归1.1 stat()函数族stat函数族包括:stat,fstat以及lstat函数,都是向用户返回文件的属性信息(元数据)。
#include <sys/stat.h>int stat(const char*pathname,struct stat*buf);int fstat(int filedes,struct stat*buf);int lstat(const char *pathname,struct stat*buf);三个函数的返回:若成功为0,出错为-1。
对一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。
lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。
第二个参数是个指针,它指向一个我们应提供的结构。
这些函数填写由buf指向的结构。
该结构的实际定义可能所实施而有所不同,但其基本形式是:struct stat{mode st_mode; /*文件类型和方式(许可数)*/ino st_ino;/* i-节点号(序列号)*/dev st_dev;/*设备号(文件系统)*/dev st_rdev;/*特殊文件的设备号*/nlink st_nlink;/*连接数*/uid st_uid;/*属主的用户ID*/gid st_gid;/*属主的组ID*/off st_size;/*普通文件的字节长度*/time st_atime;/*最后存取时间*/time st_mtime;/*最后修改存取时间*/time st_ctime;/*最后文件状态更改时间*/long st_blksize;/*最佳I/O块长*/long st_blocks;/*分配的512字节块块数};下面是一个简单的测试#include<unistd.h> #include<sys/stat.h>#include<stdio.h>intmain(int argc, char **argv){struct stat buf;if(stat(argv[1],&buf)) {printf("[stat]:error!/n");return -1;}printf("st_dev:%d/n",buf.st_dev);printf("st_ino:%d/n",buf.st_ino);printf("st_mode:%dS_ISDIR:%d/n",buf.st_mode,S_ISDIR(buf.st_mode)); printf("st_nlink:%d/n",buf.st_nlink);printf("st_uid:%d/n",buf.st_uid);printf("st_gid:%d/n",buf.st_gid);printf("st_rdev:%d/n",buf.st_rdev);printf("st_size:%d/n",buf.st_size);printf("st_blksize:%lu/n",buf.st_blksize);printf("st_blocks:%lu/n",buf.st_blocks);printf("st_atime:%ld/n",buf.st_atime);printf("st_mtime:%ld/n",buf.st_mtime);printf("st_ctime:%ld/n",buf.st_ctime);return 0;} 这里补充说明一下linux中文件的基本类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
stat函数讲解表头文件: #include <sys/stat.h>#include <unistd.h>定义函数: int stat(const char *file_name, struct stat *buf);函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值: 执行成功则返回0,失败返回-1,错误代码存于errno错误代码:ENOENT 参数file_name指定的文件不存在ENOTDIR 路径中的目录存在但却非真正的目录ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接EFAULT 参数buf为无效指针,指向无法存在的内存空间EACCESS 存取文件时被拒绝ENOMEM 核心内存不足ENAMETOOLONG 参数file_name的路径名称太长#include <sys/stat.h>#include <unistd.h>#include <stdio.h>int main() {struct stat buf;stat("/etc/hosts", &buf);printf("/etc/hosts file size = %d\n", buf.st_size);}-----------------------------------------------------struct stat {dev_t st_dev; //文件的设备编号ino_t st_ino; //节点mode_t st_mode; //文件的类型和存取的权限nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1uid_t st_uid; //用户IDgid_t st_gid; //组IDdev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号off_t st_size; //文件字节数(文件大小)unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)unsigned long st_blocks; //块数time_t st_atime; //最后一次访问时间time_t st_mtime; //最后一次修改时间time_t st_ctime; //最后一次改变时间(指属性)};先前所描述的st_mode 则定义了下列数种情况:S_IFMT 0170000 文件类型的位遮罩S_IFSOCK 0140000 scoketS_IFLNK 0120000 符号连接S_IFREG 0100000 一般文件S_IFBLK 0060000 区块装置S_IFDIR 0040000 目录S_IFCHR 0020000 字符装置S_IFIFO 0010000 先进先出S_ISUID 04000 文件的(set user-id on execution)位S_ISGID 02000 文件的(set group-id on execution)位S_ISVTX 01000 文件的sticky位S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限S_IX USR(S_IEX EC) 00100 文件所有者具可执行权限S_IRGRP 00040 用户组具可读取权限S_IWGRP 00020 用户组具可写入权限S_IX GRP 00010 用户组具可执行权限S_IROTH 00004 其他用户具可读取权限S_IWOTH 00002 其他用户具可写入权限S_IX OTH 00001 其他用户具可执行权限上述的文件类型在POSIX中定义了检查这些类型的宏定义:S_ISLNK (st_mode) 判断是否为符号连接S_ISREG (st_mode) 是否为一般文件S_ISDIR (st_mode) 是否为目录S_ISCHR (st_mode) 是否为字符装置文件S_ISBLK (s3e) 是否为先进先出S_ISSOCK (st_mode) 是否为socket若一目录具有sticky位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。
-----------------------------------------------------struct statfs {long f_type; //文件系统类型long f_bsize; //块大小long f_blocks; //块多少long f_bfree; //空闲的块long f_bavail; //可用块long f_files; //总文件节点long f_ffree; //空闲文件节点fsid_t f_fsid; //文件系统idlong f_namelen; //文件名的最大长度long f_spare[6]; //spare for later};stat、fstat和lstat函数(UNIX)#include<sys/types.h>#include<sys/stat.h>int stat(const char *restrict pathname, struct stat *restrict buf);提供文件名字,获取文件对应属性。
感觉一般是文件没有打开的时候这样操作。
int fstat(int filedes, struct stat *buf);通过文件描述符获取文件对应的属性。
文件打开后这样操作int lstat(const char *restrict pathname, struct stat *restrict buf);连接文件三个函数的返回:若成功则为0,若出错则为-1给定一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。
lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。
第二个参数是个指针,它指向一个我们应提供的结构。
这些函数填写由buf指向的结构。
该结构的实际定义可能随实现而有所不同,但其基本形式是:struct stat{mode_t st_mode; /*file tpye &mode (permissions)*/ino_t st_ino; /*i=node number (serial number)*/dev_t st_rdev; /*device number for special files*/nlink_t st_nlink; /*number of links*/uid_t st_uid; /*user id of owner*/gid_t st_gid; /*group ID of owner*/off_t st_size; /*size in bytes for regular files*/time_t st_atime; /*time of last access*/time_t st_mtime; /*time of last modification*/time_t st_ctime; /*time of last file status change*/long st_blksize; /*best I/O block size */long st_blocks; /*number of 512-byte blocks allocated*/};注意,除最后两个以外,其他各成员都为基本系统数据类型。
我们将说明此结构的每个成员以了解文件属性。
使用stat函数最多的可能是ls-l命令,用其可以获得有关一个文件的所有信息。
1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。
函数原型#include <sys/stat.h>int stat(const char *restrict pathname, struct stat *restrict buf);提供文件名字,获取文件对应属性。
int fstat(int filedes, struct stat *buf);通过文件描述符获取文件对应的属性。
int lstat(const char *restrict pathname, struct stat *restrict buf);连接文件描述命,获取文件属性。
2 文件对应的属性struct stat {mode_t st_mode; //文件对应的模式,文件,目录等ino_t st_ino; //inode节点号dev_t st_dev; //设备号码dev_t st_rdev; //特殊设备号码nlink_t st_nlink; //文件的连接数uid_t st_uid; //文件所有者gid_t st_gid; //文件所有者对应的组off_t st_size; //普通文件,对应的文件字节数time_t st_atime; //文件最后被访问的时间time_t st_mtime; //文件内容最后被修改的时间time_t st_ctime; //文件状态改变时间blksize_t st_blksize; //文件内容对应的块大小blkcnt_t st_blocks; //伟建内容对应的块数量};可以通过上面提供的函数,返回一个结构体,保存着文件的信息。