1887
Comment:
|
1887
|
No differences found! |
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)
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.)