====== BASH - Find - Find Files Based On their Permissions ======
The typical syntax to find files based on their permissions is:
find -perm mode
**NOTE:** The **MODE** can be either with numeric or octal permission (like 777, 666.. etc) or symbolic permission (like u=x, a=r+x).
The MODE can be specified in three different ways:
* If we specify the mode without any prefixes, it will find files of exact permissions.
* If we use **“-“** prefix with mode, at least the files should have the given permission, not the exact permission.
* If we use **“/”** prefix, either the owner, the group, or other should have permission to the file.
----
===== Find files based on numeric permissions =====
Find Files Based On their Numeric (octal) Permissions
Now let me run the following command:
find -perm 777
**NOTE:** This command will find the files with permission of exactly 777 in the current directory.
----
===== Using "-" prefix =====
find -perm -766
**NOTE:** This will find all files where the file owner has read/write/execute permissions, file group members have read/write permissions and everything else has also read/write permission.
* Yes, it will display files which do have 766 permissions.
* But this may also display some files which do not have exact 766 permissions.
* This could include files with tighter permissions too.
----
===== Using "/" prefix =====
find -perm /222
**NOTE:** This will find files which are writable by somebody (either their owner, or their group, or anybody else).
find -perm /220
**NOTE:** This will find files which are writable by either their owner or their group.
* That means the files do not have to be writable by both the owner and group to be matched; either will do.
But if you run the same command with **“-”** prefix, you will only see the files only which are writable by both owner and group.
find -perm -220
----
===== Find Files Based On their Permissions using symbolic notation =====
Symbolic notations is used such as u (for user), g (group), o (others).
**NOTE:**
* The letter **a** can be used to represent all three of these categories.
* The permissions can be specified using letters r (read), w (write), x (executable).
----
==== To find any file with group write permissions ====
find -perm -g=w
**NOTE:** You can use either **“=”** or **“+”** for symbolic notation.
* It does not matter.
For example, the following two commands will do the same thing.
find -perm -g=w
find -perm -g+w
----
==== Find any file which are writable by the file owner ====
find -perm -u=w
----
==== Find any file which are writable by all (the file owner, group and everyone else) ====
find -perm -a=w
----
==== Find files which are writable by both their owner and their group ====
find -perm -g+w,u+w
**NOTE:** The above command is equivalent of **find -perm -220** command.
----
==== Find files which are writable by either their owner or their group ====
find -perm /u+w,g+w
or,
find -perm /u=w,g=w
**NOTE:** These two commands do the same job as the **find -perm /220** command.
----
===== Help =====
For more details, refer the man pages.
man find