In the Linux Operating System, you cannot execute any command without proper permission. Every file and directory has some permission or privilege (read, write, or execute) associated with them. If you are not authorized to access the file or directory, executing any command on that will result in a "permission denied" error in Linux. This prevalent problem can only be resolved by getting the proper access to that file and directory. In this article, we will help you with how to fix the permission denied errors in Linux and what type of error this is.
Quick Answer: Diagnose Permission Denied in Linux
If you're seeing a Linux permission denied error, don't start by throwing chmod 777 at it. Most of the time, the fix is simpler — and safer — once you know whether the problem is the current user, the file mode, the ownership, the parent directory, or a security policy like noexec or SELinux.
Step 1: Check the current user
First, confirm who you are and which groups you belong to. You'd be surprised how often the wrong shell session or an unprivileged user is the whole issue.
whoami
id
If the file is owned by root or another account and your user isn't in the right group, Linux will block the action even if the file looks fine at a glance.
Step 2: Inspect file or directory permissions
Next, check the mode bits. For a file, use ls -l. For a directory, use ls -ld.
ls -l file.txt
ls -ld mydir
If your script won't run, look for the execute permission. If cat fails, check read permission. If cd fails, inspect the directory execute bit — that's the one people miss constantly.
Step 3: Check ownership and parent directory access
Then inspect ownership and the path above the file. A file can have usable permissions and still be inaccessible because a parent directory blocks traversal.
stat file.txt
ls -ld .
ls -ld /path/to/parent
Quick Troubleshooting Checklist
- Re-run the exact command and read the full error.
- Check user identity with
whoamiandid. - Check file or directory permissions with
ls -lorls -ld. - Check ownership with
stat. - Check parent directory permissions.
- If all that looks right, inspect mount options, ACLs, and SELinux/AppArmor.
Jump to your error if you already know the symptom:
- script won't run — see the ./script.sh: Permission denied section
- cannot create file — see touch and directory write permissions
- cannot remove file — check directory write permission and sticky bit
- cannot open directory — check the directory execute bit
- cd permission denied — inspect parent and target directory traversal permissions
What is Linux Permission Denied Error?
This type of error will occur whenever you run a command for which you do not have the execute permission. Similarly, you cannot perform read or write actions if you do not have read or write permission for any file or directory. These Linux permissions are the primary reason behind the security of Linux, as they will help in protecting the data from unauthorized access.
Understanding Linux File Permissions
- Read (r): Allows users to view the content of a file or list files in a directory.
- Write (w): Enables users to modify file contents or create/delete files within a directory.
- Execute (x): Allows running executable files (scripts, binaries) or traversing into a directory.
These permissions are set for three categories of users:
- Owner (u): The user who owns the file or directory.
- Group (g): A specific group of users to which the file or directory belongs.
- Others (o): All other users who are not the owner or part of the group.
In addition to these basic permissions, Linux also supports advanced features like setuid, setgid, and the sticky bit, which influence how permissions work for certain files and directories.
How to Check Permissions
To check your privileges for a specific file or folder, use:
ls -la
ls command displays the long listing of all files and folders along with their permissions, as shown below.

In the example below, we have created a shell script "hello.sh" without the execute permission. On executing "hello.sh", you will get a permission denied linux error.

