How To Find Files Based On Their Permissions In Linux

Linux, with its intricate and multifaceted file system, offers users a vast array of commands and utilities to manage and navigate files and directories. Among these utilities, the find command stands out as an indispensable tool, especially when it comes to locating files based on their permissions. This guide aims to provide an in-depth exploration of using the find command to its fullest potential in this context.

Understanding Linux File Permissions

Before we delve into the practical aspects of the find command, it’s crucial to lay a solid foundation by understanding the Linux file permissions system. This system, though seemingly complex at first glance, follows a logical structure that, once understood, can be manipulated with precision.

File Permission Basics

Every file and directory in a Linux system has an associated set of permissions. These permissions dictate who can read, write, or execute a file. They are represented by a three-character string, such as rwx, where:

  • r stands for Read permission: It allows a user to view the contents of a file.
  • w stands for Write permission: It grants a user the ability to modify or delete a file.
  • x stands for Execute permission: It permits a user to run a file, essential for script and program files.

These permissions are not just blanket permissions for everyone. Instead, they are categorized for three distinct sets of users:

  • User: This refers to the owner of the file or directory. A user is typically the one who created the file.
  • Group: Files can belong to a group. Members of this group might have different permissions than the owner.
  • Others: This category encompasses everyone else who is not the owner or part of the group.

For instance, when you see a permission set like rwxr-xr--, it can be interpreted as:

  • The User (owner) can read, write, and execute the file.
  • The Group members can read and execute, but not write.
  • Others can only read the file.

Numeric Representation of Permissions

While the symbolic representation (like rwx) is more human-readable, Linux also uses a numeric system to denote permissions. This system is particularly useful when changing permissions using commands like chmod. Here’s how the numeric system works:

  • r is represented by the number 4.
  • w is represented by the number 2.
  • x is represented by the number 1.

By adding these numbers together based on the permissions a file has, you get a three-digit number. For example:

  • rwx translates to 7 (because 4 + 2 + 1 = 7).
  • r-x becomes 5 (4 + 0 + 1 = 5).
  • rw- is 6 (4 + 2 + 0 = 6).

Thus, when you see a file with 755 permissions, it means the owner has rwx permissions, while the group and others have r-x permissions.

Basics of the find Command

The find command is a powerful utility in the Linux arsenal, designed to search for files within a directory hierarchy based on various criteria. Its basic structure is:

find [path] [expression]

For instance, if you wish to locate all files in the /home/username directory, the command would be:

find /home

This would list all files and directories within that path. But the true power of find lies in its ability to filter results based on expressions, such as permissions.

Finding Files Based on Permissions

Locating Files with Specific Permissions

Imagine you need to identify files with the exact permission 755 in the /home/username directory. This is how you’d do it:

find /home -type f -perm 755

Upon executing, the terminal might display something like:


Here, the -type f flag specifies that we’re looking for files (not directories). The -perm 755 expression ensures we’re filtering results based on the desired permissions.

Searching for Files with Minimum Permissions

Sometimes, you might be interested in files that have, at the very least, certain permissions. For instance, files that are readable, writable, and executable by the owner can be found using:

find /home/username -type f -perm -700

Executing this might yield:


The -perm -700 expression ensures that the owner has, at a minimum, read, write, and execute permissions.

Identifying Files Lacking Certain Permissions

On the flip side, you might want to pinpoint files that lack specific permissions. For instance, to find files that aren’t readable, writable, and executable by the owner:

find /home/username -type f ! -perm -700

This could produce an output like:


The ! symbol negates the permission, ensuring the command fetches files without the specified permissions.

Advanced ‘find’ Techniques

Combining Multiple Criteria

The find command’s versatility allows users to combine multiple criteria using logical operators. For instance, to locate files in /home/username with the permission 755 and modified today:

find /home/username -type f -perm 755 -mtime 0

This command fetches files with 755 permissions and those modified within the last 24 hours.

Restricting Search Depth

In scenarios where you want to limit the depth of your search, say, to two subdirectories, you can use the -maxdepth option:

find /home/username -type f -perm 755 -maxdepth 2

This ensures the search doesn’t traverse beyond two subdirectories, making the search faster and more focused.

Detailed Output with ls

For those who prefer a more detailed view of the found files, the find command can be integrated with ls:

find /home/username -type f -perm 755 -exec ls -l {} \;

This provides a detailed listing, showcasing permissions, ownership, size, and modification date.

Wrap-Up and Takeaways

The Linux file system, with its intricate permissions structure, offers a granular level of control over files and directories. By mastering the find command and understanding file permissions, users can navigate, manage, and secure their files with precision and ease. Whether you’re a seasoned system administrator or a Linux enthusiast, the knowledge and skills imparted in this guide can serve as invaluable tools in your Linux journey.

Share to...