4

How can you check if a command can be executable or not in Linux.

Example:

xeyes
Siva
  • 9,017
  • 8
  • 56
  • 86
Žan Konečnik
  • 49
  • 1
  • 1
  • 2

3 Answers3

9

From man bash in the conditional expressions paragraph:

-x file

True if file exists and is executable.

So, you can use:

[ -x /usr/bin/xeyes ] && echo "File is executable" || echo "File is not an executable or does not exist"
oliv
  • 2,586
  • 9
  • 14
  • This fails completely when using `-x $(which bogus)` instead of `-x /usr/bin/bogus`. For it, `which bogus >/dev/null && echo "available" || echo "unavailable"` works just fine for me. – Asclepius Nov 08 '20 at 21:25
  • `-x $(which bogus)` does not work for me either, but adding quotes around the expression as such: `-x "$(which bogus)"` does. – karizma Aug 09 '22 at 22:45
2

If you know the location of where the command binary is kept, just do an ls -l. If you don't know the location first find out location using which command

$ which xeyes
/usr/bin/xeyes

If the command has execute permission ( x ) set, then it is executable.

$ ls -l /usr/bin/

-rw-rw-r-- 1 arushirai arushirai 0 May 23 11:58 123
-rwxrwxr-x 1 arushirai arushirai 0 May 23 11:58 xeyes

The -x <filename> actually checks if the file has execute permission set

Explanation:

THe first column of ls -l shows the permission on file.

-rwxrwxr-x
  • r is read permission
  • w is write permission
  • x is execute permission

-rwxrwxr-x

  • 1st bit: tells type of file ( - is for regular file )
  • Next 3 bits: owner permission ( rwx : read, write and execute )
  • Next 3 bits: group permission ( rwx : read , write and execute )
  • Next 3 bits: other permission (r-x : read and execute permission )

For more information on file permissions read: https://wiki.archlinux.org/index.php/File_permissions_and_attributes

Arushix
  • 1,270
  • 6
  • 9
1

If you don't known a path to the command you can use which to check where it is (of course, if you have it in $PATH). If you know a path to command file use if -x /path/to/command statement.

mariaczi
  • 549
  • 2
  • 6