You can also use stat for more detail including ownership and timestamps, whoami to confirm your current user, and id when group access matters.
stat hello.sh
whoami
id
Common Causes of Permission Denied in Linux
Most Linux permission denied problems fall into a few clear categories. Understanding these helps you quickly identify the root cause.
1. Missing execute permission on a script
Symptom: ./script.sh: Permission denied. The script file lacks the execute permission. Verify with ls -l script.sh and fix with chmod +x script.sh or run it through the interpreter with bash script.sh.
2. Wrong owner or group
Symptom: you can see the file, but you can't edit or delete it. Common with root-owned files under /etc, shared project folders, or files created by another service account. Fix with chown or chgrp rather than just chmod.
3. No access to the parent directory
Symptom: cannot open directory '.': permission denied, cd permission denied, or file access that fails even though the file itself has good permissions. If the parent directory lacks execute permission for your user or group, you can't traverse into it.
4. Commands that need sudo privileges
Symptom: editing files in /etc, accessing /root, installing software packages, or modifying system configuration files fails. These tasks require elevated access through sudo or root login.
5. Software Installation and System Configuration
When attempting to install or update software packages using apt, yum, or dnf, you may encounter "Permission Denied" errors if you lack the necessary privileges. Similarly, modifying system configuration files in /etc typically requires root or sudo access.
6. Filesystem mounted as read-only or noexec
Symptom: write operations fail even with correct permissions, or scripts refuse to execute despite chmod +x. Verify with mount. A read-only mount blocks writes; a noexec mount blocks direct execution.
7. SELinux or AppArmor restrictions
Symptom: everything looks correct in ls -l, but access is still denied. SELinux context mismatches and AppArmor policies can override standard Unix permissions — especially common on CentOS, RHEL, AlmaLinux, and Rocky servers.
8. Network and Shared Directory Access
In networked environments, accessing shared directories or files on remote servers (via NFS or Samba) may result in "Permission Denied" errors if proper access permissions aren't granted on the remote system.
How to Fix Permission Denied: chmod, chown, and chgrp
To solve permission errors, you need to add the correct permissions. However, you need to be a "root" user or have sudo access to change permissions. Linux offers the chmod command (change mod) for modifying permissions, chown for changing ownership, and chgrp for changing group.
Using chmod: Symbolic and Octal Representation
The chmod command uses this syntax:
chmod flags permissions filename
- Flags: Additional options like
-Rfor recursive changes. - Permissions: Can be in symbolic form (r, w, x) or octal numbers (0-7).
- Filename: The file or directory whose permissions you want to change.
Symbolic Representation
chmod u=rwx,g=r,o=r file
Where:
- u=rwx — Owner gets read, write, and execute permissions.
- g=r — Group members get read-only access.
- o=r — All other users get read-only access.
Octal Representation
chmod 744 file
Where:
- 7 (owner) = 4(read) + 2(write) + 1(execute) — full access.
- 4 (group) = read-only.
- 4 (others) = read-only.
Common chmod examples:
chmod u+x hello.sh # Add execute for owner
chmod 744 hello.sh # Owner full, group/others read-only
chmod g+w notes.txt # Add write for group
Changing File Owner with chown
If you don't own the file, permission changes may fail or not solve the actual problem. This is common after copying files with sudo, extracting archives as root, or editing files from the wrong account.
ls -l file.txt
sudo chown username:username file.txt
Changing Group Access with chgrp
Useful on team systems where several users share files through a common group.
sudo chgrp developers file.txt
chmod g+rw file.txt
Step-by-Step: Fixing Script Permission Denied
Now let's walk through a real example. Below, we have the error:

Giving the appropriate permission to the user will solve the problem. Execute the below command to provide execute permission:
chmod +x hello.sh

Now we can see the change in permission — the execute bit has been added. Let's run the script:
./hello.sh

