A common problem for beginners working with Ubuntu or Linux Mint is the files/folders permissions. How to get the correct information and how to convert from one representation to another. One of the most popular tables is:
# | Permission | rwx | Binary |
---|---|---|---|
7 | read, write and execute | rwx | 111 |
6 | read and write | rw- | 110 |
5 | read and execute | r-x | 101 |
4 | read only | r-- | 100 |
3 | write and execute | -wx | 011 |
2 | write only | -w- | 010 |
1 | execute only | --x | 001 |
0 | none | --- | 000 |
The problem is that in the most articles you can see explanation like:
You also have the option to set the file permissions if you would like to change the defaults—by default, directories are 755 and files are 644.
On the other hand when you are using the Linux commands like:
ls -s
The result would be:
total 64
drwxr-xr-x 2 user user 4096 Jan 28 16:48 Desktop
drwxr-xr-x 10 user user 4096 Jan 28 11:11 Documents
Which is not always clear for the beginners and they need to do some extra effort in order to convert from:
drwxr-xr-x
to
755
So is there a way instead of getting drwxr-xr-x to get the number represenation of the permissions. Yes there is a way by using a command like:
stat -c "%a %n" *
which will result in:
755 Desktop
755 Documents
Example usage for a file or folder:
stat -c "%a %n" ./Documents/mytext.txt
result:
744 ./Documents/mytext.txt
folders:
stat -c "%a %n" ./Desktop/
result:
755 ./Desktop/
Another option which can used is the gnu command find. This command is useful when you are searching for something and would like to find the permissions in octal representation:
find ~ -maxdepth 1 -type d -printf "%m:%f\n"
result:
775:Documents
755:Desktop
Explanation:
- ~ - find in the home folder (or use . for the current folder)
- -maxdepth 1 - go only 1 level of depth
- -type d - search for folders ( -type f - for files )
- -printf "%m:%f\n" - print the output in number represented way with the folder name
The same command split on new lines for the parameters:
find ~ \
-maxdepth 1 \
-type d \
-printf "%m:%f\n"
Note: The equivalent for Mac is:
stat -f '%A %a %N' *