On UNIX-like systems over the years (most relevantly to me, Linux), I've noticed that . (current dir) is never in the $PATH by default. Why is this?

I recall reading years ago that it was a security problem, but the article I read didn't explain what exactly the problem was. Is it because someone could leave a malicious version of ls or cp in a directory, and I'd end up running it without realizing it was there?

  • 6
    It isn't as much for interactive user protection as it is for other programs (and scripts) that run other programs. Even some savvy users like knowing that when they are in a random directory that ls will be /usr/bin/ls and ./ls isn't. There is also the hurdle of if you know how to add . to the end of your path, you probably have some idea what you are doing. root should never have . in the path, many systems don't even let root log in anymore. – msw Jun 25 '10 at 6:47

You answered correctly your own question, that's exactly why dot isn't in the path:
To protect against childish viruses or honest mistakes.

Of course, this is a very lame and useless anti-virus measure, and nothing stops you from adding dot to the path yourself.

  • 13
    It's funny, though, that you're protected from this but not from a lone file -rf in the directory (makes rm * interesting) ;-) – Joey Jun 25 '10 at 6:10
  • The Unix answer: why did you name a file -rf in the first place? ;) – msw Jun 25 '10 at 8:06
  • 2
    @msw: Another Unix answer is that normally dot in the path is frowned upon for admin accounts, but is ok for non-admin. – harrymc Jun 25 '10 at 9:47
  • would the risk be greatly reduced if the current path were the last path, so that all the normal places for programs were checked first? – Jon z May 17 '17 at 13:06
  • 1
    @Jonz: Not really. But the risk is quite small if your computer is clean from viruses. And if the computer is infected, then with modern viruses the path is the least of your worries. – harrymc May 17 '17 at 15:05

Yes. If you put the "." in the path, you would end up sending a lot of command calls to the files in your current directory.

Even if it was last, there is still pilot error. For example, Solaris 10 lacks "top". I type "top" on my system all day long, because I think I'm on a system that has "top".


Sorry, I'd like to ask this in the form of a comment to the selected answer, but I don't have any rep on superuser yet.

The security answer makes sense, but if you put "." in your PATH as the last thing, shouldn't the shell look in the current directory last as it searches for executables, and thus reduce the security risk? If it did search $PATH in order, it would find /bin/ls before it found ./ls.

So, how insecure is it for me to put "." at the end of my $PATH environment variable?

It works as I suggest. Here's how I tested:

First, add "." to the END of your PATH environment variable.

Then, put the following file in some directory, such as ~/dir1/dir2/test_which.rb:


puts "this file is from the current directory"

And put this file at /usr/bin/test_which.rb


puts "this file is at /usr/bin/test_which.rb"

Be sure to chmod +x the files so that they're executable.

Now, if you change directory to ~/dir1/dir2, and execute test_which.rb, you'll get the output

this file is at /usr/bin/test_which.rb

Indeed, if you run "which test_which.rb" from anywhere, it should report


You can still execute the file in the current directory by typing:

  • 8
    Nobody ever made a typo, such as dc or sl or sduo in a shell, and was saved by "command not found". Ever. – Daniel Beck Nov 11 '10 at 23:35
  • 1
    Agree with Daniel: you could have a malicious script named after a misspelled command. See also this answer. – ignis Jan 25 '13 at 4:54
  • @DanielBeck you should try to use alias for mistypings. I have my preferred configuration of ls (colour output and more) aliased to l which dispenses entirely with typos. – Karl Damgaard Asmussen Jul 17 '13 at 20:02
  • 1
    @KarlDamgaardAsmussen kl – deworde Jul 18 '13 at 8:02
  • I personally don't add '.' to my path. It is not that hard to type ./run or whatever I want to do in the local dir. It has saved me a few times from picking up unexpected things. Tomato tomahto. – Michael Mathews Sep 18 '15 at 17:28

More than a security risk, having '.' in the PATH make almost impossible to make it sure that the execution of any command acts as intended. Think about running a command like 'zip' in huge directory containing thousand of files with random names. The possibility that one of them is actually named 'zip' is not negligible and would lead to an error which is very difficult to understand (actually the file should be executable, which, however, might happen).

In particular this is true when writing scripts that keep the PATH variable of the user. A good written script should deal with all corner cases (like filenames with spaces in them or starting with '-'). But it is impractical to prevent a file in the current directory being executed instead of a system command...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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