Skip to main content

Commands

Using Stat Command in Ubuntu

The stat command in Ubuntu gives you the 'statistics' of a file that includes timestamps, permissions, and inodes among other things.

The stat command gives detailed information about your files and directories it includes information about file size, permissions, timestamps, and a lot more.

In this tutorial, I will walk you through different examples of how you can use the stat command in Ubuntu.

So, let's start with the basics (I mean the syntax).

How to use the stat command in Ubuntu

To use any command, you have to learn its syntax first. Otherwise, it will give you multiple errors just based on the system and no one wants a headache for syntax. Right?

So here's the simple syntax of the stat command:

stat [options] filename

Here,

  • Using options, you can get tune the default output as per your needs
  • filename is where you will append the filename of which you want the data

And if you execute the stat command without any options, it will get you the following output:

stat filename
Use stat command without options in Ubuntu

But you may be wondering, what is the meaning of each data field?

Let me break it down for you.

  • File: Indicates filename which may differ if your target was a symbolic link as it will follow the original file by default.
  • Size: Filesize in bytes.
  • Blocks: The total number of blocks used to store that file on the disk drive.
  • IO Block: Size of each block in bytes.
  • File type: Type of the target file. For me, it is a regular file but it can be special files, directories, or symbolic links.
  • Device: Shows device number in hexadecimal form.
  • Inode: Indicates the inode number of the file.
  • Links: Number of hard links associated with the file.
  • Access: Shows file permissions.
  • Uid: The user ID of the file owner.
  • Gid: The group ID of the file owner.
  • Access: Timestamp when the file was accessed last time.
  • Modify: When the file was modified last time.
  • Change: When the metadata of the file was changed.
  • Birth: Timestamp when the file was created/downloaded.

And as you can see, it is a lot of information and you may not want to have it every time you use the stat command.

There's where the options comes to play letting you decide what additional information you want or what specific information you want to have.

Personally, I use the stat command to follow symbolic links.

And to do that, all you have to do is append the symbolic filename to the stat command as shown here:

stat Symbolic_Link
Follow symbolic links using the stat command

But what if you want to remove the additional information? You use the -c%N option with the stat command:

stat -c%N Symbolic_link 
Use stat command to follow the symbolic link without any additional information

2. Check the status of the filesystem

If you want to check the status of the filesystem, the stat command will do that for you which can easily be done using the -f flag:

stat -f /path/to/filesystem
Check the status of filesystem using the stat command

And as you can see, it gave me information including free space, filesystem type, ID, and more.

3. Use multiple files with the stat command

To use multiple files with the stat command, all you have to do is append their filenames separated with space as shown:

stat File1 File2
Use multiple files with the stat command

4. Print output in the TERSE format

TERSE is a lossless IBM archive format and the good news is you can use the stat command to print output in the TERSE format.

For that, you have to use the -t flag as shown:

stat -t Filename
Get output in TERSE format using the stat command

5. Get specific information

As you saw, the stat command prints tonnes of information and most of which is not important for casual users.

But the good thing is you can customize what you exactly want.

For that, you'd have to use the --printf flag as shown here:

stat --printf='format_sequence:\n ' Filename

Here, you will have to replace the format_sequence with the respective sequence format.

And if you're curious why I used the \n, then there's a simple reason. It prints data in a new line.

Now, let's take a look at various examples of using format sequences.

To print the inode number, you'll have to use the %i as format sequence:

stat --printf='Inode Number: %i\n' Filename
Print inode number only with the stat command

Display access time (%x)

To print the access time, you have to use %x as format sequence:

stat --printf='Access Time: %x\n' Filename
Print access time using the stat command

Combine multiple format sequences at once

If you want, you can also use multiple-format sequences without any additional flags. But I would recommend adding space and text to make info human-readable.

For example, here, I combined two data sequences to get the inode number and access time:

stat --printf='Inode Number: %i\nAccess Time: %x\n' Chrome.deb
Use multiple format sequences in stat command

To learn more about format sequences, I would recommend checking out the help page of the stat command:

stat --help
stat data sequence list

Learn more about timestamps in Linux

If you're new to Linux, timestamps may confuse you and to cater to this situation, we made a detailed guide with respect to the stat output:

File Timestamps in Linux: atime, mtime, ctime Explained
Let’s see what are the various kinds of file timestamps in Linux, how to see the timestamps for a file and how to change the timestamps.

I hope you will no longer find using the stat command a complex task.