• Modern UX

    Edit and navigate faster in the terminal with Warp's IDE-like input editor.

  • Warp AI

    AI suggests what commands to run and learns from your documentation.

  • Agent Mode

    Delegate tasks to AI and use natural language on the command line.

  • Warp Drive

    Save and share interactive notebooks, workflows, and environment variables.

  • All Features

Chmod +X

Thumbnail for Razvan LudosanuRazvan Ludosanu

Razvan Ludosanu

Founder, learnbackend.dev

Published: 8/3/2023

About Terminus

The Short Answer

On Linux and Unix-like operating systems (MacOS included), the chmod command is used to change the permissions of files and directories. The x option specifically sets the execute permission on a file, allowing it to be run as a program.

For example, to make a script executable by every user on the system, you can use the following command:

 $ chmod +x script.sh

Then run the script directly:

 $ ./script.sh

Note that the + sign here translates to “add permission”.

The Execute Permission For Directories

In the case of directories, the execute permission has a slightly different meaning than for files, as when set, it allows users to list their content using the ls command, or enter them using the cd command.

Setting The Execute Permission For Specific Users

In some cases, you might want to control which user is allowed to execute a file.

To do so, you can use a combination of the letters:

  • a for all; which designates all users on the system.
  • u for user; which is the user account that created the file or has been assigned ownership of the file
  • g for group; which is a collection of user accounts, such as members of the same team, that have been granted certain permissions on the file.
  • o for others; which are all other users who are not the owner or members of the group associated with the file.

Use u+x to give execute permission to the owner of the file only

Thumbnail for

Use ug+x to give execute permission to the owner of the file and the group

Thumbnail for

Use a+x to give execute permission to everyone

Thumbnail for

Note that in this last case, executing chmod a+x has the same effect as chmod +x.

Setting The Execute Permission Conditionally

The X (uppercase x) option allows to conditionally set the execute permission of files and directories.

When used:

  • If the target is a directory, then it sets the execute permission for the owner, the group, and the others, allowing them to list and enter the directory.
  • If the target is a regular file, then it doesn’t set the execute permission, unless it is already enabled on at least one of the owner, the group, or the others.

This option is particularly useful when you want to recursively change the permission of a directory and its subdirectories, without affecting the regular files themselves.

For example, let’s consider the following tmp directory:

Thumbnail for

Running the chmod -R g+X command on this directory will set the execute permission for the group on:

  • The tmp directory.
  • The dir_1 subdirectory.
  • The script_1.sh file.

But will leave the permissions of the script.sh file unchanged.

Thumbnail for

Note that running chmod +X will have the same effect as running chmod a+X.

Using the chmod command with sudo

The sudo command is used to execute a command as the superuser (or root).

Executing the chmod command with sudo allows you to modify the permissions of files or directories that you do not have access to as the current user.

For example, you can use the sudo chmod +x command on a system file to give permission to all users to execute it.

 $ sudo chmod +x /sbin/reboot

It is important to note that giving the execute permission to all users to a file or directory belonging to the system may lead to security vulnerabilities and have unintended consequences.

Written by

Thumbnail for Razvan LudosanuRazvan Ludosanu

Razvan Ludosanu

Founder, learnbackend.dev

Filed Under

Related Articles

List Open Ports in Linux

Learn how to output the list of open TCP and UDP ports in Linux, as well as their IP addresses and ports using the netstat command.

UnixLinux
Thumbnail for Razvan LudosanuRazvan Ludosanu

Count Files in Linux

Learn how to count files and folders contained in directories and subdirectories in Linux using the ls, find, and wc commands.

LinuxUnix
Thumbnail for Razvan LudosanuRazvan Ludosanu

How to Check the Size of Folders in Linux

Learn how to output the size of directories and subdirectories in a human-readable format in Linux and macOS using the du command.

LinuxUnix
Thumbnail for Razvan LudosanuRazvan Ludosanu

Linux Chmod Command

Understand how to use chmod to change the permissions of files and directories. See examples with various chmod options.

Linux
Thumbnail for Razvan LudosanuRazvan Ludosanu

POST JSON Data With Curl

How to send valid HTTP POST requests with JSON data payloads using the curl command and how to avoid common syntax pitfalls. Also, how to solve the HTTP 405 error code.

BashUnixLinux
Thumbnail for Neeran GulNeeran Gul

Format Command Output In Linux

Learn how to filter and format the content of files and the output of commands in Linux using the awk command.

Linux

Create Groups In Linux

Learn how to manually and automatically create and list groups in Linux.

Linux

Switch Users In Linux

Learn how to switch between users, log in as another user, and execute commands as another user in Linux.

Linux

Remover Users in Linux

Learn how to remove local and remote user accounts and associated groups and files in Linux using the userdel and deluser commands.

Linux

Delete Files In Linux

Learn how to selectively delete files in Linux based on patterns and properties using the rm command.

Linux

Find Files In Linux

Learn how to find and filter files in Linux by owner, size, date, type and content using the find command.

Linux

Copy Files In Linux

Learn how to safely and recursively copy one or more files locally and remotely in Linux using the cp and scp command.

Linux

Trusted by hundreds of thousands of professional developers

Download Warp to get started

Download for Mac
Thumbnail for null