Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I just switched from Windows to Ubuntu 11.10.

I wrote the following code in C with the text editor and saved it as HelloWorld.c in Documents.

#include <stdio.h>
int main()
    printf("Hello World!\n");
    return 0;

And I started the Terminal and enter the following commands:

cd Documents

gcc HelloWorld.c

A file called a.out, which, after some search on Google, is the executable. I entered this command:


But I get

a.out: command not found

Which step did I do wrongly?

share|improve this question
you have a few good answers here. Please make sure to mark one as "accepted." – Aaron Mar 8 '12 at 19:39
Do not forget to make it executable, use sudo chmod 777 a.out – Shvelo Mar 13 '12 at 19:19
up vote 23 down vote accepted

Since you're running an executable in the current working directory, you should prefix it with ./. So for your program run it as ./a.out.


The terminal searches for executables in $PATH. This is a Unix environment variable that lists directories containing system binaries (such as ls, echo, or gcc). If you call an executable that's not in a $PATH directory (such as a.out), you need to indicate its absolute path in the file system.

In the terminal . is a synonym for the current working directory, thus ./a.out. You could equally well call /home/yihang/Documents/a.out.

share|improve this answer
To further elaborate on this, the "./" serves as a "right here", command. It's a bit redundant, but useful in the sense that you know you'll be executing something. – Ruben Bakker Mar 7 '12 at 12:04
You may also need chmod u+x a.out to allow the system to execute it. – charlesbridge Mar 7 '12 at 12:13
Now I get it with "./". The program runs fine without chmod. Thanks. – yihangho Mar 7 '12 at 13:44
@yihang: Please consider to mark this question as answered, by clicking the gray/green circle on the left side of the answer you like most. – Rafał Cieślak Mar 8 '12 at 13:37
@Ruben Bakker: Actually, it's not at all redundant. Unlike Windows, Linux does not default to looking in the current, or default, directory. So, if it's not in the path, you need to specify the directory, whatever it is. – Marty Fried Mar 13 '12 at 21:04

When you run commands on Linux it searches all the directories listed in the PATH environment variable, and if it doesn't find the command there then you get the message you've seen.

Typically it looks like this:


That means it will look first in /usr/local/bin. If it doesn't find it there it'll look in /usr/bin, and so on.

In fact, this is very similar on DOS/Windows: there's a variable called %PATH% that does exactly the same thing.

The difference is that, on Windows, the current directory is also searched. Unix considers this bad because a local file (such as malware) can override important system programs accidentally.

If you prefer that though, you can make Linux work the same way by adding . to the path:


(That says set PATH to .: plus the existing contents of $PATH.)

It ends up looking something like this (it may be different on your machine):


If you'd rather not do that, you can simply run each program by specifying the directory explicitly:



share|improve this answer
learned a lot from this answer. thanks @ams – H_7 May 6 '12 at 1:10

Essentially, the a.out is created by default because you didn't specify a name for the executable. Try this instead:

gcc HelloWorld.c -o HelloWorld

Once you do that, you should be able to invoke it by (as Sunil suggested) prefacing "HelloWorld" with a dot-slash(./):


Here's a link to an article that explains a little bit about why the a.out gets created: Writing and Compiling C Programs on Linux.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.