After executing "hello.sh", we get the output "hello." Changing permission has solved the problem.
Alternative: Run the script with bash
If direct execution fails but the script itself is valid, run it through Bash:
bash script.sh
This bypasses the need for the file itself to be executable. If you're new to scripting, here are good basics on how to run shell scripts in Linux.
Check the shebang and line endings
If chmod +x doesn't help, inspect the first line and the file format:
head -n 1 script.sh
file script.sh
Make sure the shebang points to a valid interpreter, like #!/bin/bash. Also watch for Windows CRLF line endings — use dos2unix to convert them if needed.
Fixing Permission Denied by Command Type
Here's how to troubleshoot the most common error messages quickly.
touch: cannot touch ... Permission denied
You don't have write permission on the destination directory. Check the current directory permissions, not the file you're trying to create — because it doesn't exist yet.
ls -ld .
chmod u+w .
rm: cannot remove ... Permission denied
This is usually about the directory, not the file. To delete a file, you need write and execute on the parent directory. If the directory has the sticky bit set (like /tmp), you may only delete files you own.
ls -l file.txt
ls -ld .
mv: cannot move ... Permission denied
You lack write access on the destination directory, or source and destination ownership rules conflict.
ls -ld /target/path
chmod u+w /target/path
cat: Permission denied
The file isn't readable by your user. Check the read bit.
ls -l secrets.txt
chmod u+r secrets.txt
cd: Permission denied
The target directory isn't traversable. You need execute permission on the directory itself and every parent directory in the path.
ls -ld /path/to/dir
chmod u+x /path/to/dir
cannot create regular file: Permission denied
Same root cause as touch errors — check write and execute on the parent directory.
chmod u+rwx mydir
Fixing Directory Permission Errors
Directory permissions in Linux work differently from file permissions. Here's what you need to know.
Directory Execute Permission
On a directory, execute permission means you can enter or traverse into it. Without it, commands like cd, ls, or access to files inside may fail even if the file permissions themselves look correct.
Fix cannot open directory '.': permission denied
This means the current directory lacks read or execute for your user. Check both:
ls -ld .
ls -ld ..
If the current directory has no execute bit, you can't access entries inside. If it has execute but no read, you can access known filenames but can't list contents.
Directory Permission Summary
- Read (r) on a directory = can list files inside (use
ls). - Write (w) on a directory = can create, delete, or rename files inside.
- Execute (x) on a directory = can enter or traverse the directory (use
cd).
On shared directories like /tmp, the sticky bit also affects deletion — preventing users from removing each other's files even with write access.
What to Do When chmod Doesn't Fix the Problem
If you've changed permissions but still get Linux permission denied, the issue lies deeper.
Check for noexec mount option
mount | grep noexec
If the filesystem is mounted with noexec, no file on that mount can be executed directly — even with chmod +x.
Check SELinux context
sestatus
On SELinux-enabled systems (CentOS, RHEL, AlmaLinux, Rocky), security contexts can block access even when standard permissions look correct.
Check ACLs with getfacl
getfacl file.txt
Access Control Lists add granular rules beyond standard user/group/others. Use setfacl to modify them if needed.
Check immutable attributes with lsattr
lsattr file.txt
sudo chattr -i file.txt
If a file has the immutable flag (i), it cannot be modified, renamed, or deleted until the flag is removed.
Check disk space
Sometimes "Permission Denied" errors occur due to insufficient disk space. Use the df command to verify. Low space, read-only remounts, and permission symptoms can overlap confusingly. Here's how to check disk space with df.
Ownership vs Permissions: Understanding the Difference
Permissions answer what actions are allowed (read, write, execute). Ownership answers who those permissions apply to first (user, group, others). A root-owned file with 600 permissions is accessible to root and blocked for everyone else. Many "chmod permission denied" searches are really ownership issues. If you're creating accounts for app users or team members, you'll often need to create a new Linux user first and assign proper ownership.
SELinux, AppArmor, and Mount Options
Real systems are messier than tutorial examples. Mount options can block writes or execution. SELinux can deny access based on security context. AppArmor can confine a process even when the file itself seems accessible. If you're troubleshooting storage or security-related permission issues, also check how to fix rsync permission denied errors which covers similar ground.
Safe Permission Practices
Avoid chmod 777
It often "works" but opens the door far wider than necessary. On multi-user systems, web servers, or anything public-facing, this creates real security risks.
Use the least privilege needed
If a script only needs owner execute permission, grant just that. If a shared file only needs group write access, don't grant write to others.
Test changes on a non-production file first
Recursive changes like chmod -R and chown -R can damage a system if pointed at the wrong path. Verify before executing.
Troubleshooting Tips
- Check Error Messages: Read the specific error message carefully — it often identifies the exact file or directory causing the problem.
- Review Log Files: Examine /var/log/syslog or /var/log/auth.log for relevant entries.
- Verify Permissions: Use
ls -lfor files,ls -ldfor directories. - Confirm Ownership: Verify who owns the file with
statorls -l. - Use sudo or su: For system-level files and administrative tasks, temporary elevated privileges may be required.
- Check Network Access: If accessing files over a network (NFS, Samba), ensure remote permissions are correctly configured.
Conclusion
If you are a regular Linux user, you've likely faced the "permission denied" error. The fix isn't just running chmod 777 — it's diagnosing the actual cause first. Check your user with whoami and id, inspect permissions with ls -l and ls -ld, verify ownership with stat, then apply the right fix — whether that's chmod, chown, chgrp, sudo, or adjusting mount options and security policies.
If you're managing these issues regularly on a server, spending time on Linux server administration basics will pay off quickly. You can also buy a Linux VPS server to practice and test these commands in a real environment.
I'm fascinated by the IT world and how the 1's and 0's work. While I venture into the world of Technology, I try to share what I know in the simplest way with you. Not a fan of coffee, a travel addict, and a self-accredited 'master chef'.