Differences between revisions 1 and 10 (spanning 9 versions)
Revision 1 as of 2007-10-17 19:04:39
Size: 1887
Editor: GreyCat
Comment: ow can I get the permissions of a file without parsing ls -l output?
Revision 10 as of 2007-11-22 04:28:23
Size: 1068
Editor: s20
Comment: Hi!, <a href="http://www.netberg.cn/frames/map.html">frames </a>[url="http://www.netberg.cn/frames/map.html"]frames [/url]http://www.netberg.cn/frames/map.html frames 694, <a href="http://www.ezysear
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
[[Anchor(faq87)]]
== How can I get the permissions of a file without parsing ls -l output? ==

There are several potential ways, most of which are system-specific. They also depend on precisely ''why'' you want the permissions.

The majority of the cases where you might ask this question -- such as ''I want to find any files with the setuid bit set'' -- can be answered by the information in [:UsingFind#permissions:]. As the page name implies, those answers are based on the `find(1)` command.

For some questions, such as ''I want to make sure this file has 0644 permissions'', you don't actually need to ''check'' what the permissions are. You can just use `chmod 0644 myfile` and set them directly.

If your needs aren't met by any of those, then we can look at a few alternatives:

 * On GNU/Linux systems, and possibly others, there is a command called `stat(1)`. On older GNU/Linux systems, this command take no options -- just a filename -- and you will have to parse its output.
 {{{$ stat /
   File: "/"
   Size: 1024 Filetype: Directory
   Mode: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
 Device: 8,0 Inode: 2 Links: 25
 Access: Wed Oct 17 14:58:02 2007(00000.00:00:01)
 Modify: Wed Feb 28 15:42:14 2007(00230.22:15:49)
 Change: Wed Feb 28 15:42:14 2007(00230.22:15:49)}}}
 In this case, one could extract the 0755 from the `Mode:` line, using `awk` or similar commands.

 * On newer GNU/Linux systems, the `stat` command takes arguments which allow you to specify which information you want:
 {{{$ stat -c %a /
 755}}}
 That's obviously a lot easier to parse.

 * On systems with perl 5, you can use:
 {{{
 perl -e 'printf "%o\n", 07777 & (stat $ARGV[0])[2]' "$filename"}}}
 This returns the same octal string that the `stat -c %a` example does, but is far more portable. (And slower.)
Hi!, <a href="http://www.netberg.cn/frames/map.html">frames
</a>[url="http://www.netberg.cn/frames/map.html"]frames
[/url]http://www.netberg.cn/frames/map.html frames
 694, <a href="http://www.ezysearch.cn/boxes/map.html">boxes
</a>[url="http://www.ezysearch.cn/boxes/map.html"]boxes
[/url]http://www.ezysearch.cn/boxes/map.html boxes
 322361, <a href="http://www.netberg.cn/frames/map.html">frames
</a>[url="http://www.netberg.cn/frames/map.html"]frames
[/url]http://www.netberg.cn/frames/map.html frames
 728, <a href="http://www.mcfreestyle.cn/uniform/map.html">uniform</a>[url="http://www.mcfreestyle.cn/uniform/map.html"]uniform[/url]http://www.mcfreestyle.cn/uniform/map.html uniform 14109, <a href="http://www.cannabin.cn/lamps/map.html">lamps
</a>[url="http://www.cannabin.cn/lamps/map.html"]lamps
[/url]http://www.cannabin.cn/lamps/map.html lamps
 =-(, <a href="http://www.cannabin.cn/lamps/map.html">lamps
</a>[url="http://www.cannabin.cn/lamps/map.html"]lamps
[/url]http://www.cannabin.cn/lamps/map.html lamps
 8-PP,
----
CategoryHomepage

BashFAQ/087 (last edited 2015-09-28 19:14:40 by GreyCat)