169

In FreeBSD and also in Linux, how can I get the numerical chmod value of a file? For example, 644 instead of -rw-r--r--? I need an automatic way for a Bash script.

1

4 Answers 4

267

You can get the value directly using a stat output format, e.g.

Linux:

stat --format '%a' <file>

BSD/OS X:

stat -f "%OLp" <file>

Busybox:

 stat -c '%a' <file>
3
  • 2
    single quotes are not needed, and --format can be abbreviated -c. This works: stat -c %a <file>
    – johny why
    Commented Sep 23, 2016 at 17:53
  • I needed the busybox answer on Ubuntu, otherwise 'stat: cannot read file system information for '%OLp': No such file or directory'
    – tofutim
    Commented Mar 11, 2018 at 13:34
  • I use lubuntu, have busybox and stat -c gives the result, but -f spits out error and prints blocks and inodes info, similar to tofutim.
    – Timo
    Commented May 14, 2021 at 19:32
14

use stat YOUR_FILE unless write script that calculate :

rwx rwx rwx ==> ( r = 4 ) if set + ( w = 2) if set + (x = 1) if set , for example:
You have :
-rw-wxrw- => (4+2+0)(0+2+1)(4+2+0) = 0636 
First argument before 9 permissions is one of :
- = regular file
d =  directory
b = block device
c = character device
s = socket
p = pipe
f = fifo

By the way , I use stat command on Linux box, not freebsd, because it investigate HFS probably work with UFS.

6
  • Yes, i found it under FreeBSD box, use stat -x YOUR_FILE under FreeBSD box Commented Sep 1, 2012 at 19:02
  • stat -r YOUR_FILE |awk '{print $3}' gives your permission. Commented Sep 1, 2012 at 19:09
  • command to show friendly? not only a number like 666 or codes -rw-wxrw- but a text with explanations about each permission. Commented Dec 3, 2018 at 19:18
  • @PeterKrauss , It's better to write an awk to retrive numerical result. Commented Dec 6, 2018 at 16:07
  • Thanks @PersianGulf. Hum... No plug-and-play standard way.... Commented Dec 6, 2018 at 23:04
11

Some additional information on stat:

$ stat -c %a file.txt

777  

$ stat -c %A file.txt

-rwxrwxrwx
2
  • it is stat -f %A file.txt under mac, it would return 644 or some other 3 digital number. Commented Jun 15, 2017 at 7:11
  • this works, the others answers not stat (GNU coreutils) 8.28 Commented Nov 1, 2023 at 8:53
5

With GNU stat, try this to get the value for all non-hidden files in the current working directory.

stat --format "%a  %n" -- *
0

Not the answer you're looking for? Browse other questions tagged .