stat

stat is a fantastic utility that gives to shell users what C programmers have had access to since Unix began. The stat(2) system call calls the appropriate filesystem driver within the operating system’s kernel and asks for the details stored in the file’s inode. The stat(1) command exposes this kernel call to userspace. This gives the shell programmer lots of useful information about a file, which would otherwise have to be extracted from the output of programs such as ls. stat, instead, gives the whole inode in a form in which you can query any aspect of the inode directly.

stat /etc/nsswitch.conf
  File: '/etc/nsswitch.conf'
  Size: 513             Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d      Inode: 639428      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2011-03-30 19:35:48.000000000 +0100
Modify: 2010-06-05 19:52:18.000000000 +0100
Change: 2010-06-05 19:52:18.000000000 +0100

While this is quite interesting, and it would be possible to parse out the relevant details from this, stat takes a lot of format switches, which restrict its output to exactly the information you are looking for. This means that you can create your own super-ls, which reports on anything you like, in any way you like.

stat -c "%a %U %G %n" /etc/nsswitch.conf
644 root root /etc/nsswitch.conf
$ stat -c "%n is owned by %U and has permissions %a (%A)" /etc/nsswitch.conf /etc/nsswitch.conf is owned by root and has permissions 644 (-rw-r--r--) ...

Get Shell Scripting: Expert Recipes for Linux, Bash, and More now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.